[アップデート] Amazon Managed Blockchain Query で Ethreum テストネットの Sepolia が使えるようになったので試してみた

2023.10.21

いわさです。

AWS のマネージドなブロックチェーンサービスに Amazon Managed Blockchain があります。

先日のアップデートで、Sepolia が Amazon Managed Blockchain Query で使うことが出来るというアナウンスがありました。

このアップデートの前提となる Amazon Managed Blockchain Query は数ヶ月前に登場したものなのですが、実際に触ることがまだ出来ていませんでした。
そこで本日はこちらのテストネットのアップデートを試しがてら、Amazon Managed Blockchain Query を体験してみたいと思います。

イーサリアムネットワークのおさらい

まず、Ehtereum にはメインネットとテストネットの概念があります。

メインネットは一般的に利用されているネットワークでここでのトークンは現実世界での価値を持っており、取引に使用されています。
一方で、メインネットにスマートコントラクトをデプロイする前に、開発者はテストネットにスマートコントラクトをデプロイしてテストすることが出来ます。

テストネットはいくつか存在していて、本日時点では主要なテストネットは Goerli です。
他には冒頭のアップデートアナウンスで登場した Sepolia があります。こちらもメインで使用されていますが長期的には維持されない予定とドキュメントには記述されています。

Sepolia is the recommended default testnet for application development

日本語ドキュメントでは「Sepolia (セポリア)は、プルーフ・オブ・ステークのテストネットです。 Sepolia はまだ稼働していますが、長期的には維持されない予定です。」と説明されていますが、英語版ドキュメントでは上記のようにデフォルトのテストネットとして推奨されています。

また、Goerli は現在は非推奨となっており、Holešovice Testnet に置き換わっているようです。

他にも Ropsten、Rinkeby なども存在していますが、それらは非推奨で、実際に Amazon Managed Blockchain でも新規のノードをそれらのネットワークに作成することは出来なくなっています。

Amazon Managed Blockchain Query

Amazon Managed Blockchain は、以前は Ethereum のパブリックネットワークに AWS のマネージドノードを作成して参加させたり、あるいは Hyperledger Fabric のプライベートネットワークをマネージドに構築する、どちらかというとマネージドな基盤を用意するもの位置づけのサービスでした。

実は数ヶ月前のアップデートで、新たに「Amazon Managed Blockchain Query」と呼ばれる機能が追加されています。

従来の機能を Amazon Managed Blockchain Access と位置付けた上で Bitcoin ネットワークへのサーバーレスエンドポイントを追加し、さらに Amazon Managed Blockchain Query という名前で特定のパブリックネットワークのトークンへクエリ用途でアクセスするサーバーレスな API が提供されるようになっています。

要は、トークンの参照用途の特定アクションであれば複数の異なるトークン(Bitcoin, Ethereum, ECR 準拠の独自トークン)に対して AWS の API を経由して、しかも共通のインターフェースで情報をサクッと取得することが出来るようになっています。

なお、前者の Amazon Managed Blockchain Access は従来サービスが提供されていたリージョン(東京リージョン含む)で提供されていますが、後者の Amazon Managed Blockchain Query は本日時点でバージニア北部リージョンでのみ提供されています。

クエリエディタ

Amazon Managed Blockchain Query の機能のひとつとしてクエリエディタが提供されています。
こちらを使うと AWS マネジメントコンソールから簡単にトークンへのクエリを発行することが出来ます。

アクセス方法ですが、東京リージョンでは次のような表示となっており特にメニューが見当たりません。

バージニア北部リージョンに切り替えると、次のようにクエリエディターのメニューが表示されていることが確認出来ます。

後ほど実際にテストネットで使った様子を紹介しますが、次のように対象のブロックチェーンネットワークやクエリタイプ(アクション)、ウォレットアドレスなど、クエリに必要な情報を入力して実行することで結果を取得することが出来ます。

