手把手教你星云DApp开发(第一部分)

作者/Yogi Xun

译者/BUSTER 许(社区志愿者)

编辑整理/星云团队

星云团队对参与翻译的社区成员表示感谢,并邀请更多人加入星云技术博客的翻译工作,有意者请在公众号后台留言。

本文将循序渐进地为星云爱好者们介绍如何从零开始在星云链上开发自己的DApp。如果你还没有在自己的电脑上安装好星云链,可以参考这里:

https://github.com/nebulasio/wiki/tree/master/tutorials

如果有疑问,可以看下FAQ:

https://github.com/nebulasio/wiki/blob/master/FAQ.md

或直接用邮件和我们联系:[email protected]

智能合约入门

星云链上的智能合约类似于面向对象编程语言中的类,合约可能包含已持久化的状态变量以及可以修改这些变量的函数。

星云链使用NVM(Nebulas Virtual Machine)作为合约的执行引擎。JavaScript是星云支持的第一种智能合约语言。

最基本的智能合约长这样:

“use strict”;

var BankVaultContract = function () {

  // nothing

};

BankVaultContract.prototype = {

  init: function() {

      // nothing

  }

};

module.exports = BankVaultContract;

除了JavaScript语言,星云还支持TypeScript,这是上面智能合约的TypeScript版本:

class BankVaultContract {

  constructor() {

      // nothing

  }

  init() {

      // nothing

  }

}

module.exports = BankVaultContract;

以上合约虽然没实际功能但已具备一个合法合约的基本要素。撰写合约需要注意两点:

一、合约必须显式声明一个init函数,该函数会在合约部署时运行一次。init可以声明零或多个形参,如:

init: function(arg1, arg2, …) {

  // do something with arg1, arg2, …

}

二、我们为智能合约定义了两种函数可见性(JavaScript本身没有相关定义)

  • public:所有名称符合正则规则^[a-zA-Z$][A-Za-z0-9_$]*$(除了init)的函数都是公有函数,可以通过transaction被外部用户调用。

  • private:所有名称以“_”开始的函数为私有函数,只能被合约内部的函数调用。

部署合约

只要开发者将自己开发的智能合约(无论用JS语言还是TS语言)发送到任意一个星云节点,该合约就会分配到一个全局唯一合约地址,例如:

n1qsgj2C5zmYzS9TSkPTnp15bhCCocRPwno

// Request

curl -i -H ‘Accept: application/json’ -X POST http://localhost:8685/v1/admin/transaction -H ‘Content-Type: application/json’ -d ‘{“from”:”n1NaY2ywi1J6ENA1htPa4FdeTRMo2hjpD8f”,”to”:”n1NaY2ywi1J6ENA1htPa4FdeTRMo2hjpD8f”,”gasLimit”:200000,”gasPrice”:1000000,”value”:”0″,”contract”:{“source”:”\”use strict\”;\nvar BankVaultContract = function () {\n    // nothing\n};\nBankVaultContract.prototype = {\n    init: function() {\n        // nothing\n    }\n};\nmodule.exports = BankVaultContract;”,”sourceType”:”js”,”args”:””},”nonce”:1}’

// Result

{

  “result”:

  {    “txhash”:”2dd7186d266c2139fcc92446b364ef1a1037bc96d571f7c8a1716bec44fe25d8″,”contract_address“:”n1qsgj2C5zmYzS9TSkPTnp15bhCCocRPwno”

  }

}

合约部署需要花费很短一段时间,可以通过txhash轮询合约部署状态status,如果status=1,就意味着合约被成功部署。

> curl -i -H ‘Content-Type: application/json’ -X POST http://localhost:8685/v1/user/getTransactionReceipt -d ‘{“hash”:”2dd7186d266c2139fcc92446b364ef1a1037bc96d571f7c8a1716bec44fe25d8″}’

{“result”:{“hash”:”2dd7186d266c2139fcc92446b364ef1a1037bc96d571f7c8a1716bec44fe25d8″,…,”status”:1}}

合约一旦部署成功就对所有用户可见,只要知道合约地址就可以查看。

下一篇blog的主要内容:

介绍NVM内置的功能模块:包括storage(链上存储)、event(事件记录)等等。

另外会简单介绍下如何调用合约函数。

关于星云链

星云链是新一代区块链公链,致力于构建可持续升级的良性生态。星云链具有三大理念:

 价值尺度:独创的区块链价值发现体系

星云指数(Nebulas Rank)衡量区块链世界多维度的数据价值。

◆ 自进化:避免硬分叉的自进化能力

星云原力(Nebulas Force)提供快速迭代、无需硬分叉的升级能力。

◆ 原生激励:前瞻性的激励和共识机制

星云激励(Nebulas Incentive)奖励对生态有贡献的开发者和用户。

星云链1.0鹰星云版具备以太坊所有功能,是比以太坊更优秀的区块链公链之选:

◆ 面向开发者友好,支持使用JavaScript编写智能合约和DApp,更易上手;

◆ 唯一使用LLVM的区块链公链,性能优越,采用并发技术,交易处理能力达到2000TPS,系统更加安全稳定,可扩展性强,且具备智能合约调用和协议升级能力。

详情请咨询:

官网:https://nebulas.io
Github:https://github.com/nebulasio/go-nebulas
Slack:https://nebulasio.herokuapp.com
Telegram中文群:https://t.me/nebulascn
Twitter:https://twitter.com/nebulasio

发表评论

电子邮件地址不会被公开。 必填项已用*标注

返回顶部