kegamin’s diary

勉強記録

マラソン偏差値チェッカー

年収偏差値チェッカーというものを知って、それをパクってマラソン偏差値チェッカーなるものを作りました。

http://marathonhensachi.kegamin.com/

f:id:kegamin:20170906092023j:plain:w300

途中で疲れて細かいところが雑ですが笑

背景

マラソンやられてない方はご存じないと思いますが、毎年ランネットというところが全日本マラソンランキングというのを出していて、年代別で順位を発表してくれます。 それだと単純に全体の順位だけなので、では偏差値表示するとどうなるの?ってのが最初のスタートでした。

ランキングのベースとなっているのは、年齢別でちゃんと結果を残している東京マラソン(2017)です。もちろんAPIなんて公開されてないので、地道に迷惑かけない範囲でデータをスクレイピングしていきました。もうちょっと加工しやすい仕組みにしてくれれば色々統計とったり面白い事をみんなできるのにと思うんですけどね。

結果はもちろんゴールした人のみなので、多少は全体よりもレベルは高めだと思いますが、まぁ記念参加も多い大会だと思うので丁度よいでしょう。10年分くらいデータ取ればより正確になるかな。。

私の偏差値はと言うと・・・この半年ほとんど走ってなかったのでお察し下さい・・・ サブ3以前にサブ3.5も全くいかない状態になってしまったので、必死にフォーム改善に向けてひぃこらサブスリーとか読みながら頑張っております

走れ! マンガ家ひぃこらサブスリー 運動オンチで85kg 52歳フルマラソン挑戦記!

走れ! マンガ家ひぃこらサブスリー 運動オンチで85kg 52歳フルマラソン挑戦記!

全体レザルトの傾向

そして男性・女性のタイムグラフを作ってみましたが(X軸は秒単位)、男性はサブ3部分で頑張ってるらしく、サブ3直前が多いけど(頑張ったんでしょう)、過ぎると少し人数が減る(諦めたんでしょう)笑。単純なグラフでも色々傾向がわかって面白い

f:id:kegamin:20170906091303j:plain

ブロックチェーンを体験する 第3回 Hello, Worldしてみる

ブロックチェーンを体験する 第2回 Ether(通貨)の送金の続きです。

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

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

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

今回は、Ethereumの大きな特徴であるコントラクトを実装して遊んでみます。 本に掲載されている足し算のコントラクトでもいいですが、折角なので違うのをやってみようと探していると、Create a Hello World Contract in ethereumという「Hello, World」チュートリアルがあったのでこちらを参考にやっていきます。

そもそもコントラクトとは何か

定義は以下の通りでチュートリアルに書いてあるのですが、

Smart contracts are account holding objects on the ethereum blockchain. They contain code functions and can interact with other contracts, make decisions, store data, and send ether to others. Contracts are defined by their creators, but their execution, and by extension the services they offer, is provided by the ethereum network itself. They will exist and be executable as long as the whole network exists, and will only disappear if they were programmed to self destruct. www.ethereum.org

Ethereumブロックチェーン上に存在するアカウントの一つで、

  • 他のコントラクトを呼び出す(作用させる)
  • 判断する
  • データを保存する
  • Etherを送る

機能を持っており、作成するとネットワーク全体に存在し実行できるプログラムになります。ビットコインでは通貨の移動しかできない単純な機能だけだったのが、このコントラクトにより非常に汎用的な処理ができるようになっています。

例えばどんなことできんの?って話ですが、そこらはこの本あたりを読むと良くわかる今回は割愛します。

ブロックチェーン 仕組みと理論  サンプルで学ぶFinTechのコア技術

ブロックチェーン 仕組みと理論 サンプルで学ぶFinTechのコア技術

  • 作者: 赤羽喜治編著,愛敬真生編著
  • 出版社/メーカー: リックテレコム
  • 発売日: 2016/10/15
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

目標

コントラクトの実装の流れを理解し、HelloWorldを画面に表示できる

作業の流れ

  • Hello, Worldコントラクトを作成しコンパイルする
  • ブロックチェーンネットワーク上に配布
  • コントラクトを実行する
  • 作ったコントラクトを廃棄する

前提

  • ユーザ作成が完了していること
  • 作成したユーザに実行に必要なetherの残高があること(適当にminer.start()してればおk)

Hello, Worldコントラクトを作成しコンパイルする

