文書の過去の版を表示しています。
目次
Truffleを使ったスマートコントラクト開発
Truffleとは
必要なソフトウエア
Truffle は npm を使ってインストールしますので、事前に npm をインストールしてください。
また、ethereum ブロックチェーンも使用しますので ethereumブロックチェーンの構築(Ganache編) を参考に Ganache をインストールしてください。
インストール
初期化
生成されたファイルを確認してみます。
TODO: 各ファイルとディレクトリの説明。
- truffle-config.js
- contracts
- migrations
- 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 を呼び出す。
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); }); });




