有多少比特币从一个钱包转移到另一个钱包?

时间:2019-06-13 14:53:27

标签: sql google-bigquery blockchain bitcoin

问题很简单:我想查询从钱包A转移到钱包B的BTC数量,其跳数与区块链中的区块一样多。

例如。

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 个答案:

答案 0 :(得分:0)

由于您未发布数据结构,因此里程可能会有所不同。这是一个假设的(我对比特币数据结构了解为零)比特币链结构。使用递归CTE创建锚和自调用。我在下面使用“源”和“目标”,但是它们可以与比特币语义交换。

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