オライリーの書籍『SolidityとEthereumによる実践スマートコントラクト開発 ―Truffle Suiteを用いた開発の基礎からデプロイまで』を読みつつ、詰まったところや一部書き換えが必要なところをまとめました。この内容は本書の第三章の部分の補足となります。最初はsolidityで概要を学びつつ、いずれはRustに移行したいです。Rustでの開発も盛んなようですし1…。
環境構築(for WLS, Linux(Ubuntu), mac)
Parityのインストール(OpenEthereum)
イーサリウムのクライアント環境であるParityをインストールします。Parityはrustで実装されており、他のクライアントと比べると高速らしいです。ただ、本に記載している通りにone-Linerでインストールしようとすると、Urlが死んでいるため地道にインストールしていきます。Openethererumはparityを引き継いだオープンソースとなります。parityのインストールとほぼ同四の手順でインストールできます。
そもそもの環境
ここからの説明はLinux環境を想定しており、基本的な開発ツールが入っていることを想定しています。以降はaptが使える環境を想定していますが、環境に応じてXcode
やyum
に置き換えてください。
1
2
3
4
5
$ # Debian-based Linux distribution, including Ubuntu.
$ sudo apt install build-essential
$ # 必要な開発系の追加ライブラリのインストール
$ sudo apt install cmake clang llvm
$ sudo apt install librocksdb-dev
rustupのインストール
rust言語をビルドするために、rustupをインストールします。以下の手順に従ってインストールしてください。
1
2
3
4
5
$ curl https://sh.rustup.rs -sSf | sh
$ # confirm
$ rustup --version
$ echo '. "$HOME/.cargo/env"' >> ~/.bashrc
$ source ~/.bashrc
parity(OpenEthereum)のソースからのインストール
githubからソースファイルをダウンロードしビルドします。ビルドした実行ファイルにパスを通すことで、コマンドライン上で使用できるようにします。
1
2
3
4
5
6
7
8
# download Parity Ethereum code
$ git clone https://github.com/paritytech/parity-ethereum
$ cd parity-ethereum
$ git checkout stable
# download OpenEthereum code
$ git clone https://github.com/openethereum/openethereum
$ cd openethereum
$ git checkout stable
最新のrust versionだとエラーが出るので、各ライブラリごとにRustのバージョンを変更します。
1
2
3
$ # それぞれのディレクトリに移動後下記を実行します。
$ rustup override set 1.51.0 # for Parity
$ rustup override set nightly # for Parity
versionが変更されているか確認後、ビルドを実施してください。
1
2
3
4
$ cargo --version
cargo 1.51.0 (43b129a20 2021-03-16) # for parity
cargo 1.67.0-nightly (9286a1beb 2022-11-04) # for openethereum
$ cargo build --release --features final
ビルドが出来ていれば、下記のコマンドが実行できるはずです。使いやすいように適切にパスに設定してください。
1
2
$ ./target/release/parity
$ ./target/release/openethereum
openethereumの場合、DBのアップデートが必要なようです。下記コマンドを実行してください。
1
2
3
4
5
6
7
8
9
$ PARITY_PATH=~/.local/share/io.parity.ethereum
$ cd /tmp/
$ git clone https://github.com/openethereum/3.1-db-upgrade-tool.git
$ cd 3.1-db-upgrade-tool
$ cargo run "$PARITY_PATH/chains/ethereum/db/906a34e69aec8c0d/overlayrecent"
$ # Archive node run with this
$ cargo run "$PARITY_PATH/chains/ethereum/db/906a34e69aec8c0d/archive"
$ cd ~
$ rm -Rf /tmp/3.1-db-upgrade-tool
参考URL
- https://github.com/openethereum/3.1-db-upgrade-tool
Parityの場合に想定されるエラー
以下のようなエラーが出る場合は、rustのバージョンが原因です。
1 2 3 error[E0061]: this function takes 1 argument but 2 arguments were supplied --> /home/hogehoge/.cargo/registry/src/github.com-1ecc6299db9ec823/logos-derive-0.7.7/src/lib.rs:55:20 ~~~~~~以下のコマンドでrustのバージョンを下げてください。
1 $ rustup override set 1.51.0
- 参考
- https://github.com/maciejhirsz/logos/issues/224
- https://github.com/openethereum/openethereum/issues/442
参考
MetaMaskのインストール
metamask.ioにアクセスしてChrome拡張をインストールしてください。
NodeJSのインストール(NVMでインストール)
好きなところにインストールするのが良いと思いますが、/usr/binや/binにインストールするのは、私は好きではありません。なので以下の方法でインストールします。
1
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
下記のコマンドで正常にインストールできたことを確認します。
1
2
$ node -v
v18.9.0
参考
- https://github.com/nvm-sh/nvm
Truffle2のインストール
1
2
$ npm install -g truffle
$ npm install -g truffle@5.1.31 # 本ではバージョン指定していますが、no supportのエラーがでます。
エラーが出るときは、nodeバージョンを下げるか、truffleのバージョンを上げてください。
下記のコマンドで正常にインストールできたことを確認します。
1
2
3
4
5
6
$ truffle -v
Truffle v5.6.5 (core: 5.6.5)
Ganache v7.5.0
Solidity v0.5.16 (solc-js)
Node v18.9.0
Web3.js v1.7.4
GanacheのGUIのインストール
Ganacheはアプリケーションをすばやく試してみることが出来るローカルブロックチェーンです。ganacheにアクセスして各自のOSにあったバージョンをフルバージョンでインストールしてください。
windowsで開発しているとき、wsl2上でtruffleを使っており、ganacheはwindowsでインスールした場合は追加で設定が必要となります。詳しい説明は、Qiitaにも上がっております3。