作者:Annchain
(本文一切著作权归annchain技术团队所有,未经许可,不得转载。若需转载请联系页尾二维码。)
在Annchain.OG中,一个交易从诞生到最终确认需要经过三个阶段:验证阶段,等待阶段,确认阶段。
l 验证阶段会验证交易的合法性,合法性包括图结构是否完整,签名是否合法等。
l 等待阶段指交易在被验证通过后等待被sequencer确认的阶段。这个阶段交易会被存放在TxPool中。
l 确认阶段既交易被seq确认的过程。这个过程会在OG的Dag部分中执行。
本篇文章我们将重点关注在等待和确认两个阶段中发生了什么事情。
TxPool 和 Dag 的结构
TxPool可以理解为交易池,主要作用是存放等待被放入账本的交易。所有交易在验证完成后都会放入TxPool。Dag部分既是OG的账本主体部分,这部分会负责将需要确认的交易落盘。所以这部分会有数据库相关的功能。在OG中,我们将TxPool和Dag统一归到core包中,他们二者的结构组成以及关系如下图:
TxPool主要由5部分组成:
1. Tips:存放还未被其他交易prove的交易。如果需要给新的交易分配parent,系统会从tips中随机寻找合适的交易。
2. Pendings:存放已经被其他交易prove但本身还没被确认的交易。
3. Flows:账户状态的缓存,用于记录目前txpool中tips和pendings中的交易所产生的账户状态的变化。这些缓存下来的状态变化主要用于给新交易定性,判断新来的交易是否健康正常。
4. BadTxs:存放被暂时定义为坏交易的交易。一般被定义为坏交易是因为交易nonce的冲突或者交易数额和Flows中的状态对不上等。因为Dag的账本结构无法保证实时一致,所以需要存下异常的交易,直到能通过seq确认异常交易的合法性。
5. TxLookUp:存放所有tips,pendings,badtxs中的交易,用于外界对TxPool内交易的查询。
Dag是整个OG的账本部分,会和数据库有直接交互。由三个主要部分组成:
1. DataStatus:记录Dag的状态,包括Genesis,当前的账本高度等关键信息。
2. MemoryDB:内存中的缓存数据库。因为有些状态数据会经常被读取,为了减轻数据库的读写压力,将一部分数据提取到内存中,方便程序快速的读取和查询。
3. DiskDB:数据库,所有的数据都会被存到DiskDB中。目前DiskDB使用的是谷歌的levelDB。
普通交易的等待阶段
普通交易在经过校验阶段后会被加入到TxPool中:
在TxPool中交易会首先被判断是否是坏交易。系统会首先查看prove的parents是否已经存在于TxPool或者Dag中,然后检查nonce是否有重复,最后判断支付的金额是否超出账号的balance。如果交易被判断为坏交易则被丢入BadTxs中。如果交易正常则会先将其在Tips中的parents交易转移到Pendings中,然后将自己加入到Tips中。后续如果有交易需要Prove新的parents,则此交易有一定几率被选为parents。到这里为止,这个交易就已经完全进入等待阶段,等待后续被sequencer确认。
Sequencer的加入
Sequencer在进入TxPool后要先验证此Seq是否合法。验证通过后程序会从TxPool中搜寻所有的被此seq确认的交易,并将找到的所有交易组成一个ElderList。针对ElderList中的所有交易,TxPool会一一确认其nonce和balance的合理性,保证所有推向Dag的交易都是正确的。确认完成后,程序会生成一个包含所有Elder交易以及发送人与交易关系的ConfirmBatch,并将ConfirmBatch推给Dag进行最后的落盘。
Dag收到ConfirmBatch后会将batch内的交易写入DiskDB中。同时针对每个交易,会更新其对应的MemoryDB中状态,用于对各地址状态的快速查询。为了防止MemoryDB中的数据丢失,交易被成功写入DiskDB后会有程序从MemoryDB将被更改的数据落盘的DiskDB。以上任务完成后,Dag会将自己的状态更新到这个刚推进来的seq上。
Dag的工作做完后,会返回TxPool一个回执。TxPool收到这个处理成功的回执后需要做最后的扫尾工作,将被Dag落盘的交易从TxPool内删除。同时,针对剩下的没被确认的交易,查看是否有存在矛盾的地方。上文提到过,TxPool内会有一个BadTxs的结构用于存储一些可能暂时有问题的交易。在经过一轮的seq确认后,这些bad tx可能会被确认成为正常的交易在Dag落盘。而本来和这个交易有冲突的被标记为正常的交易,就会因此被认定为bad tx。我们要做的就是找到这些原来认为正常,但事实上反常的交易并重新标记他们。
上述所有工作做完后,作为那些被确认的交易就完成了它们的确认阶段,走完了整个流程。而那些还未被确认的交易,则可能继续处于等待阶段,等待那个确认它们的seq的到来。或者被标记为无用的交易被丢弃。
Annchain是由众安科技、众安-复旦区块链与信息安全联合实验室研发, 支持智能合约的高性能通用区块链协议。作为工信部指导的中国区块链技术和产业发展论坛两大开源项目之一,Annchain立足于中国,致力于助力中国抢占区块链全球话语权。
Annchain专注于解决扩展性、去中心化、安全三者平衡问题,做通用的分布式应用计算平台。目前已在数十家生态伙伴的商业场景中落地,场景涵盖农业溯源、珠宝溯源、资产通证化、公益、数据开放计算、广告分发平台和供应链金融等,开发者可基于Annchain高效构建适合自身的区块链应用。
Annchain当前包含两个子项目Annchain.Genesis和Annchain.OG。
Annchain.Genesis作为基于链表式结构的第一代区块链基础协议,其主要特征是模块化、高可靠、易用,支持多种智能合约引擎,开发者可根据具体业务需求选用共识与合约引擎,达到企业级使用需求。
Annchain.OG作为基于DAG账本结构的第二代区块链基础协议,其拥有DAG高效,强扩展特点的同时,又通过基于贡献的多维共识解决其安全可靠问题,同时Annchain.OG支持多种智能合约引擎及计算引擎,具有了更强计算和存储能力。
众安科技
众安信息技术服务有限公司(简称“众安科技”)成立于2016年11月2日,是由蚂蚁金服、腾讯、中国平安发起设立的众安保险旗下的全资科技子公司,专注于区块链、人工智能、密码学、物联网等前沿技术研究。众安科技汇聚了行业内的顶尖科研人才,其中区块链团队规模近200人,多数来自于各顶尖区块链团队。
众安-复旦区块链与信息安全联合实验室
众安-复旦区块链与信息安全联合实验室是国内首个高校与企业联合组建的区块链与信息安全实验室,专注于区块链核心技术研究,探索应用落地。
上海市区块链工程技术研究中心
上海市区块链工程技术研究中心由科委主导,依托复旦大学,联合众安在线财产保险股份有限公司,上海众人信息技术有限公司共同设立。专注分布式账本前沿共性技术与成果转化研究,推动工程落地。
更多关于Annchain:
官网: www.annchain.io
Github: http://Github: github.com/annchain
Facebook: https://www.facebook.com/Annchain-295110641341258
扫码备注昵称+研发方向
加入annchain技术社群