1. Home
  2. Docs
  3. Paralism 智能合约开发手册
  4. 智能合约语言介绍
  5. 开发示例

开发示例

第一步,编写智能合约库

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();

第四步,调试合约过程

  1. Restful方式调试
    调用样例:http://127.0.0.1:8081/EstimateScript
    使用http请求 post方法提交时,将合约过程代码注入到Body元素中即可。
    如果使用postman工具,选择Body raw方式,调用如下图:
  2. hc控制台方式调试
    将合约过程代码保存为文件*.js,用vm run -f 文件名来运行调试,也可在超块链节点软件hyperchain控制台直接使用vm run + 合约代码来调试。

第五步,使用SubmitScriptResult执行合约过程

Restful接口SubmitScriptResult 负责将合约过程编译成字节码执行,并将格式化输出的结果上链存储到子链区块中,该区块中Playload部分存放合约过程编译后的字节码和格式化输出结果。

如果用Postman工具提交合约代码,将提交的代码放到body中采用raw格式即可,如下图:

返回结果如下:

{
  "queuenum": "1",
  "requestid": "3CX5PXt1eYUwc4VQncZK63hSpmML",
  "state": "queueing"
}
Was this article helpful to you? Yes No