1. UTXO (Unspent Transaction Output)
- txid: 交易编号
- vout :第几个输出
- scriptPubKey :一个很重要的东西
- value: 价值
- address: 持有者的地址
2.谁持有比特币 == 持有多少UTXO
3.交易
3.1 场景1
A要花掉1.5BTC,给C
A经过这次消费之后,只剩A3这个UTXO.
3.2 场景2
A要转给C 1 BTC
B也要转给C 1BTC
A 和 B 经过商量决定共同构造 一次交易
A3(1.4)
+ B2(2.0)
= A4(0.35)
+ B3(0.95)
+ C1(2.0)
+ 矿工费(0.1)
成功的概率比较高
4. 设计
- 找到 有关地址的交易输出
UTXO
,进行存储并进行余额变更 - 找到 有关地址的交易输入
UTXO
, 进行状态变更
5.演示
浏览器
https://testnet.blockchain.info
获取测试环境的比特币
https://testnet.coinfaucet.eu/en/
冷钱包地址
mnTjb2QnJrTtssXan9WFwheERn3VpEs9YU
cRg6dQNCGKZsmyccjTUtv95M4yat5QYbCxrgFWVYBgjSHKuahJwK
地址1 -- 余额:0.6 BTC
n22qbkmhfip9Ks5ehxZqCT8CHR23FDw4ka
cVFUSKKxCf9uQdqV56VyDHNdQV42D2Xx2A2f7jZyaKpDHTcjnCvK
地址2 -- 余额:0.7 BTC
mktt7K5TH6aieW2xUV6fBjJyEbxPs6QjgG
cMhxcte2mdrku9KGhTsrp5HadjPzqGERVRZfWs3Ud4HZ6uPJdFM8
地址3 -- 余额:0.8 BTC
myc1x6qKivfuxqcGovfMXhbmZWbBrx5TKz
cR4khtLfZ9jKeVMHUb9UJnuGNwT2FuVdtt2yBJr8UzCWZmccbyqa
矿工费为0的交易好像无法确认
比如这笔交易 , 交易额0.39 BTC
b2eabaacf277ea66e770ee3e2616d9e48a44229f6a136129d82eb089291882d6
和这笔交易,交易额0.82892903 BTC
0028005db8ecf28948436dbc90275357aef68071467199797009ad24ae500905
6.真实环境的比特币 地址区分
1L4oQbocsydfCMUSz9Ek9hiDgVNCTDBEjJ
3B7wg4tG7jkkeoSf9JYkHowytr3JR3qo22
为什么有的地址 是以 “1” 开头,有的是以“3”开头
6.1
6.2比特币多重签名
2 of 3多重签名常用个用法是,一个用户生成两个密钥:一个保存为备份,另一个存放在钱包内;剩下的一个秘钥由钱包服务商生成和保存。支付比特币时,用户和钱包服务商共同签署交易。如果用户或者钱包服务商丢失了秘钥,备份的秘钥就可以动用,转移资金。但是钱包服务商却不能私自动用用户的资金。
生成3个地址,那1,2的地址,和地址3的公钥,生成一个多签名地址
bitcoin-cli -regtest createmultisig 2 '''
[
"'$NEW_ADDRESS1'",
"'$NEW_ADDRESS2'",
"'$NEW_ADDRESS3_PUBLIC_KEY'"
]'''
{
"address" : "2N7NaqSKYQUeM8VNgBy8D9xQQbiA8yiJayk",
"redeemScript" : "522103310188e911026cf18c3ce274e0ebb5f95b00\
7f230d8cb7d09879d96dbeab1aff210243930746e6ed6552e03359db521b\
088134652905bd2d1541fa9124303a41e95621029e03a901b85534ff1e92\
c43c74431f7ce72046060fcf7a95c37e148f78c7725553ae"
}
由于是测试环境,多签名地址是以2开头的。保存好address
和 redeemScript
。如果redeemScript
丢失你可以重新生成。但是如果同时3个地址你丢失了其中一个。那么如果多签名地址中有钱的话,你将永远不能使用它。
拿多签名地址的utxo进行交易构造
bitcoin-cli -regtest createrawtransaction '''
[
{
"txid": "'$UTXO_TXID'",
"vout": '$UTXO_VOUT'
}
]
''' '''
{
"'$NEW_ADDRESS4'": 9.998
}'''
3个地址中的任意两个的私钥,可进行签名
bitcoin-cli -regtest signrawtransaction $RAW_TX '''
[
{
"txid": "'$UTXO_TXID'",
"vout": '$UTXO_VOUT',
"scriptPubKey": "'$UTXO_OUTPUT_SCRIPT'",
"redeemScript": "'$P2SH_REDEEM_SCRIPT'"
}
]
''' '''
[
"'$NEW_ADDRESS1_PRIVATE_KEY'"
"'$NEW_ADDRESS2_PRIVATE_KEY'"
]'''