OC(OnlyChain)系统,提出最大兼容全领域商业应用的区块链生态系统架构,旨在实现去中心化应用和半中心化应用的数据兼容和性能扩展。该系统架构搭建后,将有组织的协调分布式计算机为应用提供服务,其中基础层包含对数以百计处理器、内存、硬盘、带宽、接口的调度使用,通过智能合约将一系列去中心化的核心业务在链上高效的协同运转工作,OC系统深度优化集群技术,在应用业务上,每秒可处理海量数据。通过节点面版集成生态应用插件,在丰富生态应用的同时,助力企业和开发者以更低门槛构建自己事业。OnlyChain 是一套可兼容并能快速处理去中心化与半中心化应用的高性能区块链应用生态系统,深度结合指数型组织的成功商业模式,建立更加高效、完善的应用生态。
OCSystem是根据开源LGPL许可证发布的,按“原样”提供,不附带任何明示或暗示的担保。OCSystem提供的任何安全性部分取决于其使用,配置和部署方式。OCSystem建立在许多第三方库(例如WABT(Apache许可)和WAVM(BSD 3子句))的基础上,它们也按“原样”提供,没有任何形式的保证。在不限制前述内容的一般性的情况下,OnlyChain不作任何陈述或保证OCSystem或任何第三方库将按预期执行或不存在错误,错误或错误代码。两者都可能以大或小的方式失败,可能完全或部分地限制功能或危害计算机系统。如果您使用或实施OCSystem,您需要自担风险。 OnlyChain既不启动也不基于OCSystem运行任何初始的公共区块链。
1、数据结构
在OC系统中采用和以太坊相似的MPT数据结构,在该版本中增加系统TOKEN锁仓的结构支持
2、共识机制
OC系统采用 BFT-DPOS 共识体系,依靠该共识算法防止出现生产节点之间的作恶和分叉风险,保障生产出的区块100%安全可靠。
2.1 改进型BFT算法
在原有的BFT算法上进行改进,这里称为改进型BFT算法。由于PBFT算法不适用投票系统,恶意节点很容易操控局势,让一部分节点以为出块成功,另一部分节点以为出块失败,从而导致出块节点受到惩罚,网络不佳的情况下也可能发生这种情况,且效率欠佳。
改进型BFT算法流程如图:
2.2 委托权益证明(DPOS)
OC系统上的任意令牌持有者可以通过投票器进行投票选择支持指定的区块生产者即竞选节点,投票者与 生产者为互利共生的关系,想成为生产者除了需要满足各项指标,还需获取足够多的支持者。在OC区块链系统中,具备21个超级节点,9个备选节点,N个竞选节点和轻节点,除了轻节点外每个节点都有权利被一个群体采用令牌作为权益支持证明,以此作为是否入围当选21超级节点的最重要条件之一。
2.2.1 投票
用户拥有一票30投的权益,投票对象不可重复,投票节点数量范围0~30,根据所投统计量作为重要参考依据,决定竞选节点是否入围超级节点。
3 出块规则
OC系统的出块规则为每 2 秒生产一个区块,在主链上,一个生产者负责 3 轮的出块任务,21 个生产者共计 63 轮进行生产,历时 126 秒,63 轮为一个周期结束后,需要重新选举节点出块。出块顺序根据投票情况进行顺序出块,假定某个块没有按照规定时间出块,将跳过该块,进入下一个块的生产。
现阶段为固定时间间隔出块,在未来将考虑动态间隔出块,这是出于节约区块链系统资源而考虑,大致如下:
每隔100个区块调整一次出块时间,前100个区块的平均交易量设为x,求出期望出块时间y=10/(1-x/1000),然后计算△y=y-y'(y'是当前出块时间)。如果△y<-0.5,那么△y=-0.5,如果△y>0.5,那么△y=0.5。最后当前出块时间y'=y'+△y,如果y'>10,那么y'=10,如果y'<0.5,那么y'=0.5。也就是说最短出块间隔0.5s,最长出块间隔10s。其最终效果是当上链操作非常频繁时,出块间隔会趋于0.5s,当闲置时,出块间隔趋于10s。
4 区块同步
如图所示,当A出块后,将区块分成20份,其中14份为区块数据,6份为纠错码(纠删码技术),每份分别分发给对应的节点,当每个节点接收到数据后,再将区块发送给其它节点,那么每个节点收到任意14份数据就能够恢复出A出的区块数据。这样处理的优势有如下几点:
1)将区块的粒度变的更细,然后进行并行传输,有效增加传输速度。
2)当某节点接收到的区块数据不完整时,此时几乎无需重新通过网络重新请求拉取区块(造成数据冗余),只需通过纠删码技术以最小的代价恢复缺失的部分数据。
4.1 同步过程中遇到的几种情况处理
1)大部分节点未接收到14份数据,则认为A出块失败或未出过块。
2)对于未能恢复(未收到)区块的个别节点,忽略它们的存在,直到它们网络状态良好。
5 密码学
OC系统的公私钥生成、签名与验证采用改进后的迷你快速的Secp256k1椭圆曲线算法,其中消息加密传输细节如图所示:
6 地址水印
为了防止未来硬分叉后出现的双花攻击,给地址加上了水印功能,不同链上有不同的水印标识,这样两条分叉上的地址是无法互通的,而且这个水印不占据任何空间。例如有原地址:0296bf07ae95af84e0c77259c72de5f609ca772f,链上水印标识:0000000000000000000000000000000000000001,原地址与水印异或后的地址才是这个链上的真实地址:0296bf07ae95af84e0c77259c72de5f609ca772e
7 零知识证明
以下为零知识证明的作用范围和必备条件:
1)证明区块链头部可信:需要超级节点列表(签名证明),初始状态下可以从创世区块获得超级节点名单。
2)证明超级节点列表可信:需要区块链头部(Hash树证明)。
3)证明账户存在或不存在:需要区块链头部(Hash树证明)。
4)证明查询账户的信息正确:需要区块链头部(Hash树证明)。
5)证明查询前30名得票节点正确:需要区块链头部(Hash树证明)。
6)证明查询30名后得票节点正确:无法证明。
7)证明交易存在:需要区块链头部(Hash树证明)。
8)证明交易不存在:无法证明(全节点返回该交易不存在不意味着真的不存在)。
9)证明查询的最高区块高度正确:无法证明。
8 网络通信
采用Kademlia协议作为节点发现技术支持,其中在Kademlia协议中,在原来的B编码基础上进行了变种B编码,以此支持更多的数据类型。另外对于请求部分,在可能引发的ddos攻击请求地方进行了工作量证明机制,对于普通用户需要几十毫秒才能发起请求,但对于黑客来说需要消耗自身大量的算力。即要求action+nonce的hash结果前面有几个0,轻节点可以在几十毫秒到几百毫秒内算出符合要求的hash值,基本不影响用户体验,并且可以大幅减少全网恶意action的数量。
9 智能合约
智能合约(英语:Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。在接下来的几个版本中,OC系统可能将使用标准虚拟机字节码的设计原则,嵌入属于OC系统自有的合约系统。
有关版权和许可条款,请参阅LICENSE。