DOIFOR技术关于区块链的一点点思考
DOIFOR技术关于区块链的一点点思考

大概在16年的时候,老东家的首席科学家给咱们技术部的小伙伴做了一场关于区块链的分享,他总结说区块链就是P2P+Hash,多年来我对这个观点深信不疑。

这几天在尝试着使用DHT做些好玩的东西,然后脑子里面全都是分布式、去中心化的一些东西。刚刚坐在工位上发呆,突然脑壳里面钻出来个问题——区块链是不是就是一个分布式链表?

果断的跟公司的AI机器人聊了几句:

我:区块链是不是就是一个分布式链表?

机器人: 区块链可以被看作是一个分布式的链表,但它不仅仅是一个链表。区块链是由一系列区块组成的,每个区块包含了一定数量的交易记录,这些交易记录按照时间戳的顺序排列。每个区块还包含了前一个区块的哈希值,这样就形成了一个链式结构。这种结构使得区块链具有不可篡改性和去中心化的特点,可以被用于实现数字货币、智能合约等应用。

我: 就是加了hash的分布式链表嘛

机器人: 是的,可以这样理解。区块链就是一个加了哈希值的分布式链表,每个区块包含了一定数量的交易记录和前一个区块的哈希值,这样就形成了一个链式结构。这种结构使得区块链具有不可篡改性和去中心化的特点,可以被用于实现数字货币、智能合约等应用。

既然区块链就是一个带hash的分布式链表,是如何实现不可篡改的呢?

仔细想想,区块链就像多米洛骨牌一样,下一个区块包含当前区块所有内容的摘要信息。想要修改某一个块上的内容,就必须修改后续所有区块上的内容,这种工作量不亚于重新构建一条链。再加之区块链是分布式存储的,如果链表仅存储在一台机器上,重新构建链表也不是不可行,大不了工作量大一点嘛,但是分布式存储就不是工作量问题了,而是其他节点为什么同意你修改呢?这里涉及到一个知识点:公有链和私有链。

  • 公有链:如比特币这种,大家都存了一条全整链表副本的区块链,修改必须应用到所有的副本上。这种就是公有链,这是真正的区块链,真正能达到不可篡改的。
  • 私有链:某些组织自己搞了几个服务器做节点,然后将链表存在着几个服务器上。其他用户没有链表副本,修改只需要发生在那几个服务器上。这就是私有链,虽然用了区块链的技术,但是在我看来这就不是个区块链,因为无法保证不可篡改的特性,本质上还是个中心化的数据库,组织想怎么该怎么改,就是个噱头。

上面的方法问题又来了,既然修改存在后续区块的块不可实现,那么修改链尾的区块呢?区块链保证链尾不可篡改是依靠:共识机制和智能合约来实现的。

  • 共识机制:区块链使用共识机制来确保所有节点对数据的修改达成一致。共识机制可以是工作量证明(PoW)、权益证明(PoS)等,它们的目的都是确保只有经过网络中大多数节点的认可,才能对数据进行修改。 这就是区块链中的"50%攻击",当某个人拥有整个P2P网络中的50%以上的算力的时候,就可以主宰这这条链了。
  • 智能合约:区块链使用智能合约来执行自动化的业务逻辑,智能合约可以确保数据的修改符合预先设定的规则和条件,从而保证数据的完整性和不可篡改性。

凡是都具有两面性,上面这些措施在保证不可篡改性的同时,也引入了新的问题。区块链应用有一个很大的特性,并发性能不高,特别是写入性能。可以做一个很简单的对比:支付宝一秒钟能完成数十万甚至数百万笔交易,比特币一秒钟仅能完成7笔交易。那么,区块链能从那些方面提高性能呢?

根据之前咱们提到的内容,可以发现想要提升整个区块链的性能可以共识机制和智能合约上入手,其中关于共识机制的优化,咱们首先需要知道常见的共识机制有哪些,目前,常见的区块链共识机制包括以下几种:

  1. 工作量证明(PoW):PoW是比特币使用的共识机制,节点通过计算哈希值来竞争记账权,谁先计算出符合要求的哈希值,谁就获得记账权。PoW的优点是安全性高,但缺点是能耗高、效率低。
  2. 权益证明(PoS):PoS是基于持有代币数量的共识机制,持有代币数量越多,获得记账权的概率越大。PoS的优点是能耗低、效率高,但缺点是安全性相对较低。
  3. 权益证明+工作量证明(DPoS):DPoS是结合了PoS和PoW的共识机制,节点通过持有代币数量来获得记账权,但同时需要通过计算哈希值来验证自己的记账权。DPoS的优点是安全性高、效率高,但缺点是需要大量的计算资源。
  4. 权益证明+工作量证明+委托权益证明(LPoS):LPoS是结合了PoS、PoW和委托权益证明的共识机制,节点通过持有代币数量来获得记账权,但同时需要通过计算哈希值来验证自己的记账权,同时可以将自己的代币委托给其他节点来获得更多的收益。LPoS的优点是安全性高、效率高,但缺点是需要大量的计算资源和代币。
  5. 拜占庭容错(BFT):BFT是一种基于共识算法的共识机制,它可以在网络中存在恶意节点的情况下,保证网络的安全性和一致性。BFT的优点是安全性高、效率高,但缺点是需要大量的计算资源和网络带宽。

性能优化本身就是权衡利弊,从根据自身条件确定最合适自己的方案,因此可以根据实际情况选择合适的共识机制。

除了选择合适的共识机制以外,还可以在智能合约上想办法。智能合约是区块链应用的核心,优化智能合约代码可以提高应用性能。可以通过减少循环、减少调用次数、减少数据传输等方式来优化智能合约代码。

侧链技术和分片技术在某些场景下也能对区块链起到优化的作用,侧链结束可以将一些计算密集型任务放在侧链上进行处理,可以减轻主链的负担,提高应用性能;分片技术可以将区块链网络分成多个片段,每个片段可以独立运行,可以提高应用性能。

还有一些咱们普通应用优化手段也可以在区块链应用上进行尝试,比如分层、缓存、并发等等,虽然对整个链起不到翻天覆地的优化作用,但终归聊胜于无吧。

最后还有一点,作为程序员该如何开始玩区块链呢?区块链都是用些什么语言?

  1. 学习区块链基础知识:了解区块链的基本概念、工作原理、应用场景等,可以通过阅读相关书籍、文章、视频等方式进行学习。
  2. 学习区块链编程语言:选择一种适合自己的区块链编程语言,如Solidity、Java、C++、Python、Go等,学习其语法、数据结构、编程范式等。
  3. 实践编写智能合约:在学习区块链编程语言的基础上,尝试编写一些简单的智能合约,并部署到区块链上进行测试。
  4. 学习区块链开发框架:了解一些常用的区块链开发框架,如Truffle、Web3.js、Ganache等,掌握其使用方法和技巧。
  5. 参与区块链社区:加入一些区块链社区,如GitHub、Reddit、Telegram等,与其他开发者交流经验和学习资源。
  6. 参与区块链项目:寻找一些区块链项目,参与其中,积累实践经验和项目经验。

总之,玩转区块链需要不断学习和实践,不断积累经验和技能,才能成为一名优秀的区块链开发者。

思考:
P2P + Hash + Map = DHT
P2P + Hash + List = Block Chain
P2P + Hash + Tree = ???

One Comment

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注