博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
星云计划——智能合约NVM内置功能模块
阅读量:6165 次
发布时间:2019-06-21

本文共 4287 字,大约阅读时间需要 14 分钟。

星云计划——智能合约代码入门

卡酷少

Wechat:13260325501


星云团队已经发布了数个库来帮助大家更容易编写智能合约。这意味着我们不需要从头开始来创建任何一个智能合约,节省了很多精力。但这些库里面的内容我们需要逐个了解。

BigNumber

  • BigNumber 模块构建于 之上,用来处理任意精度的十进制和非十进制运算。合约可以直接使用BigNumber 来处理交易和其他转账操作中涉及到的数值计算。
var value = new BigNumber(0);//创建bigNumber对象value.plus(1);//调用方法…

Storage

  • storage 模块用来支持 Nebulas 上的数据持久化存储。功能上类似于传统的键值存储系统。存储不是免费的,需要消耗一定的 GAS。LocalContractStorage 是可以直接在合约中使用的内置storage对象,可存储的数据类型包括数字、字符串和 JavaScript 对象(需要序列化为字符串,JSON转译)。链上数据只能被存储它们的合约访问和修改,也就是自己的合约地址只能调用和修改自己合约里的内容。

基础

  • LocalContractStorage 支持三个操作:
  1. set,实现存储功能,类似于put
  2. get,实现读取功能
  3. del,实现删除数据功能
