小学教育下载


小学教育开户

公司资讯 您当前的位置:首页 > 公司资讯

兄弟连区块链教程Fabric1.0源代码分析Tx(Transaction 交易)二

文章来源:本章原创 时间:2019-06-12 11:23

您现在的位置:小学教育 > 教育目的 > 正文

    5.坚持锻炼:适当增加户外活动,因为运动不仅能促进身体的血液循环,增强心肺功能,还提高皮肤调节温度的能力,维护淋巴系统的功能,从而增强身体的抗病能力。  6.平衡营养:偏食挑食的孩子最容易发生免疫力下降,要想增强身体的抗病能力,合理、均衡营养非常重要。家长可以有意识地增加含钙量丰富的鱼虾、豆制品,适当增加优质蛋白质,注意蔬菜水果的摄取,适当搭配粗粮和杂粮,避免高糖分、高脂肪和油炸食品。  7.保证睡眠:晚间要保证孩子充足的睡眠,不使孩子过度疲劳,充足的睡眠能够提高机体免疫力,对抗疾病。

  我手里拿着那两颗糖,心里美滋滋的。尽管这两颗糖并不是什么大的“礼物”,但是我觉得这两颗糖就胜过我以前吃的糖,因为它更具有意义。那一天工作结束,我拖着疲惫的身体躺着床上,但是我并不觉得累,因为那两颗糖正被我握在手里。

兄弟连区块链教程Fabric1.0源代码分析Tx(Transaction 交易)二

  兄弟连源代码分析Tx(Transaction交易)二。

##4、交易相关部分工具函数(protos/utils包)putils更详细内容,参考:源代码笔记之putils(protos/utils工具包)##5、RWSet(读写集)RWSet更详细内容,参考:源代码笔记之Tx#RWSet(读写集)##6、结构体及方法```gotypeHeightstruct{BlockNumuint64//区块编号TxNumuint64//交易编号}funcNewHeight(blockNum,txNumuint64)*Height//构造HeightfuncNewHeightFromBytes(b[]byte)(*Height,int)//[]byte反序列化构造Heightfunc(h*Height)ToBytes()[]byte//Height序列化func(h*Height)Compare(h1*Height)int//比较两个HeightfuncAreSame(h1*Height,h2*Height)bool//比较两个Height是否相等//代码在core/ledger/kvledger/txmgmt/version/```##7、Validator接口及实现(验证读写集)###、Validator接口定义```gotypeValidatorinterface{//验证和准备批处理ValidateAndPrepareBatch(block*,doMVCCValidationbool)(*,error)}//代码在core/ledger/kvledger/txmgmt/validator/```###、Validator接口实现Validator接口实现,即结构体及方法。

