본문으로 건너뛰기
USDC 가격:$1.0000가스:
Arcscan

공용 RPC

https://rpc.arc-scan.io는 Arc 메인넷을 위한 무료 JSON-RPC 엔드포인트이며, 여러 독립적인 제공자를 앞에 두고 있어 한 제공자의 장애가 여러분에게 보이지 않습니다.

https://rpc.arc-scan.io
키도, 계정도, 가입도 없습니다.
지갑을 쓰십니까? 한 번의 클릭으로 RPC 연결그 버튼, 그리고 MetaMask와 Rabby가 그래도 여러분에게 요구하는 한 단계.

엔드포인트#

호스트명 하나, 체인 하나, 자격 증명 없음. 일반적인 읽기 메서드에 답하고, 짧은 목록의 다른 메서드는 정책에 따라 거절하며, web3_clientVersion을 물으면 자신을 arcscan-rpc-gateway/1이라고 밝힙니다 — 지갑에 설정되어 있던 다른 엔드포인트가 아니라 저희에게 닿았는지 확인하는 방법입니다.

속성
URLhttps://rpc.arc-scan.io
체인Arc 메인넷 전용 — 체인 ID 5042, 16진 0x13b2
전송HTTPS POST만 가능합니다. GETallow: 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초마다 블록을 생성하므로, 이 숫자는 읽으시는 동안에도 움직입니다.

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 순서로 돌아옵니다. 요청당 최대 50개 항목, 131,072바이트이며, 어느 한쪽 상한이라도 넘으면 아무것도 실행되기 전에 요청 전체가 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"
  }
]

배치는 스냅숏이 아닙니다

위의 두 높이는 1만큼 다릅니다. 각 항목은 독립적으로 처리되고 그사이에 체인이 움직이므로, 배치는 결코 한 시점의 일관된 모습을 주지 않습니다. 한 블록에 대한 여러 사실이 필요하다면 latest가 아니라 블록 번호나 해시에 고정하십시오.

무엇에 답하는가#

일반적인 eth_ 읽기 메서드는 동작합니다: 블록·트랜잭션·영수증 조회, eth_getBalance, eth_call, eth_getLogs, eth_gasPrice, eth_estimateGas. 네 가지 메서드는 외부 요청 없이 엔드포인트 자신이 답합니다 — eth_chainId, net_version, web3_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이 엔드포인트 뒤의 출처 중 하나만 제공하므로, 이를 게시하면 예고 없이 사라질 수 있는 기능을 약속하는 셈이 됩니다.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입니다

위의 모든 거절은 JSON-RPC error 객체 안에 오류를 담은 채 200 OK로 답하며, 이는 JSON-RPC 명세가 요구하는 바입니다. 따라서 HTTP 상태만 지켜보는 모니터는 이 모두를 정상으로 판단합니다. 상태 줄이 아니라 error.codeerror.data.reason을 읽으십시오.

트랜잭션 보내기#

저희는 키를 보유하지 않으므로 키의 보관을 요구하는 모든 메서드는 거절합니다 — 서명은 로컬에서 하십시오. 이미 서명된 트랜잭션은 브로드캐스트할 수 있습니다: eth_sendRawTransaction은 전달되며, 정확히 한 제공자에게만 보내고 결코 재시도하지 않습니다. 브로드캐스트를 재시도하는 프록시는 여러분의 트랜잭션을 두 번 제출할 수 있기 때문입니다.

오류를 읽으시고, 무턱대고 재제출하지 마십시오

already knownnonce too low는 다듬지 않고 노드에서 온 그대로 돌아오며, 둘 다 대개 여러분의 트랜잭션이 이미 전파 중이라는 뜻입니다. 형식이 잘못된 페이로드는 노드 자신의 디코드 메시지와 함께 -32602로 돌아옵니다.

페일오버#

하나의 호스트명 뒤에는 여러 독립적인 Arc 메인넷 제공자가 있습니다. 한쪽에서 실패한 호출은 다른 쪽에서 재시도되고, 오류를 내기 시작하거나 저희에게 속도 제한을 거는 제공자는 식힘 처리되어 건너뛰며, 그중 무엇도 응답에 드러나지 않습니다: 여러분은 답이나 정직한 오류를 받을 뿐, 어느 출처가 답했는지에 대한 힌트는 받지 않습니다. 그들이 누구인지는 공개하지 않습니다.

알아 둘 만한 두 가지 결과

한 제공자만 제공하는 메서드는 제공되지 않고 거절됩니다(위의 single_leg 행) — 출처 하나가 식는 순간 사라질 기능은 저희가 약속할 기능이 아닙니다. 그리고 어떤 출처도 전혀 답하지 못했다면, “체인에서 아무 일도 없었다”로 읽힐 빈 결과 대신 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 · -32005한 호출자로부터 요청이 너무 많습니다. data.reasonedge_rate_limited이며, retry-after를 지켜 주십시오.
200 · -32601저희가 거절하는 메서드(data.reasonrefused_by_policy이며 policy 슬러그가 붙습니다)이거나, 어떤 출처도 제공하지 않는 메서드(method_not_served)입니다.
200 · -32602파라미터가 거부되었습니다. 이것은 노드 자신의 메시지를 그대로 전달한 것입니다.
200 · -32603답을 전혀 얻지 못했습니다 — data.reasonunreachable입니다. 메시지가 그렇다고 분명히 밝히며, 결과에 대해 아무것도 가정해서는 안 됩니다.
공용 RPC · Arcscan 문서 | Arcscan