有多少比特币从一个钱包转移到另一个钱包?
Posted
技术标签:
【中文标题】有多少比特币从一个钱包转移到另一个钱包?【英文标题】:How many bitcoins were transferred from one wallet to another? 【发布时间】:2019-06-13 14:53:27 【问题描述】:问题很简单:我想查询有多少 BTC 从钱包 A 转移到了钱包 B,其跳数与区块链中的块一样多。
例如
A transferred 1 BTC to C and 1 BTC to D.
C transferred 0.1 to B
D transferred 0.5 to E and 0.5 to F
E transferred 0.1 to B
总共 0.2 BTC 从 A 转移到 B
我想我可以通过在区块链上使用 bigquery 来做到这一点。问题是我不知道如何创建这样的递归查询。我的 SQL 技能趋于零。
事业是崇高的。我的地址很少被用于庞氏骗局 1。我还有其他一组地址被用于另一个骗局,我认为这是另一个骗局 (2) 从骗局 1 洗钱。
我知道骗局 2 的幕后黑手是谁。
如果我证明来自第一个骗局的大量 BTC 流向了与第二个骗局相关的钱包,则可能强烈表明它们是相同的。
请注意,我已经说了很多 BTC。我知道有些 BTC 可能会偶然进入方案 2 的钱包,但对于大多数人来说,这根本不是巧合。
披露:我不会从中获得任何经济利益,我只是打算披露这个骗子。
【问题讨论】:
请以文本表格的形式提供示例数据和所需结果。 【参考方案1】:由于您没有发布数据结构,因此您的里程可能会有所不同。这是一个假设的(我对比特币数据结构知之甚少)比特币链结构。使用递归 CTE 创建锚点和自调用。我在下面使用 Source 和 target,但是,它们可以与比特币语义交换。
Sql Fiddle
DECLARE @T TABLE(ChainID INT, SourceID INT, TargetID INT, Amount INT)
INSERT @T VALUES
(1,100,300,1),
(2,900,800,1),
(1,100,400,1),
(2,800,700,1),
(1,300,200,1),
(1,400,500,1),
(2,700,600,1),
(1,500,600,1),
(1,500,200,1),
(2,600,500,1),
(2,500,400,1)
DECLARE @ChainID INT = 2
--Get the first source of a chain !If natural order, if there is a more suitable order field then use it!
DECLARE @StartID INT = (SELECT SourceID FROM (SELECT SourceID,RN=ROW_NUMBER() OVER (ORDER BY ChainID) FROM @T WHERE ChainID = @ChainID ) AS X WHERE RN=1)
;WITH RecursiveWalk AS
(
--Anchor
SELECT
SourceID,
TargetID = T.TargetID,
LevelID = 1
FROM
@T T
WHERE
T.SourceID = @StartID AND ChainID = @ChainID
UNION ALL
--Recursive bit
SELECT
T.SourceID,
TargetID = T.TargetID,
LevelID = LevelID + 1
FROM
@T T
INNER JOIN RecursiveWalk RW ON T.SourceID = RW.TargetID
WHERE
ChainID=@ChainID
)
SELECT
SourceID,
TargetID,
LevelID
FROM
RecursiveWalk
【讨论】:
以上是关于有多少比特币从一个钱包转移到另一个钱包?的主要内容,如果未能解决你的问题,请参考以下文章