[アップデート] Amazon Managed Blockchain (AMB) のサーバーレスパブリックネットワークで Polygon がプレビュー利用出来るようになりました #AWSreInvent

2023.11.28

いわさです。

昨日より、AMB のサーバーレスパブリックネットワークで Polygon がプレビューで使えるようになったので紹介します。

AMB のサーバーレスパブリックネットワークとは

AMB は従来は AMB のマネージドノードをプロビジョニングすることで、独自でノードのセットアップや管理をせずともブロックチェーンネットワークへの参加、あるいはプライベートチェーンのネットワークを簡単にデプロイ出来るというものでした。
昨今は新たにサーバーレスパブリックネットワークという機能がリリースされており、ユーザのマネージドノードのプロビジョニングも不要で、セットアップ不要ですぐにエンドポイントが利用可能です。

AMB のサーバーレスパブリックネットワークは先日までは Bitcoin のメインネットとテストネットがサポートされていたのですが、今回プレビューですが Polygon のメインネットとテストネットが利用可能になりました。

本日時点ではバージニア北部リージョンでのみ利用可能で、次のようにエンドポイントを確認することが出来ます。

Polygon とは

Polygon は Ethereum のレイヤー2 ソリューションです。

ブロックチェーンはその仕組上どうしてもトランザクションの処理速度などがボトルネックになりやすいです。

私も昔、とあるブロックチェーンを組み込んだソリューションを開発しており、テストネットからメインネットに切り替えた時に性能問題が発生し、割りと大規模な障害を発生させたことがあります。
ガスで殴ることでちょっと速くなるブロックチェーンもありますが、それでも一般的な RDBMS のような使い方を想定している方はかなり戸惑うと思います。

ブロックチェーンの性能問題を解決するアプローチとして、オフチェーンでうまいこと処理してオンチェーンに戻してやる方法があります。
昔は Ethereum であれば Raiden というものがあったのですが、今は Polygon が主流です。

厳密にはサイドチェーンとレイヤー2はコンセプトが少し異なる点があるのですが、メインのオンチェーンの外でうまいことやるという点は同じようです。

エンドポイントにアクセスしてみた

マネジメントコンソールから取得したエンドポイントを使うだけです。簡単です。
ただし、エンドポイントへのアクセスには SigV4 署名あるいはトークンベースでのアクセスが必要です。誰でもアクセスが出来るわけではありません。

それぞれのドキュメントは以下をご確認ください。今回は SigV4 署名でのアクセスを試してみました。

