#编写一个智能合约
星云链智能合约可以使用JavaScript、TypeScript来编写。
-
在JavaScript、TypeScript基础上,编写智能合约有三个简要规范:
- 1、智能合约代码必须是一个Prototype的对象;
- 2、智能合约代码必须有一个init()的方法,这个方法只会在部署的时候被执行一次;
- 3、智能合约里面的私有方法是以_开头的方法,私有方法不能被外部直接调用;
-
根据上面的规范写一个简单的智能合约
'use strict';
//定义一个合约
var TestProtocal = function () {
};
TestProtocal.prototype = {
//合约初始化方法
init:function () {
return "hello world";
},
//无参数的合约方法
printTest:function () {
return "调用到printTest";
},
//一个参数的合约方法
argTest:function (arg) {
return arg;
},
//多个参数合约方法
argTest2:function (arg1, arg2) {
return "arg1:"+arg1+"arg2:"+arg2;
}
};
module.exports = TestProtocal;
这只是一个简单的合约,只是为了演示合约上传,调用,了解更多请移步智能合约存储区
-
部署这个合约
-
1、 打开自己的钱包->合约->部署
-
- 2、 将上面的合约复制到合约代码里面
- 3、编程语言js
- 4、数空就好了
- 5、选择自己的钱包
- 输入密码,解锁,测试
1、测试结果 {“result”:”"hello world"”,”execute_err”:””,”estimate_gas”:”20672”} 2、看到 hello world 说明部署成功,”hello world”是在
init()
方法中输出,这也证明init()
方法是在合约部署时执行一次
- 提交合约
合约地址:n1mKgkmaMgCXf6tCKtHd1oUUSM5LzfWVhgk 复制下来,下面调用合约要用到
执行合约
先执行一个简单的无参数的printTest()
- 函数:要调用的函数名 printTest
- 参数:printTest没有参数,不填就好
- 目的地址:刚才部署合约返回的地址 n1mKgkmaMgCXf6tCKtHd1oUUSM5LzfWVhgk
- 选择钱包,解锁
- 测试
测试结果即 printTest() 返回的字符串
- 提交 可以获取到一个交易hash值,用于查看交易详情
调用传参数的方法argTest:function (arg)
合约方法参数,无参数为空字符串,有参数时为JSON数组
//一个参数的合约方法
argTest:function (arg) {
return arg;
},
argTest需要传参,合约要求参数要么为空串(无参数),要么为一个JSON数组,那这里显然需要传一个数组,直接上图了
传一个字符串“2”给argTest,结果返回“2”
多参数跟这个差不多,参数用“,”隔开,JSON串嘛 举个例子:[“下班”,”回家”]
#参考资料