写点什么

长安链源码分析之交易过程分析(4)

作者:
  • 2022-10-25
    湖南
  • 本文字数:894 字

    阅读完需:约 3 分钟

本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:https://github.com/weopenprojects/WeOpen-Star


交易合约调用分支,会进入如下代码,

代码框架逻辑是很简单的,其中最核心的是:err = s.chainMakerServer.AddTx(tx.Payload.ChainId, tx, source)

其他可以都看成次要的代码。

func (s *ApiService) dealTransact(tx *commonPb.Transaction, source protocol.TxSource) *commonPb.TxResponse {	var (		err     error		errMsg  string		errCode commonErr.ErrCode		resp    = &commonPb.TxResponse{TxId: tx.Payload.TxId}	)	//在一条链上添加一笔交易,source是 rpc	err = s.chainMakerServer.AddTx(tx.Payload.ChainId, tx, source)
//增加一次调用计数 s.incInvokeCounter(tx.Payload.ChainId, err) //更新交易大小 s.updateTxSizeHistogram(tx, err)
if err != nil { errMsg = fmt.Sprintf("Add tx failed, %s, chainId:%s, txId:%s", err.Error(), tx.Payload.ChainId, tx.Payload.TxId) s.log.Warn(errMsg)
resp.Code = commonPb.TxStatusCode_INTERNAL_ERROR resp.Message = errMsg resp.TxId = tx.Payload.TxId return resp }
s.log.Debugf("Add tx success, chainId:%s, txId:%s", tx.Payload.ChainId, tx.Payload.TxId)
errCode = commonErr.ERR_CODE_OK resp.Code = commonPb.TxStatusCode_SUCCESS resp.Message = errCode.String() resp.TxId = tx.Payload.TxId return resp}
复制代码

跟进去看看,本质是获取对应的链,然后调用链的交易池模块,加入一条交易数据

func (server *ChainMakerServer) AddTx(chainId string, tx *common.Transaction, source protocol.TxSource) error {	//从服务器链中根据链id获取链	if blockchain, ok := server.blockchains.Load(chainId); ok {		//调用区块链的交易池模块添加交易		return blockchain.(*Blockchain).txPool.AddTx(tx, source)	}	return fmt.Errorf(chainIdNotFoundErrorTemplate, chainId)}
复制代码

交易池实现有三种,我们看看配置文档。

分别是 single,normal,batch

默认是 single,这里配置的是 normal。

后面我都分析下


用户头像

关注

还未添加个人签名 2018-05-04 加入

还未添加个人简介

评论

发布
暂无评论
长安链源码分析之交易过程分析(4)_李_InfoQ写作社区