archive nodeの正体:あなたが実際に支払っているもの
「archive」という言葉はRPCプロバイダによって曖昧に使われており、本物のarchive nodeと、その振りをしたfull nodeとの違いは、クエリが結果を返すか404を返すかの違いに等しい。ここではstorage層においてarchiveが実際に何を意味するのか、そしてそれがあなたの実行するクエリになぜ重要なのかを説明する。
full node対archive node
full nodeはすべてのブロックを検証し、現在のstate trieに加えておおよそ直近128ブロック分の履歴stateを保持する。あるアカウントの現在の残高は答えられるが、ブロック10,000,000時点の残高を尋ねても何も再計算しない——中間のstateはpruneされているからだ。archive nodeはすべての履歴state rootを保持するため、過去の任意のブロックにおけるstateクエリに直接答えられる。この完全性こそが価値提案のすべてであり、コストのすべてでもある。
なぜディスク費用が支配的なのか
Ethereumのarchive stateは複数テラバイトに及び、継続的に増大する。BNB Smart ChainやPolygonのような高スループットチェーンでも比例して同じことが言える。archive nodeはNVMe上で稼働する。なぜなら複数テラバイトのtrieへのrandom-read latencyは、回転式ディスクではスループットを破壊するからだ。このNVMeのフットプリントこそが——CPUでもbandwidthでもなく——archiveアクセスがほぼどこでも通常のRPCより高く価格設定されている理由である。
それを必要とするクエリ
履歴ブロックタグを伴うあらゆるeth_callやeth_getBalance、古いトランザクションに対するtrace_blockやdebug_traceTransaction、会計のためのトークン残高の再構築、そしてほとんどの分析用backfill——これらはすべてarchive stateを必要とする。あなたのプロダクトが履歴上のポジションを計算し、ledgerを照合し、あるいはトランザクションを再実行するなら、full nodeは重要なリクエストそのものにおいて静かに失敗する。
プロバイダが実際に提供しているか検証する方法
ラベルを信用してはならない——テストせよ。あるコントラクトコールを選び、数百万ブロック過去のブロックタグで実行し、「missing trie node」や「state not available」エラーではなく結果が返ってくることを確認する。古いハッシュに対してdebug_traceTransactionを実行する。どちらかが失敗したなら、料金ページに何と書かれていようと、あなたはfull node上にいる。
よくある質問
常にarchive nodeが必要なのか?
いいえ。現在のstateと最近のブロックだけを読むなら、full nodeの方が安価で十分だ。履歴stateをクエリする、古いトランザクションをtraceする、あるいは分析用backfillを行う——その瞬間にarchiveが必要になる。
archiveデータとindexedデータは異なるのか?
はい。archive nodeはRPC経由で生の履歴stateを提供する。indexerはその上により高レベルなデータセット(時系列の残高、トークン転送)を導出する。信頼できるindexingはその下にあるarchiveソースに依存している。
関連記事
チャージして、キーを取得し、リリース。
セルフサーブ。暗号資産またはカードで支払い。クレジットで従量課金——重いプリミティブは高く、単純なものは安価。
APIキーを取得