Now and Nawoo

読書メモ、技術メモ → C#, Solidity, Blockchain, Bitcoin, Ethereum, NFT

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する。

Ganache | Truffle Suite

プロジェクトの作成

プロジェクトフォルダを作成して、その中で実行する。

> 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

がまとめて作成される。

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の使い方