比原链是什么
我们知道区块链的创新之一就是解决了价值传递问题,传统互联网可以很方便地传递信息,但是并不适合于传递价值,因为不能保证我把某个东西给你,你多了而我少了,信息可以方便地复制和传播,结果往往是你有一份我仍然还有一份。而区块链通过一系列的措施较好地解决了这个问题,但是我们看到不论是比特币还是以太坊,它本身还是在虚拟世界中做价值传递,而比原链想打破这个界限,把数字世界和物理世界中的资产在比原链上登记,以比原链作为连接的桥梁,实现流通、对赌以及其他复杂操作。
与市面上其它公链项目不同的是,比原链专注于区块链在资产登记流通领域的创新,比如通过侧链技术实现收益权资产的分红,采用开放数据索引标准来命名资产,使用创新型PoW算法,以对人工智能ASIC友好。如果说其它公链项目像是区块链领域的FPGA(可编程门阵列),强调智能合约的可编程性与通用性,适用于不同商业场景,那么比原链就是区块链的ASIC,更强调智能合约在资产领域的专用性,针对资产的属性,在资源不可复制性、可控匿名性、安全与合规性上做了许多创新。
当然在这个过程当中会有很多的难题,比如锚定问题、硬链接问题等,锚定和硬链接问题其实是一类问题(只是一个对虚拟资产,一个对实物资产),都是如何证明比原链上的某个资产实际对应某个虚拟或者实物资产。
对于其他虚拟资产锚定问题,我们会使用跨链等技术来将虚拟资产锚定到比原链上,同时通过ODIN标识来进行唯一性的标识,防止资产伪造。
对于硬链接问题,肯定绕不开监管等,如何将一些实物资产,比如房产、土地、消耗品等引到链上,这里肯定需要区块链的不断发展演进、政策和法律的完善,以及周边应用的完善,路漫漫其修远兮,吾将上下而求索,比原链将先易后难,不断实现自己的愿景和使命。
总之,比原链是想用区块链技术来实现各种资产交互的公链,作为资产专链,它比以太坊领域更垂直,比比特币更扩展。
比原链结构
比原链平台模型采用了三层结构:应用层、合约层、账本层(数据层)。
在应用层上,比原链提供多种形式的PC、WEB、移动端应用以方便调用合约进行资产操作。支持开发可编程的分布式应用,调用合约进行资产的登记、销毁和交易、分红。
在合约层上,分为创世合约和普通合约,创世合约是以发行并审核智能合约的合约,将由开发者将保留部分权限,例如私钥、作用域等,并有一定的规范和自动化审计功能。普通合约行资产的交易和分红的设置、认定。普通合约开发或引入新的资产需要向创始合约提交请求,经审核通过后方能发布到链上。
账本层(数据层)是无需许可的公有链层,采用POW(工作量证明机制)共识,并加入对人工智能ASIC芯片友好的算法。
在资产发行方面,比原链每种资产命名采用ODIN标识(Open Data Index Name)开放数据索引命名标准,利用区块链透明可信、不可篡改特性,保障资产的全网、全链唯一性。
以资产证券化(ABS)为例,比原链创始成员之一段新星告诉亿欧,传统方式下,一般公司的证券发行,必须先找到一家券商,公司与证券发行中介机构签订委托募集合同,完成繁琐的申请流程后,才能寻求投资者认购。而且证券一旦上市后,交易更是极为低效,证券交易日和交割日之间存在数天的时间间隔。而采用区块链,ABS可以简化为三个步骤:一是确权对应;二是代币化,把资产分割成货币或token;三是智能合约的交易。
通过比原链管理证券化资产,可极大的提高ABS资产运作的效率、安全性和可追溯性,实现交易数据的安全存储,保证信息不可伪造和篡改,并自动执行智能合约。ABS交易过程中所有市场参与者,通过分布式账本和共识机制保持资产登记与交易信息的同步,有效解决了机构间费时费力的对账清算问题。
在资产交换方面,比原链采用的BUTXO在对比特币公链上传统的UTXO结构进行了扩展,可以兼容多种类型的比特和原子资产,与此同时还避免了双花(双重支付)问题,并增加交易的并发性和处理效率。
在共识机制方面,比原链在比特币公链、以太坊公链所采用的POW机制基础上,实现对人工智能ASIC芯片友好的共识算法,在哈希过程中引入矩阵和卷积计算,使得矿机在闲置或被淘汰后,可用于AI硬件加速服务,解决PoW机制的硬件消耗问题。
通过以上设计,比原链希望成为资产领域的专用型公链平台,连通比特世界与原子世界,建造起一个多元化资产的登记、流通的去中心化网络。
比原链设计准则
安全性是我们考虑的首要准则。因为我们是资产专链,将来会有各种各样的资产运行在比原链之上。
首先使用较为成熟稳定的关键技术,包括我们之前讲到的POW共识算法,其在比特币上稳定运行这么长时间,也很好地解决了双花的问题,我们沿袭了UTXO模型而没有采用账户模型,牺牲了部分的便捷性但是提升了安全性,我们知道在以太坊产生的诸多安全问题中,大部分是因为其合约账户编程漏洞从而遭到攻击,而且一旦攻击则会影响到全部的资产(token)。
比原链在开发过程中,会有详尽的代码审计,多人同时研究一段代码,最后在pr的过程中由架构师进行review再合并,同时具备较为完整的测试用例,从而从开发层保证安全性。
比原链还积极和其他的一些著名安全厂商合作,包括360、慢雾等团队,从更加专业的角度来保证比原链的安全。
模块化设计
比原链整体会分为若干层次,每个层次之间功能清晰,分类明确,利于扩展。
比如网络层,主要做区块同步、节点广播等网络之间的事情;内核层做共识、验证的事情,其内部比较复杂但仍然具有相对清晰的逻辑,这个后边会详细进行阐述,同时各个模块之前通过一些接口进行关联,实现松耦合。
强扩展性
比原链作为一个基础公链,肯定需要考虑将来面对各种各样的需求,那么如何去满足这样的需求,我们设计了完备的API接口,提供给各类周边和应用,当然这些API仍然还需要进一步扩展,同时我们各个模块之间松耦合,比如国密和ED25519密码库之间可以很方便进行替换,满足不同的业务需求。
比原链分层模型
比原链可以分为三个模块,从上到下分别为:钱包层、内核层和通信层,下图中的比例是指代码所占的份额。
钱包层大家平时接触比较多,收款或者打款的一个操作界面,比原现在有一个全节点钱包可以供大家使用。
内核层可以简单理解为分布式系统中大家都认同的一套规则,在通信过程中,两个节点需要有相同的规则,才可以达成共识,如果两个节点规则不同,那么其实是意味着分叉。比原链中内核层占有非常重要的位置,代码量也是最大的,占据了超过半数的容量。
通信层主要负责节点之间信息交互,包括区块同步、交易同步等,比如交易同步,你需要把交易发到全网每一个节点,最后由矿工节点打包,比原链的通信建立在比较成熟的点对点网络的技术之上。
上图展示的是比原链更加细致的分层模型。分层还是通信层、内核层和钱包层,除此之外内核层还有虚拟机,这个是为了运行智能合约用的,因为比原链支持图灵完备的智能合约,需要虚拟机进行隔离运行;在虚拟机之上是合约编译层,负责将equity语言编译成机器码从而能够在虚拟机中运行,内核层和钱包层都有数据库,比原链使用levelDB作为存储的数据库,根据各个层不同的需求来存储不同的数据。
内核层
内核层相对来说较为复杂,从最上层看,内核层有五个模块:孤儿块管理、共识层、区块树管理、数据存储层和交易池。
孤儿块管理是什么呢?因为比原使用POW共识算法,就是采用挖矿的方式来产生区块,如果我挖到了一个块-块A,你挖到一个块-块B,最后只有一个块会成为主链,另外一个块就成为孤儿块了,在以太坊中还会有叔块的概念,我们这里面统称为孤儿块,就是未成为主链的合法区块。孤儿块管理是一个模块,在某一高度出现多个块时,这个模块就负责收集和存储非主链的块。
共识层比较复杂,它也是全节点最核心的部分,当一个区块来的时候,我如何验证和确定这个块是合法的、我是否该认同这个块,这就是共识层的工作。我们把验证分为两部分:
一部分是区块头验证,需要验证父块的信息,父块是否存在,父块的高度,然后是验时间戳,这块比较复杂需要一系列的验证流程,然后就是pow的验证,要证明你有足够的算力计算出难度值,从而有这个出块或者是记账的权利;
另一部分是交易验证,这块我们比原设计中和区块链有点不一样,就是比原有个BC层,BC层是一个map,用户可以在这个map中找到所有跟交易相关的信息,专门设计用来提高交易验证的性能,在BC层我们把交易的常规数据都验证完毕,然后就是智能合约的验证,我们支持图灵完备的智能合约,所以底层有虚拟机层,这个前文讲过。在每个交易进入时,需要验证交易的每个输入,每个输入其实被一个智能合约所守护,把输入传输到虚拟机中,将用户放到隔离验证的参数也放进去,然后验证这个输入是否合法。
区块树管理,主要用来记录全网所有的区块,为什么我们说区块树管理而不是区块链管理呢,因为之前讲过会有孤儿块,可能在某个高度出现分叉的情况,所以通过树的形式记录了全网所有的块,我们还称他为block index,因为可以索引到比原所有的区块。
数据存储,就是把区块和其他的一些数据落盘做持久化存储。这里列出来两个存储的数据:第一个是区块数据,这个就是在网络上广播的原生区块信息;第二个是UTXO数据。为什么我们会存储UTXO数据呢?如果不存储UTXO数据,当有一笔交易来的时候,如果你要验证这笔交易的UTXO是否被使用了,你需要历遍所有的区块,对性能会有很大影响,如果存储了可用的UTXO数据,那么就相当于有了一个缓冲池,当交易到来时,你只需要查找该UTXO是否存在在数据库中即可。
交易池,当你发送了一笔交易到全网,如果这笔交易还未被验证,那么这笔交易是存储在每个节点的交易池中,也就是说交易池维护了全网已经发出但没有被确认的交易,跟它关联最大的是挖矿这个模块,如果我要产生一个新的区块,那么我需要从交易池中拿一系列的交易并把它打包成块,然后进行POW的工作量验算。比原链的交易选择使用FIFO,也就是先进先出的策略,就是按时间顺序,早入池的早打包,防止因为交易费低而迟迟得不到打包的现象,这块也很容易扩展其他的策略,要看具体的场景。
钱包层
钱包层分为四块:私钥管理、账户管理、资产管理和交易管理。
私钥管理,比如你用比原的钱包生成一个private key,就是用到这个模块,还有包括如果安全保护这个私钥,一般都需要进行加密存储,以及如何使用私钥进行签名和子私钥的派生。
账户层,其实在UTXO模型当中是没有账户的概念的(比特币是这样),只有私钥和地址,账户其实是上层的抽象,我们比原的设计中,在钱包层设计了账户的概念,每个账户可以拥有多把私钥,私钥的不同形式就组成了不同的账户(因为会有多签账户),可以把账户理解成私钥的一种表现形式。每个账户会有无限多的地址,这个地址是由派生公钥生成的,这个可以很好地保护用户的隐私,因为用户的资产分散在不同的地址当中,只追踪某个地址不可能追溯到用户的所有资产。
资产模块主要进行资产的创建、展示和管理,比原链支持多资产的交互,任何人都可以发行自己的资产,然后通过资产管理个人或者组织机构下面的资产。
交易模块换一种更确切的说法是跟我有关的交易数据,在区块链上每天可能会有无数笔的交易,但其中可能只有几笔是跟你相关的,那么交易模块会在本地把跟你相关的交易筛选出来,维护钱包端的UTXO的数据库,记录你本人所拥有的UTXO,这个和内核中记录的UTXO不同,内核记录了全网的UTXO,但并没有记录UTXO的详细数据,而只是记录了hash,而钱包端记录了跟这个UTXO相关的详细数据,包括跟哪个账户相关、在哪个区块产生出来的、输入输出等等。然后交易模块会进行交易的构建,如果你在钱包端发起一笔交易,那么就需要在这里进行交易构建和签名,相关的后边会有流程介绍。
通信层
通信层架构分为节点发现、交易同步、区块同步和区块广播。
节点发现是很独立的一块,在区块链的世界中,其实像一个黑森林一样,你不知道有哪些节点、这些节点分布在哪?你唯一知道的是有几个种子节点,这几个种子节点就像是一个个的灯塔,可以将新进入的节点引入到整个网络。节点发现就是完成如何连接这些种子节点,并获取种子节点连接的其他相邻节点,然后再向其他节点尝试握手,以此循环发现更多的全网节点,从而能够更快地连接入网络并进行相关信息的同步。
交易同步,当你把交易发到全网的时候,它会通过这个模块发送给相邻节点,然后再进一步扩散,直到全网都有这笔交易。
区块同步,又成为被动区块同步,比如我当前本地区块高度为1万,我重新连接入网,我发现了其他有个节点高度是4万,那么这个模块就会从1万开始不断地向4万高度的节点请求区块,获取区块并更新状态,丢给内核层去处理。
区块广播,新区块快速广播是主动将新的区块广播给其他人,如果只有区块同步被动地接受区块,那么比如我挖到一个新块,还需要等别人发现我的高度比他高才会进行同步,会有不少的延迟,特别是网络层数较多时。新区块广播就是直接将新产生的区块强制广播给相邻连接节点,这些节点在验证确实是最新块时他们也会调用这个模块进行扩散,从而提高了区块同步的效率。