Help us understand the problem. What is going on with this article?

Truffle チュートリアル

More than 3 years have passed since last update.

今回はEthereumのフレームワークであるTruffleの使い方についてご説明します。

開発環境は以下です。

  • NodeJS 5.0以上
  • Windows, Linux or Mac OS X

インストール

以下のコマンドでTruffleをインストールします。

$ npm install -g truffle

続いてプロジェクトを作りましょう。

$ mkdir myproject
$ cd myproject
$ truffle init

初期化が完了したら、以下のフォルダ/ファイルが出来ているはずです。

  • app/
  • contracts/
  • environments/
  • test/
  • truffle.js

コントラクトのコンパイル

Solidityファイルは./contractsに置いてください。

solidityファイルをコンパイルするには、以下のコマンドを打ちます。

$ truffle compile

1点contract fileを書くときの注意として、ファイル名と同一のコントラクトを準備する必要があります。

contract MyContract {
  ...
}
// or
library MyContract {
  ...
}

デプロイ

デプロイする前にhttp://localhost:8545のポートを空けてください。
Ethereumクライアントにコントラクトをデプロイするためには、以下のコマンドを実行してください。

$ truffle deploy

テスト

TruffleはMochaとChaiをテストツールとして用いてます。テストファイルは./testsに置きます。

テストの実行は以下のコマンドを実効するだけで大丈夫です。

$ truffle test

特定のfileをtestしたい場合は、以下のように行う。

$ truffle test ./path/to/test/file.js

コントラクトとの接続

Ethereumのネットワークと接続するためにはweb3.jsを使うのが一般的ですが、TruffleではEther Paddingを使います。これはWeb3の上に作られたライブラリであり、コントラクトとより簡単に接続できます。

データの書き込み/読み込み

Ethereumでは、データの書き込みはTransaction、読み込みはCallと言います。

書き込み(Transaction)

  • Cost gas (Ether)
  • Change the state of the network
  • Aren't processed immediately
  • Won't expose a return value (only a transaction id).

読み込み(Call)
- Are free (do not cost gas)
- Do not change the state of the network
- Are processed immediately
- Will expose a return value (hooray!)

概要
理解しやすくするために参考となるファイルを作ります。このコントラクトは初期化メソッドの他に、3つのファンクションを含みます。(sendCoin, getBalanceEth, getBalanceです)

import "ConvertLib.sol";

contract MetaCoin {
  mapping (address => uint) balances;

  function MetaCoin() {
    balances[tx.origin] = 10000;
  }

  function sendCoin(address receiver, uint amount) returns(bool sufficient) {
    if (balances[msg.sender] < amount) return false;
    balances[msg.sender] -= amount;
    balances[receiver] += amount;
    return true;
  }

  function getBalanceInEth(address addr) returns(uint) {
    return ConvertLib.convert(getBalance(addr), 2);
  }

  function getBalance(address addr) returns(uint) {
    return balances[addr];
  }
}

Transaction作成
Transactionは以下のようにして作成します。

var account_one = "0x1234..."; // an address
var account_two = "0xabcd..."; // another address

var meta = MetaCoin.deployed();
meta.sendCoin(account_two, 10, {from: account_one}).then(function(tx_id) {
  // If this callback is called, the transaction was successfully processed.
  // Note that Ether Pudding takes care of watching the network and triggering
  // this callback.
  alert("Transaction successful!")
}).catch(function(e) {
  // There was an error! Handle it.
})

Call作成
Callは以下のようにして作成します。

var account_one = "0x1234..."; // an address

var meta = MetaCoin.deployed();
meta.getBalance.call(account_one, {from: account_one}).then(function(balance) {
  // If this callback is called, the call was successfully executed.
  // Note that this returns immediately without any waiting.
  // Let's print the return value.
  console.log(balance.toNumber());
}).catch(function(e) {
  // There was an error! Handle it.
})

コンソール

コンソールを使うには、以下のコマンドを打ちます。

$ truffle console

まとめ

以上がTruffleの基本的な使い方です。次回はTruffleを使ったアプリケーションについて詳しく説明して参ります。

参考資料

http://truffle.readthedocs.io/en/latest/getting_started/workflow/

sendee
貿易業務のクラウドソフト「Zenport」の開発
https://zenport.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away