PlatONE是由万向区块链和矩阵元共同打造的以隐私计算为特色的新一代联盟区块链平台,支持企业级应用,已在2019年9月正式开源并在实际产品中投入使用。目前,PlatONE的单链TPS已超过5万,已获得国家工业及信息化部认可并通过了中国电子技术标准化研究院的功能认证和测试认证。
我们将通过一系列科普文章,带领大家走进PlatONE,从入门到精通。上周我们已经介绍过通过链交互工具platonecli使用合约命名系统,今天我们一起来了解如何通过platonecil进行合约部署、调用、查询等相关操作。
合约调用 contract execute
描述: 调用并执行合约中的方法。支持wasm虚拟机合约和evm虚拟机合约方法的调用。仍然可以通过该命令实现系统合约的调用
参数:
-
必选参数:
<contract>: 合约账户地址或合约cns注册名称
<function>: 被执行合约的具体方法,
--abi <file>: 合约abi文件路径。
-
可选参数:
--param value: 合约方法的入参,当有多个入参时,一个--param对应一个参数。格式:--param <value1> --param <value2>
--vm value: 选择进行执行的合约(目前支持evm合约,wasm合约,默认为wasm合约)
操作:
# 通过合约地址调用合约
## wasm合约(默认)
./platonecli contract execute "0x2ee8d0545ebd20f9a992ff54cb0f21a153539206" "setName" --param wxbc --abi "../../../cmd/platonecli/test/test_case/wasm/contracta.cpp.abi.json" --keyfile ../conf/keyfile.json
## evm合约
./platonecli contract execute ... ... --param --vm evm --keyfile ../conf/keyfile.json
# 通过合约名称调用合约(cns服务)
./platonecli contract execute "test" "setName" --param wxbc --abi "../../../cmd/platonecli/test/test_case/wasm/contracta.cpp.abi.json" --keyfile ../conf/keyfile.json
输出结果:
# 同步查询
result:Operation Succeeded
合约方法查询 contract methods
描述: 根据合约的cns注册名或者地址查询合约方法。
参数:
-
必选参数:
--abi <path>: 合约abi文件路径
操作:
./platonecli contract methods --abi "../../../cmd/platonecli/test/test_case/wasm/contracta.cpp.abi.json"
输出结果:
# 查询结果
-------------------contract methods list------------------------
function: atransfer(from string,to string,asset int32)
function: atransfer1(from string,to string,asset int32) int32
function: atransfer2(from string,to string,asset int32) string
function: adcall(from string,to string,asset int32)
function: adcallInt64(from string,to string,asset int32) int32
function: adcallString(from string,to string,asset int32 string
合约部署 contract deploy
描述: 合约部署者将编写好的合约部署到链上。支持wasm虚拟机合约和evm虚拟机合约部署。
参数:
-
必选参数:
<codeFile>: 合约编译后得到的二进制代码文件路径
-
可选参数:
--abi <file>: 合约abi文件路径,部署wasm合约必须提供,部署evm合约不需要提供
--vm value: 选择进行部署的合约(目前支持evm合约,wasm合约,默认为wasm合约)
操作:
## wasm合约
./platonecli contract deploy "../../../cmd/platonecli/test/test_case/wasm/contracta.wasm" --abi "../../../cmd/platonecli/test/test_case/wasm/contracta.cpp.abi.json" --keyfile ../conf/keyfile.json
## evm合约
./platonecli contract deploy ../../../cmd/platonecli/test/test_case/sol/storage_byzantium_065.bin --abi ../../../cmd/platonecli/test/test_case/sol/storage_byzantium_065.abi --keyfile ../conf/keyfile.json -vm evm
输出结果:
-
成功
{
"status": "Operation Succeeded",
"contractAddress": "0x388d05bad3aab0fdd4a5256d4732c2129037cf19",
"blockNumber": 168,
"GasUsed": 1451477,
"From": "0x8d4d2ed9ca6c6279bab46be1624cf7adbab89e18",
"To": "",
"TxHash": ""
}
-
可能失败的原因,具体错误信息请参照代码
-
rlp编码失败
-
Http发送失败
-
无返回结果
-
发送出错
-
发送成功,状态码不为200
-
-
Rpc调用失败
-
RPC JSON消息解析失败
-
RPC调用失败:<失败信息>
-
-
交易回执查询失败
-
查询超时
-
交易执行失败,状态码为0x0
-
-
回执查询 contract receipt
描述: 根据交易的哈希值查询交易回执。
参数:
-
必选参数:
<tx hash>: 交易的哈希值
操作:
./platonecli contract receipt 0x86d35fdd3bd67969ba71acba50076551ba8de31230b3bbfa8a536177c1610c23
输出结果:
{
"blockHash": "0x308cd14101c4687b8966433f155e7272b8dbe6baa761c9b2d9e2aee225f39bad",
"blockNumber": "0xa8",
"contractAddress": "0x388d05bad3aab0fdd4a5256d4732c2129037cf19",
"cumulativeGasUsed": "0x1625d5",
"from": "0x8d4d2ed9ca6c6279bab46be1624cf7adbab89e18",
"gasUsed": "0x1625d5",
"root": "",
"to": "",
"transactionHash": "0x86d35fdd3bd67969ba71acba50076551ba8de31230b3bbfa8a536177c1610c23",
"transactionIndex": "0x0",
"logs": [],
"status": "0x1"
}