native模式下go语言编写的智能合约部署
还是以counter合约文件为例
cd contractsdk/go/example/counter go build counter.go
部署合约文件
./xchain-cli native deploy --account XC1111111111111111@xuper -a '{"creator":"XC1111111111111111@xuper"}' --fee 15587517 --runtime go xuperchain/data/gocontract/counter --cname golangcounter
调用合约文件
- 命令行调用
./xchain-cli native invoke --method Increase -a '{"key":"test"}' golangcounter --fee 10
- Javasdk调用
@Test public void invokeContractG0() throws Exception { Map<String, byte[]> args = new HashMap<>(); args.put("key", "icexin".getBytes()); Transaction tx = client.invokeContract(account, "native", "golangcounter", "increase", args); System.out.println("invoke txid: " + tx.getTxid()); System.out.println("response: " + tx.getContractResponse().getBodyStr()); System.out.println("gas: " + tx.getGasUsed()); }
查询合约文件
通过Javasdk查询
@Test public void queryContractGo() throws Exception { Map<String, byte[]> args = new HashMap<>(); args.put("key", "icexin".getBytes()); Transaction tx = client.queryContract(account, "native", "golangcounter", "get", args); System.out.println("response: " + tx.getContractResponse().getBodyStr()); System.out.println("gas: " + tx.getGasUsed()); }
分别部署完了java和go语言写的counter合约之后 咱们其实就知道了 流程都是一模一样的
可能出现的异常信息
- 如果报 contract type native not found 说明没有开启native合约配置
- 如果报 context deadline exceeded 说明 你可能用的是旧版本的合约文件 所以需要重新编译下新版本的合约源码生成合约文件
上面简单描述了截止目前7月15号基于最新版本部署的过程以及通过native合约部署的方式分别部署和使用go和java2种语言编写的智能合约的过程,下面结合公司的业务来描述下存证智能合约的实现逻辑
存证智能合约目前版本还没有java语言编写的合约模版,大概2周之后才会有
下面咱分析下go语言版本的存证合约的逻辑
先简单说下数据结构
user对象的数据结构 { "Owner":"xiaoming" , # 这个表示用户名 "UserFiles":{ # 这个是一个map集合 "filehash":{ # map集合的key是文件hash "Timestamp":"" # 时间戳 "Hashval":"" # []byte(filehash) 其实也是hash值 } } }