学习
实践
活动
工具
TVP
写文章

【区块链研究实验室】比特币地址协议ScriptPubKey

就区块链而言,最重要的是并不是比特币地址,而是比特币协议通过ScriptPubKey标识比特币的接收者。

ScriptPubKey如下所示:

OP_DUP OP_HASH160 14836dbe7f38c5ac3d49e8d790af808a4ee9edcf OP_EQUALVERIFY OP_CHECKSIG

它是一个简短的脚本,解释了要求拥有比特币的条件。我们可以从比特币地址生成ScriptPubKey。 这是所有比特币客户端友好的将比特币地址转换为区块链可读地址的一个步骤。

varpublicKeyHash =newKeyId("14836dbe7f38c5ac3d49e8d790af808a4ee9edcf");

vartestNetAddress = publicKeyHash.GetAddress(Network.TestNet);

varmainNetAddress = publicKeyHash.GetAddress(Network.Main);

Console.WriteLine(mainNetAddress.ScriptPubKey);

// OP_DUP OP_HASH160 14836dbe7f38c5ac3d49e8d790af808a4ee9edcf OP_EQUALVERIFY OP_CHECKSIG

Console.WriteLine(testNetAddress.ScriptPubKey);

// OP_DUP OP_HASH160 14836dbe7f38c5ac3d49e8d790af808a4ee9edcf OP_EQUALVERIFY OP_CHECKSIG

注意testnet和mainnet地址的ScriptPubKey是一样的吗?

注意ScriptPubKey包含公钥的哈希值吗?

我们不详细讨论细节,但请注意,ScriptPubKey是与Bitcoin地址无关,但它确实显示了公钥的散列。

比特币地址由版本字节组成,该版本字节标识网络在哪里使用该地址以及公钥的散列。 所以我们可以后退并从ScriptPubKey和网络标识符生成比特币地址。

varpaymentScript = publicKeyHash.ScriptPubKey;

varsameMainNetAddress = paymentScript.GetDestinationAddress(Network.Main);

Console.WriteLine(mainNetAddress == sameMainNetAddress);// True

也可以从ScriptPubKey中检索哈希值并从中生成一个比特币地址:

varsamePublicKeyHash = (KeyId) paymentScript.GetDestination();

Console.WriteLine(publicKeyHash == samePublicKeyHash);// True

varsameMainNetAddress2 =newBitcoinPubKeyAddress(samePublicKeyHash, Network.Main);

Console.WriteLine(mainNetAddress == sameMainNetAddress2);// True

因此,现在您了解了私钥,公钥,公钥哈希,比特币地址和ScriptPubKey之间的关系。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180531A086IS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券