コントラクトの作業の流れは以下のような流れになっています。 非常にややこしいので自力でやるのはしんどく、本来はwebでよしなにやってくれるツール を使って実装することになる部分だと思われます。

  1. ソースコードを作成するsolidityコンパイラでコンパイルする(compiled)
  2. compiledされたものからcontractを作成する(contract)
  3. contractを元にインスタンスを作成する(instance)
  4. instanceをネットワークに配布する(miner.start)

f:id:kegamin:20170220132747p:plain

どこの作業をやっているのか理解しながらやらないとパンクしますね。。 本では全く図がなく、かつバージョンの差異でコマンドが違ってたりする部分で非常に苦労しました(´・ω:;.:…

ソースコード作成

以下の通りのプログラムを作成し、適当なファイル名(greeter.js)で保存して下さい。チュートリアルでは継承を使って少し複雑になっていますが、そこまで要求しても仕方が無いのでシンプルにしています。 本の内容をやる場合は同じようにaddtion.jsとして作成すればOKです。

contract greeter {
  address owner; // コントラクト
  string greeting; // 出力メッセージ

  //コンストラクタ
  function greeter(string _greeting) public {
    owner = msg.sender;
    greeting = _greeting;
  }

  // 実際に呼ぶメソッド
  function greet() constant returns (string) {
    return greeting;
  }

  // ブロックチェーンネットワークから削除するメソッド
  function kill() {
    if (msg.sender == owner) selfdestruct(owner);
  }
}

実際にこのプログラムをコピペして流すと、改行が邪魔をしてうまく実行してくれません。 なのでRemove Line Breaks Online Tool を使って今回は以下のように改行を消した部分をコピペしましょう。

f:id:kegamin:20170220123345p:plain

準備できたらさっそくコピーして実行させます。

> var source = "contract greeter { address owner; string greeting; function greeter(string _greeting) public { owner = msg.sender; greeting = _greeting; } function greet() constant returns (string) { return greeting; } function kill() { if (msg.sender == owner) selfdestruct(owner); } }"
undefined

// うまくできていたら、sourceで内容が表示されるはずです
> source
"contract greeter { address owner; string greeting; function greeter(string _greeting) public { owner = msg.sender; greeting = _greeting; } function greet() constant returns (string) { return greeting; } function kill() { if (msg.sender == owner) selfdestruct(owner); } }"

コンパイル〜コントラクト作成

作成したコントラクトをコンパイルしていきますが、こちらも同じようにソースコードを別で作成し(compile.js)、改行を消して実行します。 ここがチュートリアルや本ではそのままでは動かない部分です。 compiledの内部jsonのフォーマットが変わっているのでcompiled.greeterとかcompiled.additionとか でデータを取ってこれなくなっているので注意して下さい。

var contract = web3.eth.contract(compiled["<stdin>:greeter"].info.abiDefinition);

var instance = contract.new("Hello World!!",
  {from: web3.eth.accounts[0],
    data: compiled["<stdin>:greeter"].code,
    gas: 300000}
  );

上のコンパイルコードが準備できたら、同じように改行を削除して実行します。

> var instance = web3.eth.contract(compiled["<stdin>:greeter"].info.abiDefinition); var instance = contract.new("Hello World!!", {from: web3.eth.accounts[0], data: compiled["<stdin>:greeter"].code, gas: 300000} );
Error: authentication needed: password or unlock
    at web3.js:3104:20
    at web3.js:6191:15
    at web3.js:5004:36
    at web3.js:2985:24
    at <anonymous>:1:98

実行時にeth.account[0]を使って配布しようとしています。 しかし利用料としてgasを消費するため、これも勝手に実行できないように権限エラーになりました。

> personal.unlockAccount(eth.accounts[0], "pass1")
true

// これで問題無く実行できました
> var instance = web3.eth.contract(compiled["<stdin>:greeter"].info.abiDefinition); var instance = contract.new("Hello World!!", {from: web3.eth.accounts[0], data: compiled["<stdin>:greeter"].code, gas: 300000} );
I0220 13:47:28.747527 internal/ethapi/api.go:1141] Tx(0x69c32b61cac18ab5895e990fe42d09da4f407a71c1c5eeb54c192a457f4843e0) created: 0x19300e99f2ebba20a53c7f715ed82797b725da9e
undefined

