星雲Dapp学習記録


今日星雲のDAPP開発を見てみたのもご褒美があったので、全体の学習過程を整理してみました
文章の目的
星雲の学習過程全体を記録し、見終わったら契約の作成を知ることができます.
前提条件
まずコミュニティアカウントを登録し、https://incentive.nebulas.io/cn/signup.html?invite=kyDZ2
それから財布の住所が奨励を受ける必要があるのを見て、また財布の教程を見ました.
ウォレットチュートリアル|星雲Webウォレットチュートリアル1:NASウォレットの作成
ウォレットチュートリアル|星雲Webウォレットチュートリアル2:振込開始
ウォレットチュートリアル|星雲Webウォレットチュートリアル3:オフライン署名取引
ウォレットチュートリアル|星雲Webウォレットチュートリアル4:ウォレット情報の表示
ウォレットチュートリアル|星雲Webウォレットチュートリアル5:取引ステータスの表示
ウォレットチュートリアル|星雲Webウォレットチュートリアル6:スマート契約を導入するテスト右上隅でテストネットワークを選択し、テストコインを取得すると、トランザクションハッシュが得られ、5番目のチュートリアルでトランザクションステータスを確認できます.
インテリジェント契約の作成
どのような過程を知ったのか、また一つ見て、開発過程に入り、まず公式demoから始めます.
インテリジェント契約の簡単な仕様の作成:
  • スマート契約コードはPrototypeの対象でなければならないPrototypeとは何か
  • スマート契約コードにはinit()の方法が必要であり、この方法は導入時に一度しか実行されない.
  • スマート契約のプライベートメソッドは_最初のメソッドでは、プライベートメソッドは外部から直接呼び出されません.

  • 銀行の金庫を1つ作成する.ユーザーはこの銀行の金庫に貯金することができます.1.ユーザーはこの銀行の金庫からお金を引き出すことができます.1.ユーザーは銀行の金庫の残高を調べることができる.
    中にはいくつかLocalContractStorageBigNumberBlockchain・これらのグローバルオブジェクトはこのドキュメントでSmart Contractを参照してください
    LocalContractStorage
    数字、文字列、JavaScriptオブジェクトを格納できます.格納データはスマート契約内でしか使用できません.他の契約では格納された内容を読み取ることはできません.
    BigNumber()
    The BigNumber module use the bignumber.js、具体的な使い方はこのbignumberを直接見ます.js
    Blockchain
    トランザクションの生成または契約の実行に関するブロック情報の提供
    'use strict';
    
    //  DepositeContent      
    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 () {
    //        this   "bankVault" StorageMap
      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 = {
    //1.            init()   ,                 ;
      init: function () {
        //TODO:
      },
    //  
      save: function (height) {
      //       
        var from = Blockchain.transaction.from;
        var value = Blockchain.transaction.value;
        var bk_height = new BigNumber(Blockchain.block.height);
    
        // bankVault       
        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(topic, obj);
        //The Event module records execution events in contract. The recorded events are stored in the event trie on the chain, which can be fetched by FetchEvents method in block with the execution transaction hash. All contract event topics have a chain.contract. prefix before the topic they set in contract.
        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;

    配置
    まず財布の6番目のチュートリアルでWebページを可視化して配置し、その後、Webページのソースコードで配置の過程を理解します.
    まずテストコインを取得してテストネットワークに配置し、チュートリアルに従ってテストしてokを提出することができます.
                ,              。                         。
    
    
    5b2fb49acfb1657169032245f4a9276b62f93f49ca07abcc2cb0614a5ad5e6a1
    
        
    
    TX Hash 43d366c4733846814d94fd13011b47fdf005845ca7381b51754af056ca551a2e
    Contract address    n1veuXgaaEysjakVcGLKm9ss4WAMEfpf5mF

    財布契約-検索に取引を入力すると契約コードが表示されます
    インテリジェント契約の実行方法
    ウォレット契約-入力関数を実行するには、パラメータにパラメータを記入する必要があります.例ではsaveにパラメータが必要です.そうしないとBigNumberがエラーを報告し、テストし、ウォレットで操作するのはhttpリクエストよりも便利です.本質は同じです.
    これをやったのはappのバックグラウンドインタフェースを書いたのと同じで、後でフロントエンドの業務を書きます
    公式ヘルプドキュメントリンク
    テストコインの取得