比特币地址

       比特币地址就是用来接收别人付款的。你也许知道,钱包软件是使用私钥来付款。

       一个比特币地址由两个部分组成,一部分是公钥哈希值经过Bases58check编码的组合,另一部分是关于这个网络地址的信息。Bases58check编码有一些很精巧的特性,比如用于避免拼写错误的验证码,避免模糊的字符,比如“0“,”o"

       拾遗:TestNet是用于开发的比特币的网络,在这个网上比特币没有任何价值。MainNet才是人人知道的比特币网络。

    你也许不知道,就区块链而言,还谈不上比特币地址,内部来说,比特币协议使用ScriptPubKey验证比特币的接受动作。ScriptPubKey是一段简短的脚本,用于解释在什么情况下才能声明比特币的所有权。随着本书深入分析,我们将考察ScriptPubKey指令的类型。ScriptPubKey也许包含哈希计算过的公钥,这个公钥允许支付比特币。

       拾遗:在MainNet上进行比特币编程时犯得错误印象更加深刻。

       下图说明公钥,下图说明了公钥、私钥、比特币地址和ScriptPubKey的关系。

比特币地址_第1张图片

现在我们可以用代码向你演示它们的关系了。打开Chapter1.cs,在顶部添加“using NBitcoin;”然后编写下面的方法

public void Lesson1()
{
    Key key = new Key(); //generates a new private key.
    PubKey pubKey = key.PubKey; //gets the matching public key.
    Console.WriteLine("Public Key: {0}", pubKey);
    KeyId hash = pubKey.Hash; //gets a hash of the public key.
    Console.WriteLine("Hashed public key: {0}", hash);
    BitcoinAddress address = pubKey.GetAddress(Network.Main); //retrieves the
    bitcoin address.
    Console.WriteLine("Address: {0}", address);
    Script scriptPubKeyFromAddress = address.ScriptPubKey;
    Console.WriteLine("ScriptPubKey from address: {0}", scriptPubKeyFromAddress);
    Script scriptPubKeyFromHash = hash.ScriptPubKey;
    Console.WriteLine("ScriptPubKey from hash: {0}", scriptPubKeyFromHash);
}

你刚刚学会了如何创建一个私钥,对应的公钥,私钥哈希,比特币地址和ScriptPubKey。

我们还没有深入细节,注意ScriptPubKey看上去跟比特币没有任何关系,但是他的确显示了公钥的哈希值。注意我们为何能从比特币产生ScriptPubKey?这一步就是所有比特币客户端做的事情,他把人机交互友好的比特币翻译成区块链可读的地址。

比特币地址由一个网络识别码何一个公钥哈希值组成。学习到这些,就可以由ScriptPubKey何网络识别码产生比特币地址,如下面代码所示。



你可能感兴趣的:(比特币地址)