fc2ブログ

Ethereumテストネットワークで送金してみる(続き)

どうも、ぺろりんです。

はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer's Books)」のつづきです。

前回はアカウント0からアカウント1へEthereumを送金してみました。
今回は、coinbase(=アカウント0)ではないアカウントから送金することで、手数料が発生する動きを見てみます。


Ethereumの送金手数料

送金にはGasという手数料がかかるのでした。

前回の送金ではcoinbaseであるアカウント0から送金したため実質的に見えなかったのですが、実際にはトランザクションの実行にはGasという手数料がかかっています。

たとえばcoinbaseではないアカウント1からアカウント2へ5[ETH]を送金してから2つのアカウントで残高確認してみると、こんな結果になりました。
> web3.fromWei(eth.getBalance(eth.accounts[1]),"ether")

4.99958
> web3.fromWei(eth.getBalance(eth.accounts[2]),"ether")

5

これを見ると、送り先のアカウント2には5[ETH]が確かに届いていますが、送り主のアカウント1に残っているのは5(=10-5)[ETH]よりも少ないです。

アカウント0の残高を見てると、この減った0.00042[ETH]はcoinbase(=アカウント0)に報酬として支払われていることが分かります。
> web3.fromWei(eth.getBalance(eth.accounts[0]),"ether")
1065.00042


「eth.getTransaction」と「eth.getBlock」というコマンドを使ってみると、手数料がどうなったか見えてきます。
というわけで、これらのコマンドを見てみましょう。

いちおう復習しておくと、前回と同じくアカウントをアンロックして「eth.sendTransaction」を実行して出てくるトランザクションIDを引数にして、まず「eth.getTransaction」を見るとこんな感じ。
> eth.getTransaction("0xdb06571f2f55e5adf9fd9949d81bef7385ddfdf73258b7e90de9312e5b3bb17c")
{
blockHash: "0xd401634e5373f73507f93658798a2204180b7018145ccc40c1951a15c8e29d7d",
blockNumber: 210,
from: "0x3a8e6c0304c761b88feeefb5cdefe27ced28d620",
gas: 90000,
gasPrice: 20000000000,
hash: "0xdb06571f2f55e5adf9fd9949d81bef7385ddfdf73258b7e90de9312e5b3bb17c",
input: "0x",
nonce: 0,
r: "0xf18b45285396c04ead1f4e7ed318df6e398f626fb5b0150e8d4f56e80c6ad735",
s: "0x61e82c4d16863c8186884ed09ecdd1974a8f7d8a5ecefd9758991aedd6bab86a",
to: "0xecac305a22ac002107cdac420e24042d430bcb26",
transactionIndex: 0,
v: "0x1b",
value: 5000000000000000000
}


さらに、ここで出てきたblockNumberの210を引数にしてブロックを見るとこんな内容になっています。
> eth.getBlock(210)
{
difficulty: 141844,
extraData: "0xd783010505846765746887676f312e362e32856c696e7578",
gasLimit: 109320930,
gasUsed: 21000,
hash: "0xd401634e5373f73507f93658798a2204180b7018145ccc40c1951a15c8e29d7d",
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
miner: "0x8ade49123c81461e676fd2f8f2eb31885cdb07e0",
mixHash: "0x77f99c1901f72d3eaad2f5aea85dce821471f8d23a1f1f7e92853cc04d116417",
nonce: "0x3671259b945c8662",
number: 210,
parentHash: "0x0cd16490e3ceba375792cffd22f9ed4b4eecd6712485820f47ed04456de0fc66",
receiptsRoot: "0x895e49c7c281cdf956cd75f726596d7d3e7b68a9f08b462dfb1469ede1d2f812",
sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
size: 651,
stateRoot: "0x369a09f8fbb36aa7a7010f16bb8643cfda6dad78d861696cc5647939f38088a7",
timestamp: 1528018266,
totalDifficulty: 28692719,
transactions: ["0xdb06571f2f55e5adf9fd9949d81bef7385ddfdf73258b7e90de9312e5b3bb17c"],
transactionsRoot: "0x64f4d635547183f729941c809ba518280f8d426e8fdf509d392eb7f5d87f7f7f",
uncles: []
}


ここで注目するのは以下の2つです。
・「eth.getTransaction」の「gasPrice」
・「eth.getBlock」の「gasUsed」

以前お勉強したように、gasPriceというのが1Gasあたりの値段[wei]でした。
上述したコマンドの結果から、今はこれが20000000000[wei]とわかります。
で、使用されたGasが何[Gas]かというのは「gasUsed」で分かり、今は21000[Gas]と読み取れます。
(「eth.getTransaction」の「gas」は支払い可能な最大Gasを表す)

なので結局、手数料として
 gasPrice×gasUsed=20000000000[wei/Gas]×21000[Gas]
 =420000000000000[wei]=0.00042[ETH]
が支払われることになって、先ほどアカウントの残高を確認したときにアカウント1からcoinbase(=アカウント0)に移った0.00042[ETH]と一致します。

アカウント0から他のアカウントに送金したときには支払元のアカウント0は(今の場合)coinbaseなので、「手数料は支払元から引かれる」ことと、「手数料はcoinbaseに支払われる」ことから、自分から引いた手数料を自分が報酬としてもらうことになって、結果として差引0になります。
…というのが前回やったアカウント0からの送金でした。


まとめ

今回は、アカウント間の送金で、Gasと名付けられた手数料が送金元の残高から引かれ、coinbaseアカウントに報酬として支払われる動きを見ました。

送金元がcoinbaseの場合には、自分で払って自分がもらうため、実質手数料がかかってないようになっているのが前回の状況でした。

今回見たのはこんな感じです。

コメントの投稿

Secret

プロフィール

ぺろりん

Author:ぺろりん
まだ始まってもいない暗号資産(仮想通貨)、今後が楽しみです。
基本的な技術をちゃんと知りたいなぁと思いつつ、まったりお勉強していこうかと思います。

twitter:ぺろりん@ぶろっくちぇーん

カテゴリ
最新記事
最新コメント
月別アーカイブ
カレンダー
08 | 2023/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
検索フォーム
RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

Bitcoin 取引情報
Ethereum 取引情報