1. UTXO (Unspent Transaction Output)
- txid: 交易編號
- vout :第幾個輸出
- scriptPubKey :一個很重要的東西
- value: 價(jià)值
- address: 持有者的地址
2.誰持有比特幣 == 持有多少UTXO

3.交易
3.1 場景1
A要花掉1.5BTC,給C

A經(jīng)過這次消費(fèi)之后,只剩A3這個UTXO.
3.2 場景2
A要轉(zhuǎn)給C 1 BTC
B也要轉(zhuǎn)給C 1BTC
A 和 B 經(jīng)過商量決定共同構(gòu)造 一次交易
A3(1.4) + B2(2.0) = A4(0.35) + B3(0.95) + C1(2.0) + 礦工費(fèi)(0.1) 成功的概率比較高
4. 設(shè)計(jì)
- 找到 有關(guān)地址的交易輸出
UTXO,進(jìn)行存儲并進(jìn)行余額變更 - 找到 有關(guān)地址的交易輸入
UTXO, 進(jìn)行狀態(tài)變更
圖4
5.演示
瀏覽器
https://testnet.blockchain.info
獲取測試環(huán)境的比特幣
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
礦工費(fèi)為0的交易好像無法確認(rèn)
比如這筆交易 , 交易額0.39 BTC
b2eabaacf277ea66e770ee3e2616d9e48a44229f6a136129d82eb089291882d6
和這筆交易,交易額0.82892903 BTC
0028005db8ecf28948436dbc90275357aef68071467199797009ad24ae500905
6.真實(shí)環(huán)境的比特幣 地址區(qū)分
1L4oQbocsydfCMUSz9Ek9hiDgVNCTDBEjJ
3B7wg4tG7jkkeoSf9JYkHowytr3JR3qo22
為什么有的地址 是以 “1” 開頭,有的是以“3”開頭
6.1
6.2比特幣多重簽名
2 of 3多重簽名常用個用法是,一個用戶生成兩個密鑰:一個保存為備份,另一個存放在錢包內(nèi);剩下的一個秘鑰由錢包服務(wù)商生成和保存。支付比特幣時(shí),用戶和錢包服務(wù)商共同簽署交易。如果用戶或者錢包服務(wù)商丟失了秘鑰,備份的秘鑰就可以動用,轉(zhuǎn)移資金。但是錢包服務(wù)商卻不能私自動用用戶的資金。
生成3個地址,那1,2的地址,和地址3的公鑰,生成一個多簽名地址
bitcoin-cli -regtest createmultisig 2 '''
[
"'$NEW_ADDRESS1'",
"'$NEW_ADDRESS2'",
"'$NEW_ADDRESS3_PUBLIC_KEY'"
]'''
{
"address" : "2N7NaqSKYQUeM8VNgBy8D9xQQbiA8yiJayk",
"redeemScript" : "522103310188e911026cf18c3ce274e0ebb5f95b00\
7f230d8cb7d09879d96dbeab1aff210243930746e6ed6552e03359db521b\
088134652905bd2d1541fa9124303a41e95621029e03a901b85534ff1e92\
c43c74431f7ce72046060fcf7a95c37e148f78c7725553ae"
}
由于是測試環(huán)境,多簽名地址是以2開頭的。保存好address 和 redeemScript。如果redeemScript丟失你可以重新生成。但是如果同時(shí)3個地址你丟失了其中一個。那么如果多簽名地址中有錢的話,你將永遠(yuǎn)不能使用它。
拿多簽名地址的utxo進(jìn)行交易構(gòu)造
bitcoin-cli -regtest createrawtransaction '''
[
{
"txid": "'$UTXO_TXID'",
"vout": '$UTXO_VOUT'
}
]
''' '''
{
"'$NEW_ADDRESS4'": 9.998
}'''
3個地址中的任意兩個的私鑰,可進(jìn)行簽名
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'"
]'''
