SmartContractをデプロイした場合にEthereumネットワークのBlockにどのように情報が残るのかは前回わかったので、
今度はSmartContractにトランザクションを発行した場合にEthereumネットワークのBlockにどのように情報が残るのか追ってみました。
前回の情報はこちら
garapon.hatenablog.com
つかうSmartContractとかは前回の続きで行きます。
CoinBaseアカウントに50の初期値をセット。
Tx -> Coin @ 0xe74.. mint(0x11b00fff3570ac74d66192ffc18d3621b0b3dc4e,50)
ペンディングトランザクションを見てみると、このように見えます。
> eth.pendingTransactions [{ data: "0x40c10f1900000000000000000000000011b00fff3570ac74d66192ffc18d3621b0b3dc4e0000000000000000000000000000000000000000000000000000000000000032", from: "0x11b00fff3570ac74d66192ffc18d3621b0b3dc4e", gas: "1800000", gasPrice: "50000000000", hash: "0xe72094e5f1b39eeb5c855b2f779bd70c2417745d4cdb0e3f7077b62cf250e478", nonce: "27", to: "0xe74698567b7b89310afa9fd869ffd5f09786a471", value: "0" }]
「data」のところに通信データが埋まっていますね。
40c10f19000000000000000000000000 // 呼び出しメソッドバイナリ値 11b00fff3570ac74d66192ffc18d3621b0b3dc4e // adress 0000000000000000000000000000000000000000000000000000000000000032 // amount unit256
分解してみるとこんな感じですね。
呼び出しメソッドバイナリ値と送信先のアドレス情報「1b00fff3570ac74d66192ffc18d3621b0b3dc4e」
送信額の50が「32」という感じで16進数になっています。uint256の前に0が付き捲っているのは引数の確保バイト数だけ領域が取得されるためですね。
ちなみにuinit256の最大値は
115792089237316000000000000000000000000000000000000000000000000000000000000000
で10進数だと78桁もあり、16進数でも64桁になるので0がつきまくります。
マイニング(取引の実行)
マイニングしてから見てみると
> eth.pendingTransactions
null
ペンディングはなくなっていて、
バランスを確認すると以下のように50に増えています。
Call -> Coin @ 0xe74.. queryBalance(0x11b00fff3570ac74d66192ffc18d3621b0b3dc4e): 50
ブロックにはどうかかれているか
> eth.getTransactionFromBlock(581) { blockHash: "0xe5a005d0cb1c01937bc1156b54229a2cd5b8157f9b2948d576249d2eb5e9a509", blockNumber: 581, from: "0x11b00fff3570ac74d66192ffc18d3621b0b3dc4e", gas: 1800000, gasPrice: 50000000000, hash: "0xe72094e5f1b39eeb5c855b2f779bd70c2417745d4cdb0e3f7077b62cf250e478", input: "0x40c10f1900000000000000000000000011b00fff3570ac74d66192ffc18d3621b0b3dc4e0000000000000000000000000000000000000000000000000000000000000032", nonce: 27, to: "0xe74698567b7b89310afa9fd869ffd5f09786a471", transactionIndex: 0, value: 0 }
と見えていて。ブロックに取引情報が記載されていることがわかりました。