awscurl を使うと SigV4 署名を使った HTTP リクエストを簡単に送信することが出来ます。
ここでは、managedblockchain:InvokeRpcPolygonアクションを許可した IAM ユーザーでアクセスを行っていまがメインネットとテストネットでそれぞれ個別のアクションも用意されていますのでテストネットのみアクセスを許可するような制御も可能です。(managedblockchain:InvokeRpcPolygonMainnetmanagedblockchain:InvokeRpcPolygonMumbaiTesnet

% awscurl \
--region us-east-1 \
--profile hoge-allow \
-X POST \
-d '{ "jsonrpc": "1.0", "id": "eth_getBlockByNumber-curltest", "method":"eth_getBlockByNumber", "params":["latest", false] }' \
--service managedblockchain https://mumbai-testnet.polygon.managedblockchain.us-east-1.amazonaws.com -k
/Users/iwasa.takahito/.pyenv/versions/3.9.8/lib/python3.9/site-packages/urllib3/connectionpool.py:1045: InsecureRequestWarning: Unverified HTTPS request is being made to host 'mumbai-testnet.polygon.managedblockchain.us-east-1.amazonaws.com'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings
  warnings.warn(
{"id":"eth_getBlockByNumber-curltest","jsonrpc":"2.0","result":{"baseFeePerGas":"0x10","difficulty":"0x6","extraData":"0xd88301020083626f7289676f312e32302e3131856c696e757800000000000000eb30888fda37bcf46ca9a1dfbf4fd8f5ada394b4b63db084ec6b6d555f5d3c363c78b1b250fa8e60b8138f818a1c1bd3117410796a9dd89613365b04f83401b500","gasLimit":"0x13cb1f6","gasUsed":"0x172b30","hash":"0x11d2398f1c0f2b2b63183d725ef2a159af0ac5abf787f2a64b8a4915ee6b5d5f","logsBloom":"0x00000000000000020000000000020000000001000000000020008000000610000000000000000000000000000008001000008000000000800014000000040000080000000205000000000408400080808000000000000000000100000101000000000000020000200000000000000800000000008000000080000010000040000800000020001000000000000000000800004000000000000000000080000008200081000002000020400000010000002401000000000000000000000400804000000102000000010001000000000002000000002000000800100001000420000420020004000000000000000000a000002c1008800000000000000020100000","miner":"0x0000000000000000000000000000000000000000","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","number":"0x28eb2e8","parentHash":"0xb43ccacd2211bff7bfc6de952f944be236d384f22e5b29778083a34227857d0d","receiptsRoot":"0x6759ff07a6bcec791a33fcd6a9fe78bf1a446ea27c82da276f4b42b731220f55","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x17fe","stateRoot":"0x5687806c3b776b775630aa753c37c6d64e33823dda238df7c3c46d5ad8463fe0","timestamp":"0x6564b3f8","totalDifficulty":"0xfa88922","transactions":["0xb5b00bf2325bfd04601d2c92e0f44b278a7f36f8f4bf25fd549f45ec44a9edca","0xcaec878b1e695ce5a1ca99b12ac56a337a9bf22e2466c8143ff8328dda0020a5","0xd597985bced4e64f4ca144654282f5af0b160eb28804169ea5d8c5f62f8e42d5","0x8f5ac3cfb63d0c153672ceccec118c327543f82b3f86de5ac7a837978436e9f3","0x24abcfa9a6b7557e02e7bf945f9c30ff975301f282ef822cec7cf7e36dc1538e"],"transactionsRoot":"0xa3de4aad95031ff3af3abcbe073b3b3a621d2726293cb9be26bb7e4c84fe588a","uncles":[]}}

アクセスに成功しました。トークン情報が取得出来ています。

一方で、次はアクセス権限のない IAM ユーザーの場合です。
403 Forbiddenで拒否されていることが確認できます。

% awscurl \
--region us-east-1 \
--profile hoge-deny \
-X POST \
-d '{ "jsonrpc": "1.0", "id": "eth_getBlockByNumber-curltest", "method":"eth_getBlockByNumber", "params":["latest", false] }' \
--service managedblockchain https://mumbai-testnet.polygon.managedblockchain.us-east-1.amazonaws.com -k
/Users/iwasa.takahito/.pyenv/versions/3.9.8/lib/python3.9/site-packages/urllib3/connectionpool.py:1045: InsecureRequestWarning: Unverified HTTPS request is being made to host 'mumbai-testnet.polygon.managedblockchain.us-east-1.amazonaws.com'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings
  warnings.warn(
{"message":"Something went wrong"}
Traceback (most recent call last):
  File "/Users/iwasa.takahito/.pyenv/versions/3.9.8/bin/awscurl", line 8, in <module>
    sys.exit(main())
  File "/Users/iwasa.takahito/.pyenv/versions/3.9.8/lib/python3.9/site-packages/awscurl/awscurl.py", line 521, in main
    inner_main(sys.argv[1:])
  File "/Users/iwasa.takahito/.pyenv/versions/3.9.8/lib/python3.9/site-packages/awscurl/awscurl.py", line 515, in inner_main
    response.raise_for_status()
  File "/Users/iwasa.takahito/.pyenv/versions/3.9.8/lib/python3.9/site-packages/requests/models.py", line 1021, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://mumbai-testnet.polygon.managedblockchain.us-east-1.amazonaws.com/

さいごに

本日は Amazon Managed Blockchain (AMB) のサーバーレスパブリックネットワークで Polygon がパブリックプレビューで利用出来るようになったので紹介しました。

Ethereum を使ったソリューションを開発していて、さらに Polygon の活用を検討されている方は、是非ノードのホスティング不要でエンドポイントへのアクセスが可能なサーバーレスパブリックエンドポイントも試してみてください。

Bitcoin エンドポイントは東京リージョンでもサポートされているので、GA 時には東京リージョンでも利用可能になるのではと思っています。