比原链CTO James | Go语言成为区块链主流开发语言的四点理由

11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里、网易的技术专家带来Kubernetes、区块链、日志采集、云原生等话题的分享。James向你们介绍了Go语言特性在区块链中的应用还分析了Go语言成为区块链主流开发语言的缘由。程序员

比原链的系统架构

在区块链系统中内核层是最核心的,他承接了区块验证、交易验证、节点维护、打包挖矿等重多职责。通讯层掌管了区块链系统的网络服务,区块链的网络更像P2P的网络形式,他呈网状扩散,负责区块同步、交易同步、节点发现等重要的功能。钱包层是直接和用户发生交互的一层,他的职责是资产管理、私钥管理,并与内核层通讯验证区块交易。算法

以Bytom为例,他的内核层分为了五个的模块。咱们举例描述几个主要的模块。缓存

孤儿块管理:孤儿块就是由矿工挖出但未成为主链区块的区块(在相同高度产生2个甚至更多的合法区块,一个区块成为主链,剩下的则称为孤儿块),孤儿块管理就是将未成为主链区块的孤儿块存储起来。举个例子,我如今挖到的区块是100,那么下一个区块理论上是101,可是在网络层发生延时的时候,可能会发生先出102再出101的状况,那么孤儿块管理会将这些父块未到的子块先缓存起来。网络

共识层:确认一个块是否合法。分为区块头验证和交易验证。区块头验证须要验证它的父块和时间戳,同是须要算力来保证记帐权利。交易验证比原特别的设计了一层BC层,这层在交易验证时会得到更好的性能,交易验证还和智能合约相关,交易被验证时参数会参入虚拟机验证该交易是否合法。架构

区块树管理:又称为Block Index,做用是记录全网全部的块,保存了全网全部块的一张镜像图。由于有孤儿块,全部它并非链式结构的,会有分叉的状况,因此称为区块树。举个例子,区块树管理比如有一个分布式系统,但没法保证每一个节点的状态一致,可能会出现同一个高度产生同时参生区块的状况。区块树管理就是具有了在节点状态不一致的状况下让系统回滚到正确的区块这个功能。异步

数据存储:将区块数据作持久化存储。包含两种数据,第一种是区块数据,会在网络上进行广播的原生区块信息;第二种是UTXO数据,存储UTXO数据是为了更快的验证一笔UTXO是否能够花费,而不须要去遍历全部区块信息。分布式

交易池:维护了全部全网发出的可是还未被确认的交易。跟它关联最大的是挖矿模块,挖矿模块每次要产生一个新区块的时候,它会从交易池拿一些交易打包成块,而后用Tensority共识算法进行工做量验算。举个例子,在节点打包交易以前,交易处在一个未确认的状态之下,交易池会将这些未确认的交易保存起来,分配给后面的矿工用于打包。性能

WHY GOLANG?

第一点,区块链是多模块异步协同工做的,分红了P2P层、钱包层、内核层。其中内核层、情报层里面都有不一样的不少子模块,在负责不一样的事情。Go语言作得很出色很是适合作这方面的开发。区块链

第二点,区块链项目有核心团队可是主要仍是依赖社区参与,Go语言编译上相对于其余语言稍微严格一点,在制定规范后可使不一样开发者代码风格相近,有利于协同工做的展开。设计

第三点,Go语言社区完善,有不少很是好的开源库支持,使用起来很是方便用户体验良好。

第四点,主流语言的头部效应,在区块链的项目里面超过85%的项目都是基于Go语言开发的,大部分区块链工程师都擅长Go语言,因此当新的项目开始的时候,会首选Go语言。

对区块链感兴趣的程序员能够投递简历至:james@bytom.io

相关文章
相关标签/搜索