第一步,编写智能合约库
class Student2 {
constructor(name,sex, age) {
this.name = name;
this.sex = sex;
this.age = age;
}
toString() {
return 'The Student v2 is ' + this.name + ', and sex is ' + this.sex + ',age is ' + this.age;
}
}
export {Student2}
第二步,使用SubmitRegistrationEx部署合约库到区块链
调用样例:http://127.0.0.1:8081/SubmitRegistrationEx
使用http请求 post方法提交时,将合约代码注入到表单form name=script 的input元素中即可。
调试使用postman 工具时,选择Body/form-data方式,增加2个key值:payload 和 script,其中script 的 value设为合约代码,palyload的value可任意填写,如下图:
SubmitRegistrationEx调用得到返回值如下:
{
"queuenum": "1",
"requestid": "25gK2mxmsFJUQvE3PnRpa7cJVscf",
"state": "queueing"
}
然后使用Restful接口调用GetOnchainState查询合约部署交易的执行状态。
http://127.0.0.1:8081/GetOnchainState?requestid=25gK2mxmsFJUQvE3PnRpa7cJVscf ,GetOnchainState查询直到获得以下返回值:
{
"hyperBlockId": 443,
"chainNumber": 1,
"localBlockId": 1,
"onChainState": "onchained"
}
返回结果指示合约代码的字节码被部署到了超块链三元组地址为[443,1,1]的子链区块里。
第三步,导入调用已部署的合约库
编写合约过程,调用已部署合约模块:
contract.importas(
[443,1,1],
"d1cad57bab030f3e897f322242e8706591f3d1aff0757a555115372859cd762d",
"StudentEx"
);
let st1 = new StudentEx.Student2('Tom', 'male', 18);
let st2 = contract.call([3,2,6], '');
st1.toString() + "\n" + st2.toString();
第四步,调试合约过程
- Restful方式调试
调用样例:http://127.0.0.1:8081/EstimateScript
使用http请求 post方法提交时,将合约过程代码注入到Body元素中即可。
如果使用postman工具,选择Body raw方式,调用如下图: - hc控制台方式调试
将合约过程代码保存为文件*.js,用vm run -f 文件名来运行调试,也可在超块链节点软件hyperchain控制台直接使用vm run + 合约代码来调试。
第五步,使用SubmitScriptResult执行合约过程
Restful接口SubmitScriptResult 负责将合约过程编译成字节码执行,并将格式化输出的结果上链存储到子链区块中,该区块中Playload部分存放合约过程编译后的字节码和格式化输出结果。
如果用Postman工具提交合约代码,将提交的代码放到body中采用raw格式即可,如下图:
返回结果如下:
{
"queuenum": "1",
"requestid": "3CX5PXt1eYUwc4VQncZK63hSpmML",
"state": "queueing"
}