钱包教程|星云Web钱包教程6:部署智能合约

本期教程我们将介绍如何在星云网络上部署智能合约,首先我们需要一个智能合约,仅以smart contract from Nebulas为例
以下例证基于此智能合约:

“use strict”;

var DepositeContent = function (text) {if (text) {

    var o = JSON.parse(text);

    this.balance = new BigNumber(o.balance);

    this.expiryHeight = new BigNumber(o.expiryHeight);

 } else {

    this.balance = new BigNumber(0);

    this.expiryHeight = new BigNumber(0); }};

DepositeContent.prototype = {

 toString: function () {

 return JSON.stringify(this);}};

var BankVaultContract = function () {

 LocalContractStorage.defineMapProperty(this, “bankVault”, {

    parse: function (text) {

       return new DepositeContent(text);},

    stringify: function (o) {

       return o.toString();}})};

 

// save value to contract, only after height of block, users can takeout

BankVaultContract.prototype = {

 init: function () {//TODO:},

save: function (height) { var from = Blockchain.transaction.from;

var value = Blockchain.transaction.value;

    var bk_height = new BigNumber(Blockchain.block.height);

var orig_deposit = this.bankVault.get(from);

    if (orig_deposit) {

       value = value.plus(orig_deposit.balance);}

var deposit = new DepositeContent();

    deposit.balance = value;

    deposit.expiryHeight = bk_height.plus(height);

this.bankVault.put(from, deposit);},

takeout: function (value) {

    var from = Blockchain.transaction.from;

    var bk_height = new BigNumber(Blockchain.block.height);

    var amount = new BigNumber(value);

var deposit = this.bankVault.get(from);

    if (!deposit) {

       throw new Error(“No deposit before.”);}

if (bk_height.lt(deposit.expiryHeight)) {

       throw new Error(“Can not takeout before expiryHeight.”);}

if (amount.gt(deposit.balance)) {

       throw new Error(“Insufficient balance.”);}

var result = Blockchain.transfer(from, amount);

    if (!result) {

       throw new Error(“transfer failed.”);}

    Event.Trigger(“BankVault”, {

       Transfer: {from: Blockchain.transaction.to,to: from,

          value: amount.toString()}});

deposit.balance = deposit.balance.sub(amount);

    this.bankVault.put(from, deposit);},

balanceOf: function () {

    var from = Blockchain.transaction.from;

    return this.bankVault.get(from);},

verifyAddress: function (address) {

    // 1-valid, 0-invalid

    var result = Blockchain.verifyAddress(address);

    return {

       valid: result == 0 ? false : true};}};

module.exports = BankVaultContract;

这只是个智能合约而已,不必恐慌。
那我们现在就开始演示了。
首先打开 index.html

 

切换到“合约”选项卡,找到“部署”选项(示例如下)

 

 

现在需要把上面提到的智能合约粘贴到“合约代码”一栏中:

 

把智能合约完整的输入到代码一栏中

 

注意:必须把智能合约完整地复制到“合约”一栏中(手动输入无效)

确保编程语言选定JavaScript,此例中,参数一栏空着即可
此智能合约使用JavaScript语言书写,欲了解智能合约详情,请查看我们的wiki
单击“选择你的钱包文件”来选择秘钥文件,然后单击“解锁”,你将看到以下信息:

 


上述步骤完成后单击“测试”,检查智能合约有无错误。

 

 

上述测试结果显示“余额不足”。因为账户里没有NAS,所以这样的测试结果是意料之中的。这是个很好的性能,我们可以在把智能合约发送到主网之前检查有无漏洞。

点击“提交”继续操作

 

 

这时会收到一个 TX Hash地址和一个智能合约地址。保存这两个地址以查看交易。
接下来让我们搜索我们自己的合约。
向上滑动鼠标至页面顶端,单击“搜索”选项卡

 

 

键入我们保存的TxHash地址,单击“搜索”选项

这一步结束后会看到原始的智能合约

 

这样就成功的了解了如何在星云网络上部署智能合约以及搜索合约,是不是很简单?

下一期教程我们会介绍如何激活合约。

详情请咨询:

官网: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

发表评论

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

返回顶部