shivaseの日記

SIer→Web→教師→SIer→ベンチャー(SRE)と異色な人生を歩んでいるエンジニアの日記

Ethereamのv.0.4.9によるcompiled値の取得方法変更について

ブロックチェーンの実装に興味があったので、「スマートコントラクト本格入門」を使ってEthereumを学習しています。 ブロックチェーンと言えばビットコインを連想しますが、応用範囲が実はかなり広いという事で非常に興味を持っています。

#ちなみにむかーし購入したビットコインが、当時の三倍になっててびっくりしました
#あの時に100円じゃなくて100万円買っておけば・・・(´・ω・`)

以下の本が比較的新しい本だったので購入したのですが・・・

スマートコントラクト本格入門―FinTechとブロックチェーンが作り出す近未来がわかる

スマートコントラクト本格入門―FinTechとブロックチェーンが作り出す近未来がわかる

  • 作者: 鳥谷部昭寛,加世田敏宏,林田駿弥
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/16
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

実はこの本の一部でどうしても動かないので非常に苦労したので、備忘録として残しておきます。

P159からブロックチェーンの応用コントラクトの実装をしていくのですが、P160の結果にどうしてもならない。

P161のvar additionAbi = additionCompiled.Addition.info.abiDefinitionの結果がundefinedになってしまう。

> additionCompiled.Addition.info.abiDefinition
TypeError: Cannot access member 'info' of undefined
    at <anonymous>:1:1

この原因は、インストールしたcompilerであるsolのバージョンが0.4.9で、このバージョンがかなり破壊的な修正をしているためでした。 (まだまだ進化途中なのでしょうがないですね。。執筆時点では0.3.6のようなのでかなりアップデートされている模様)。

Unable to define greeterContract in the Greeter tutorial. Breaking change in Solidity 0.4.9!

Note: Solidity 0.4.9 has a breaking change to a lot of old examples

The new Solidity 0.4.9 3 days ago mentions that you have to be "watching out for file prefixes" - https://github.com/ethereum/solidity/releases/tag/v0.4.9 . is the file prefix for "standard input", when no file prefix is specified.

The workaround is to use:

greeterCompiled[":greeter"]

なので最新バージョンで動かすには、以下のようにしましょう!

additionCompiledAddition.info.abiDefinition
↓
additionCompiled['<stdin>:Addition'].info.abiDefinition

かなり悩んだよ・・・(´・ω:;.:…

【スポンサーリンク】