区块链账本,让你一目了然

转载
2520 天前
18319
大话区块

为了能在区块链网络里进行交易,你需要一个钱包(wallet),它让你可以存放和交易你的比特币。只有你可以花费你的比特币,所以每个钱包被特殊的加密法保护着,使用一对独特且配对的钥匙:公钥和私钥,才能解锁。

如果一个信息被公钥加密,只有配对的私钥才能解密读到信息。反之,如果你用你的私钥加密信息,只有配对的公钥可以解密。所以当David想要转帐,他需要用他的私钥将转帐信息加密后,送到网络里,然后每个节点使用David的公钥将信息解开,以确认是由David发送的。

在加密完成时会产生一个电子签名,它会被节点们用来确认交易信息的发送来源和真伪。电子签名内容是一串文字,它是由交易信息和私钥所组成的,所以不能用在其他的交易信息上。如果你更改交易信息中任何一个字节,电子签名也会跟着改变,所以黑客很难更改你的交易信息或是得知交易金额。


钱包的公钥其实是网络里的一个地址(send to address),所以当你转比特币给某人时,你其实是将比特币转公钥的地址。而且你必须证明你是私钥的所有人,才能进行转帐。请注意,在网络里的交易信息已经是被加密过的,你不用暴露你的私钥。

每个节点都保有一份帐本,但节点是如何知道你的帐户余额呢?区块链系统并没有记录每个人的帐户余额(注:所以帐本实际上不是图1那样),事实上,它只纪录网络上每笔交易纪录(如下图)。为了得知你的帐户余额,你必须分析和验证所有曾经跟你钱包产生交易的纪录。


“帐户余额”的计算和验证需要靠之前的交易纪录。举个例子,为了转出 10 BTC给John,Mary先发起一个交易信息,它包含了之前部分的转入交易纪录,只要这些纪录的转入金额的总和刚好或大于10 BTC,即可发送信息。这些包含的交易纪录称作输入(inputs),每个节点会验证这些输入的金额的总和是等于或大于10 BTC。这些计算和验证会由钱包和节点自动完成,使用者不需要烦恼。


那么,系统如何信任这些输入呢?

它要确认你的钱包在之前所有的转入交易纪录中是否真的有这些输入。为了简化和加速验证的过程,每个节点会保留一份特殊的数据来达到目的,也因为这个验证过程,钱不可能会无缘无故多出来。


(来源:大话区块  )