// ただしaddress部分はまだundefinedのまま
// 使えるようにするために採掘を最後にする必要があります
> instance
{
  abi: [{
      constant: false,
      inputs: [],
      name: "kill",
      outputs: [],
      payable: false,
      type: "function"
  }, {
  type: "constructor"
}],
address: undefined,
transactionHash: null
}

> miner.start()
> (中略)
> miner.stop()

// addressに値が入れば配布完了です
> instance
{
  abi: [{
      constant: false,
      inputs: [],
  }],
  address: "0x1c7b8887c6808860aceefaf917118d532d9fbad7",
  transactionHash: "0xe50c6b4eb80fcf20d483032bbe9d0fc8870b3d18d2964cb0dcb0ba8890670afb",
  allEvents: function(),
  greet: function(),
  kill: function()
   }

// 別のコマンドでアドレスを見ることもできます
> eth.getCode(instance.address)

"0x606060405263ffffffff60e060020a60003504166341c0e1b5811461002c578063cfae32171461003e575bfe5b341561003457fe5b61003c6100ce565b005b341561004657fe5b61004e610110565b604080516020808252835181830152835191928392908301918501908083838215610094575b80518252602083111561009457601f199092019160209182019101610074565b505050905090810190601f1680156100c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116141561010d5760005473ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b6101186101a8565b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561019d5780601f106101725761010080835404028352916020019161019d565b820191906000526020600020905b81548152906001019060200180831161018057829003601f168201915b505050505090505b90565b604080516020810190915260008152905600a165627a7a7230582047d26d1f8d0150c8005f573a1fa9367e77fb45737312a83d6ce9e67ac85ea39e0029"
>

コントラクトを実行する

最後にminer.start()を実施して配布して完了です

> instance.greet()
"Hello World!!"

これだけやってHello World…

作ったコントラクトを廃棄する

最後にkillというメソッドを作っていたので、それを使ってコンストラクトを削除して終わりましょう

> instance.kill.sendTransaction({from:eth.accounts[0]})
I0220 15:02:15.290844 internal/ethapi/api.go:1143] Tx(0x1131922a21482556ae4b6401b76a58177fdca600253efec6940e27f36fabeebf) to: 0x1c7b8887c6808860aceefaf917118d532d9fbad7
"0x1131922a21482556ae4b6401b76a58177fdca600253efec6940e27f36fabeebf"

// もちろんこのままだとネットワーク上には残ったままなので、採掘する
> miner.start()
> eth.getCode(instance.address)
"0x"
> instance.greet()
Error: new BigNumber() not a base 16 number:
... 

これで作ったコンストラクトは消せました

最後に

ここまでやってやっと「Hello world」です。 正直まじめにコマンドラインからやるのは勉強にはいいですが、やはりフレームワーク を利用してやっていきたいですね。次回からは、その辺のフレームワークとかを調べながら やってみたいと思います。

エラー

実行に必要な税金が足りないよ!

Error: Insufficient funds for gas * price + value
    at web3.js:3104:20
    at web3.js:6191:15
    at web3.js:5004:36
    at web3.js:2985:24
    at <anonymous>:1:16

かわいそうなユーザーにminer.start()を実行してあげてお金を増やしてあげましょう。

何かadditionAbiでエラーになるんだけど

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

スマートコントラクト本格入門―FinTechとブロックチェーンが作り出す近未来がわかるの通りにやると出るエラーです。additionAbiの内部のJSON形式が変わっているため変更が必要です。

var additionAbi = additionCompiled["<stdin>Addition:"].info.abiDefinition

今後もまだまだ変わるかもしれないので、additionCompiledだけを実行して内部を見るようにした方がよいですね。

Enjoy!Ethereum!

Enjoy!!

ブロックチェーンを体験する 第2回 Ether(通貨)の送金

ブロックチェーンを体験する 1回目 ユーザ追加からマイニング - kegamin’s diaryの続きになります。

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

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

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

目標

ユーザ送金を実施し、ブロックチェーンネットワークの流れを理解する

作業の流れ

  1. 送金処理
  2. 送金処理をブロックチェーンネットワークに反映

f:id:kegamin:20170220102352p:plain

前提

ブロックチェーンを体験する 1回目 までの構築が済んでいること。

つまりgethの構築が終わっており、二人のユーザが追加されていること

gethの立ち上げ

