2024-03-25


			Ubuntu Server 21.10でイーサリアムブロックチェーン【その1】
Ubuntu Server 21.10でイーサリアムブロックチェーン【その2】
続きです。では前回採掘で得たイーサリアムを、2番目のアカウントに送金してみます。
web3.fromWei(eth.getBalance(eth.accounts[0]),"ether") 4502
4502ETHも貯まっている…ので、1000ETHほどアカウント2(eth.accounts[1])に送ってみましょう。
web3.fromWei(eth.getBalance(eth.accounts[1]),"ether") 0
アカウント2の残高はゼロです。
1、送金元アカウントのアンロック
送金等の操作をするには、アカウントのロックを解除する必要があります。送金元のaccounts[0]のロックを外します。
personal.unlockAccount(eth.accounts[0]) Unlock account 0x36d9643d7fdb4ed786293133cf9bc721509660b5 Passphrase: true
2、送金トランザクションの発行
それではアカウント2に1000ETH送金します。
eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(1000, "ether")})
"0xb514f0f3fe5a55f0b588cdc2479412bd4edbb4af9f16315b6ba73515ecfb2383"
eth.getTransaction("0xb514f0f3fe5a55f0b588cdc2479412bd4edbb4af9f16315b6ba73515ecfb2383")
{
  blockHash: null,
  blockNumber: null,
  from: "0x36d9643d7fdb4ed786293133cf9bc721509660b5",
  gas: 21000,
  gasPrice: 1000000000,
  hash: "0xb514f0f3fe5a55f0b588cdc2479412bd4edbb4af9f16315b6ba73515ecfb2383",
  input: "0x",
  nonce: 2,
  r: "0x6e7036be4e9bdf681a73e0fdf45811b7e844092e1c47847d82e267095c5164e8",
  s: "0x114fbb3f833ef0446b62dcf18c96cd5dcf3fdfc760d057d485665eda592a63d8",
  to: "0x1a8355a4ae7465f7bf867a1a0ea88932b1c19891",
  transactionIndex: null,
  type: "0x0",
  v: "0x42",
  value: 1e+21
}
トランザクションIDが発行され、getTransactionで内容が見れるようになっています。また、geth_err.logにも発行ログが出ています。
tail /home/hogeuser/eth_test/geth_err.log INFO [03-22|14:46:33.044] Submitted transaction hash=0xb514f0f3fe5a55f0b588cdc2479412bd4edbb4af9f16315b6ba73515ecfb2383 from=0x36D9643D7fDb4ED786293133CF9bc721509660B5 nonce=2 recipient=0x1a8355A4ae7465f7Bf867a1A0ea88932b1c19891 value=1,000,000,000,000,000,000,000
3、送金トランザクションの実行
このままでは何もされず、送金もされません。トランザクションはマイニング(採掘)の一環として処理されるので、マイニングを開始してやる必要があります。
※マイニングにはPCの大量の電力を消費します。自己責任注意※
miner.start()
するとログにはトランザクションを処理したと思われるログが出ました。
tail /home/hogeuser/eth_test/geth_err.log INFO [03-22|14:52:56.400] Updated mining threads threads=4 INFO [03-22|14:52:56.400] Transaction pool price threshold updated price=1,000,000,000 INFO [03-22|14:52:56.401] Commit new sealing work number=2252 sealhash=7f58fb..55a0f3 uncles=0 txs=0 gas=0 fees=0 elapsed="224.647μs" INFO [03-22|14:52:56.401] Commit new sealing work number=2252 sealhash=e14ee4..3680d1 uncles=0 txs=1 gas=21000 fees=2.1e-05 elapsed="708.784μs"
マイニングを終了して確認してみましょう。
miner.stop()
web3.fromWei(eth.getBalance(eth.accounts[1]),"ether")
1000
web3.fromWei(eth.getBalance(eth.accounts[0]),"ether")
3544
eth.getTransaction("0xb514f0f3fe5a55f0b588cdc2479412bd4edbb4af9f16315b6ba73515ecfb2383")
{
  blockHash: "0x45e9a0a8825c469af690789ac9e56a9943a37111c043b201a4cb389f3dc263c1",
  blockNumber: 2252,
  from: "0x36d9643d7fdb4ed786293133cf9bc721509660b5",
  gas: 21000,
  gasPrice: 1000000000,
  hash: "0xb514f0f3fe5a55f0b588cdc2479412bd4edbb4af9f16315b6ba73515ecfb2383",
  input: "0x",
  nonce: 2,
  r: "0x6e7036be4e9bdf681a73e0fdf45811b7e844092e1c47847d82e267095c5164e8",
  s: "0x114fbb3f833ef0446b62dcf18c96cd5dcf3fdfc760d057d485665eda592a63d8",
  to: "0x1a8355a4ae7465f7bf867a1a0ea88932b1c19891",
  transactionIndex: 0,
  type: "0x0",
  v: "0x42",
  value: 1e+21
}
eth.getBlock(2252)
{
  difficulty: 368572,
  extraData: "0xd883010a11846765746888676f312e31372e35856c696e7578",
  gasLimit: 14868757,
  gasUsed: 21000,
  hash: "0x45e9a0a8825c469af690789ac9e56a9943a37111c043b201a4cb389f3dc263c1",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x36d9643d7fdb4ed786293133cf9bc721509660b5",
  mixHash: "0x8fc6d73227e12cd200fede709e6bc7ebd9ecc8235902114ba2c1395e00ba120d",
  nonce: "0x4fc5e78740efb0f4",
  number: 2252,
  parentHash: "0x332ead2b5fc9ec955e9beb17bd8137d32ad8b79215629f670bc92b2ad7f58178",
  receiptsRoot: "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 651,
  stateRoot: "0x68a710014fe845df5b721f0eab2632ab58c5c2224e80638cd37fac42215818dc",
  timestamp: 1647928376,
  totalDifficulty: 534565491,
  transactions: ["0xb514f0f3fe5a55f0b588cdc2479412bd4edbb4af9f16315b6ba73515ecfb2383"],
  transactionsRoot: "0x6e9c87237f12835cb03362a89c3a5864068fcef70a93c573d8d912dc4552830e",
  uncles: []
}
アカウント2に1000ETH無事に着金してることが確認できました。また、処理前には無かったブロック番号が割り当てられ、中身を確認することができるようになっています。
4、受け取ったETHから500ETH送り返してみる
今度は、アカウント2から、受け取った1000ETHのうちの半額=500ETHを、アカウント1に逆に送金してみましょう。
personal.unlockAccount(eth.accounts[1])
Unlock account 0x1a8355a4ae7465f7bf867a1a0ea88932b1c19891
Passphrase:
true
eth.sendTransaction({from: eth.accounts[1], to: eth.accounts[0], value: web3.toWei(500, "ether")})
"0x4071661aeae2e3403a29443dc0ad146f2ed8faed1f9d5c3641a40122a8d24a48"
miner.start()
null
miner.stop()
null
web3.fromWei(eth.getBalance(eth.accounts[1]),"ether")
499.999979
web3.fromWei(eth.getBalance(eth.accounts[0]),"ether")
4050.000021
eth.getBalance(eth.accounts[1])
499999979000000000000
ここで注目すべきは、アカウント2の残高が1000 - 500 = 500ETHでは無いという点です。ガス代=トランザクション処理手数料=が引かれています。
0.000021ETHほどかかっているようです。今現在、1ETHは日本円にして35万円ほどですから、350000×0.000021=7.35日本円かかった、ということになります。
次回は他のgeth起動オプションやブロックの関係を見てみます。
Ubuntu Server 21.10でイーサリアムブロックチェーン【その4】
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
Wav2Lipのオープンソース版を改造して外部から呼べるAPI化する
Wav2Lipのオープンソース版で静止画の口元のみを動かして喋らせる
【iOS】アプリアイコン・ロゴ画像の作成・設定方法
オープンソースリップシンクエンジンSadTalkerをAPI化してアプリから呼ぶ【2】
オープンソースリップシンクエンジンSadTalkerをAPI化してアプリから呼ぶ【1】
【Xcode】iPhone is not available because it is unpairedの対処法
【Let's Encrypt】Failed authorization procedure 503の対処法
【Debian】古いバージョンでapt updateしたら404 not foundでエラーになる場合
ファイアウォール内部のWindows11 PCにmacOS Sequoiaからリモートデスクトップする
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
Windows11のコマンドプロンプトでテキストをコピーする
【Apache】サーバーに同時接続可能なクライアント数を調整する
Androidホームで左にスワイプすると出てくるニュース共を一切表示させない方法
【Linux】mkfsコマンドでProceed anyway?と確認を求められるのを回避する
タスクスケジューラで変更を適用できません。ユーザーアカウントが不明であるか、パスワードが正しくないか、またはユーザーアカウントにタスクを変更する許可がありません。と出た
【Debian】古いバージョンでapt updateしたら404 not foundでエラーになる場合
apt upgradeしたあとnvidia-smiがダメになった場合