我的博客

blockstream.info 检测 coinjoin 方法分析与复现

目录
  1. 一些弯路
    1. 用 google 搜索 blockstream.info 中的 coinjoin

比特币 wiki 对 coinjoin 的解释:https://en.bitcoin.it/wiki/CoinJoin

bitcoinops 的 coinjoin 主题:https://bitcoinops.org/en/topics/coinjoin/

因为毕业论文涉及到混币,搜集了一些关于混币的资料。其中 blockstream.info 这个区块链浏览器中,对于比特币交易会有一个隐私判断,其中有一条:是否疑似为 coinjoin。本文分析了他的策略。

image.png

一开始我认为这个数据一定是存储在后端。

所以对页面请求进行了分析,blockstream 是 restful 的(API 文档),前端开源

结果发现 coinjoin 判断的逻辑在前端。到 github 仓库一搜 coinjoin 马上找到源码位置:

https://github.com/Blockstream/esplora/blob/e8ab97c60a40ac92a558f227af0a3b1f30aca079/client/src/lib/privacy-analysis.js

具体代码就是:

1
2
3
4
5
6
7
8
9
const counter = (T={}) => key => T[key] = (T[key] || 0) + 1

// Detect transactions that looks like equal-output CoinJoin
// checks if more than N outputs are of the same size, where N is half the
// number of outputs capped between 2 and 5
const isCoinJoinLike = tx => {
const inc = counter(), target = Math.min(Math.max(tx.vout.length/2|0, 2), 5)
return tx.vin.length > 1 && tx.vout.some(out => inc(out.value) >= target)
}

又把它改成了适用于 bcoin 数据格式的 python 版本。

一些弯路

用 google 搜索 blockstream.info 中的 coinjoin

因为最开始以为数据是后端生成的,所以有了这个操作。

使用 google 搜索 site:blockstream.info coinjoin 找到了 77 个页面,都是混币交易的页面,例如:

1
2
3
4
5
https://blockstream.info/tx/c5896168e962fde53575cc63451691356693bcd60cb6e12ceaa06a7c8d09bdc0?expand
https://blockstream.info/tx/e4a789d16a24a6643dfee06e018ad27648b896daae6a3577ae0f4eddcc4d9174
https://blockstream.info/tx/f82206145413db5c1272d5609c88581c414815e36e400aee6410e0de9a2d46b5
https://blockstream.info/tx/a7157780b7c696ab24767113d9d34cdbc0eba5c394c89aec4ed1a9feb326bea5
https://blockstream.info/tx/ef329b3ed8e790f10f0b522346f1b3d9f1c9d45dfa5b918e92d6f0a25d91c7ce

我写了一个小脚本粘贴到浏览器 console 里可以输出谷歌搜索结果的 url

1
2
3
4
let gs = document.getElementsByClassName('g');
for (let i = 0; i < gs.length; i++) {
console.log(gs[i].children[0].children[0].children[0].children[0].href)
}

评论无需登录,可以匿名,欢迎评论!