Ethereumを立ち上げていない場合は、コンソールから以下を実行して準備しておきます。

 geth --datadir eth_private_net --rpc --rpcaddr "localhost" --rpcport "8545" --rpccorsdomain "*" console

送金処理

図中の①にあたる、送金処理としてuser1からuser2に1weiほど送金していきます

持っているEtherの確認

持っているEtherはeth.getBalance(eth.accounts[数値])で確認できます。

// ユーザ1人目(前回のminer.start()次第で結果は各々違うはずです)
> eth.getBalance(eth.accounts[0])
1.1678125e+21
// ユーザ2人目
> eth.getBalance(eth.accounts[1])
0

送金処理

eth.sendTransaction()コマンドを使って実際に送金してみます

> eth.sendTransaction({from: '0x05b52fcf41646bafc6506e140ab2c571b5f3e32c', to: '0x14c528d860980ed14719cf99958c3dfdbd6423e9', value: web3.toWei(1, "ether")})
Error: authentication needed: password or unlock
    at web3.js:3104:20
    at web3.js:6191:15
    at web3.js:5004:36
    at <anonymous>:1:1

という事でこのままではエラーになります。authentication neededは、user1の値を送金するのに権限が無い状態で、パスワードを知らない他のユーザーが勝手にuser1のお金を送金させない為の仕組みですね。

ユーザのunlock

今回はユーザ1(eth.account[0])から送金するので、最初に決めたパスワードを使ってpersonal.unlockAccount()を実行します

> personal.unlockAccount(eth.accounts[0],"pass1")
true

送金処理

再度実行してみましょう。すると最下行に一行トランザクションIDが表示されるようになります。

> eth.sendTransaction({from: '0x05b52fcf41646bafc6506e140ab2c571b5f3e32c', to: '0x14c528d860980ed14719cf99958c3dfdbd6423e9', value: web3.toWei(1, "ether")})
I0220 10:29:23.790159 internal/ethapi/api.go:1143] Tx(0x783e033728ca53df8741f60e3f7c28f46d060d44a62b93dc156d072c6d5902bd) to: 0x14c528d860980ed14719cf99958c3dfdbd6423e9
"0x783e033728ca53df8741f60e3f7c28f46d060d44a62b93dc156d072c6d5902bd"
>

未確定なトランザクション

しかし、この状態ではまだトランザクションはブロックチェーンネットワークに反映されていません。実際に未確定のトランザクションはeth.pendingTransactionsで見ることができるのでやってみます。

> eth.pendingTransactions
[{
    blockHash: null,
    blockNumber: null,
    from: "0x05b52fcf41646bafc6506e140ab2c571b5f3e32c",
    gas: 90000,
    gasPrice: 20000000000,
    hash: "0x783e033728ca53df8741f60e3f7c28f46d060d44a62b93dc156d072c6d5902bd",
    input: "0x",
    nonce: 2,
    r: "0xd19f4959ff8b651510c5e902d6081dbe9a34e62b536c2016ce03bfff751b1722",
    s: "0x5440c4f8095e97e30b8133f9a2c1a539fb35cafdee77a3cb75e36257071cd054",
    to: "0x14c528d860980ed14719cf99958c3dfdbd6423e9",
    transactionIndex: 0,
    v: "0x1b",
    value: 1000000000000000000
}]
>

FromTohashなどが一致しているのが確認できると思います。

また以下の通り、ユーザ2のお金はまだ移動していないのがわかります。

> eth.getBalance(eth.accounts[1])
0

採掘処理

ここからは図中の②にあたる反映処理になります。 反映はコンソール上でminer.start()するだけで終わりですが、折角なのでブロックが進んでいることも確認しながらやってみます。

現在のブロック番号確認

現時点でどこまでブロックが作成されているか確認するために、eth.blockNumberを実行します

> eth.blockNumber
218

トランザクションの反映

では実際にブロックチェーンに反映させて、Etherを移動させてみます

> miner.start()
> I0220 10:51:45.011261 miner/unconfirmed.go:83] 🔨  mined potential block #219 [d1156880…], waiting for 5 blocks to confirm
I0220 10:51:45.011766 miner/worker.go:517] commit new work on block 220 with 0 txs & 0 uncles. Took 412.569µs
I0220 10:51:45.020900 miner/unconfirmed.go:83] 🔨  mined potential block #219 [783c564e…], waiting for 5 blocks to confirm
I0220 10:51:45.026548 miner/unconfirmed.go:83] 🔨  mined potential block #219 [dd5581bf…], waiting for 5 blocks to confirm
I