Validator结构体定义如下:```gotypeValidatorstruct{//statedb}//代码在core/ledger/kvledger/txmgmt/validator/statebasedval/state_based_```涉及方法如下:```go//构造ValidatorfuncNewValidator()*Validator//验证背书交易func(v*Validator)validateEndorserTX(envBytes[]byte,doMVCCValidationbool,updates*)(*,,error)//验证和准备批处理,Block中写集加入批处理func(v*Validator)ValidateAndPrepareBatch(block*,doMVCCValidationbool)(*,error)funcaddWriteSetToBatch(txRWSet*,txHeight*,batch*)func(v*Validator)validateTx(txRWSet*,updates*)(,error)func(v*Validator)validateReadSet(nsstring,kvReads[]*,updates*)(bool,error)func(v*Validator)validateKVRead(nsstring,kvRead*,updates*)(bool,error)func(v*Validator)validateRangeQueries(nsstring,rangeQueriesInfo[]*,updates*)(bool,error)func(v*Validator)validateRangeQuery(nsstring,rangeQueryInfo*,updates*)(bool,error)//代码在core/ledger/kvledger/txmgmt/validator/statebasedval/state_based_```func(v*Validator)ValidateAndPrepareBatch(block*,doMVCCValidationbool)(*,error)代码如下:```goupdates:=()//构造批处理//typeTxValidationFlags[]uint8txsFilter:=([_TRANSACTIONS_FILTER])iflen(txsFilter)==0{txsFilter=(len())[_TRANSACTIONS_FILTER]=txsFilter}fortxIndex,envBytes:={(txIndex){//验证交易是否有效continue}env,err:=(envBytes)//Envelopepayload,err:=(env)//Payloadchdr,err:=()//ChannelHeadertxType:=()//HeaderTypeiftxType!=_ENDORSER_TRANSACTION{continue}//验证背书交易,获取读写集txRWSet,txResult,err:=(envBytes,doMVCCValidation,updates)(txIndex,txResult)iftxRWSet!=nil{committingTxHeight:=(,uint64(txIndex))//读写集中写集加入批处理addWriteSetToBatch(txRWSet,committingTxHeight,updates)(txIndex,_VALID)}}[_TRANSACTIONS_FILTER]=txsFilterreturnupdates,nil//代码在core/ledger/kvledger/txmgmt/validator/statebasedval/state_based_```##8、TxMgr接口及实现(交易管理)###、TxMgr接口定义```gotypeTxMgrinterface{NewQueryExecutor()(,error)NewTxSimulator()(,error)ValidateAndPrepare(block*,doMVCCValidationbool)error//返回statedb一致的最高事务的高度GetLastSavepoint()(*,error)ShouldRecover(lastAvailableBlockuint64)(bool,uint64,error)CommitLostBlock(block*)errorCommit()errorRollback()Shutdown()}//代码在core/ledger/kvledger/txmgmt/txmgr/```###、TxMgr接口实现TxMgr接口实现,即LockBasedTxMgr结构体及方法。 LockBasedTxMgr结构体如下:```gotypeLockBasedTxMgrstruct{////Validatorbatch*//批处理currentBlock*////锁}//代码在core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_```涉及方法如下:```go//构造LockBasedTxMgrfuncNewLockBasedTxMgr()*LockBasedTxMgr//调取(),返回statedb一致的最高事务的高度func(txmgr*LockBasedTxMgr)GetLastSavepoint()(*,error)//调取newQueryExecutor(txmgr)func(txmgr*LockBasedTxMgr)NewQueryExecutor()(,error)func(txmgr*LockBasedTxMgr)NewTxSimulator()(,error)//验证Block,并从Block中获取写集加入批处理(txmgr*LockBasedTxMgr)ValidateAndPrepare(block*,doMVCCValidationbool)errorfunc(txmgr*LockBasedTxMgr)Shutdown()//执行,func(txmgr*LockBasedTxMgr)Commit()errorfunc(txmgr*LockBasedTxMgr)Rollback()func(txmgr*LockBasedTxMgr)ShouldRecover(lastAvailableBlockuint64)(bool,uint64,error)func(txmgr*LockBasedTxMgr)CommitLostBlock(block*)error//代码在core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_```###、lockBasedQueryExecutor结构体及方法(实现接口)```gotypelockBasedQueryExecutorstruct{helper*queryHelperidstring}funcnewQueryExecutor(txmgr*LockBasedTxMgr)*lockBasedQueryExecutorfunc(q*lockBasedQueryExecutor)GetState(nsstring,keystring)([]byte,error)func(q*lockBasedQueryExecutor)GetStateMultipleKeys(namespacestring,keys[]string)([][]byte,error)func(q*lockBasedQueryExecutor)GetStateRangeScanIterator(namespacestring,startKeystring,endKeystring)(,error)func(q*lockBasedQueryExecutor)ExecuteQuery(namespace,querystring)(,error)func(q*lockBasedQueryExecutor)Done()//代码在core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_query_```###、queryHelper结构体及方法queryHelper结构体及方法:```gotypequeryHelperstruct{txmgr*LockBasedTxMgr//LockBasedTxMgrrwsetBuilder*//读写集工具itrs[]*resultsItrerrerrordoneInvokedbool//是否调用完成}//statedb中获取versionedValue,并加入rwsetBuilder的中func(h*queryHelper)getState(nsstring,keystring)([]byte,error)//statedb中获取多个versionedValue,并加入rwsetBuilder的中func(h*queryHelper)getStateMultipleKeys(namespacestring,keys[]string)([][]byte,error)//构造resultsItr,并加入(h*queryHelper)getStateRangeScanIterator(namespacestring,startKeystring,endKeystring)(,error)执行查询并构造queryResultsItrfunc(h*queryHelper)executeQuery(namespace,querystring)(,error)//donefunc(h*queryHelper)done()func(h*queryHelper)checkDone()//代码在core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/```resultsItr结构体及方法:```gotyperesultsItrstruct{***}funcnewResultsItr(nsstring,startKeystring,endKeystring,,rwsetBuilder*,enableHashingbool,maxDegreeuint32)(*resultsItr,error)func(itr*resultsItr)Next()(,error)func(itr*resultsItr)updateRangeQueryInfo()func(itr*resultsItr)Close()//代码在core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/```感谢关注兄弟连分享!。

返回顶部

小学教育提供的文章均由网友转载于网络,若本站转载中的文章侵犯了您的权益,请与本站管理员联系.
Copyright (C) 2006-2019 www.26878t.com小学教育_教育_教育名言 All Rights Reserved.