改元されて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をインストールする

この記事をシェアする:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

東日本橋の制作・開発会社 プレスマンのスタッフブログ