“use strict”;var BankVaultContract = function () {  // 无内容};BankVaultContract.prototype = {//prototype里有三个方法:get,set,delete  init: function() {      // 无内容  },  set: function(name, value) { //set,存储数据  // 以下“增查删”操作都以name=”robin”, value=10000为例  //LocalContractStorage一个封装包,“.set”是带哦用set方法      LocalContractStorage.set(“name”, name);      // put 操作相当于 set      LocalContractStorage.put(“value”, value);  },  get: function() {//get,获取数据      var name = LocalContractStorage.get(“name”);      console.log(name);  // 打印 ‘robin’      var value = LocalContractStorage.get(“value”);     console.log(value); // 打印 ‘10000’  },  del: function() {//del,删除      var result = LocalContractStorage.del(“name”);      console.log(result); // 打印 ‘robin’      // delete 操作相当于 del      result = LocalContractStorage.delete(“value”);      console.log(result); // 打印 ‘10000’      // 删除操作之后数据就不能被读取  }};module.exports = BankVaultContract;

Blockchain

  • Blockchain模块用来获取当前正在执行的合约内的交易和区块信息。另外,还提供了几个有用的方法,例如从合约账户中转出 NAS,进行地址格式验证等。
  • Blockchain 有两个属性:
  1. block 执行合约的当前区块

它具有下列属性:

— timestamp 区块时间戳

— height 区块高度

2.transaction 执行合约的当前交易

它具有下列属性:

— hash 交易哈希值

— from 交易源地址

— to 交易目的地址,对于合约调用就是合约地址

— value 交易数值,字符串, 合约内用BigNumber存储计算

— nonce 交易的 nonce 值

— timestamp 交易时间戳

— gasPrice 交易的 gasPrice,字符串,合约内用 BigNumber 存储计算

— gasLimit 交易的 gasLimit,字符串,合约内用 BigNumber 存储计算

  • Blockchain 还提供了两个方法:
  1. transfer(address, value) 将 NAS 从合约转出到address对应的账户。

参数 address:接收 NAS 的 Nebulas 账户地址

参数 value:转移数值,一个 BigNumber 对象

返回:0 – 转移成功,1 – 转移失败

  1. verifyAddress(address) 验证参数 address 是否为一个有效的 Nebulas 地址。

返回:1 – 地址有效,0 – 地址无效

‘use strict’;var BankVaultContract = function () {};//声明类BankVaultContract.prototype = {//类的方法   init: function () {       console.log(‘init: Blockchain.block.height = ‘ + Blockchain.block.height);       console.log(‘init: Blockchain.transaction.from = ‘ + Blockchain.transaction.from);   },   //这里给出两个方法:transfer和 verifyaddress   transfer: function (address, value) {       var result = Blockchain.transfer(address, value);       console.log(“transfer result:”, result);   },   verifyAddress: function (address) {    var result = Blockchain.verifyAddress(address);       console.log(“verifyAddress result:”, result);   }};module.exports = BankVaultContract;

事件(Event)

  • Event 模块用来记录在合约执行过程中产生的事件。被记录的事件存储在链上的事件Trie结构中,可以通过事件查询方法 获取所有事件。通过Event模块输出的事件其最终Topic由用户自定义topic加固定前缀 chain.contract. 两部分构成 。
  • 使用方法如下:
//Event.Trigger(topic, obj);//topic:用户定义的topic//obj:JSON 对象‘use strict’;var BankVaultContract = function () {};//声明类BankVaultContract.prototype = {   init: function () {},//这里只有一个testevent方法//testevent里又一个event.Trigger()//event.Trigger里有("topic",{ data{} })testEvent: function() {       // 实际被存储的topic是“chain.contract.topic”       Event.Trigger(“topic“, {   Data: {value: “Event test.”   }       });   }};module.exports = BankVaultContract;

控制台(Console)

  • console 模块提供了一个简单的调试控制台,类似于网页浏览器提供的 JavaScript 控制台。console 将把所有接收到的 args 以指定级别打印到 Nebulas Logger 上。
  1. console.log([参数) — — info 级别
  2. console.debug([参数) — — debug 级别
  3. console.warn([参数) — — warn 级别
  4. console.error(参数) — — error 级别
  5. console.info(参数) — — console.log() 别名

如何调用合约

  • 以上就是与智能合约相关的内置功能模块介绍。接下来,我们将简单说明下如何调用合约。
  1. 首先通过启动本地节点加入 Nebulas 的主网或测试网,启动本地节点。
  2. 节点启动后,调用任何合约函数前首先使用 [unlockAccount()]

(` 方法解锁账户。

  1. 然后你就可以使用 函数来执行智能合约调用了。
// Request//终端命令行curl -i -H ‘Accept: application/json’ -X POST http://localhost:8685/v1/admin/transaction -H ‘Content-Type: application/json’ -d ‘{“from”:”n1NZttPdrJCwHgFN3V6YnSDaD5g8UbVppoC”,”to”:”n1qsgj2C5zmYzS9TSkPTnp15bhCCocRPwno”, “value”:”100″,”nonce”:8,”gasPrice”:”1000000″,”gasLimit”:”2000000″,”contract”:{“function”:”testEvent”,”args”:”[]”}}’// Result//运行结果{“result”:{“txhash”:”b55358c2e12c1d48d4e6beaee7002a59138294fb2896ea8059ff5277553af59f”,”contract_address”:””}}

转载地址:http://ohuba.baihongyu.com/

你可能感兴趣的文章
拓扑排序介绍
查看>>
eclipse打开工作空间(workspace)没有任务反应
查看>>
使用Sybmol模块来构建神经网络
查看>>
字符串去分割符号
查看>>
WPF中,多key值绑定问题,一个key绑定一个界面上的对象
查看>>
UML类图简明教程
查看>>
java反编译工具(Java Decompiler)
查看>>
Android开发之自定义对话框
查看>>
微信Access Token 缓存方法
查看>>
Eclipsed的SVN插件不能识别之前工作空间的项目
查看>>
Linux 查看iptables状态-重启
查看>>
amazeui学习笔记一(开始使用2)--布局示例layouts
查看>>
c#中lock的使用(用于预约超出限额的流程)
查看>>
ODI基于源表时间戳字段获取增量数据
查看>>
并发容器之CopyOnWriteArrayList(转载)
查看>>
什么是AAC音频格式 AAC-LC 和 AAC-HE的区别是什么
查看>>
原创:goldengate从11.2升级到12.1.2
查看>>
Quartz
查看>>
正则表达式的语法规则
查看>>
C#一个关于委托和事件通俗易懂的例子
查看>>