Truffle 使い方メモ (1) プロジェクト作成~デプロイ
実行環境は Windows10, VSCode, Node.js 14.17.6
Truffleのインストール
# インストール > npm -i -g truffle # バージョン確認 > truffle version Truffle v5.4.11 (core: 5.4.11) Solidity v0.5.16 (solc-js) Node v14.17.6 Web3.js v1.5.2
Solidityのバージョンが古いのが気になる。→あとでtruffle-config.jsを編集すればよい。
Ganacheのインストール
下のサイトからインストーラをDLする。
プロジェクトの作成
プロジェクトフォルダを作成して、その中で実行する。
> truffle init
- contracts/
- migrations/
- test/
- truffle-config.js
3つのフォルダといくつかのファイルが作成される。
truffle-config.jsを書き換える
compilersのところでバージョンと最適化設定を指定する。
compilers: { solc: { version: "0.8.7", settings: { optimizer: { enabled: true, // 最適化使わないなら false runs: 200 }, } } }
バージョンは ^0.8.0
のように指定してもいいが、開発途中でバージョンが変わるのが嫌なので 0.8.7
のようにしている。
このままでもテストはできるが、Ganache用にnetworksを変更する。
networks: { development: { host: "127.0.0.1", port: 7545, network_id: "*", },
ファイルを生成
例えば Greeterというコントラクトを作成するなら、
> truffle create all Greeter
- contracts/Greeter.sol → コントラクト(Solidity)
- migrations/xxxx_greeter.js → マイグレーションファイル (JavaScript)
- test/greeter.js → テストファイル (JavaScript)
がまとめて作成される。
Truffle | Truffle Commands | Documentation | Truffle Suite
マイグレーションファイルを変更
const Greeter = artifacts.require("Greeter"); // requireの引数はコントラクト名 module.exports = (deployer) => { deployer.deploy(Greeter); };
コントラクトのコンストラクタに引数を渡す場合は、こんな感じ。
const Greeter = artifacts.require("Greeter"); module.exports = (deployer) => { deployer.deploy(Greeter, "name", "symbol"); // 第1引数がname,第2がsymbol };
テスト
テストの実行
> truffle test // すべてのテストを実行 > truffle test test/greeter.js // 1ファイルのみテストする場合
マイグレーション
マイグレーション(デプロイ)を実行
> truffle migrate
(オプション) パッケージをインストール
後で使うためのパッケージをインストール
> npm i @truffle/hdwallet-provider > npm i @openzeppelin/contracts
TODO:
テストネット、メインネットにデプロイする方法自分のニモニックワードを読み込む- Migration.sol は何をしているのか
- テストの書き方
- truffle console, truffle develop
- Libraryを使う方法
- truffle execの使い方