前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用NBitcoin进行区块链开发(3) : ScriptPubKey

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

作者头像
申龙斌
发布2018-12-24 15:00:04
1.4K0
发布2018-12-24 15:00:04
举报

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

比特币地址(比如: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
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 申龙斌的程序人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档