资讯专栏INFORMATION COLUMN

星云计划——智能合约NVM内置功能模块

李增田 / 3013人阅读

摘要:星云计划智能合约代码入门卡酷少星云团队已经发布了数个库来帮助大家更容易编写智能合约。参数级别参数级别参数级别参数级别参数别名如何调用合约以上就是与智能合约相关的内置功能模块介绍。

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

Wechat:13260325501


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

BigNumber

BigNumber 模块构建于 bignumber.js之上,用来处理任意精度的十进制和非十进制运算。合约可以直接使用BigNumber 来处理交易和其他转账操作中涉及到的数值计算。

var value = new BigNumber(0);//创建bigNumber对象
value.plus(1);//调用方法
…
Storage

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

基础

LocalContractStorage 支持三个操作:

set,实现存储功能,类似于put

get,实现读取功能

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 有两个属性:

block 执行合约的当前区块

它具有下列属性:

— timestamp 区块时间戳

— height 区块高度

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

它具有下列属性:

— hash 交易哈希值

— from 交易源地址

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

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

— nonce 交易的 nonce 值

— timestamp 交易时间戳

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

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

Blockchain 还提供了两个方法:

transfer(address, value) 将 NAS 从合约转出到address对应的账户。

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

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

返回:0 – 转移成功,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结构中,可以通过事件查询方法 rpc.getEventsByHash 获取所有事件。通过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 上。

console.log([参数) — — info 级别

console.debug([参数) — — debug 级别

console.warn([参数) — — warn 级别

console.error(参数) — — error 级别

console.info(参数) — — console.log() 别名

如何调用合约

以上就是与智能合约相关的内置功能模块介绍。接下来,我们将简单说明下如何调用合约。

首先通过启动本地节点加入 Nebulas 的主网或测试网,启动本地节点。

节点启动后,调用任何合约函数前首先使用 [unlockAccount()]

(https://github.com/nebulasio/...` 方法解锁账户。

然后你就可以使用 sendTransaction() 函数来执行智能合约调用了。

// 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”:””}
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24061.html

相关文章

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

    摘要:星云计划智能合约代码入门卡酷少星云链上的智能合约类似于面向对象编程语言中的类,合约可能包含状态变量持久化固定化的变量以及可以修改这些变量的函数。星云链使用作为合约的执行引擎。是星云支持的第一种智能合约语言,还可以用写,但本文主要介绍。 星云计划——智能合约代码入门 卡酷少Wechat:13260325501 星云链上的智能合约类似于面向对象编程语言中的类,合约可能包含状态变量(持久...

    csRyan 评论0 收藏0
  • 基于星云链开发智能合约和DApp

    摘要:刚好又过了一段时间,看到了星云发布的星云激励计划第一季活动,就是鼓励开发者们基于星云链主网开发去中心化应用的活动,里面也包含了不小的奖励。 最近一段时间,除了上班加班之外,基本上都在忙着开发 DApp,也就是所谓的去中心化应用(Decentralized Applications)啦,为什么突然就搞起这个了呢?事情是这样的…… 就在前不久,很偶然地了解到了 Loom Network 这...

    Lyux 评论0 收藏0
  • 链游成公链新宠,风口之下究竟哪家称王?

    摘要:截至目前,布洛克城用户数量已经突破万,吸引了众多区块链应用入驻,包括预言家币得利德,以及万利马链与飞车等游戏应用。 以谜恋猫为起点,区块链游戏这趟列车已经风驰电掣地跑了满一年。回顾去年同期,整个数字货币市场都陷入了非理性的狂热中,天价猫不断刷新着记录,以太坊网络也一度拥堵到被业内外大肆嘲笑,看,它竟然被一只猫给搞瘫痪了。时隔一年,尽管养猫游戏热度已降,但是新玩法的兴起还是吸引了越来越多...

    chenatu 评论0 收藏0
  • 聚焦区块链应用,SegmentFault 黑客马拉松引爆珠三角

    摘要:月日,思否在广州未来社举办黑客马拉松,聚焦区块链应用开发。未来,将继续传递极客文化,在海内外和一些合作伙伴举办黑客马拉松,。希望通过举办的黑客马拉松发现一些优质项目,未来展开更深入的合作。 6月23日,SegmentFault 思否在广州未来社举办黑客马拉松,聚焦区块链应用 DApp 开发。活动吸引了来自珠三角的极客参与,现场也来自硅谷和多伦多、上海等地区的团队参与。本次活动嘉宾有 C...

    loonggg 评论0 收藏0
  • 区块链游戏 Dapp 获得思否黑客马拉松北京站冠军

    摘要:上周末,来自硅谷团队的游戏作品获得思否区块链黑客马拉松北京站冠军。本次黑客马拉松有来自基金会科学家杨耀东合伙人刘海核心开发者姜家志星云链实验室负责人刘杜然等多位嘉宾出席。 上周末,来自硅谷团队的游戏作品Crypto Bird - An Implement of NabBoard获得 SegmentFault 思否区块链黑客马拉松北京站冠军。本次黑客马拉松有来自 QuarkChain 基...

    GitChat 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<