钱包教程|星云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

发表评论

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

返回顶部