Tech & Tips ブロックチェーン

Go-Ethereumで「令和」に会いに行く

投稿日:

この記事は2年以上前ですので、内容が古い可能性があります

改元されて1ヶ月ちょい経ちましたがいかがお過ごしでしょうか。
私はというと駆け出しですがブロックチェーンに関わるようになりました。
これまでのWebアプリ開発と異なることが多いのでとても苦労しています。。。
ということで今回はブロックチェーン(Ethereum)ネタです。

Ethereumのブロックチェーン上に「令和」が書き込まれている

らしいです。

実際に書き込まれているかGo-Ethereum(Geth)を使用して確認してみます。

Gethとは

その名の通りGo言語で作られたEthereumのクライアントです。サードパーティで作られたクライアント(Parity等)もありますが、Gethはオフィシャルです。
Ubuntuならaptを使用して

$ sudo add-apt-repository -y ppa:ethereum/ethereum
$ sudo apt-get update
$ sudo apt-get install ethereum

macOSならHomebrewを使用して

$ brew tap ethereum/ethereum
$ brew install ethereum

でインストールできます。
ちなみに私の環境は

$ geth version
Geth
Version: 1.8.27-stable
Git Commit: 4bcc0a37ab70cb79b16893556cffdaad6974e7d8
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.10.4
Operating System: linux
GOPATH=
GOROOT=/usr/lib/go-1.10

となっております。

Ethereumのメインネットに接続

メインネットについて簡単に説明すると、仮想通貨としてのEthereumが稼働しているネットワークのことです。
このほかにテストネットや企業・個人が運用しているプライベートネットなどがあります。
Gethからメインネットに接続するには下記のようにします。

$ geth --syncmode light console 2>>/dev/null

--syncmode lightとすることで軽量クライアントモードで接続します。
デフォルトでは--syncmode fastとなり、100GB以上のデータをダウンロード(同期)しようとするので注意です。
また、Gethの入門サイト等ではよく

  • アカウントを作成する
  • genesis.jsonを作成する

等の説明がありますが、今回はトランザクションの中身を見るだけなのでアカウントは作成しません。また、メインネットに接続するのでgenesis.jsonも作成する必要はありません。
上記コマンドを実行すると下記のような表示になるかと思います。

Welcome to the Geth JavaScript console!

instance: Geth/v1.8.27-stable-4bcc0a37/linux-amd64/go1.10.4
 modules: admin:1.0 debug:1.0 eth:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

>

ブロックが同期されるのを待つ

コンソールにeth.blockNumberと入力してみます。

> eth.blockNumber
0

今回の目的のトランザクションはブロック数7480083に記録されているので、eth.blockNumberが7480083以上になるまでしばらく待ちます。

> eth.blockNumber
7486847

いよいよ本題

ようやく準備が整ったので順にデータを取得してみます。
まずはブロックの番号からトランザクションを取得します。

> eth.getTransactionFromBlock(7480083)

{
  blockHash: "0x06dc646e88e5a6a07f173c899895decad86b86ee45ff24c9ff953061a19253b4",
  blockNumber: 7480083,
  from: "0x65f72c3f0c69625247d681ee845b0c92b0ec0c78",
  gas: 25000,
  gasPrice: 100000000000,
  hash: "0x5053ad06a78ff9e676e4d7b8c55a31052c20048493ea8cd72a1ba7a74f3aa419",
  input: "0x4a6170616e657365206e657720657261206e616d652069732052656977612e",
  nonce: 6,
  r: "0x34774c408681a723e5c6af0e6f08136fea9b1f92b5af6f48ad552530335a057c",
  s: "0x597fa8922c1f2c90f5858080308ee23754554c26e59f5a3abacd645f1aa9ab54",
  to: "0x035bfd7b6f512a07843ee369a931fbc23c7e6f1d",
  transactionIndex: 0,
  v: "0x26",
  value: 1
}

16進数にエンコードされているためパッと見分からないですが、inputのところに目的の文字列が書かれています。
inputの項目は主にスマートコントラクトを実行するときに使用され、呼び出すメソッドや引数なんかが入っています。
通常のウォレット間の送金時には必須ではない項目なので、16進数にエンコードさえしていれば自由な値を入れることができます。
16進数の値をデコードするにはweb3.toUtf8()を使用します。

> var tx = eth.getTransactionFromBlock(7480083)
undefined 
> web3.toUtf8(tx.input)
"Japanese new era name is Reiwa."

いかがでしょうか?「令和」に出会えましたでしょうか?

参考

Ethereum入門 - Gethをインストールする

この記事をシェアする:
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

私たちと一緒に働きませんか?

「Go-Ethereumで「令和」に会いに行く」はいかがでしたか?
株式会社プレスマンでは、 WordPressが大好きな方、仕事を通してさらにスキルを磨きたい方を募集しています。 まずは募集職種をご覧の上、お気軽にお問い合わせください。 あなたとお会いできるのを楽しみにしています。

採用情報を見る

-Tech & Tips, ブロックチェーン
-,

© 2024 PRESSMAN*Tech Powered by STINGER