ユーザ用ツール

サイト用ツール


blockchain:truffleを使ったスマートコントラクト開発

文書の過去の版を表示しています。


Truffleを使ったスマートコントラクト開発

Truffle は ethereum スマートコントラクトのコンパイル、マイグレーション、テストを行うためのフレームワークです。

必要なソフトウエア

Truffle は npm を使ってインストールしますので、事前に npm をインストールしてください。

npm パッケージ配布サイト

また、ethereum ブロックチェーンも使用しますので ethereumブロックチェーンの構築(Ganache編) を参考に Ganache をインストールしてください。

インストール



初期化



生成されたファイルを確認してみます。



TODO: 各ファイルとディレクトリの説明。

  • truffle-config.js: truffle の設定ファイル。ethereum ブロックチェーンのアドレス等を設定する。
  • contracts: スマートコントラクトのソースコードを格納するディレクトリ。最初からマイグレーションの現在のバージョンを管理するための「Migrations.sol」が作られています。
  • migrations: マイグレーションの設定ファイルを格納するディレクトリ。最初からマイグレーションの現在のバージョンを管理するための「1_initial_migration.js」が作られています。
  • test: テストコードを格納するディレクトリ。

設定

truffle-config.js を開いて、コメントを削除し以下のように変更してください。

  • *Ganache に接続する場合の設定です。
  • *port番号は 8545 から 7545 に変更しています。


Ganacheとの連携

Ganache を起動し「NEW WORKSPACE」をクリックします。

「ADD PROJECT」をクリックし、先ほど作成した「truffle-config.js」を選択します。

これで Ganache と Truffle の連携設定は完了です。「SAVE WORKSPACE」をクリックしてください。

Truffle コンソール



スマートコントラクト

生成



上記のコマンドで constracts ディレクトリの中に Counter.sol ファイルが生成されます。

実装

エディタで Counter.sol を開き、以下のように編集してください。



コンパイル



マイグレーションファイルの作成

Counter コントラクトをデプロイするためのマイグレーションファイルを作成します。



上記のコマンドで migrations ディレクトリの中に nnnnnnnn_counter.js ファイルが生成されます。

ファイルの以下のように書き換えて、Counter コントラクトをデプロイするように設定します。



デプロイ



実行

Counter コントラクトを呼び出すためのインスタンスを取得する。



Counter コントラクトの get を呼び出す。



:!: 「BN」は「BigNumber」という意味です。後々、テスト等で値の比較をするときに int とは扱いが変わってきますので、覚えておいてください。

Counter コントラクトの inc を呼び出す。



もう一度、Counter コントラクトの get を呼び出す。(値が0から1になっている)



テスト

生成



上記のコマンドで test ディレクトリの中に simple_counter_test.js ファイルが生成されます。

実装

エディタで simple_counter_test.js を開き、以下のように編集してください。

const Counter = artifacts.require("Counter");
 
/*
 * uncomment accounts to access the test accounts made available by the
 * Ethereum client
 * See docs: https://www.trufflesuite.com/docs/truffle/testing/writing-tests-in-javascript
 */
contract("SimpleCounterTest", function (/* accounts */) {
  it("should assert true", async function () {
    await Counter.deployed();
    return assert.isTrue(true);
  });
 
  it("Counter inc", async function () {
    let counter = await Counter.deployed();
 
    let before = await counter.get();
    await counter.inc();
    let after = await counter.get();
 
    // before and after is BN(BigNumber)
    return assert.equal(after.toNumber(), before.toNumber() + 2);
  });
 
  it("Counter dec", async function () {
    let counter = await Counter.deployed();
 
    let before = await counter.get();
    await counter.dec();
    let after = await counter.get();
 
    // before and after is BN(BigNumber)
    return assert.equal(after.toNumber(), before.toNumber() - 1);
  });
});

実行



blockchain/truffleを使ったスマートコントラクト開発.1651134109.txt.gz · 最終更新: by dot