etherを送金する

先の節で、採掘の報酬としてEthereumの内部通貨であるetherを取得することができました 1。この節では、採掘で得たetherを他のEOAへ送金する方法と、その際に発生するトランザクションとその手数料について見ていきます。

etherの送金

まず最初にもう一度、今回作成したアカウントのetherの持ち高を確認しておきましょう。

> eth.accounts // 登録されている2つのアカウントを表示。
['0x24afe6c0c64821349bc1bfa73110512b33fa18e1', '0x59c444d6c4f4187d1dd1875ad74a558a2a3e20b6' ]
> eth.getBalance(eth.accounts[0]) // etherbaseである1番目のアカウントにetherの持ち高がある(採掘の報酬)。
'72500000000000000000'
> eth.getBalance(eth.accounts[1]) // 2番目のアカウントにはetherの持ち高はない。
'0'

accounts[0]のEOAは、725 ether を保有している一方で、もう一方のaccounts[1]のEOAはetherを保有していないのがわかります。

この状態でaccounts[0]から、accounts[1]へ、5 ether を送金します。送金はeth.sendTransactionコマンドを用います。ここでfromに送金元アドレス、toに宛先アドレス、valueに送金額を指定します。なお、実際には送金時に送金元のアカウントのロックの解除が事前に必要なので解除を行った後に送金を行います2

> personal.unlockAccount(eth.accounts[0]) //アカウントのロック解除。パスワードを求められるので、適宜パスワードを入力する。
Unlock account 24afe6c0c64821349bc1bfa73110512b33fa18e1
Passphrase:
true

> eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(5, "ether")}) //送金の実行。アカウントのパスワードの入力を求められるので従う。実行結果としてトランザクションIDが返される。
Please unlock account 24afe6c0c64821349bc1bfa73110512b33fa18e1.
Passphrase:
Account is now unlocked for this session.
'0xc86c2a5bdf651f54095eca87e487d4f68f12030dd559f0377e9e7bf1566b9b28'

送金額はweiの単位での指定のため、単位変換関数であるweb.toWeiを用いています。このコマンドを実行すると、実行結果としてトランザクションIDが返されます。コマンド実行後、しばらくして送金先のether保有額を確認すると、下記のように、問題なく5 ether (= 5 × 10^18 wei) が送金されていることが分かります。

> eth.getBalance(eth.accounts[1])
'5000000000000000000'

【注意】送金の際は、採掘処理をバックグラウンドで実行しておく必要があります。今回の例ではテスト・ネットでの送金であり、採掘者は自分自身しかいないため、自身が採掘を実行中でないとトランザクションが処理されません。

トランザクション手数料

同じように今度は逆に、'0x59c44...'のアカウントから、'0x24afe...'に 3 ether 送金してみましょう。

> eth.getBalance(eth.accounts[1]),"ether" //保有額を確認。最初に送金された 5 ether を保有している。
'5000000000000000000'
> 
> eth.sendTransaction({from: eth.accounts[1], to: eth.accounts[0], value: web3.toWei(3, "ether")}) // 3 ether を'0x24afe...'に送金。
'0x5fd0bdcccb379a8b4034668464ad9a499a8a6b7801ed66ac23e4df3d67ec64a5'
>
> eth.getBalance(eth.accounts[1]) // 送金後の保有額を確認。 5 - 3 = 2 ether のはずが・・・・
'1998825500779091000'

5 ether 保有していた状態から、3 ether 送金したため、'0x59c44...' のアカウントの ether保有額は 2 ether と予想されるのですが、実際には 2 ether よりも小さい額になっています。

実は、この送金額以上に引かれた差額分(1,174,499,220,909,000 wei)がトランザクションを生成した際に採掘者に対して支払うトランザクション手数料となっており、採掘者の報酬に加えられます。

トランザクション情報を調べる。

ここで、トランザクションについてもう少し詳しく調べてみましょう。トランザクションの情報はeth.getTransaction(tx_id)コマンドで調べることができます。先ほど行ったaccounts[1]のアドレスから 3 ether 送金した際のトランザクションの情報を見てみます。パラメーター、tx_idには、送金実行時に返されたトランザクションIDを指定します。

> eth.getTransaction('0x5fd0bdcccb379a8b4034668464ad9a499a8a6b7801ed66ac23e4df3d67ec64a5')
{
  blockHash: '0xeef0f74bc51ecb9f3d64099fa4f3c1651af36a632380d41dd987e8e7064a5276',
  blockNumber: 11076,
  from: '0x868d840e872df5134a3be6f7b68e52cb680fe3ac',
  gas: 90000,
  gasPrice: '55928534329',
  hash: '0x5fd0bdcccb379a8b4034668464ad9a499a8a6b7801ed66ac23e4df3d67ec64a5',
  input: '0x',
  nonce: 0,
  to: '0x2efbdc840746c862b63077643e5b7dd8bebb8448',
  transactionIndex: 0,
  value: '3000000000000000000'
}

主な項目について簡単に見ていきましょう。

  • blockHash & blockNumber:このトランザクションを含んだブロックのヘッダ・ハッシュとブロック高を示しています。まだこのトランザクションを含んだブロックが採掘されていないときには、これらのフィールドは空の状態で表示されます。
  • gas:トランザクションの処理時のgasの使用量の「最大値」を示しています。(実際のトランザクション処理時のgasの使用量ではないので、注意してください。実際にトランザクション処理時に使用されたgasの量を知る方法は下記のTIPを参照ください。)
  • gasPrice:トランザクションの処理時に採掘者に支払う1 gas 当たりの手数料(wei)を示しています。
  • from & to & value:それぞれ、トランザクションにより送金する送金元、宛先、送金額(wei)を示しています。
TIP

上記のようにトランザクション情報で表示されるgasの量は、トランザクションの処理時に許容する「最大」gas使用量を示していました。では、実際に今回のトランザクションにどれだけののgasを使用したのかを知るためにはどうしたらよいのでしょうか?今回のトランザクションの手数料は先に書いたとおり、1,174,499,220,909,000 wei でした。またトランザクションの情報から1 gas 当たりの手数料gasPriceは 55,928,534,329 wei と分かるので、実際に今回のトランザクションで使用したgasの量は、(1,174,499,220,909,000 / 55,928,534,329) $$=$$ 21,000 となり、 21,000 gas が使用されたことがわかります。

脚注

1. テスト・ネット上での採掘のため、Ethereumの本番ネットワークであるライブ・ネット上では利用できませんのでご注意ください。
2. デフォルトではロック解除のコマンドから300秒経過すると再び自動でアカウントはロックされます。そのため300秒経過後に送金等を行う場合には再度アカウントの解除する必要があります。

results matching ""

    No results matching ""