MetaForce佛萨奇系统开发主要流程
MySQL,关系型数据库,支持schema和富查询,性能较KV数据库低,目前关系型数据库与区块链的状态数据并不能很好的结合,导致很少有区块链采用关系型数据库作为状态数据库。原因主要有两点:1.区块链需要对智能合约所读写的状态数据做严格的控制和校验,而SQL语句相对区块链来说过于灵活,难以控制;2.需要提前创建库表和索引,需要针对不同的智能合约创建不同的数据库表结构,不够灵活。目前长安链支持MySQL存储引擎,在系统数据如Block DB上支持区块元信息、交易信息的关系型语义,状态数据库支持kv的方式和智能合约编写SQL语句方式读写状态数据(world state)。 根据对同一批交易调度产生的执行顺序是否随机,并行调度算法可分为:
I8O系统2857開发8624游戏
随机性调度算法:即针对同一批交易调度产生的交易执行顺序是随机的,即使同一节点针对同一批交易连续运行两次调度算法产生的结果也可能不同。此类算法往往调度速度较快,其难点在于验证节点如何保证执行顺序与提案节点一致并得到相同的执行结果。因此,交易的执行顺序必须打包至区块中并由其他节点据此验证。 确定性调度算法:即针对同一批交易调度产生的交易执行顺序是确定的。此类算法的优点是交易执行顺序产生稳定且可复现,因此理论上讲交易执行顺序的信息可不包含在区块内,各验证节点运行并行调度算法即可进行校验。 同步服务模块handlerÁ 同步模块的消息handler负责处理从net模块监听到的NetMsg_SYNC_BLOCK_MSG类型的消息 func(sync*BlockChainSyncServer)blockSyncMsgHandler(from string,msg[]byte,msgType netPb.NetMsg_MsgType)error{ //检查服务是否启动 check sync.start //检查消息类型 check msgType!=netPb.NetMsg_SYNC_BLOCK_MSG //解析msg unmarshal msg->syncMsg switch syncMsg.Type{ case syncPb.SyncMsg_NODE_STATUS_REQ: //返回本地高度 return sync.handleNodeStatusReq(from) case syncPb.SyncMsg_NODE_STATUS_RESP: //在定时器任务队列中添加NodeStatusMsg任务,启动处理流程 return sync.handleNodeStatusResp(&syncMsg,from) case syncPb.SyncMsg_BLOCK_SYNC_REQ: //返回区块数据(封装在SyncMsg中,包含相应的业务数据) return sync.handleBlockReq(&syncMsg,from) case syncPb.SyncMsg_BLOCK_SYNC_RESP: //在定时器任务队列中添加SyncedBlockMsg任务,启动处理流程 return sync.scheduler.addTask(&SyncedBlockMsg{msg:syncMsg.Payload,from:from}) }