在长安链部署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