// 動き始めたので止める
> miner.stop()
true

// ブロックチェーンの確認
> eth.blockNumber
228

// 反映されたかaccount[1]の値を確認
> eth.getBalance(eth.accounts[1])
1000000000000000000

// わかりづらいのでwei値に変換してみる
> web3.fromWei(eth.getBalance(eth.accounts[1]), "ether")
1
>

ちゃんと1weiほど移動できたのが確認できました!

ブロックチェーンを体験する 1回目 ユーザ追加からマイニング

ブロックチェーンを体験する

の第1回です

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

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

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

目標

geth(Go版のethreum)を立ち上げ、ユーザー追加して採掘(マイニング)してみる。 最終目的はコントラクトの実行なのですが、コントラクト実行するためにはEtherが必要です。そこで少しだけ採掘をやってお金(Ether)を稼いでおきます。

作業の流れ

  1. Geth(Ethereum)環境の構築・実行
    プライベートなEthereumを構築していきます
  2. ユーザ作成
    1で作成したEthereum環境に二つのユーザを作成します。今後この二つのユーザ間でお金(ETH)をやりとりしていきます。 下図ではいきなりブロックチェーンネットワークにユーザ作成しているようになっていますが、実際には1で作成したGeth にコンソール経由で作成し、3を実行することで伝搬させていくイメージになります
  3. 採掘
    2で作成したユーザで採掘(マイニング)を実行させ、採掘した手数料としてETHを受け取ってみます。 ただし、今回実際にはブロックは作成しません

f:id:kegamin:20170217163144p:plain

前提

OSによっての差異がありますので、個別にググってみて下さい。 ちなみに私はmacなのでhomebrewで入れました。

  • geth(1.5.9-stable)のインストール済み
  • Solidity(0.4.9)のインストール済み

差異がある場合は注意して下さい。コマンドの戻り値のjsonが違っていたりで、その先のコマンドが変わってくる可能性があります(というか本から大分バージョンアップしているので実際ありました)。

Geth(Ethereum)環境の構築・実行

ethereumのGO版であるgethを今回使っていきます。 インストールは済んでいるとし、ローカルネットワークに閉じたethereumを作って立ち上げていきます。

種々のファイルを保存するディレクトリの作成

特に指定はしていませんが、適当な場所に作って下さい

# 好きな場所に作成する
$ mkdir eth_private_net

gethの起動用パラメータ(Genesisファイル)の準備

localで起動させ、マイニングの難易度を下げたgenesisファイルを作成します。ここでdifficultyなどを変えることで採掘の難易度の変更とかできます。

$ cd eth_private_net
$ vi genesis.json
$ cat genesis.json
{
  "nonce": "0x0000000000000042",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "difficulty": "0x00",
  "alloc": {},
  "coinbase": "0x0000000000000000000000000000000000000000",
  "timestamp": "0x00",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit": "0xffffffff"
}

ethereum初期化

作成したgenesis.jsonを利用して初期化をします

$ geth eth_private_net init eth_private_net/genesis.json

$ ls -l eth_private_net
-rw-r--r--  1 user  staff  355  2 15 17:04 genesis.json
drwxr-xr-x  3 user  staff  102  2 15 19:52 geth
drwx------  2 user  staff   68  2 15 19:52 keystore

コンパイラーのバージョンを確認。現在(2018/2/15時点で0.4.9)

実行する前にコンパイラであるsolidityのバージョンをチェックしておきます。現在0.4.9ですが、大きく違っている場合は今後のコマンドが違っている可能性があるので気をつけて下さい。

$ solc --version                                                                     solc, the solidity compiler commandline interface
Version: 0.4.9+commit.364da425.Darwin.appleclang
# solcのディレクトリを確認
$ which
solc                                                                         /usr/local/bin/solc

geth(GO製のethereum)の立ち上げ

今は特に気にせず以下の通り実行すればOKでしょう

geth --datadir eth_private_net --rpc --rpcaddr "localhost" --rpcport "8545" --rpccorsdomain "*" console

ユーザ作成

