remix-ide(Browser-solidity)を使用してGethにスマート契約を導入


スマート契約とは

  • 概要:インテリジェント契約は、ブロックチェーン上の取引所によってトリガーされ、トリガーされた後、ブロックチェーンからデータを読み取るか、ブロックチェーンにデータを書き込むことができるブロックチェーンに格納されたコードです.

  • Solidityの言語特性

  • SolidityはEthereumの契約型プログラミング言語であり,Ethereum仮想マシン(EVM)上で動作する.
  • その構文はJavascriptに近く、オブジェクト向けの言語です.しかし、本当の意味でネットワーク上で動作するデセンタ契約としては、多くの違いがあります.以下に
  • を挙げます.
  • 以太坊下層はUTXOではなくアカウントベースなので、特殊なAddressのタイプがあります.ユーザーの位置決め、契約の位置決め、契約の位置決めに使用されるコード(契約自体も勘定科目です).
  • 言語埋め込みフレームワークは支払いをサポートするため、payableなどのキーワードを提供し、言語レベルで直接支払いをサポートすることができます.
  • ストレージは、ネットワーク上のブロックチェーンを使用し、データの各状態を永続的に格納できるため、変数がメモリを使用するか、ブロックチェーンを使用するかを決定する必要があります.
  • 実行環境は、オフセンタ化されたネットワーク上で、契約または関数実行の呼び出しを強調する方式である.元の簡単な関数呼び出しがネットワーク上のノードのコード実行になるからです.
  • の最後の非常に大きな違いは、その異常メカニズムであり、異常が発生すると、すべての実行が撤回され、これは主に契約の実行の原子性を保証し、中間状態のデータの不一致を避けるためである.

  • remix-ide (Browser-solidity)

  • Browser-solidityは、ブラウザベースの契約コンパイラであり、buildバージョンは最新のSolidityのbuildバージョンに続く.
  • はブラウザで直接アクセス可能であり、アドレスはhttps://remix.ethereum.org
  • である.
  • ソースコードgithub上https://github.com/ethereum/remix-ide
  • は、オンライン編集が不十分な場合、ローカルで使用できます.
  • インストールにはいくつかの方法があります
  • インストールパッケージをダウンロードし、インストールして使用します.https://github.com/horizon-games/remix-app/releases
  • はnpmとnodeを通過する.js取付

  • npm install remix-ide -g
    remix-ide
    
  • またはソースコードを使用したインストール(wget)
  • git clone https://github.com/ethereum/remix-ide.git
    
    git clone https://github.com/ethereum/remix.git # only if you plan to link remix and remix-ide repositories and develop on it.
    cd remix-ide
    npm install
    npm run setupremix  # only if you plan to link remix and remix-ide repositories and develop on it.
    npm start
    
  • 開発使用
  • npm start
  • を実行
  • ブラウザで開くhttp://127.0.0.1:8080
  • text editorを開き、ファイルが保存されると自動的にリフレッシュされ、コンパイルされます(手動で自動コンパイルに設定されている場合).


  • remix-ideを使用してコードを編集、コンパイルする

  • 簡単な設定
  • エディタでは、+、-番号でフォントサイズを設定します.
  • クリックして新しいファイルを作成し、契約の作成を行います.

  • の下には簡単なスマート契約コードがあり、機能は任意の数値を入力し、2009を加えることです.
  • pragma solidity 0.4.9;
    
    contract mshkDemo {
         function mshkadd(uint a) public returns (address, uint b) {  
            uint resutl = a+2009;
            return (msg.sender, resutl);
        }  
    }
    
  • コード解釈
  • コンパイラバージョン選択、remix-ideをローカルで開いた後、右側のSettingsタブで、ドロップダウンリストからsolidityバージョン0.4.9
  • を選択
  • の最初の行はsolidity契約を使用することを宣言するバージョン番号で、0.4.9バージョン以前にバージョン番号を宣言し、バージョン番号の前に^を追加します.例えば、pragma solidity ^0.4.0
  • solidityのスマート契約はjavascriptのような言語なので、文法的に似ています.


  • うんてん

  • Runタブをクリックし、Gas limitとGas Priceを設定した後、Createをクリックすると、テストインスタンスを作成し、コードをデバッグすることができます.このとき、真ん中の下のウィンドウに、出力された情報が表示されます.
  • mshkaddの右側に100を入力し、mshkaddをクリックすると、真ん中の下のconsole出力ウィンドウに新しい情報が表示され続け、Detailsをクリックすると、入力した値と出力した値が表示されます.
  • Compileタブをクリックし、Publish onをクリックすると、ヒントレイヤが表示され、Detailsをクリックすると、リリース後の内容が表示されます.
  • がリリースされた後、上図にポップアップされたレイヤでコンパイル後、web 3を介して配置できるコードはWEB 3 DEPLOYで、コードは以下の通りである:
  • 
    var mahkdemoContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"mshkadd","outputs":[{"name":"","type":"address"},{"name":"b","type":"uint256"}],"payable":false,"type":"function","stateMutability":"nonpayable"}]);
    var mahkdemo = mahkdemoContract.new(
       {
         from: web3.eth.accounts[0], 
         data: '0x6060604052341561000c57fe5b5b60e48061001b6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063ee64a56014603a575bfe5b3415604157fe5b60556004808035906020019091905050609e565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6000600060006107d9840190503381925092505b509150915600a165627a7a723058208fbdb1b57d864dd6c64a4880c43b12fc10e102ac0ce93221135eba28c8e1c3f50029', 
         gas: '4700000'
       }, function (e, contract){
        console.log(e, contract);
        if (typeof contract.address !== 'undefined') {
             console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
        }
     })
    

    remix-ideでコンパイルされた契約をGethに配備

  • 上記WEB 3 DEPLOYのコードをgeth javascript consoleに貼り付けて実行します.成功した掘削でブロックに梱包されると、戻ります.
  • > miner.start()
    null
    
    > null [object Object]
    Contract mined! 
    address: 0x702f69fe301c5d959b10fea629faf71d9ec71944 
    
    transactionHash: 0x27ca30f885ec0c10e41728bad4317f12811b65284f7a63217f6fd1f78f4e6cea
    
  • フィールドの説明:
  • fromはスマート契約を呼び出すアカウントを表し、コードにはaccounts[0]
  • が取られている.
  • dataはコンパイルされたコードで、あなたのコードが長ければ長いほど、この文字列が多くなる
  • gas呼び出し契約で控除されるgas単位は、エーテルドル、gasとetherの間に為替レートがあり、為替レートは鉱山の計算率の影響で調整され、公網では掘削者に奨励されると理解されています.
  • addressは、スマート契約が導入されたアカウントアドレスを示し、スマート契約も1つのアカウントに相当します.
  • transactionHashのスマート契約生成時のhash値は、ブロックチェーンに永続的に保存されます.

  • mahkdemoを入力すると、契約のいくつかの情報
  • が表示されます.
    > mahkdemo
    {
      abi: [{
          constant: false,
          inputs: [{...}],
          name: "mshkadd",
          outputs: [{...}, {...}],
          payable: false,
          stateMutability: "nonpayable",
          type: "function"
      }],
      address: "0x702f69fe301c5d959b10fea629faf71d9ec71944",
      transactionHash: "0x27ca30f885ec0c10e41728bad4317f12811b65284f7a63217
      allEvents: function(),
      mshkadd: function()
    }
    
    
  • は、その後、mshkdemo.mshkadd.callによって呼び出され、掘削を前提とする場合:
  • 掘削を再開し、契約を呼び出すと、
  • の正しい値を出力することができます.
    > mahkdemo.mshkadd.call(10)
    ["0xf94caf51cf2aa14327e7f4b500b71e19f7b20352", 2019]
    
    > mahkdemo.mshkadd.call(20)
    ["0xf94caf51cf2aa14327e7f4b500b71e19f7b20352", 2029]
    
    > mahkdemo.mshkadd.call(30)
    ["0xf94caf51cf2aa14327e7f4b500b71e19f7b20352", 2039]
    
    > mahkdemo.mshkadd.call(40)
    ["0xf94caf51cf2aa14327e7f4b500b71e19f7b20352", 2049]