Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Sign in
issue
issue
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 23
    • Issues 23
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar

新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!

  • chainmaker
  • issueissue
  • Issues
  • #1186

Closed
Open
Opened Sep 12, 2024 by dengji wang@rookie3 of 19 tasks completed3/19 tasks

一笔交易被反复打回交易池,直到超出交易池限制时间被移除,父合约、子合约进程没有正常被kill

【问题分类】

  • bug
  • P2P网络相关(包含libp2p,liquid)
  • 链账户身份与权限相关(证书问题、public、多签投票问题)
  • 核心交易引擎相关(交易池、DAG)
  • 共识相关
  • 智能合约相关
  • 存储相关
  • SDK相关
  • 长安链CMC工具
  • 长安链管理台
  • 长安链浏览器
  • 长安链合约IDE
  • 长安链web签名插件
  • 跨链相关
  • 轻节点相关
  • 隐私计算相关
  • 密码学相关
  • 环境依赖
  • 其他补充:Chainmaker版本v2.3.2,启动单机四节点使用docker vm引擎的链

【问题描述】

为什么交易始终被打回,而不是交易执行超时

触发条件 智能合约中使用跨合约调用接口CallContract()进行大量跨合约调用

func (f *FuContract) save() protogo.Response {
	params := sdk.Instance.GetArgs()

	// 获取参数
	contractName := string(params["contractName"])
	method := string(params["method"])
	argsmapBytes := params["argsmap"]

	argsmapstring := make(map[string]string)
	err := json.Unmarshal(argsmapBytes, &argsmapstring)
	if err != nil {
		return sdk.Error(fmt.Sprintf("marshal argsmapstring failed, err: %s,argsmapstring: %v", err, argsmapstring))
	}

	argsmapByte := make(map[string][]byte)
	for k, v := range argsmapstring {
		argsmapByte[k] = []byte(v)
	}

	var wg sync.WaitGroup
	for i := 0; i < 10000; i++ {
		// start := make(chan struct{}) // 使用无缓冲通道同步启动
		wg.Add(1)
		go func() {
			defer wg.Done()
			//跨合约调用
			var response protogo.Response
			response = sdk.Instance.CallContract(contractName, method, argsmapByte)
			if response.Message != "Success" {
				sdk.Error(fmt.Sprintf("fail to CallContract zicontract, argsmapByte:%v", argsmapByte))
			}
		}()
		// 同时启动所有协程
		// close(start)

		// 等待所有协程完成
		// time.Sleep(1 * time.Second)
	}
	wg.Wait()

	// 返回结果
	return sdk.Success([]byte("invoke successfully"))

}

【相关日志文件】

image image image

【系统信息】(请填写系统信息,方便定位问题)

  • chainmaker-go version * : [v2.3.2]
  • OS & version * : [CentOs 7]
  • docker镜像 version: [chainmakerofficial/chainmaker-vm-engine:v2.3.2]
Edited Sep 12, 2024 by dengji wang
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking
None
Due date
None
Reference: chainmaker/issue#1186

Copyright © 2021 ChainMaker Org. All Rights Reserved. 长安链 版权所有。