本文由币乎社区(bihu.com)内容支持计划奖励。
1)让我们再深一点,了解BTC的交易过程。
储备知识:BTC科普系列:最浪漫的事
储备知识:BTC科普系列:交易
2)复习:最浪漫的事其实是讲BTC的地址的相关知识:
地址里概念:私钥——公钥——公钥哈希——地址
相互关系:
从私钥(SK)计算出公钥(PK)(不可逆过程)
公钥(PK)计算出公钥哈希(不可逆过程)
公钥哈希前面加地址版本号,对此运算两次Hash结果的取前前4个字符作为验证码
得到版本号+公钥哈希+验证码,Base转换为BTC地址(可逆过程)
图片来自http://www.bitcoin86.com/teach/6494.html
3)复习:交易的过程
首先,验证一下,拥有者1是否有这笔钱(验证拥有者0的签名是否正确,来源是否已得到授权);
接着,拥有者1对你的地址进行签名(将这笔钱授权给你,你得到拥有者1签名,这时一笔交易已经结束);
接着,你再想花钱时,同样会先验证你这笔钱的来源是否真实(验证拥有者1的签名);
然后,你会对拥有者3的地址进行签名(确认用你的签名发给拥有者3,将这笔钱授权给拥有者3);
交易过程看上去很繁杂,但是你操作时,和使用支付宝差不多,只是将转帐的对象换成了地址,输入发多少BTC,然后输入密码即可;
因此,当你要消费BTC时,并不是消费你手上有多少BTC,而消费上一个拥有者对你输入的BTC;
而且,所有的交易相互串联,可以一直向上追溯,直到这笔钱被矿工挖出为止(矿工负责BTC的发行);
而为了让我直观的看到自己地址上的余额,通过交易的输入、输出即可计算出地址上的BTC余额。
4)新知识:
交易构造过程:
listunspent 查找unspent:
找出UTXO,即别人发给你的:Tx1=[输入:(交易内容(Tx0)+公钥(PK1)+签名1
createrawtransaction 构造原始交易:
Tx2=[输入:(交易内容(Tx1)+输出:(下一个接收者地址+数量)]
signrawtransaction 签名交易:
对原始交易进行签名,确认你同意这笔交易(交易内容(Tx1)+公钥(PK2))进行签名2,这个过程先插入公钥(PK2)再签名,一个输出签名一次,历遍所有输入;
当对一个输入签名时,其它输入的签名处全部留空;
Tx2=[输入:(交易内容(Tx1+公钥(PK2)+签名2))+输出:(下一个接收者地址+数量)]
sendrawtransactioin 广播交易:
将Tx2=[输入:(交易内容(Tx1+公钥(PK2)+签名2))+输出:(下一个接收者地址+数量)]过程转换为精简模式
5)补充说明:
私钥与公钥间为非对称加密:可以实现私钥签名,公钥验证,公钥加密,私钥解密;
发送者A在交易的过程中公布到全网的信息为:输入(Tx0)+公钥(PK1)+签名1,输出数量+接收地址;
交易内容(Tx0)可以理解为:发送者A的钱的来源+接收者A的地址+金额数量
发送者A用私钥(SK1)对交易内容(Tx1)进行签名,得到签名;
矿工收到交易内容(Tx0)+公钥(PK1)+签名1,可以用公钥(PK1)对签名1进行验证签名是否对应该交易内容(Tx1),从而确认交易,加入区块;
在这里,交易者并没有公开私钥(SK),而是公开了公钥(PK),即可验证这笔交易是由他发出的;
而接收者B,要发起新的交易时,同样,向全网发送:交易内容(Tx1)+公钥(PK2)+签名2
在交易内容(Tx2)中B的钱的来源即是A的交易内容(Tx1)+公钥(PK1)+签名1
公钥(PK2)用来给C交易时作验证用,签名2相当于确认了所属权的转移
接收者C发起交易(交易内容(Tx2)+公钥(PK3)+签名3)后,即可以再交易给别人
下面是个交易的例证:看完你将更加理解BTC的交易过程
{ "txid": "50dc0b6d578494542cea9fb68f472a5e260377afa78aa5bcfbcccc8bc38dc2d9",(交易ID) "size": 271, "version": 1, "locktime": 0, "vin": [(别人发给你的钱,你的交易输入) { "txid": "a9f150e64e24fe31050d3170be39714f20bed53708601aa8352d4aae443390fe(输入,你钱的来源)", "vout": 0, "scriptSig": {(你的交易签名与公钥) "asm": "3045022100bb003af7fc84eccb8eb1510ef1acedcf9ccce3bf9dcc1e5b0adcd8dc5377b47702205c2c37090b4cef1966b871acd1541996c37e9cb90290aa0f8a7a7123c9d95dd3(签名)[ALL](公钥)", "hex": "483045022100bb003af7fc84eccb8eb1510ef1acedcf9ccce3bf9dcc1e5b0adcd8dc5377b47702205c2c37090b4cef1966b871acd1541996c37e9cb90290aa0f8a7a7123c9d95dd301" }, "sequence": 4294967295 }, { "txid": "c40f5cd5b4cb6e523d6a0e1e68ff502bafedf9495849e8617b0ff3b504795a03(输入,你钱的来源)", "vout": 0, "scriptSig": {(你的交易签名与消息) "asm": "3044022001de07b8463a2dd3ab1c000240815bc1297b068bc61b2e17a07f82907d99aa4202205d19e7ce4104b39d8bae932ddb9aff0b6c6bb5627d87eed588899064f5e8558b(签名)[ALL](公钥)",
"hex": "473044022001de07b8463a2dd3ab1c000240815bc1297b068bc61b2e17a07f82907d99aa4202205d19e7ce4104b39d8bae932ddb9aff0b6c6bb5627d87eed588899064f5e8558b01" }, "sequence": 4294967295 } ], "vout": [(你发出的交易,你的交易输出) { "value": 100.00000000,(你发出币的数量) "n": 0, "scriptPubKey": {(你把钱发到别人的公钥哈希上) "asm": "OP_DUP OP_HASH160 3dd80429758dc027c5720bd8883b05e86c072ebd OP_EQUALVERIFY OP_CHECKSIG", "hex": "76a9143dd80429758dc027c5720bd8883b05e86c072ebd88ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ "mm9xHpzw3T1LK3fFdsUJgf6jBkwPVpkEJJ"(别人的接收地址) ] } } ]}
引自:https://bitshuo.com/topic/584e487763baf1df6cad0d91
5)更深一步的学习可以参见
https://bitshuo.com/topic/584e487763baf1df6cad0d91
http://blog.csdn.net/q4878802/article/details/49638457
http://www.cnblogs.com/liuhaitao/p/4917718.html
http://www.cnblogs.com/liuhaitao/p/4917788.html
感谢您的关注!
网友评论