隗より始めよ

今後はいろいろ考え始めます。

はじめてのブロックチェーンアプリケーション②

f:id:mazarimono:20181102225103j:plain

何かシリーズ物が多くなってきましたが、気にせずに行きましょう。一回目はこちら

www.mazarimono.net

このシリーズはプログラミングに不慣れなおじさんがやっているので、つまずきが多く、もしかしたら他の人の励みになるんではないかなぁと思って書いています。

というわけで、前回はgenesis.jsonを作るのに苦労したという話を書きましたが、その後、環境をマックブックプロから、windows10のubuntuに移しました。

この移行の理由は、マックブックのSSDの容量が小さい問題です。私の持っているマックブックプロはなんとSSDの容量が128GBしかないのです。というわけで、外付けHDDでも買ってやるかのぉと思いましたが、そんなにマックにこだわりがないことと、window10 homeでもubuntuが動くということで、ちょっとその環境を使ってみたいということで、windows10homeでubuntuを使うという環境で実行することにしました。あとwindowsのPCは1TほどHDDがありまして、容量とか気にしないでよいです。

ちなみにいまのmacbookproを売って新しいの買うかとか一瞬思いましたが、安値で株をほとんど投げてしまったせいで、そんなことはできなくなりました・・・悲しい・・・

genesis.json問題に関しては本の欄外に書いていた。が、それでも動かず右往左往・・・

はい。欄外にgeth1.6.0から変わったということが書いてあり、appendixでも紹介されていました。

しかし、この辺のやり方でも私のプライベートチェーンは動いてくれませんでした。はい。ハッシュレートは上がるのですが、ブロックが作られなかったのです。で、前回のjsonの作り方も参考にし、最終的には以下のようなファイルとなりました。

{
    "config": {
    "chainId": 4649,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
  },
      "nonce":"0x000000000000042",
       "timestamp": "0x0",
       "difficulty": "20",
      "gasLimit": "0x4000",
       "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
       "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "coinbase": "0x3333333333333333333333333333333333333333",
        "alloc": {}
}

はい。こうするとマイニングが始まりました。この前に試したjsonでは、パソコンがゴウォオオオオっとうなり始めました。difficulyが高すぎて掘れてなかったのですwということで、ディフィカルティを20にしたら何とかなりました。

送金できない問題

本に書いている通りに送金を行ってみました。エラー・・・

f:id:mazarimono:20181102214102p:plain

Error: exceeds block gas limit
at web3.js:3143:20
at web3.js:6347:15
at web3.js:5081:36
at :1:1

で、エラーコメントをググってみるとガスを設定したらいける。ガスは多すぎたらおつりくれるから多めに設定したら大丈夫やーみたいな感じでstackexchangeに書いているのでやってみると同じエラー・・・

ethereum.stackexchange.com

結局よく見るガス量21,000を設定すると送金が作られました。

f:id:mazarimono:20181102214411p:plain

コンパイラない問題

送金もでき、JSON-RPCはよく分からないけど、まぁそういうものがあるのだなぁと思って通過しました。そしてようやく、ローカルにSolidityを落とし、helloworldを始めたところで再びつまずきました。

> sourceCompiled = eth.compile.solidity(source)
Error: The method eth_compileSolidity does not exist/is not available
    at web3.js:3143:20
    at web3.js:6347:15
    at web3.js:5081:36
    at <anonymous>:1:18

コンパイラがないもしくは使えないとエラーが返ってきていました。でググっていると

qiita.com

ふうむ。gethのコンパイラはもう復活しないかもしれないとのこと。この記事では外部のツールを使ってコンパイルしておられます。

別のツールを使うとか、面倒なので私には無理だなと思ったので、もうちょっとグーグル様を眺めてみました。するとありました。

qiita.com

solcってのはsolidityで、それでコンパイルができるということです。cuiのコンソールでできるんでこれで行きましょう!!

solc --bin --abi HelloWorld.sol

これでバイナリ―がはかれるわけですが、これをどうやってgethに持っていくのか。今のところそれが分からないので、コピペで運用しています。どうするんやろ?

で、出来たかと思いきや、出来ませんでした。最後のcontact.new()のところのgas良当て問題を突破したというのに出てきた結果は・・・

f:id:mazarimono:20181102224355p:plain

出来たように見えますが、先のmachinoさんの記事によるとaddressにアドレスが入っていないとだめなのです。(続く)

それにしても一日やってもこれくらいしか進まないとか、なかなかつらいw来週中には何らかのコントラクトが作れると良いなー!

Mastering Ethereum

まだまだやなーとか思っていたのですが12月10日発売と、もうあと1カ月で発売されるとかむねあつですね。

Mastering Ethereum: Building Smart Contracts and Dapps

Mastering Ethereum: Building Smart Contracts and Dapps