0xのCoreConceptの翻訳 #5

イーサリウム・クライアント

イーサリウムは、P2Pノードのネットワークであり、各ノードは、製造されたブロックをレコードを全て保存し、その多くはマイナーとしても参加している。いずれかの1つのノードにトランザクションを送ることによって、ネットワークのゴシップチャネルを通じて、全てのノードに素早く拡散される。トランザクションが製造されると、全てのノードにそのトランザクションを格納したブロックがブロードキャストされる。マイナーに、イーサリウムのトランザクションを送るためには、そのP2Pネットワークのうちの1つのイーサリウムのノードにその情報を送る必要がある。このノードが、残りのノードへのメッセージ伝達を受け持つ。


イーサリウム・クライアントの主なファクションは:

  • ネットワーク内のトランザクションとブロックのゴシッピングに参加する
  • ブロックチェーンのステートデータのコピーを保管する
  • 新しいブロックを生成する(オプショナル)
  • ウォレットとして振る舞い、トランザクションに著名する(オプショナル)

多くのディベロッパーが使う主に2つのイーサリウムのメインクライアントがある:ParityとGethである。このいずれかのクライアントを利用して、イーサリウムネットワークに参加し、イーサリウムのトランザクションをネットワークにサブミットするのである。しかし、ここにはいくつかの差し止めの方法がある。イーサリウム・ブロックチェーンのディスクスペースはどんどん増えているため、全チェーンのデータとシンクするために十分なディスクスペースを確保することが推奨されている。最低1TB以上が望ましい。

イーサリウム・クライアントは、ノード間を素晴らしいP2Pネットワークとしてデザインされているが、トラフィック数が大量発生するアプリケーションにおいては、かなりパフォーマンスが落ちる。全てあなたの0x dAppのトランザクションを単一のノードを通じて送ると、ほぼ確実にシステムクラッシュを起こすだろう。これらの課題があるため、多くの0xディペロッパーは、高いトラフィック数のアプリケーションのトランザクション処理をハンドリングすることに最適化されたサードパーティにホストされたイーサリウムノードを使う。その1つは、Infuraである。また、ディペロッパーが、自前でイサーリウムノードの一群をディプロイできるよう、EtherCattleというオープンソースツールなどもある。

Ethereum JSON-RPC

全てのイーサリウムノードは、外部環境とコミュニケーションするためのAPIを持っている(トランザクションをサブミットした理、スマートコントラクトの関数を呼び出したりするなど)。このAPIは、JSON-RPC2.0スタンダードに付着しており、多くの標準化された方法を持っている。多くのイーサリウムライブラリは、イーサリウム JSON-RPCライブラリと共にバンドルされており、以下のものを含む。

  • Web3.py (Python)
  • Ethers.js (TypeScript/Javascript)
  • Web3.j (Java)

イサーリウムノードとインタラクションするためのAPIに加え、イサーリウムJSON-RPCは、どの0xライブラリが、イーサリウムのノードや著名者とインタラクションするかを判断するインターフェースにもなる。我々の方法やクラスの多くは、あなたが、”Provider”の中を通過することを要求し、これは、どのJSON-RPCリクエストを作ることが可能なのかを判断する単一手法を教えるためのクラスの例になるのである。

JSON-RPCは、eth_sendTransaction などのイーサリウムネットワークをインタラクトし、1つのイーサリウムノードへのプロバイダーにプロキシされる。しかし、eth_signなどのトランザクションに著名するリクエストは、あなたが臨むいかなる著名者にも送ることができる。(例:Metamask、Coinbase Wallet、Ledgerのハードウェアウォレットや、プライベートキーの著名者など)TypeScriptのディヴェロッパーは、@0x/subprovidersのライブラリを使って、提供者を作ったり、Python開発者は、0x-middlewaresを使うことができる。

イーサリウム上の0xとインタラクションする

先に述べたように、0xプロトコルの一部は、オンチェーン上で生きてるため、イーサリウムのメインブロックチェーンのスマートコントラクトのシステムの1つとしてディプレイされ、それは、様々なテストネットワークでもある。ここに、そのコントラクトをリストにしている。これらのコントラクトは、0xプロトコルを形成し、それらのコントラクトが様々なネットワーク城のどこにアドレスを持って生きているのかがわかる。

イーサリウムでは、ユーザーが、様々なスマートコントラクト、つまり、0xのスマートコントラクトをインタラクトする方法は、主に2つある。

Calls

コールは、Read-onlyのファンクションコールで、そのCallerはGasを一切消費する必要はない。ブロックチェーンのステータス状況を読み出すことはできるが、変更することはできない。その一例は、キャンセル(bytes32 orderHash)、取引完了(bytes32 orderHash) などであり、それぞれ、0xオーダーでキャンセルされたネットワのや、そのオーダーのうち幾分か完了したものを示している。


イーサリウム・クライアントは、これらのリクエストは、そのブロックチェーンステートのコピーを持っているので、他のネットワーク上のノードに頼ることなく、自力で、値の計算を行うことができる。Callsは安いが、0xの開発者は、単一のコールに対して、複数のステートリクエストを組み合わせるべきである。我々は、いくつかの方法を用意しており、DevUtilsTETHERは、あなたがgetOrderRelevantStates(LibOrder.Order[] memory orders, bytes[] memory signatures)などの一連の0xオーダーに関するオンチェーン情報を返すリクエストをかけることなどである。

つづく。

by
関連記事