内容简介:2018年11月17日上午,“2018比原链全球开发者大会”正式在杭州国际博览中心(G20会馆)开幕,这是杭州第一次由开源组织举办的技术型峰会,也是杭州被誉为区块链之城以来规模最大的一场区块链开发者大赛,100+开发团队历经4个月激烈厮杀,16支团队将在本次大会上展开最终角逐。在大赛进行过程中,资深程序员,比原社区的开发者Derek作了题为《GO语言公链实战》的分享。这是即将上市的一本图书,它主要讨论了GO语言的使用,而比原链是该书剖析GO语言的一个具体项目。
2018年11月17日上午,“2018比原链全球开发者大会”正式在杭州国际博览中心(G20会馆)开幕,这是杭州第一次由开源组织举办的技术型峰会,也是杭州被誉为区块链之城以来规模最大的一场区块链开发者大赛,100+开发团队历经4个月激烈厮杀,16支团队将在本次大会上展开最终角逐。
在大赛进行过程中,资深程序员,比原社区的开发者Derek作了题为《GO语言公链实战》的分享。这是即将上市的一本图书,它主要讨论了 GO 语言的使用,而比原链是该书剖析GO语言的一个具体项目。
“现在讲区块链的书很多,但真正深入公链的书不多,而从一个技术语言入手,去剖析区块链技术的就更少了。我认为Go语言是区块链未来的趋势,我这本书就是想通过对比原代码的剖析,让更多 程序员 了解区块链。”Derek说。
以下为Derek演讲,经巴比特整理:
大家好,今天主要和大家分享一下关于比原链的技术细节。主要四个方面,第一,比原链的总架构;第二,虚拟机的堆栈实现;第三,区块快速同步和定期同步原理;第四,P2P节点状态机。
上面是比原链总架构图,比原链官方提供了一个三层架构图,我在这上面细化了一下。第一层是用户交互层,比原链提供两种用户交互工具,包括bytomcli、Bytom-dashboard,我们开发者用得比较多。第二层是接口层,ApiServer服务,主要接收交互层 工具 的请求和处理请求,并响应请求。第三层是内核层,是比原链的核心,占整体代码54%左右。最主要的两块是交易管理,交易的构建、交易的签名和交易的提交。包括智能合约,它也有这三个过程。智能合约运行在bvm虚拟机,还有Equity语言,今天参赛选手都是用Equity语言做代码编写。还有BUTXO,这是比原链在比特币UTXO上做了一些拓展。
再下一层是钱包层,大家用得比较多,这一块比较简单,就不说了。然后是共识层,目前主流的共识有两种,PoW和PoS,比原链的宗旨是算力即权力,所以他们选择PoW方式去做共识。比原链在PoW做了一个创新,自主研发了Tensority算法,基于AI友好型的矩阵计算hash方式。接下来是数据库,在比原链上面用得比较多,对开发者来说把时间换成空间的一种方式。最主要的数据库有几个,一个是Core,存放所有主链区块信息和交易信息。还有Wallet,钱包数据库等。
下面一层是P2P网络层,P2P大家都知道,当年快播用得特别溜。比原链在该基础上面主要实现几个功能,节点发现,区块同步、交易同步、快速广播,快速广播主要为了挖矿时让交易能够在全网尽快达成共识。
说一下虚拟机的运行原理,大家在学校里都学过堆栈,先进先出和先进后出的数据结构。BVM在这里就是先进后出的数据结构。第一步操作,假设堆栈里有两个指令,有两个元素,X和Y。这时候入站的话,将2入站到站中,就是XY和2。当出站操作时,它是先进后出的原理,首先会从栈中推出一个元素,比如说常数2从站点推出来。下面是执行DUP的指令,复制指令,将栈中元素再复制一个元素放入到栈当中。我们可以看到原有的是X和2,然后通过执行到DUP指令之后就变成X,2和2。这是一个虚拟机,我们在虚拟机发布指令,都会涉及指令进站出站的操作,这是堆栈虚拟机。
下面说一下区块,区块早期一般都是定期同步,这种情况下在一个区块链网络上比较缓慢。比原链在上面做了快速同步机制,我们可以看到这两边的区别,它是根据Checkpoints,是比特币最早提出来的,用于检验旧区块是否有分叉。所以比原链在Checkpoints做了快速同步,基于当前节点在Checkpoints高度节点范围内就使用快速同步,不然就是定期同步。
快速同步的话,从当前节点和已知节点中找到已知最优对等节点进行加密握手链接,加密握手链接之后会向它发送请求,发送请求范围是从当前高度到Checkpoint范围,最大是128个区块,一次请求会请求128个最大。然后它就会验证区块,添加到本地区块链上面,这是快速同步。定期同步,前面流程都是一样,但是到后面因为为了安全问题,每次这个块还没有出来的时候只请求一个区块,再验证,再添加到本地。添加完之后会最后通知对等节点,告诉它最新节点高度和区块hash。
下面再简单介绍一下P2P节点状态机,状态机的话,大家应该在学校里都学过,它是一种状态的切换。不知道大家有没有看过一些P2P源码,在比原链里有7种状态的定义。当前节点和对等节点进行连接的时候,对等节点的初始状态是Unknown,经过不同包的发送切换不同的状态。由Unknown一直往下切,整个状态机图表大概是这样的。
这里面包含几个策略,比如说当前节点和对等节点刚开始加密握手连接之后,大家的状态都是Unknown,然后发一些Ping包,对等节点返回一些Pong包,状态节点就会被切换。直到它会将对等节点加入到自己路由表中,就会和对等节点建立一些交易和区块的发送。不光是比原,包括比特币和以太坊,所有币种都是用KAD去实现这种路由表。KAD是一个路由算法,它是基于两个节点的ID进行异货算出来一个逻辑距离。这个距离不是实际物理地址,比如我在中国,我在美国,这也有可能建立连接。并不是说我在中国和杭州建立最近的连接,它是逻辑的距离。
下面说一下今天来的目的,前面都是一些铺垫。今天主要和大家介绍一下,我和我的小伙伴在9月初时,写了一本书,目前的进度是2/3,大约是在明年年初就能出版。《GO语言公链实战》里面的内容是和比特币有点类似,但又比精通比特币内容丰富很多,包括原理上的实现和算法上的实现,都会以比原链底层代码作为铺垫,在上面展示出来。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- [译] 剖析 Stack Overflow,开发者遇到最多的的 Bug 是哪些?
- 【Java集合源码剖析】ArrayList源码剖析
- Java集合源码剖析:TreeMap源码剖析
- 【剖析 | SOFARPC 框架】系列之 SOFARPC 优雅关闭剖析
- 【剖析 | SOFARPC 框架】系列之 SOFARPC 注解支持剖析
- 【剖析 | SOFARPC 框架】系列之 SOFARPC 泛化调用实现剖析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Design Accessible Web Sites
Jeremy Sydik / Pragmatic Bookshelf / 2007-11-05 / USD 34.95
It's not a one-browser web anymore. You need to reach audiences that use cell phones, PDAs, game consoles, or other "alternative" browsers, as well as users with disabilities. Legal requirements for a......一起来看看 《Design Accessible Web Sites》 这本书的介绍吧!