Skip to content
linj edited this page Nov 23, 2022 · 1 revision

EVM 接口

EVM的接口主要是用来完成创建交易(包括部署合约交易和调用合约交易),估算调用交易需要支付的gas(gas会在执行时,通过支付交易费1:1进行兑换;以及相关查询。

[TOC]

1 估算部署交易或者调用交易需要的gas

请求报文:

{
    "jsonrpc":"2.0",
    "id": int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer":"evm",
			"funcName":"EstimateGas",
			"payload":{
				"tx": "string",
				"from": "string"
			}
		}
	]
}

参数说明:

Chain33.Query结构按通用要求填写: execer,执行器名称,这里固定为evm,如果是在平行链上则需要加上前缀,比如user.p.game.evm funcName,操作名称,这里固定为 EstimateGas payload携带的内容格式如下:

参数 类型 是否必填 说明
tx string 部署合约交易或者调用合约交易的序列化后的字符串
from string 合约交易调用者地址

响应报文:

{
    "id":int32,
    "result": {
		"gas":"string",
	},
    "error":null
}

参数说明:

参数 类型 说明
gas string 估算需要的gas数值

2 创建部署合约交易 CreateDeployTx

请求报文:

{
    "jsonrpc":"2.0",
    "id": int32,
    "method":"evm.CreateDeployTx",
    "params":[
		{
			"code":"string",
			"abi":"string",
			"fee":int64,
			"note": "string",
			"alias": "string",
			"parameter": "string",
			"expire":"string",
			"paraName":"string",
			"amount":int64
		}
	]
}

参数说明:

参数 类型 是否必填 说明
parameter string 部署合约的参数 "constructor(zbc, zbc, 3300, '${evm_creatorAddr}')" 原型为 constructor (string memory name_, string memory symbol_,uint256 supply, address owner),这里表示部署一个名称和symbol都为 zbc,总金额3300*le8,拥有者为 evm_creatorAddr 的ERC20合约
abi string 部署合约的 abi 内容
code string 需要部署合约的 bin 内容
fee int64 精确的手续费可以通过EstimateGas这个jrpc接口进行估算,同时该交易费需要满足根据部署交易体积大小计算出来的交易费要求
paraName string 如果是平行链参数 paraName 的值为 user.p.para. 如果是主链则为空
alias string 合约别名

响应报文:

{
    "id":int32,
    "result":{
        "data":"string",
    },
    "error":null
}

参数说明:

参数 类型 说明
data string 创建的交易数据

3 创建调用合约交易 CreateCallTx

请求报文:

{
    "jsonrpc":"2.0",
    "id": int32,
    "method":"evm.CreateCallTx",
    "params":[
		{
			"abi":"string",
			"fee":int64,
			"note": "string",
			"parameter": "string",
			"expire":"string",
			"paraName":"string",
			"contractAddr":"string",
			"amount":int64
		}
	]
}

参数说明:

参数 类型 是否必填 说明
parameter string 操作合约的参数,例如转账交易 "transfer('${evm_transferAddr}', 20)"
abi string 部署合约的 abi 内容
contractAddr string 合约地址
fee int64 精确的手续费可以通过EstimateGas这个jrpc接口进行估算,同时该交易费需要满足根据部署交易体积大小计算出来的交易费要求,一般调用交易的交易费直接设置为通过交易体积大小计算出来的交易费即可
paraName string 如果是平行链参数 paraName 的值为 user.p.para. 如果是主链则为空

响应报文:

{
    "id":int32,
    "result":{
        "data":"string",
    },
    "error":null
}

参数说明:

参数 类型 说明
data string 创建的交易数据

4 获取合约地址 CalcNewContractAddr

请求报文:

{
    "jsonrpc":"2.0",
    "id": int32,
    "method":"evm.CalcNewContractAddr",
    "params":[
		{
			"caller":"string",
			"txhash":"string"
		}
	]
}

参数说明:

