메인 콘텐츠로 건너뛰기
op-reth는 Reth를 기반으로 한 OP Stack용 Rust 실행 클라이언트입니다. op-geth와 동일한 Engine API 및 Ethereum JSON-RPC 인터페이스를 구현하므로, OP Stack 체인에서 그대로 교체하여 사용할 수 있는 대안입니다. 이 페이지는 V2 (Jovian) 수수료 모델이 활성화된 상태에서 op-reth v2.2.3(빌드 reth/v2.2.0-88505c7)을 실행하는 OP Stack devnet을 대상으로 테스트한 JSON-RPC 메서드를 설명합니다.

개요

op-reth는 op-geth와 동일한 OP Stack 추가 기능을 포함하여 표준 Ethereum JSON-RPC API를 구현합니다. 익숙한 Ethereum 도구(cast, web3.js, ethers, viem 등)를 수정 없이 사용할 수 있습니다.
실행 엔진의 RPC 인터페이스는 업스트림 Reth RPC 인터페이스와 기능적으로 동일합니다. OP 전용 동작은 op-geth와 일치합니다. 트랜잭션 영수증에는 추가적인 L1 데이터 가용성(data availability) 수수료 필드가 포함되며, 입금(디파짓) 트랜잭션(type 0x7e)에는 OP 전용 필드가 포함됩니다.

Ethereum과의 주요 차이점

op-reth는 Ethereum의 JSON-RPC API와 호환성을 유지하지만, OP Stack 전반에 공통적으로 적용되는 중요한 차이점이 있습니다.

트랜잭션 영수증

사용자 트랜잭션 영수증에는 추가적인 L1 데이터 수수료 정보가 포함됩니다. V2 (Jovian) 수수료 모델에서의 필드는 다음과 같습니다.
  • l1GasUsed — L1 데이터 가용성에 귀속되는 L1 gas 양입니다.
  • l1GasPrice — 실행 시점의 L1 base fee입니다.
  • l1Fee — 부과된 총 L1 데이터 수수료(wei 단위)입니다.
  • l1BaseFeeScalar — L1 base fee 구성 요소에 적용되는 scalar입니다.
  • l1BlobBaseFee — 실행 시점의 L1 blob base fee입니다.
  • l1BlobBaseFeeScalar — L1 blob base fee 구성 요소에 적용되는 scalar입니다.
  • daFootprintGasScalar — 데이터 가용성 footprint에 적용되는 scalar입니다.
레거시 단일 scalar 필드인 l1FeeScalar(Bedrock 시기 체인에서 사용되었으며 이전 op-geth 문서에 아직 표시됨)는 V2 체인에 존재하지 않습니다. l1FeeScalar를 하드코딩한 클라이언트는 위의 새 scalar 필드를 읽도록 변경해야 합니다. l1GasUsed, l1GasPrice, l1Fee 필드는 변경되지 않았습니다.

입금(디파짓) 트랜잭션

OP Stack 입금 트랜잭션(type: 0x7e)은 트랜잭션 응답과 영수증 응답 모두에 추가 필드를 포함합니다.
  • 트랜잭션: sourceHash, mint, depositReceiptVersion.
  • 영수증: depositNonce, depositReceiptVersion.

Gas 가격 계산

L2 gas 가격에는 표준 eth_gasPrice 메서드를 사용하십시오. L1 gas 가격과 전체(end-to-end) 수수료 추정에는 GasPriceOracle predeploy 또는 Optimism SDK를 사용하십시오.

표준 JSON-RPC 메서드

아래의 모든 예시는 op-reth v2.2.3을 대상으로 실제 검증되었습니다.

eth_blockNumber

가장 최근 블록의 번호를 반환합니다.
성공 시 출력 예시:

eth_chainId

현재 구성된 chain ID를 반환합니다. 이 값은 replay 보호 트랜잭션 서명에 사용됩니다.
성공 시 출력 예시:

eth_syncing

동기화 상태를 반환합니다.
op-geth와 달리 op-reth는 node가 완전히 동기화된 경우에도 각 pipeline 단계(Headers, Bodies, Execution, MerkleExecute 등)와 단계별 진행 상황을 나열하는 구조화된 객체를 항상 반환합니다. false가 아닌 응답을 “아직 동기화 중”으로 처리하는 클라이언트는 대신 currentBlock과 highestBlock을 비교해야 합니다.
출력 예시(동기화 완료된 node):

eth_getBalance

지정한 주소에 있는 계정의 잔액을 반환합니다.
성공 시 출력 예시:

eth_getTransactionByHash

트랜잭션 해시로 트랜잭션 정보를 반환합니다. 입금 트랜잭션에는 sourceHash, mint, depositReceiptVersion이 포함됩니다.
성공 시 출력 예시(입금 트랜잭션):

eth_getTransactionReceipt

해시로 트랜잭션 영수증을 반환합니다. OP Stack 전용 L1 수수료 필드가 포함됩니다. 아래 예시는 입금 트랜잭션 영수증입니다(depositNonce / depositReceiptVersion 필드와 l1Fee = 0에 주목하십시오). 일반 사용자 트랜잭션 영수증에는 V2 scalar로 계산된 0이 아닌 l1Fee가 포함됩니다.
성공 시 출력 예시:
영수증 끝부분의 OP 전용 필드에 주목하십시오: l1GasUsed, l1GasPrice, l1Fee, 그리고 V2 scalar인 l1BaseFeeScalar, l1BlobBaseFee, l1BlobBaseFeeScalar, daFootprintGasScalar입니다. Bedrock 시기의 l1FeeScalar 필드는 V2 체인에 존재하지 않습니다.

