ぶっちゃけ全然わからない
ので、基本から考え直した。
(自分用のメモみたいなやつなので読まなくていいです)
前提
多分だけどイーサリアムが作った基盤システムみたいなのがあって、それをベースにして色々開発したのがcronoschainって感じだと思った。
で、イーサリアムが作った基盤システムにapiがあって、そこ叩いてブロックチェーンとやり取りするイメージなのかなという印象
正直ライブラリ、ドキュメント貧弱すぎてそのコード読み解くので死ぬほど時間かかる気しかしなかったので、だったらそもそも根幹にあるJSON-RPCのドキュメント等読んだほうがいいのかなと思った
API
理解度低いんであれだけど、REST形式とRPC形式のものがあって、昨今の主流はRPCになってきてるよねって感じなのかなと思った
REST APIとRPCによるアーキテクチャの違いをまとめてやんよ!!! | ときどきWEB
ブロックチェーン系ではRPC使われてて、特にgRPCが使われている様子。
gRPCは上記のRPCスタイルを取り入れた上でhttpメソッド一覧を独自プロトコルファイルを参照窓口にさせてデータをシリアル化してくれることで生データのやりとり基準のRPCにSSL/TLSの暗号規格も組み込んだ温故知新なGoogle様の神ツール。
現在のRPCスタイルはgRPCの利用を前提という認識の模様
要はAPIなのでそんなに難しく考えなくてもいいのかなと思った。
Ethereum type JSON-RPC Methods
#Pre-requisite Readings
Ethereum JSON-RPC
Geth JSON-RPC APIsCronos Integration documentation | Cronos | Crypto.org EVM Chain
まずこれ読め的なこと書いてあるので、ここ読めばいいのかなと思った
APIなのにメソッド?と思ったけど
JSON-RPC とは RPC(Remote Procedure Call)の規格の一つです。RPC とはサーバ側が実装しているメソッドをクライアントが呼び出すことによって処理を行う仕組みのことを指します。そしてクライアントがサーバに対してリクエストを行う際に、メソッド名やメソッドの引数といった情報を構造化するのに JSON を使用したものを JSON-RPC と呼びます。こちらのサイト に具体的な仕様についての説明がなされているので、興味のある方はご覧になってみてください。具体的にはクライアント側は以下のようなリクエストをサーバ側に対して行います。
ということらしい。すまねぇREST APIすらよく分かんねえんだ…
従来のREST APIだと(多分だけど)何かしらのエンドポイント(要はurlみたいなもん)に対してgetしたりpostしたりするとそれに応じてresponse返ってきたり、DBに書き込めたりした
それがRPC形式のAPIの場合は、一つのエンドポイントに対して複数のメソッドを用意して、そのメソッドごとに振る舞いを変えることができる。みたいな感じなのかなと思った
この「関数呼び出し」を、実はローカルではなく 別の環境に接続して代わりに実行しよう 、というものが Remote Procedure Call です。
まあ多分大体合ってるんだろうなと思った。
---
考えをまとめたかったので書いてみた
要はイーサ規格のJSON-RPCがあって、それをエンドポイント指定して(今回ならcronos chainのもの)メソッド実行してあげれば、cronos chainのブロックチェーンを触ることができる。ってイメージなのかなと思った。
提供されてるライブラリはそれを簡易に行うためのものってだけで、別にJSON-RPCのメソッド理解して、ちゃんと組み合わせられればそれで十分動かせるのかなと思った
まあドキュメント見てる限り、イーサで用意してるJSON-RPCの対応範囲はチェーンによって変わるっぽい雰囲気あるけど。
mainnet とか testnetがエンドポイントで、mainnetであれば本番環境、testnetであればテスト環境って感じなはず。
ひとまずJSON-RPCのドキュメント読めばいいのかなと思った。てかGethってなに?
↑色々ググってみた感じgeth使ってノードにアクセスするみたいな感じらしい。ノードがjson-rpc提供してる感じ?なるほど確かにノード前rpcって言ってたもんな、そういうことか……
というイメージ
これはBSC(バイナンススマートチェーン)のだけど
You can start the HTTP JSON-RPC with the --rpc flag
## mainnet
geth attach https://bsc-dataseed1.binance.org## testnet
geth attach https://data-seed-prebsc-1-s1.binance.org:8545/
って書いてあるから
Cronos Integration documentation | Cronos | Crypto.org EVM Chain
この辺のendpointを似たような感じで与えたら行けるんじゃないかなーと思った
まあただgethだと上見た感じcurlでcliからしか動かせなくね?という疑問もあったり
よくわかんねー………
---
と思ってたのだけど、ふと
(そういや根本的にはイーサリアムノードなのだったら、web3.pyで良いのでは?)と思った
試してみたら最新ブロックの取得とか出来たのでそれで良いのかもしれない………
なんかsolanaのときはsolana-web3.jsとか使ってたから、また違うのかと思ってたんだけど、solanaの場合はノードとかの仕様がまたガラッと違かったからとかなのかな……
まあわかんないけどとりあえずweb3.pyで遊んでみようという試み。いろいろ調べたことで多少勉強になったし、遠回りしたけど良しとしておこう
追記:
風呂入りながら考えてた。solanaとcronosでweb3ライブラリに違いがあったのはレイヤーの違いだわ多分
レイヤー1がイーサリアムとかsolanaとか、ブロックチェーン自体の取引。レイヤー2がそのブロックチェーンの上に乗っかった何かしらって感じだと思った
cronosはイーサリアム(レイヤー1)に載っかったレイヤー2だから、web3ライブラリが共通なんだわおそらく
確かレイヤー0っていうのが出てきて、イーサリアムとかsolana間でもやり取りする仕組みみたいなの見かけたことあるんで、多分そんな感じなんじゃないかと
だいぶスッキリ整理できた感。そしてやっぱcronos触るならイーサリアムベースで考えて良さそうだ
追記2:
資金送金参考