ParityのPOAプライベートネット建ててtruffleを使う時はbyzantium対応をお忘れなく

以下のtutorialに従ってparityのpoaプライベートネットを構築してから、

Parity Documentation - Demo PoA-Tutorial

This tutorial will walk through setting up two Parity nodes locally and sending transactions between them. If you want to learn more about differen...

truffleでコントラクトをデプロイしようとしたら以下のエラーに遭遇、

Error: Transaction ran out of gas. Please provide more gas.

とか

The contract code couldn't be stored, please check your gas limit.

など。

どれもtruffleで開発をしてると馴染みがある感じのエラーなので、configでgasの設定いじったりdeploy時にgasをちゃんと指定すれば治るかなーと思ったのですが、全然治らず。

試しにtruffle consoleで普通のtxを発行してみると、tx自体は発行され、送金も正常に行われるものの、なぜか

Error: Transaction has been reverted by the EVM:

というエラーだけが吐かれる。実際にはrevertされてないのに奇妙である。

試しにcurlで素のrpcを叩いてreceiptを確認してみると、

{
  "jsonrpc": "2.0",
  "result": {
    "blockHash": "0x9664e8fe7be2ec3579b0b17b4ccd83fc0054adf6ca4ee227f794561e225a289f",
    "blockNumber": "0x12",
    "contractAddress": null,
    "cumulativeGasUsed": "0x5208",
    "from": "0x004ec07d2329997267ec62b4166639513386f32e",
    "gasUsed": "0x5208",
    "logs": [],
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "root": null,
    "status": null, <--- nullになっとる!!!!!
    "to": "0xa43e00a4d376d14117e7c97bfb57b54409f9b2b4",
    "transactionHash": "0x60b0ea2f7fff204391119ecf68620b83df4be67a2add3660ef00e056b758ccbf",
    "transactionIndex": "0x0"
  },
  "id": 1
}

statusがnullになっていた。これが原因でtruffle側でtxの結果がfalseと判断されerrorが出ていたのだろう。

これってもしかしてparity特有の問題?と疑ったりもしたのだが、以下のpageを発見。

Why root and status is null in transaction receipts

I deployed a smart contract on my private Parity node with Web3js. I got transaction hash and logs those I submitted at my contract creation. Everything works well, I can call functions correctly.

どうやらparityのnodeを建てる時のchain specの設定でbyzantiumへの対応ができていなかったらしい。(statusはbyzantiumから導入されたのでnullになっていた)

ということで以下のissueに倣い、chain specにparamsとaccountを書き足してnodeを起動したら、何事もなく上手くいった。

How to enable byzantium on new networks · Issue #7124 · paritytech/parity-ethereum

I&#39;m running: Which Parity version?: 1.8.x When using parity &gt;=1.8 to create a new private PoA network, how to enable byzantium fork functionality? Changelog mentions that 1.8.0 has &quot;Ful...

Share Comments
comments powered by Disqus