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 7
    • Issues 7
    • 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
  • #1487

Closed
Open
Opened Oct 16, 2025 by Jimmy Shine@jimmy_shine

在长安链部署evm智能合约时候,是否有同步将abi保存在链上的方法及范例

在 2.4.0的版本中,在传递参数时候,需要进行编码,要用到abi的文件,是否具有相关的方法,可以将abi部署至链上,从链上可以查找abi文件进行编码。 本例中 abi 为 testdata_storage-evm-demo_storage.abi go 代码参考如下:

// evm合约需要进行编码

	storageABIPath := "./config/testdata_storage-evm-demo_storage.abi"
	abiJson, err := os.ReadFile(storageABIPath)
	if err != nil {
		log.Fatalln(err)
	}

	myAbi, err := abi.JSON(strings.NewReader(string(abiJson)))
	if err != nil {
		log.Fatalln(err)
	}

	// set
	method := req.Method
	if method == "set" {
		dataByte, err := myAbi.Pack(method, 5000)
		if err != nil {
			log.Fatalln(err)
		}

		dataString := hex.EncodeToString(dataByte)

		kvs := []*common.KeyValuePair{
			{
				Key:   "data",
				Value: []byte(dataString),
			},
		}
		txResponse, err := sdk.ChainmakerClient.InvokeContract(req.ContractName, req.Method, req.TxId, kvs, req.Timeout, req.WithSyncResult)
		return txResponse, err
	}

	// get
	dataByte, err := myAbi.Pack(method)
	if err != nil {
		log.Fatalln(err)
	}

	dataString := hex.EncodeToString(dataByte)

	kvs := []*common.KeyValuePair{
		{
			Key:   "data",
			Value: []byte(dataString),
		},
	}

	txResponse, err := sdk.ChainmakerClient.InvokeContract(req.ContractName, req.Method, req.TxId, kvs, req.Timeout, req.WithSyncResult)
	val, err := myAbi.Unpack(req.Method, txResponse.ContractResult.Result)
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Printf("val: %d\n", val)
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#1487

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