「実践 スマート コントラクト開発」のフォロー

「SolidityとEthereumによる実践スマートコントラクト開発」(オライリー・ジャパーン)をやっている。初版発行から日にちが経ったこともあり、自分で「改訂」しながらチュートリアルしている。

3.1.1「Parityのインストール」(p34)

イーサリアムのクライアントを構築にはParityが使われている。
しかし開発者であるParity Technologiesは現在イーサリアムクライアントから離れ、
イーサリアムクライアントはOpenEthereumに引き継がれている。
https://www.neweconomy.jp/posts/37460

//Parityのインストールができなかった
//次にOpenEthereumをGitHubよりダウンロードしたが、ビルドがうまく行かなかった。
//結局、Gethをイーサリアムクライアントとする。

参照:Parity Technologies主宰(イーサリアムの共同設立者)であるケビン・ウッドのRedはこちら。

4-5 GreeterをOwneableにする(p64)

プライバシーを守るライブラリとしてopenzeppelinが使用されている。
しかし本書で扱われているopenzeppelin-solidityは現在推奨されていない。
https://www.npmjs.com/package/openzeppelin-solidity

なので本書にあるnpm install openzeppelin-solidityではなく、
npm install@openzeppelin/contructsの方をインストールする。

一方、contracts/Greeter.solの記述も、
import “openzeppelin-solidity/contracts/access/Ownable.sol”;でなく、
import “@openzeppelin/contracts/access/Ownable.sol”;とする。

現状のopenzeppelinを採用したことで、ほかを変えることが余儀なくされる。

本書ではTruffleは
npm install -g truffle@5.1.31としている。

これを
npm install truffleとする。

ちなみにtruffle versionにて確認すると、

前者は、
Truffle v5.1.31
Solidity v0.5.16

後者は(2022.09/20段階で)
Truffle v5.5.30
Solidity v0.8.17
となっている。

openzeppelelinの現況に合わせ、後者とする。

ここで注意が必要。(たぶん)SolidityのバージョンはSolcのバージョンでもある。

なので、スマートコントラクトのコンパイルのバージョンの記述を
本書のpragma solidity >= 0.4.0 < 0.7.0;から
pragma solidity >= 0.4.0 < 0.9.0;とする(solidity v0.8.17 / solc v0.8.17に合わせた)

またtruffle-configのcompilerのコメントアウトを外し、以下のようにする。

compilers: {
solc: {
version: “0.8.17”
}
}

5.3 Ganacheへのデプロイ(p77)

MetaMaskは秘密鍵の保持のほか、(たぶん)プロバイダー的な役割も担っている。

イーサリアムネットワークへの接続だけでなく(ローカルに準備された)Gnacheにも仲介する。

本書では、その方法が省かれている(その他にも、省略されている箇所が多数ある)

このようにやる。



6.3 資金調達の初期化

6章からtruffle inbox reactを使用する。

ただし、このコマンドを叩きダウンロードされるtruffle inbox reactと、本書のtruffle inbox reactではファイルの構成が異なる。

本書の日本語版の販売が2021年1月15日。翻訳される前の原書の発売が仮に1年、執筆も勘案すると3年前以上前のバージョンと思われる。

なので、あえて、本書のバージョンと同様のtruffle inbox reactをダウンロードする必要がある。

mkdir fundraiser(作業ディレクトリを作成)
cd fundraiser

ここに本書にはない特別なコマンドを叩くのだが、その前に、数年前のtruffle inbox reactに合わせ、nodeのバージョンもダウングレードする必要が出てくる。

具体的には、node@10 をNode.jsの他のインスタンス前に追加する必要がある。後ほど必要になるReact truffle BoxにNode12と互換性のない依存関係がいくつか存在する。このため本書ではLTS(Long Time Support)バージョンを使うことにする。

(本書p44)

本書ではnodebrewを利用しいるが、(個人的な環境では)nodebrewでは上手く行かなかったので、nvmを利用した。

nvm install v10.0.0
nvm ls(ダウンロードした幾つかの既存のバージョンを確認)
nvm use 10.0.0(バージョンを選定)

その上で、古いバージョンのReact Truffle Boxをインストールするため、以下のコマンドを叩く。

git clone git@github.com:truffle-box/react-box.git
git reset –hard <commit-you-want>
truffle unbox <path-to-cloned-react-box-repo>

//https://github.com/trufflesuiteのディスカッションを参照
//truffleは最新バージョン(Truffle v5.5.32)を使用

6.4 受取人の編集

4-5 GreeterをOwneableにする

「4-5 GreeterをOwnerable」と同様、
npm install @openzeppelin/contracts
をインストールし、
“import “@openzeppelin/contracts/access/Ownable.sol”;とする。

上記は、solc 0.8、solidity 0.8以上が推奨されているので、truffle-config.js、contractsのバージョンを0.8に書き変える。

//OpenZeppelelinのフォーラムに質問
https://forum.openzeppelin.com/t/compileerror-openzeppelin-contracts-access-ownable-sol/32262

気づいたことを、お気軽に。
公開まで、やや時間がかかりまーす!