本文へスキップ
USDC 価格:$1.0000ガス:
Arcscan

パブリック RPC

https://rpc.arc-scan.io は Arc メインネットのための無料の JSON-RPC エンドポイントで、複数の独立したプロバイダーの前に立つため、1 つのプロバイダーの障害はあなたには見えません。

https://rpc.arc-scan.io
鍵もアカウントも登録も要りません。
ウォレットをお使いですか。ワンクリックで RPC に接続ボタンと、MetaMask と Rabby がそれでもあなたに求める 1 手順。

エンドポイント#

ホスト名は 1 つ、チェーンは 1 つ、資格情報は不要です。通常の読み取りメソッドに応答し、方針として短い一覧のメソッドを断り、web3_clientVersion を尋ねると arcscan-rpc-gateway/1 と名乗ります — これが、ウォレットに設定されていた別のエンドポイントではなく当方に到達したと分かる方法です。

項目
URLhttps://rpc.arc-scan.io
チェーンArc メインネットのみ — チェーン ID 5042、16 進では 0x13b2
トランスポートHTTPS の POST のみ。GET には allow: POST, OPTIONS を伴う 405 を返します。
認証なし。キーも、アカウントも、登録も、ヘッダーも不要です。
ブラウザからの呼び出し許可しています — どの応答にも access-control-allow-origin: * が付きます。
費用無料で、呼び出し元ごとにレート制限があります。

メインネット専用

このエンドポイントはチェーン 5042 だけを提供します — net_version を尋ねれば 5042 と答えます。Arc Testnet 向けのパブリックな Arcscan の JSON-RPC エンドポイントはありません。テストネットで作業しているなら、エクスプローラーにはtestnet.arc-scan.io新しいタブで開きますを、RPC にはご自身のノードやプロバイダーをお使いください。

最初の呼び出し#

登録すべきものが無いので、最初の呼び出しがそのまま始め方のすべてです。どのチェーンと話しているかを尋ねます:

curl -s -X POST https://rpc.arc-scan.io \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId"}'

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0x13b2"
}

そしてチェーンのヘッドです。Arc はおよそ 0.5 秒に 1 ブロックを生成するので、この数値は読んでいるあいだにも動きます。

curl -s -X POST https://rpc.arc-scan.io \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber"}'

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0xe2a22d"
}

バッチ#

呼び出しの JSON 配列には、結果の配列が id の順で返ります。1 リクエストあたり最大 50 件、131,072 バイトまでです。どちらかの上限を超えると、1 つも実行される前にリクエスト全体が 413 で拒否されます。

curl -s -X POST https://rpc.arc-scan.io \
  -H 'content-type: application/json' \
  -d '[{"jsonrpc":"2.0","id":1,"method":"eth_chainId"},
       {"jsonrpc":"2.0","id":2,"method":"eth_blockNumber"}]'

[
  {
    "jsonrpc": "2.0",
    "id": 1,
    "result": "0x13b2"
  },
  {
    "jsonrpc": "2.0",
    "id": 2,
    "result": "0xe2a22e"
  }
]

バッチはスナップショットではありません

上の 2 つの高さは 1 つ違います。各項目は独立に処理され、そのあいだにもチェーンは動くため、バッチが 1 つの時点についての一貫したビューを与えることは決してありません。1 つのブロックについて複数の事実が必要なときは、latest ではなくブロック番号かハッシュに固定してください。

何に応答するか#

通常の eth_ の読み取りメソッドは動きます。ブロック・トランザクション・レシートの参照、eth_getBalanceeth_calleth_getLogseth_gasPriceeth_estimateGas です。4 つのメソッドは外部へのリクエストなしにエンドポイント自身が答えます — eth_chainIdnet_versionweb3_clientVersion、そして当方がアカウントを持たないため空の配列を返す eth_accounts です。

動くメソッドをすべて一覧にするのではなく、こう考えてください。以下で断られていないものは転送されます。どの取得元も提供していないメソッドは、data.reasonmethod_not_served-32601 として返ります。これは方針による拒否とは別の事実であり、そのようにそう述べます。

何を断るか#

拒否は意図的なもので、それぞれが誰が決めたのかと理由を述べます。理由は機械可読です。error.data.reasonrefused_by_policy で、error.data.policy は以下のスラグのいずれかになります — 後で改めて尋ねれば状況が変わりうるかどうかを判断するために、クライアントが読むべきはこれです。ここにあるどのスラグについても、答えは「変わりません」です。