一人だけだと何やってるかさっぱりなので、一応二人作って変化を見ていこうと思います。 gethコマンドでconsoleを入れているとコンソールの>が出ていますので、以下の通り実行して二人のユーザを作成して下さい。

> personal.newAccount("pass1")
> personal.newAccount("pass2")
// ユーザ確認。上手くいってれば二つの値が表示される
> eth.accounts
["0x05b52fcf41646bafc6506e140ab2c571b5f3e32c", "0x14c528d860980ed14719cf99958c3dfdbd6423e9"]

このユーザーのハッシュは使っていくのでメモっておいて下さい。

採掘

今後のコントラクトの実行には税金(ether)を納める必要があるので、取りあえずpass1にあたるユーザに採掘をさせてお金を稼がせておきます。(初回だけDAG …% というのが表示されて少し時間がかかります)

> miner.start() // 採掘スタート
> eth.mining    // 採掘確認
> miner.stop()  // よしなに採掘を止める
> eth.getBalance(eth.accounts[0])  // 採掘金額を調べる
1.1178125e+21

書いていませんが、デフォルトだと最初の一人目のユーザで自動的にminer.start()されます。変更したい場合はminser.setEtherbase(eth.accounts[1])などやるとOKです。

感想

もう色々本の内容を読みながら「???」がずっとでっぱなしでした。

作ったユーザはどこに存在するのか

ローカルに作ってるように見えますが、実際にはマイニングすることでブロックチェーンのネットワークにブロードキャストされるのかな。 この辺の仕組みは、以下の本を読んでやっと理解できました。ビットコインの例ですが、仕組みは同じでしょう。ビーカーの例え超わかりやすい

未来を変える通貨 ビットコイン改革論【新版】 (NextPublishing)

未来を変える通貨 ビットコイン改革論【新版】 (NextPublishing)

お金の移動をしてないのに、なぜ採掘できるのか

金銭のやりとりは発生していなくてもマイニング自体はできてその報酬も払われる仕組みのようです。 genesis.jsonの難易度を変える事でその辺の動きもよくわかるかも

EVMとブロックチェーンネットワーク

この二つの違いが一番「???」でした。EVM上のコンソールで色々作業するのですが、EVMとブロックチェーンネットワーク の理解は是非とも「未来を変える通貨 ビットコイン改革論【新版】 (NextPublishing)」と「ブロックチェーン 仕組みと理論 サンプルで学ぶFinTechのコア技術」を併用しながら理解するといいかもしれません。というか前者をまず最初に読むべきでした。難しい・・・

ブロックチェーンを体験する 0回目 全体概要

現在下記本を買って色々遊んでいますが、至る所でVer変更による差異があって実行できないので、 現時点(2017/2/16)の実行手順も含めて色々書いていきます。

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

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

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

やってみるとわかるのですが、ethereum(and solidity)はバージョンアップによる破壊的変更が半端ないです。これは現状しょうがないので、しっかりと仕組みを理解しておく必要があります。特にコマンドの戻り値であるjson形式の変更が多いので、変わってないか逐一見た法が吉です。

しかし現状「ブロックチェーン 仕組みと理論 サンプルで学ぶFinTechのコア技術」で学んだ方がよいかなと思っています。ただしこっちは、ブラウザでよしなにやる手順なので理屈を細かく実行してみたい!って人には駄目かな・・・?「スマートコントラクト本格入門」はちょっと不親切で、端折ってる部分が多い印象です。ただしフレームワークを使わずにしっかり理解したい分には丁度いいかもしれませんが

ブロックチェーン 仕組みと理論  サンプルで学ぶFinTechのコア技術

ブロックチェーン 仕組みと理論 サンプルで学ぶFinTechのコア技術

  • 作者: 赤羽喜治編著,愛敬真生編著
  • 出版社/メーカー: リックテレコム
  • 発売日: 2016/10/15
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

目次

全体イメージ

全体はこんなイメージです。本には一切流れを示す図がないので、何をやってるかさっぱりです。。

f:id:kegamin:20170217160651p:plain

まだ間違っている部分もあると思いますが、こういった図を使いながら説明していこうと思っています (残高部分とか、実際とは違う部分もありますが、わかりやすさ優先で・・・)

参考にしたサイト

主に以下のサイトを使いながらやっています。 やっぱり原点となる英語サイト見ないと駄目な事が多いですね。。。

日本語

英語

【スポンサーリンク】