サポートされているアクションは本日時点で次の 8 つです。

  • BatchGetTokenBalance
  • GetAssetContract
  • GetTokenBalance
  • GetTransaction
  • ListAssetContracts
  • ListTokenBalances
  • ListTransactionEvents
  • ListTransactions

ただし Bitcoin で使用出来なかったり、ERC-20 のコントラクトでのみサポートされているアクションなどがあるので、使いたいトークンによってどこまでの機能が使用出来るか異なっている点にご注意ください。

特徴としては、Bitcoin でも Ethereum でも独自トークンでも同じ形式のインプットで、同じ形式のアウトプットを得られるという点です。
こういった特徴から複数のブロックチェーンを扱う場合でも、インターフェースが標準化されているため特殊なインフラや ETL の仕組みを必要とせずに AWS のサービスと統合出来る点が機能のコンセプトとして挙げられています。

料金

料金はリクエスト回数に基づく従量課金となっています。

本日時点ではどのネットワークを使った場合でもだいたい 100 万リクエストで 7 ~ 9 USD といったところでしょうか。

Sepolia が使えるように

ではここからは実際に今回のアップデートで Sepolia テストネットが使えるようになったので、今回はネイティブ ETH トークンを使ってみたいと思います。

事前に Sepolia ネットワークに適当なウォレットを作成してトークンを配布済みです。このあたりの準備手順はネット上にたくさんあるので割愛させて頂きます。

クエリエディタ

まずはクエリエディタから確認してみます。
ブロックチェーンネットワークの選択メニューに次のように「EHTEREUM_SEPOLIA_TESTNET」が追加されていました。

Goerli は?という感じも少しします。 逆に Amazon Managed Blockchain Access のマネージドノードでは、Goerli には参加出来るのですが、Seplia には参加出来ないんですよね。

今回は GetTokenBalance アクションを試してみます。
次のようにブロックチェーンアドレスにウォレットアドレスを指定し、コントラクトアドレスは不要で、トークン ID にethを指定します。
ドキュメントからすると、ネイティブトークンの場合はトークン ID が必須のようです。

クエリを実行するとすぐに結果を得ることが出来ました。

なお、この場合の balance の単位は wei となっており、500000000000000000 wei は 0.5 ETH となります。
オプションを省略していますが、日時を指定して特定時点の残額を確認することも可能なようです。

AWS CLI で実行

Amazon Managed Blockchain Query の真髄というかユースケースはおそらくクエリエディタではなくて API なのですが、AWS SDK や CLI などを経由して、IAM で制御しながら使うことが出来ます。

先程と同じ条件でget-token-balanceを使うと

% cat param.json 
{
    "tokenIdentifier": {
        "network": "ETHEREUM_SEPOLIA_TESTNET",
        "tokenId": "eth"
    },
    "ownerIdentifier": {
        "address": "0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    }
}

% aws managedblockchain-query get-token-balance --cli-input-json file://param.json --region us-ea
st-1
{
    "ownerIdentifier": {
        "address": "0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    },
    "tokenIdentifier": {
        "network": "ETHEREUM_SEPOLIA_TESTNET",
        "tokenId": "eth"
    },
    "balance": "500000000000000000",
    "atBlockchainInstant": {
        "time": "2023-10-21T09:55:57+09:00"
    },
    "lastUpdatedTime": {
        "time": "2023-10-21T08:45:36+09:00"
    }
}

良いですね。
個別にライブラリを導入したりしなくてもちょっと情報を取得するだけであれば AWS API は手軽ですね。
どういうユースケースで使えるかアイディアがまだ無いですが、Step Functions とかも組み込みやすそう。

さいごに

本日は Amazon Managed Blockchain Query で Ethreum テストネットに Sepolia が使えるようになったので、はじめて Amazon Managed Blockchain Query を使ってみました。

Sepolia について語れるほどのナレッジが無いのですが、Amazon Managed Blockchain Query はなかなか良いなと思いました。
マルチチェーン的な使い方をする際におもしろいかもしれません。