参数 类型 是否必填 说明
caller string 部署合约的地址
txhash string 创建合约的交易哈希,去掉前面的 0x

响应报文:

{
    "id":int32,
    "result":"string",
    "error":null
}

参数说明:

参数 类型 说明
result string 合约地址

5 查询合约地址是否存在 CheckAddrExists

请求报文:

{
    "jsonrpc":"2.0",
    "id": int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer":"evm",
			"funcName":"CheckAddrExists",
			"payload":{
				"addr": "string"
			}
		}
	]
}

参数说明:

Chain33.Query结构按通用要求填写: execer,执行器名称,这里固定为evm,如果是在平行链上则需要加上前缀,比如user.p.game.evm funcName,操作名称,这里固定为 CheckAddrExists payload携带的内容格式如下:

参数 类型 是否必填 说明
addr string 被查询的合约地址

响应报文:

{
    "id":int32,
    "result": {
		"contract":bool,
		"contractAddr":"string",
		"contractName":"string",
		"aliasName":"string"
	},
    "error":null
}

参数说明:

参数 类型 说明
contract bool 合约地址是否存在, 1 为存在, 0 为不存在
contractAddr string 合约地址
contractName string 合约名称
aliasName string 合约别名

6 查询合约信息 GetPackData Query GetUnpackData

6.1 GetPackData

请求报文:

{
    "jsonrpc":"2.0",
    "id": int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer":"evm",
			"funcName":"GetPackData",
			"payload":{
				"abi":"string",
				"parameter":"string"
			}
		}
	]
}

参数说明:

Chain33.Query结构按通用要求填写: execer,执行器名称,这里固定为evm,如果是在平行链上则需要加上前缀,比如user.p.game.evm funcName,操作名称,这里固定为 GetPackData payload携带的内容格式如下:

参数 类型 是否必填 说明
abi string 合约abi
parameter string 查询的参数信息

响应报文:

{
    "id":int32,
    "result": {
		"packData":"string",
	},
    "error":null
}

参数说明:

参数 类型 说明
packData string 需要查询的信息 pack 后的数据

6.2 Query

请求报文:

{
    "jsonrpc":"2.0",
    "id": int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer":"evm",
			"funcName":"Query",
			"payload":{
				"address":"string",
				"input":"string",
				"caller":"string"
			}
		}
	]
}

参数说明:

Chain33.Query结构按通用要求填写: execer,执行器名称,这里固定为evm,如果是在平行链上则需要加上前缀,比如user.p.game.evm funcName,操作名称,这里固定为 Query payload携带的内容格式如下:

参数 类型 是否必填 说明
address string 合约地址
input string 需要查询的信息 pack 后的数据
caller string 合约部署者地址

响应报文:

{
    "id":int32,
    "result": {
		"address":"string",
		"input":"string",
		"caller":"string",
		"rawData":"string",
		"jsonData":"string",
	},
    "error":null
}

参数说明:

参数 类型 说明
address string 合约地址
input string 需要查询的信息 pack 后的数据
caller string 合约部署者地址
rawData string 查询到的结果
jsonData string json数据

6.3 GetUnpackData

请求报文:

{
    "jsonrpc":"2.0",
    "id": int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer":"evm",
			"funcName":"GetUnpackData",
			"payload":{
				"abi":"string",
				"parameter":"string",
				"data":"string"
			}
		}
	]
}

参数说明:

Chain33.Query结构按通用要求填写: execer,执行器名称,这里固定为evm,如果是在平行链上则需要加上前缀,比如user.p.game.evm funcName,操作名称,这里固定为 GetUnpackData payload携带的内容格式如下:

参数 类型 是否必填 说明
abi string 合约abi
methodName string 方法名称
data string 需要 Unpack 的数据

响应报文:

{
    "id":int32,
    "result": {
		"unpackData":"[]string"
	},
    "error":null
}

参数说明:

参数 类型 说明
unpackData []string Unpack 的数据
Clone this wiki locally