Python中国社区  »  区块链

用NBitcoin进行区块链开发(3) : ScriptPubKey

申龙斌的程序人生 • 1 周前 • 17 次点击  

请参考以下文章一起阅读:


比特币地址(比如:12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S )实际上只是方便给最终用户使用的,在区块链的内部交易存储中,从来不用这个地址,而是用ScriptPubKey


在区块高度170中有一笔交易:

https://btc.com/170


在输出脚本的底部有这样一段文字:

P2PKH_PUBKEY    

0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3  OP_CHECKSIG

   

这笔交易涉及50个BTC的转账,给1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3 转10 BTC,给12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S 转40 BTC。


在区块链内部并没有记录12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S ,而是以04开头的那一长串十六进制数字,即公钥,这个例子是非压缩型公钥。在NBitcoin中可以用key.PubKey.ScriptPubKey得到这个脚本。


中本聪在比较早的交易中使用了上面的表述形式,但这种表示形式有两个缺点:

  • 直接用公钥表示,比较浪费空间

  • 无法抵抗量子计算机的攻击


上面的交易类型称为Pay to Public Key,简称为P2PK



P2PKH


为了节省空间和安全,中本聪推荐采用P2PKH交易,即Pay to Public Key Hash。这里不直接采用公钥,而是采用经过sha256和ripemd160运算之后的20字节的公钥哈希


通过多种办法可以得到与公钥哈希相对应的脚本,还可以注意到一个细节:主网和TestNet上的ScriptPubKey是没有区别的。

四条语句都得到如下脚本(只占用20多个字节):

OP_DUP OP_HASH160 4a32d744feaa62eb017674b6a4f5dce397f6b1b9 OP_EQUALVERIFY OP_CHECKSIG


再看这笔交易:

https://btc.com/1db7c1909ccab69ff1bc3a715fbf0f1af47143d5061fa4b74c11a47353017e87


17mKugcBDEJbu391Fq41AdwLeGHwJLPRDf 这个地址中收到了0.31415926个BTC。

观察输出脚本,与刚才的源程序输出的脚本是一样的:

OP_DUP OP_HASH160 4a32d744feaa62eb017674b6a4f5dce397f6b1b9 OP_EQUALVERIFY OP_CHECKSIG


图片摘自网络



小结:

  • P2PK:Pay to Public Key,直接把公钥写在脚本中,不太安全,占用空间,现在基本不用

  • P2PKH:Pay to Public Key Hash,在脚本中记录公钥哈希,更安全,也节省空间,常用


参考文献:

  • https://en.bitcoin.it/wiki/OP_CHECKSIG

  • https://programmingblockchain.gitbook.io/programmingblockchain/bitcoin_transfer/transaction

  • https://programmingblockchain.gitbook.io/programmingblockchain/other_types_of_ownership/p2pk-h-_pay_to_public_key_-hash

  • https://www.codeproject.com/Articles/768412/NBitcoin-The-most-complete-Bitcoin-port-Part-Crypt


--- END ---


硬广:


比特币钱包Bitcoin Core使用北京线下培训,12月9日下午,只限7人,报名从速,微信联系我: SLOFSLB


以前精彩文章:



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/fcUHaeTd8X
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/27149
 
17 次点击  
分享到微博