问题很简单:我想查询从钱包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的钱包里,但是对于大多数最终来说,这绝不是巧合。
披露:我没有从中获得任何经济利益,我只打算透露这个骗子。
答案 0 :(得分:0)
由于您未发布数据结构,因此里程可能会有所不同。这是一个假设的(我对比特币数据结构了解为零)比特币链结构。使用递归CTE创建锚和自调用。我在下面使用“源”和“目标”,但是它们可以与比特币语义交换。
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