#transaction #block-height #utxo #amount #bitcoin #p2wsh #unspent

bin+lib p2wsh-utxo

一个用于处理未花费P2WSH比特币交易的库

1个不稳定版本

0.1.0 2022年8月6日

#utxo 中排名 #9

自定义许可证

3MB
177

P2WSH-UTXO

一个包含未花费p2wsh交易的集合的包。有助于查看可能的多重签名未花费交易。

创建P2WSH实例并获取UTXO列表

let results = UTXOResults::new().results();

创建一个UTXO并从中获取SCID

let utxo1 = UTXO {
    id: None,
    block_height: 1,
    block_index: 1,
    transaction_index: 0,
    amount: None,
};

assert_eq!(760542088613330945, utxo1.scid());

二进制文件

包含的二进制文件用于检索数据集并生成json或二进制文件作为结果。

它从两个不同的来源获取输入。如果我是更聪明的人,我会想出如何解析所有交易以从单个脚本中获取所有信息。

bitcoin-utxo-dump

从此 工具 获取当前所有未花费交易的列表

我使用了一个带有大量continue语句的分支版本,针对每个非p2wsh输出

然后运行

bitcoin-utxo-dump -f count,txid,vout,height,coinbase,amount,script,type,address
count,txid,vout,height,coinbase,amount,script,type,address
1,d176d4960a78b41971f9d19207b59af6584b16ef323de55e983aec0100000000,2,684110,0,330,0020160d0000000000f0558db21dc3e8d765044120f3b6d18c22f5957ad83382521f,p2wsh,bc1qzcxsqqqqqqq0q4vdkgwu86xhv5zyzg8nkmgccgh4j4adsvuz2g0sjjkeu6
2,d176d4960a78b41971f9d19207b59af6584b16ef323de55e983aec0100000000,3,684110,0,330,00203f52bab5928e8e9388d8fe3c6c536faf8006b97a090501d035ef0eb9136d3868,p2wsh,bc1q8aft4dvj368f8zxclc7xc5m047qqdwt6pyzsr5p4au8tjymd8p5qezmq44
3,d176d4960a78b41971f9d19207b59af6584b16ef323de55e983aec0100000000,4,684110,0,330,00201698e842e20fa57ff8f72e6bf1533138fc0d0f41201b8b959b924ea19a53c809,p2wsh,bc1qz6vwsshzp7jhl78h9e4lz5e38r7q6r6pyqdch9vmjf82rxjneqysjdcsgk
4,d176d4960a78b41971f9d19207b59af6584b16ef323de55e983aec0100000000,5,684110,0,330,002019ae7a5b46cb44f12058461629eebf7b8b300d72f6017367e85ddb26f4c52f03,p2wsh,bc1qrxh85k6xedz0zgzcgctznm4l0w9nqrtj7cqhxelgthdjdax99upsc53hft

bitcoin-iterate

从此 工具 获取交易及其区块高度的列表。此程序是必需的,因为bitcoin-utxo-dump不提供区块高度。

# ./bitcoin-iterate -q --transaction=%th,%tN --start-hash=0000000000000000015411ca4b35f7b48ecab015b14de5627b647e262ba0ec40 --blockdir=/home/bitcoin/.bitcoin/mainnet/data/blocks > iterate.txt
./bitcoin-iterate -q --output=%th,%bN,%bH,%tN,%oN,%ol,%oa --start-hash=0000000000000000015411ca4b35f7b48ecab015b14de5627b647e262ba0ec40 --blockdir=/home/bitcoin/.bitcoin/mainnet/data/blocks > iterate.txt

示例

4b777745084ef83da587c7278db17f7a33ad5b831b5ee47b18c1c11c6165047c,0
e584dca0c8fe2df700c7c89021ab01de3bcc625b62c6b362a61c02f4c440a624,1
5393e535d9eaf10e8c87dca8f8bd05817dace0911ed25574c8257a21b603f23b,2
b66f62fae63243cc2141765387e51a950d982628cf3396107e743660bb3ec958,3
c977d774b272673f1abd0f4a52832bd8933894346b43a355014dd08a6249bfc7,4
d83894fcecb387d9813e5bdc0e19f2941406a5bd8ca80b27f19aeeb481752111,5
76f8d917a5a47cc3c92f26559c9cb9c3ee0f8027df8d6f0259ab5c65362e9048,6
2dfcb6cfff8ba9ed903f531a70d6443b9373c90868c94180152043aadc217185,7
8ba6d5674193f8f85433e4a85ce7a21b59357adf626ee70fa87355d9a6a9a32a,8
ad48e367144bb9b1cf1d668433268983254e551b4e58bfc3e257f5f7dbe4fb19,9

合并

运行二进制文件会产生有用的结果,这些结果可以独立使用,也可以作为库的一部分使用。

第三个参数指定是否以json或小型二进制文件输出。第四个是是否具有最小化的输出参数(没有 transaction_id

cargo run --release utxodump.csv iterate.txt (json/binary) (minimized/full) .

好奇的人,它运行的算法如下

p2wsh_map = [string]tx
for row in utxodump.csv
	p2wsh_map[row.txid] = row

for row in iterate.txt
	if p2wsh_map[row.txid]
		save json with row.txid, row.height and found p2wsh info

依赖项

~2–3MB
~52K SLoC