ブロックチェーンアプリケーション開発の教科書 / 加嵜長門(著), 篠原航(著), 丸山弘詩(編集)を読みました。
上記の構成になっており、仮想通貨界隈で議論されているトピックについて網羅的に記載されています。トピックの多さにびっくりしました。
特にエンジニアの方で、「ブロックチェーンや仮想通貨盛り上がってるけど何をしたらいいのかよくわからない」という場合は
とりあえず本書を読んでおけばよいなという感じです。
そしてなんといっても本書のメインである「Ethereumのスマートコントラクト実装:6-8章」はひたすら丁寧に記載されています。各行の処理やこの関数で何をしてるのかなど。
まさに自分もライトニングネットワークというような用語となんとなくの意味はわかるものの、
スマートコントラクトの実装などになるとさっぱりという状態だったので、
本書を読むべきタイミングで読めたことをうれしく思います。
とても良かったのでおすすめしたいのですが、バージョン違いなどで本書通りでは動作しない箇所がありました。 自分で手を動かしてハマってしまったところをメモ代わりに残します。 途中でハマり投げ出したくなった方の一助になればと思います。
version
上述の通り、本書が書かれたタイミングからバージョンが上がってしまったことによるハマりどころもあるのかと思うので、 本記事でもバージョンを記載しておきます。 良くも悪くも発展途上のため、今後のアップデートなどで動作が変わると思うのでご注意ください。
geth
geth-darwin-amd64-1.8.1-1e67410e
npmのバージョン
> npm version { 'dapps-token': '1.0.0', npm: '5.6.0', ares: '1.13.0', cldr: '32.0.1', http_parser: '2.7.0', icu: '60.2', modules: '59', napi: '2', nghttp2: '1.29.0', node: '9.5.0', openssl: '1.0.2n', tz: '2017c', unicode: '10.0', uv: '1.19.1', v8: '6.2.414.46-node.18', zlib: '1.2.11' }
truffle
> truffle version Truffle v4.0.6 (core: 4.0.6) Solidity v0.4.19 (solc-js)
コマンド6.1.4.3: Gethの初期化処理
genesis.json
でtypoしてしまったため、一度実行に失敗しました。
キャッシュもっているのか修正後も以下のようにFatal
となってうまくいきませんでした。
一度genesis.json
を消してから再実行したら成功しました。
# geth --datadir ~/geth/private_net init ~/geth/private_net/genesis.json Fatal: Failed to read genesis file: open ~/geth/private_net/genesis.json: no such file or directory
コード8.2.3.1: トークンのコントラスト
StandardToken.sol
がimportできませんでした。
truffle(develop)> test Error: Could not find zeppelin-solidity/contracts/token/StandardToken.sol
本文とStandardToken.sol
のPATHが変わっているのでDappsToken.sol
を修正します。
// DappsToken.sol pragma solidity ^0.4.18; import "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol";
上記に伴って、DappsToken.sol
中のDappsToken
の引数もuint
からuint256
に変更します。
また、totalSupply
もERC20/BasicToken.sol
中でtotalSupply_
となっているので修正します。
// DappsToken.sol contract DappsToken is StandardToken { string public name = "DappsToken"; string public symbol = "DTKN"; uint public decimals = 18; function DappsToken(uint256 initialSupply) public { totalSupply_ = initialSupply; balances[msg.sender] = initialSupply; } }
8-2 ERC20準拠のトークン作成のファイル位置
慣れれば当然なのでしょうが、本節で書いた各ファイルの配置は、
dapps-token
をカレントディレクトリとして以下です。
./contracts/DappsToken.sol(コード8.2.3.1) ./migrations/2_deploy_dapps_token.js ./test/DappsTokens.js
Ropstenネットワークへのデプロイ
コード8.3.2.14の通りにgas
を設定しても以下のエラーメッセージが出てきて、デプロイできませんでした。
> truffle migrate --network ropsten Using network 'ropsten'. Running migration: 2_deploy_dapps_token.js Deploying DappsToken... ... <hash> Error encountered, bailing. Network state unknown. Review successful transactions manually. Error: The contract code couldn't be stored, please check your gas amount.
truffleの公式ドキュメントや
githubのissue、
StackExchange
あたりを読んでも、同じエラーメッセージなのに解決策がマチマチで、ここで一番ハマりました。
自分の場合は、2_deploy_dapps_token.js
のgas
と同じく
truffle.js
のgas
も以下のように設定することでうまくいきました。
// truffle.js module.exports = { networks: { ropsten: { provider: function() { return new HDWalletProvider( mnemonic, "https://ropsten.infura.io/" + accessToken ); }, network_id: 3, gas: 2000000 } } };
Tips
truffleを終了させる
truffle(develop)> .exit
truffle migrateをやり直すとき
コンパイル結果がbuild
配下にあるので、削除したほうが無難です。
> rm -R build
Refs
- ブロックチェーンアプリケーション開発の教科書
- RUNNING MIGRATIONS - TRUFFLE
- The contract code couldn't be stored, please check your gas amount during successful deployment #558
- The contract code couldn't be stored, please check your gas amount - StackExchange

- 作者: 加嵜長門,篠原航,丸山弘詩
- 出版社/メーカー: マイナビ出版
- 発売日: 2018/02/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る