Ethereum開発時にいろいろはまるポイント列挙

Ethereum(イーサリアム)

gethを使ってEthereumプライベートネットワーク(private network)作る際にはまるポイントをまとめていきます。

* こちらの記事は随時加筆していきます。

Sponsored Link


truffle

Error: Insufficient funds for gas * price + value

truffleでmigrateするときにError: Insufficient funds for gas * price + valueがでるときがあります。
これは繋いでいるgeth上でDAGが作られていないと発生するようでした。このため、miner.start()してDAG作るようにするとmigrateできるようになります。

# truffle migrate --network private
Using network 'test159'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
  ... undefined
Error encountered, bailing. Network state unknown. Review successful transactions manually.
Error: Insufficient funds for gas * price + value
    at Object.InvalidResponse (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:37295:16)
    at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:224765:36

このため、geth上ではminer.start()するか、起動時のオプションで–mineオプションつけておきましょう。
それか、DAGつくっておきましょう。

exceeds block gas limit

truffleでmigrateするときに exceeds block gas limit とでてmigrateできない場合があります。これは読んで字のごとく、gasリミットを超えている、という意味でコントラクトを実行できないといわれてしまっています。

 # truffle migrate --network ropsten
Using network 'ropsten'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
Error encountered, bailing. Network state unknown. Review successful transactions manually.
exceeds block gas limit

自分のケースでは truffle.js の gas が指定されていなかったので 3000000 を指定しておきました。

module.exports = {
  networks: {
    ropsten: {
      network_id: 3,    // Official ropsten network id
      provider: engine, // Use our custom provider
      from: address,     // Use the address we derived
      gas: 3000000  // ここ!!!!!!!!!!!!
    },

デフォルトのgasは 4712388 を指定されてしまうようで、Ropstenでは4700000がgasのlimitなのでそれが原因で今回のエラーがでています。

Truffle-Exceeds Block Gas Limit (Ropsten)

Okay, thank you for the reply! I will definitely look into making my contract smaller or split it up more. It also looks like the default limit, 4712388, is larger than the Ropsten block gas limit as a couple times etherscan warned about that. The Ropsten limit was just over 4700000.

genesis.jsonのchainIdとnetworkidを一致させる

どうやらgeth1.5と1.6以降ではgenesis.jsonの書き方が違うようでかなりはまりました。

genesis.jsonの各パラメータの意味は以下を参照ください。
The meaning/specification of “config” in genesis.json

geth1.5だと

{
	"nonce": "0x0000000000000042",
	"timestamp": "0x0",
	"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
	"extraData": "0x0",
	"gasLimit": "0x8000000",
	"difficulty": "0x4000",
	"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
	"coinbase": "0x3333333333333333333333333333333333333333",
	"alloc": {}
}

のようにgenesis.jsonを紹介している例が多いのですが、これが1.6以降になると

{
  "config": {
        "chainId": 777,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}

のようにconfigという設定部分が追加されています。
geth1.5を例にした時に geth起動コマンド で networkid を1,2,3の値(testnetなどで使われている)以外の適当な任意の値で設定することが多いのですが、このnetworkidをgenesis.jsonのchainIdと揃える必要があります。

たとえば、chainIdを777にした場合以下のようなgethオプションで起動する必要があります。

geth --datadir . --networkid 777 --nodiscover --maxpeers 0

この値が揃っていない場合に miner.start(1) してもminingできなかったりするので注意する必要があります。

Sponsored Link

ビットコイン(Bitcoin)、イーサリアム(Ethereum)、リップル(Ripple)、ネム(NEM)などの仮想通貨を買うならコインチェックがおすすめです。

※アプリは指値売買ができず手数料が高いので、アプリをダウンロードするのではなくメール&パスワード登録へ!まずは5万円ほど入金して仮想通貨とブロックチェーンの世界を楽しんでください!

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


miningpoolhub
miningpoolhubのAPIを使って自動スイッチングを試してみる in ethOS

* アイキャッチの男性は、Flicker上のライセンスフリーの画像ひっぱってきているだけで、本文とま …

NEM
[memo] NEMを送金しようとするとFAILURE_TIMESTAMP_TOO_FAR_IN_FUTUREが出る

Docker上のコンテナで、NEM-libraryを使ってmosaicの送金を試していたところ FA …

NEM
NEMのテストネットワークで独自通貨を試す

NEMアプリケーションを作る際にテストネットワークでのテスト非常に重要になってきます。 このため今回 …