policy理由実測した例
no_custodyこのエンドポイントは鍵を保持しておらず、署名の要求を転送しません。eth_sendTransaction, eth_sign, eth_signTypedData_v4
namespaceここでは提供していない名前空間の全体です。debug_traceTransaction, ots_getApiLevel
cost答えが非常に大きく、このエンドポイントは計量されています。trace_block
no_transportHTTP のみです。ここにはそれを載せる購読のトランスポートがありません。eth_subscribe, eth_unsubscribe
single_legこのエンドポイントの背後にある取得元のうち 1 つしか提供していないため、公開すれば予告なく消えうる機能を約束することになります。eth_getProof
opacity答えは、このエンドポイントが運用していないノードについて述べるものになるため、正直に返せる値がありません。net_peerCount, net_listening
curl -s -X POST https://rpc.arc-scan.io \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_sendTransaction","params":[{}]}'

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32601,
    "message": "arc-scan.io does not serve eth_sendTransaction on this endpoint. This is our own policy decision, not a limitation of the Arc network. This endpoint holds no keys and will not forward a signing request. Sign locally and use eth_sendRawTransaction.",
    "data": {
      "reason": "refused_by_policy",
      "method": "eth_sendTransaction",
      "policy": "no_custody",
      "documentation": "https://arc-scan.io/developers"
    }
  }
}

拒否は HTTP 200 です

上のどの拒否も 200 OK で応答し、エラーは JSON-RPC の error オブジェクトの中に入ります。これは JSON-RPC の仕様が求めていることです。したがって HTTP のステータスだけを見る監視は、これらすべてを正常と判定します。ステータス行ではなく error.codeerror.data.reason を読んでください。

トランザクションを送る#

当方は鍵を保持していないため、鍵を預かることを必要とするメソッドはすべて断ります — 署名はローカルで行ってください。署名済みのトランザクションはブロードキャストできます。eth_sendRawTransaction は転送され、意図的にちょうど 1 つのプロバイダーへ送られ、再試行は決してしません。ブロードキャストを再試行するプロキシは、あなたのトランザクションを二重に提出しかねないからです。

エラーを読み、やみくもに再送しないでください

already knownnonce too low は、丸めずにノードからそのまま返ります。どちらもたいてい、あなたのトランザクションがすでに飛んでいることを意味します。形式が不正なペイロードは、ノード自身のデコードのメッセージを伴う -32602 として返ります。

フェイルオーバー#

1 つのホスト名の背後には、複数の独立した Arc メインネットのプロバイダーがあります。ある取得元で失敗した呼び出しは別の取得元で再試行され、エラーを出し始めた、あるいは当方をレート制限し始めたプロバイダーは冷却されて飛ばされます。そのどれもあなたの応答には現れません。得られるのは答えか、正直なエラーであって、どの取得元が応じたかの手がかりが出ることは決してありません。それが誰であるかは公開していません。

知っておく価値のある 2 つの帰結

1 つのプロバイダーしか提供していないメソッドは、提供せずに断ります(上の single_leg の行)— 1 つの取得元が冷却された瞬間に消えるような機能を、当方は約束しません。そして、どの取得元もまったく答えられなかった場合は、data.reasonunreachable-32603 と、結果について何も仮定すべきでない旨のメッセージが返ります。「チェーン上で何も起きなかった」と読まれかねない空の結果は返しません。

制限とエラー#

リクエストは呼び出し元ごとにレート制限されます。しきい値はここに公開しません — 引用できるのは設定上の値だけで、実際にあなたが出会うのは配備されたエッジのほうだからです — ですから 429 を合図として扱い、その retry-after に従い、数字に合わせて調整するのではなく後退してください。サイズの上限は正確であり、拒否そのものの中に明記されます。

HTTP/1.1 429 Too Many Requests
retry-after: 1
content-type: application/json

{
  "jsonrpc": "2.0",
  "id": null,
  "error": {
    "code": -32005,
    "message": "arc-scan.io is rate limiting requests from this client. Retry shortly.",
    "data": {
      "reason": "edge_rate_limited",
      "retry_after_seconds": 1,
      "scope": "client"
    }
  }
}
HTTP · JSON-RPC のコード起きたこと
405 · -32600GET を使いました。JSON-RPC のリクエストは POST を使わなければなりません。
413 · -32600リクエストが 131072 バイトまたはバッチ 50 件を超えました。data.reasonrequest_too_large で、両方の上限がメッセージに入っています。
429 · -320051 つの呼び出し元からのリクエストが多すぎます。data.reasonedge_rate_limited です。retry-after に従ってください。
200 · -32601当方が断るメソッド(data.reasonrefused_by_policypolicy のスラグ付き)か、どの取得元も提供していないメソッド(method_not_served)のいずれかです。
200 · -32602パラメータが拒否されました。これはノード自身のメッセージを、そのまま通したものです。
200 · -32603答えがまったく得られませんでした — data.reasonunreachable です。メッセージがそのことを明示しており、結果について何も仮定すべきではありません。
パブリック RPC · Arcscan ドキュメント | Arcscan