eth_call

블록체인에 트랜잭션을 생성하지 않고 새 메시지 호출을 즉시 실행합니다. 예시는 GasPriceOracle.l1BaseFee()를 호출합니다.
성공 시 출력 예시:

eth_estimateGas

트랜잭션을 완료하는 데 필요한 gas 추정치를 생성하여 반환합니다.
성공 시 출력 예시:
eth_estimateGas는 L2 실행 gas만 추정합니다. L1 데이터 수수료를 포함한 총 트랜잭션 비용을 계산하려면 Optimism SDK를 사용하거나 GasPriceOracle predeploy 컨트랙트를 조회하십시오.

eth_sendRawTransaction

서명된 트랜잭션을 네트워크에 제출합니다. 예시 페이로드는 오류 형태를 보여 주기 위해 의도적으로 유효하지 않게 작성되었습니다.
오류 출력 예시:
올바른 형식의 서명된 트랜잭션은 result로 트랜잭션 해시를 반환합니다.

eth_getBlockByNumber

블록 번호로 블록 정보를 반환합니다. Op-reth는 Ecotone/Cancun 이후의 표준 필드인 withdrawalsRoot, blobGasUsed, excessBlobGas, parentBeaconBlockRoot, requestsHash를 채웁니다.
성공 시 출력 예시:

eth_getLogs

지정한 필터 객체와 일치하는 모든 로그의 배열을 반환합니다.
성공 시 출력 예시(빈 필터 결과):

Gas 가격 메서드

eth_gasPrice

L2 실행에 대한 현재 gas 가격을 wei 단위로 반환합니다.
성공 시 출력 예시:
이 메서드는 L2 gas 가격만 반환합니다. L1 데이터 수수료를 포함한 종합적인 트랜잭션 비용 추정에는 GasPriceOracle predeploy 컨트랙트 또는 Optimism SDK를 사용하십시오.

eth_maxPriorityFeePerGas

현재 gas당 최대 priority fee(EIP-1559)를 반환합니다.
성공 시 출력 예시:

eth_feeHistory

수수료 추정을 위해 과거 base fee, gas 사용 비율, blob base fee, priority fee 백분위 데이터를 반환합니다.
성공 시 출력 예시:

계정 및 상태 메서드

eth_getCode

지정한 주소의 코드를 반환합니다.
성공 시 출력 예시(일부 생략):

eth_getStorageAt

지정한 주소의 스토리지 위치에 있는 값을 반환합니다.
성공 시 출력 예시:

eth_getTransactionCount

주소에서 전송된 트랜잭션 수(nonce)를 반환합니다.
성공 시 출력 예시:

Txpool 메서드

txpool 네임스페이스가 활성화되면(--http.api eth,net,web3,debug,txpool) op-reth는 표준 txpool 검사 메서드를 노출합니다.

txpool_status

성공 시 출력 예시:

Debug 메서드

op-reth는 트랜잭션 검사를 위한 debug_* 네임스페이스를 지원합니다. --http.api …,debug로 활성화하십시오.
Debug 메서드는 리소스를 많이 사용할 수 있습니다. 대부분의 공개 RPC 제공자는 이를 비활성화합니다. 이 메서드에 접근하려면 debug 네임스페이스를 활성화한 자체 node를 실행해야 합니다.

debug_traceTransaction

트랜잭션의 trace를 반환하여 모든 내부 호출과 상태 변경을 보여 줍니다. 대부분의 사용 사례에는 callTracer를 권장합니다.
성공 시 출력 예시(L1Block predeploy 구현으로 프록시되는 입금 트랜잭션):

debug_traceCall

온체인에서 실행하지 않고 호출을 trace합니다.
성공 시 출력 예시(GasPriceOracle.l1BaseFee() 호출):

WebSocket 지원

op-reth는 eth_subscribe 메서드를 사용한 실시간 이벤트 구독을 위해 WebSocket 연결을 지원합니다. 기본 포트는 8546입니다.

eth_subscribe

특정 이벤트에 대한 구독을 생성합니다. 검증된 구독 토픽에는 newHeads, logs, newPendingTransactions, syncing이 있습니다.
구독 확인 응답:
이벤트 알림(newHeads):

eth_unsubscribe

활성 구독을 취소합니다.

op-geth와 다르게 동작하는 메서드

클라이언트 기능을 자동으로 감지하는 도구에서는 다음 호출에 주의해야 합니다.

추가 자료

지원되는 모든 JSON-RPC 메서드의 전체 목록은 다음을 참고하십시오.

RPC 접근이 가능한 node 실행하기

전체 RPC 접근이 가능한 자체 op-reth node를 실행하려면 다음을 사용하십시오.
RPC 엔드포인트를 공개적으로 노출할 때는 주의하십시오. 남용을 방지하려면 인증, 속도 제한(rate limiting), 방화벽 규칙을 사용하십시오. debug 및 trace 네임스페이스는 신뢰할 수 있는 클라이언트에게만 활성화해야 합니다.

테스트 환경

위 예시는 u19-beta-v223 devnet(chain ID 0x190a85e3 / 420120035)의 op-reth v2.2.3(reth/v2.2.0-88505c7) node(HTTP 포트 8555, WS 포트 8556)를 대상으로 각 curl/websocat 명령을 실행하여 생성되었습니다. 나열된 모든 메서드는 성공(또는 예상된 오류) 응답을 반환했습니다.