Infininet Inc. 专注于提供web3基础设施,提供更为纯粹的区块链底层架构,让开发者更加专注于web3应用的建设工作。
在此基础设施之上,我们不仅可以建设数字藏品、存证溯源、金融交易等传统的区块链业务,更加灵活的接口形式让开发者有更多地可能性来探索真正适合web3的商业模型。
- 分离的可编程激励模组,让开发者能够根据商业需要引入更多样的激励方式。
- 公平的高性能共识模组,让参与者平等地进行服务维护,并提供高吞吐量共识服务。
- 解耦的自适应准入控制,让建设者平等地加入网络加入系统建设,并在无CA的情况下抵御女巫攻击。
- 可扩展虚拟机引擎接口,可加入不同的虚拟机服务。
- 原生跨链模型,打破链上服务的信息孤岛。
- 网络连接(go-libp2p-pubsub)
- 数据存储(leveldb/go-leveldb)
- 基础加密(crypto-gm/ed25519)
最为重要的层级
- 激励模块(evm):可编程激励模块,根据部署业务的不同,设计所需要的激励方式。
- 共识模块(fairy+hs/streamlet/sandglass):使用具备最终确定性的BFT算法作为核心共识模块,并采用fairy方式让每个网络构建者均可以参与到系统建设中。候选者与验证者均可通过fairy参与系统建设,验证者通过BFT算法对区块链网络进行维护,从而保证系统的一致性与公平性。为了消减BFT算法天然无法抵抗女巫攻击的问题,需要准入机制控制验证者的更替。
- 准入机制(pop, proof of participation):证明型准入机制,将用户行为与准入证明绑定,从而选出合适的验证者集群,称之为参与度证明(PoP)。用户通过绑定服务商的方式对候选者进行提名,候选者集群通过PoP协议选取验证者集群。
- 虚拟机(evm)
- 预言机/零知识证明/……
- 合约/NFT/应用/……
- 原生跨链:提供不同服务间的数据交换能力
系统参与者的最基础模型为账户(account),一切业务以账户为主体进行展开。通过椭圆曲线生成账户,目前阶段只需要生成公私钥对即可。
账户默认具备发起交易请求的权限,该请求可以是查询、存证、交换、合约等多种类型。在发起请求前,需要获取提名者权限,并通过提名的方式与候选者绑定,该账户发起的请求将由绑定的候选者进行服务。
当用户建立账户时,将默认成为提名者(nominator),并获取提名者权限。
提名者权限包括发起与解除,可以由此控制对任意候选者进行提名,该提名行为将帮助候选者称为验证者。
账户可以通过发起请求的方式成为候选者(candidate),在成为候选者时可以选择尽可能多地公开自身相关信息,从而吸引提名者进行提名。
当系统进行初始化时,将有指定的初始验证者集群进行服务,从而满足执行BFT共识所需的最小阈值要求,并为潜在的候选者提供注册服务。
每经过固定的时间间隔,将在全网进行验证者选举,该选举过程将通过比较每个候选者的提名信息为每个人分配抽签权重,并根据权重选取出下一个验证者集群。每个验证者集群对应一个世代(epoch),称世代变更的过程为世代更替(epoch change)。
这里的账本数据,可以分为链上数据与世界状态。对于链上数据,表现为首位相连的块链式存储结构,并块确认状态持久化为世界状态。对于世界状态,表现为key-value的方式进行存储的信息,可选用leveldb作为存储模型。
对于任何经过共识的数据,均会生成相应的链上数据,并链接至对应区块的后方。
链上数据以区块为粒度进行记录,区块分为两类,分别为证书块(cert block)与数据块(data block)。
证书块记录候选者与用户账户的绑定关系,每个候选者均可以生成此类型区块,维护策略为工作量证明(proof of work)。
数据块记录交易数据,包括合约部署、转账、查询等多种类型,由验证者负责维护,维护策略为具有最终确定性的BFT共识算法。
在链上数据的整体记录中,证书块组成主链部分,数据块以某个证书块为根表现为侧链。在每个世代中,会以证书块记录从候选者中选出验证者集群,然后由验证者集群决定本轮世代的根证书块,并基于该证书块生成连续的数据块。
对于链上数据对应的区块,如果已完成全网一致性确认,则进入已提交状态。对于已提交状态区块内对应的数据,将完成最终的提交与归档,并将这些数据与其证书同时写入到世界状态中以供持久化记录。
对于每个账户,在其生成时将对应公私钥对,其中,公钥可以作为token以证明当前账户的身份,并用来与候选者服务器建立连接。
用户将公钥与基础信息绑定,向候选者服务端发送网络连接请求
候选者在收集到一定数量的提名后,计算收集到请求的Merkel Root,记为
使用私钥对
至此,用户与候选者服务端绑定成功,可记为
在建立连接后,只要该区块未被标记为废弃块,用户可使用该区块号为证书向该候选者节点发送请求。
在进行选举时,读取全部有效证书块中保存的服务关系。对于每个候选者,如果拥有活跃服务关系记录,则为其增长活跃值,活跃值增长曲线遵循边际递减规则进行限制。最终,按照活跃值赋权重,随机选出法定数量的候选者作为验证者构成集群。
以链初始化并进入epoch 1,与epoch 1切换至epoch 2为例,简述记账的主要流程。
根据Genesis Block选择初始集群。
完成选举后,每个被选为验证者的节点将广播自身接收到最高的cert block,并由活跃度最高的验证者整合所有验证者的意愿,并选定根节点,保证有2f+1个节点拥有该根区块。
选定后,将该区块以及该区块的前置区块作为有效区块记录,并以该区块为根生成数据区块,通过BFT共识记录链上数据。
当达到世代切换的时间节点,将进行世代切换。
在进行世代切换时,根据当前有效cert block中活跃记录进行选举,并更新当前的验证者集合。
新的验证者集合将进行新一轮的根区块协商,并进行数据区块的生成。
streamlet technical report
phalanx technical report
通过特定语言编写合约,并通过公共接口传递至虚拟机实现,从而完成合约的编译,最终得以部署在区块链系统中。
为了更好的兼容性,初步计划优先接入evm,并实现solidity编写合约。evm支持约100条指令100,为栈式虚拟机,每条指令均对应对应的gas费用,在合约执行过程中,可以通过统计gas费的方式统计整体开销。用户在发起请求时需要尽可能优化自身的算法设计,从而减少gas开销。此外,通过支付更多的手续费,也更有机会获得优先服务。在完成执行后,该费用将作为奖励给予相应的服务者。
在Infininet中,业务方可以根据业务特性规划激励的分配形式,其中包括手续费、利润等,从而更好地部署去中心化的web3业务。










