比特币技术细节理解与记录

      维基百科上比较清晰的描述:https://en.bitcoin.it/wiki/How_bitcoin_works。本文更多是我对这篇文章的读书笔记,比特币的源代码我一行也没有看过。阅读本文需要对一些基本的算法或者专有名词有了解,包括加密算法,HASH,P2P等。

      将比特币作为产品来看,最核心的场景就是完成交易,如下图:


      

      上图描述了比特币认可的交易场景(ECDSA):当节点1想要转账给节点2的时候,节点1会发出一条交易,这个交易记录中除去转账金额,交易ID等基本信息之外,最最重要的就是节点1的签名,及类似于支票的签名。节点1使用节点2的公钥和转账货币的上一笔源头交易(要花的钱从哪来的)ID,通过HASH得到HASH值,并使用自己的私钥进行加密,得到最终的签名,证明这笔转账经过了自己的认可。其他节点可以使用节点1的公钥来解密这个签名,再使用节点2和上一笔交易的ID两者的HASH进行签名验证。

      当这个场景发生,并且被多个比特币系统节点验证并将此交易所在的区块追加到自己的区块链上,则该系统就完成了一次交易,最终的实际结果就是货币财产在节点账户之间的转移。

      交易的发生直接依赖于加密算法和HASH算法,包括椭圆曲线加密和SHA256;其次还需要P2P通信实现交易双方的沟通;通过HASH算法来实现同一账户参与的交易之间的链接,以计算账户余额,确保支付者有能力完成交易;最后需要共识机制来让交易最终被认可。

加密算法

      首先是实现交易签名,每一个节点都拥有一组使用椭圆加密算法生成的公钥和私钥,通过私钥可以生成公钥,反之不成立。节点在交易签名场景中使用私钥加密,其他节点可以使用对应公钥解密来验证(非对称加密的另一个普遍用途是密文传输场景,即公钥公开,用来加密原始信息,对应私钥用来解密,来实现密文的传输)。公钥还与钱包的地址生成直接相关,而公钥又是通过私钥生成,所以作为比特币系统来说,节点的认证登录于与私钥息息相关,所以一定要确保自己私钥的安全性。

P2P通信

      所谓P2P,即该系统中所有的节点都是对等的,不存在某个节点异常会影响其他节点或者整个网络的情况。在比特币系统中,当一个新的节点加入后,需要先和其他节点进行通信来同步一份自己的区块链账本。比特币的客户端维护了一个活跃节点列表,新节点可以选择访问这些节点。当然,也可以通过命令行参数指定节点进行通信。

      节点需要具有广播的功能,比如当发生一笔交易的时候,节点需要其他节点来验证交易的正确合理性,以及让矿工将这条新的交易记录加入到新产生的区块中。但是节点与网络中所有其他节点都建立通信连接是不合理的,也十分耗费资源,所以采用类似于病毒传播的方式,通过与初始节点建立了通信的节点不断扩散到其他节点。

      此外,每一个活跃节点还需要不断参与路由,以维持网络的通信。在P2P网络中,节点需要对新加入的节点提供帮助,协助其参与到全网络中;也需要不断获得其他节点的帮助:两个建立连接的节点如果什么都不做,也是会定期互相发送消息来告诉彼此自己"活着"。如果很长一段时间对应节点都没有发送消息,那么认为节点已经下线,这个时候需要重新获取其他节点的帮助来建立新的连接。

共识机制

      因为区块链系统处于P2P网络中,节点之间的通信存在延迟,对于一些重要事情的完成,节点之间如何达成共识是很核心的问题。所谓共识机制,就是所有节点对于一段时间内某些影响全局的事件发生的先后顺序达成一致的算法。当前几个很经典的共识机制包括POW,POS,DPOS,PBFT等。

      比特币使用的算法是POW,即Proof of Work。比特币系统中所有的交易记录都是存储在区块中,区块的生成依赖于一个随机数的HASH,该算法得到满足条件的结果是有一定概率的,但是计算的速度是依赖于计算机本身的性能。第一个计算出合适随机数的节点可以生成区块,收纳所有上一个区块产生之后发生的交易到区块中,并最后可以获得token奖励。

HASH算法

      就像上面说到的,HASH算法几乎无处不在:交易的生成,区块的生成,甚至是公钥的生成。而HASH算法可以将大量数据的映射固定大小的唯一值(此过程一般不可逆)。而原始数据的少量更改会在哈希值中产生不可预知的大量更改。比特币系统中最常见的HASH算法是SHA256。

下一篇文章我会总结一些核心场景,比如挖矿等。

猜你喜欢

转载自blog.csdn.net/u010169600/article/details/80524401