op-challenger의 구성 및 모니터링 옵션을 설정하는 단계별 방법을 안내합니다.
challenger는 분쟁 게임(dispute game)을 모니터링하고 잘못된 주장(claim)에 이의를 제기하여 OP Stack 체인을 보호하는 핵심 결함 증명(fault proof) 구성 요소입니다. 이 결함 증명 기능에 대한 전반적인 개요는 op-challenger 설명을 참조하십시오.
challenger는 다음을 담당합니다.
- 결함 증명 시스템이 생성한 분쟁 게임 모니터링
- 분쟁 게임에서 잘못된 주장에 이의 제기
- 유효한 상태 전환 방어
- 가능한 경우 게임 해결(resolve)
사전 요구 사항
필수 요구 사항
challenger를 구성하기 전에 다음 단계를 완료하십시오.1
결함 증명이 활성화된 OP Stack 체인 배포
- dispute game factory와 함께 배포된 L1 컨트랙트
- 체인에서 활성화된 결함 증명 시스템
- 체인의 컨트랙트 주소에 대한 접근 권한
- 네트워크 버전에 맞는 absolute prestate 생성 - challenger는 일치하는 prestate가 없으면 게임과의 상호작용을 거부하므로 이 단계는 매우 중요합니다
2
필수 인프라 접근 설정
- L1 RPC 엔드포인트(Ethereum, Sepolia 등)
- L1 Beacon node 엔드포인트(blob 접근용)
- debug API가 활성화된 L2 아카이브 node
- 과거 데이터를 보유한 rollup node(op-node)
3
구성 파일 준비
rollup.json- Rollup 구성 파일genesis-l2.json- L2 genesis 파일<prestate-hash>.bin.gz- 1단계에서 생성한 absolute prestate 파일(rust/kona/prestate-artifacts-cannon/<prestate-hash>.bin.gz)
소프트웨어 요구 사항
- Git(저장소 복제용)
- Go 1.21+(소스에서 빌드하는 경우)
- Docker 및 Docker Compose(선택 사항이지만 권장)
- challenger 운영을 위해 자금이 충전된 Ethereum 계정에 대한 접근 권한
현재 안정 릴리스 찾기
OP Stack 구성 요소의 최신 호환 버전을 사용하고 있는지 확인하려면 항상 공식 릴리스 페이지를 확인하십시오. OP Stack 릴리스 페이지 이 가이드는 다음 버전을 기준으로 검증되었습니다.- op-challenger —
op-challenger/v1.9.4(최신op-challenger/v*를 확인하십시오). - op-reth —
v2.2.5(최신 op-reth 릴리스를 확인하십시오). op-reth는 sequencer의 실행 클라이언트이자 challenger가 출금 증명을 읽어 오는 아카이브 node입니다. - kona-client — absolute prestate는 태그가 지정된
kona-client/v*릴리스(예:kona-client/v1.6.0-rc.1)로부터 빌드됩니다. 체인에 등록된 prestate와 일치하는 태그를 사용하십시오. 거버넌스에서 승인된 업그레이드의 경우 업그레이드 공지에 버전이 명시됩니다. kona-client prestate 튜토리얼을 참고하십시오.
소프트웨어 설치
challenger 배포 시에는 소스에서 빌드하거나(더 나은 제어와 디버깅을 위해 권장) Docker를 사용한 컨테이너 기반 설정을 사용할 수 있습니다.- 소스에서 빌드
- docker 사용
빌드 및 구성
소스에서 빌드하면 바이너리를 완전히 제어할 수 있으며, 프로덕션 배포에 권장되는 방법입니다.op-challenger 복제 및 빌드cannon-kona 게임 유형을 위한 pre-image oracle 서버인 kona-host도 필요합니다. 서버가 체인에 커밋된 kona-client 빌드와 일치하도록, 체인에 등록된 absolute prestate와 일치하는 kona-client 릴리스 태그에서 빌드하십시오(현재 안정 릴리스 찾기 참고).설치 확인
challenger 구성 요소가 올바르게 설치되었는지 확인합니다.구성 설정
1
작업 공간 정리
바이너리를 빌드한 후 challenger 작업 디렉터리를 생성합니다.
2
구성 파일 복사
3
환경 변수 설정
구성을 생성하기 전에 여러 정보를 수집해야 합니다. 각 값을 얻을 수 있는 위치는 다음과 같습니다.L1 네트워크 접근:중요: 모든 플레이스홀더 값(
- L1 RPC URL: L1 node 엔드포인트(Infura, Alchemy 또는 자체 호스팅)
- L1 Beacon URL: blob 접근을 위한 Beacon chain API 엔드포인트
- L2 RPC URL: op-reth 아카이브 node 엔드포인트
- Rollup RPC URL: 과거 데이터를 보유한 op-node 엔드포인트
- challenger 운영을 위한 개인 키(자금이 충전되어 있어야 함)
- 컨트랙트 배포에서 얻은 game factory 주소
- 네트워크 식별자(예: op-sepolia, op-mainnet 또는 커스텀)
YOUR_ACTUAL_*)을 실제 구성 값으로 바꾸십시오.4
주요 구성 플래그 이해하기
--l1-eth-rpc
--l1-eth-rpc
- 표준 L1 node의 HTTP provider URL이며, full node일 수 있습니다.
op-challenger는 많은 요청을 보내므로, 체인 운영자는 신뢰할 수 있고 많은 트랜잭션을 쉽게 처리할 수 있는 node가 필요합니다. - 참고: Challenger는 많은 자금을 보유하며, 게임과 상호작용해야 하는 경우 이를 사용합니다. 이로 인해 게임을 올바르게 방어하거나 이의를 제기하지 못할 위험이 있으므로, 체인 운영자는 Challenger가 가리키는 node를 확실히 신뢰할 수 있어야 합니다.
--l1-beacon
--l1-beacon
- blob을 가져오는 용도로만 필요합니다.
- 경우에 따라 체인 운영자는 blob archiver 또는 blob을 정리(prune)하지 않도록 구성된 L1 합의 node가 필요할 수 있습니다.
- 체인이 정기적으로 제안하는 경우 blob archiver는 필요하지 않습니다. blob 보존 기간 내에서 게임이 진행될 수 있는 기간은 짧습니다.
- 체인이 18일 동안 유효한 output root를 게시하지 않으면, challenge 게임을 실행하는 blob archiver가 필요합니다. 행위자가 게임의 최하단까지 밀려나는 경우, 체인을 보호하는 유일한 주체라면 게임에서 패배할 수 있습니다.
--l2-eth-rpc
--l2-eth-rpc
debug가 활성화된op-reth아카이브 node여야 합니다.- 기술적으로 bedrock까지 거슬러 올라갈 필요는 없지만, 아직 진행 중인 모든 게임의 시작 시점에 접근할 수 있어야 합니다.
- challenger가
eth_getProof를 통해 읽는 출금 증명 데이터는 op-reth의 historical-proofs 저장소에서 제공됩니다.--proofs-history로 이를 활성화하고, 영구적인--proofs-history.storage-path를 설정하며,--proofs-history.window를 분쟁 게임(dispute game) 기간(≥ 28일)을 포괄하도록 설정하십시오. 권한형(permissioned) 체인에서는--rpc.eth-proof-window가eth_getProof가 제공하는 과거 범위를 제한합니다. historical proofs와 함께 op-reth 실행하기를 참고하십시오. --proofs-history로 node를 시작하기 전에 proofs 저장소를 한 번 초기화(seed)하십시오. 그렇지 않으면 op-reth가 시작을 거부합니다(proofs-historyExEx가Proofs storage not initialized와 함께 panic 발생). node를 중지한 상태에서op-reth proofs init --chain <chain-or-genesis> --datadir <reth-datadir> --proofs-history.storage-path <proofs-db-path>를 실행하십시오. 이 명령은 체인의 현재 상태를 스냅샷하여 sidecar를 초기화하며, 이후 node가 동기화되면서 ExEx가 앞으로 인덱싱합니다. 결함 증명 기간 전체가 포괄되도록 genesis 시점(또는 그 근처)에서 초기화하십시오. 현재 tip에서 초기화된 node는 그 시점 이후 블록에 대한 증명만 제공합니다.- op-reth v2.6.x 이하에서는
op-reth node와op-reth proofs init모두에--proofs-history.storage-version v2도 전달하십시오. 해당 릴리스는 기본적으로 지원 중단된(deprecated) v1 형식을 사용합니다.
--rollup-rpc
--rollup-rpc
- challenger는 게임이 시작된 시점의 output root에 접근해야 하므로
op-node아카이브 node여야 합니다. 중요한 구성 세부 사항은 아래를 참고하십시오.
-
op-node의 Safe Head Database(SafeDB) 구성:
-
op-conductor뒤에 있는op-node는 stateless 상태가 되지 않도록 SafeDB가 활성화되어 있어야 합니다. -
SafeDB를 활성화하려면 구성에서
--safedb.path값을 설정하십시오. 이는 safe head 업데이트 데이터를 영구 저장하는 데 사용되는 파일 경로를 지정합니다. -
구성 예시:
이 경로가 설정되지 않으면 SafeDB 기능이 비활성화됩니다.
-
-
과거 데이터 가용성 보장:
-
네트워크 일관성을 유지하고 node가 과거 상태와 트랜잭션을 참조할 수 있도록,
op-node와op-reth모두 게임 시작 시점부터의 데이터를 보유해야 합니다. -
op-node의 경우: 충분한 블록체인 데이터 기록을 로컬에 유지하도록 구성하거나 아카이브 node를 사용하십시오. -
op-reth의 경우: 마찬가지로 과거 데이터를 저장하거나 접근할 수 있도록 구성하십시오. -
구성 예시:
<op-node-archive-node-url>을 아카이브 node의 URL로,<path-to-safe-head-db>를 SafeDB 데이터를 저장할 경로로 바꾸십시오. -
네트워크 일관성을 유지하고 node가 과거 상태와 트랜잭션을 참조할 수 있도록,
--private-key
--private-key
- 체인 운영자는 개인 키를 지정하거나 다른 방법(예:
op-signer)을 사용해야 합니다. - 이는
op-node, batcher, proposer와 동일한 트랜잭션 매니저 인자를 사용하므로, 체인 운영자는 다음 옵션 중 하나를 선택할 수 있습니다.- 니모닉(mnemonic)
- 개인 키
op-signer엔드포인트
--network
--network
-
op-challenger가 실행되는 대상 L2 네트워크를 식별합니다(예:op-sepolia또는op-mainnet). -
--network플래그를 사용하면--game-factory-address가superchain-registry에서 자동으로 가져와집니다. -
trace를 생성할 때 challenger에는 rollup config와 L2 genesis 파일이 필요합니다. registry의
--network를 사용하면 두 파일 모두 자동으로 로드되지만, 커스텀 네트워크는 L2 genesis와 rollup config를 모두 지정해야 합니다. -
superchain-registry에 없는 커스텀 네트워크의 경우, 다음과 같이--game-factory-address와 rollup을 지정해야 합니다.
이 옵션들은 지정된
--network에 따라 달라집니다. 체인 운영자는 항상 prestate를 로드하는 방법을 지정해야 하며, docker 이미지를 사용하지 않는 경우에는 --cannon-kona-server도 지정해야 합니다.--datadir
--datadir
op-challenger가 쓰기 작업을 하고 필요한 데이터를 저장할 수 있는 디렉터리입니다.op-challenger는 이 디렉터리를 관리하며 필요에 따라 그 아래에 데이터를 추가하거나 제거합니다.- docker에서 실행하는 경우, 재시작할 때마다 데이터가 손실되지 않도록 docker 볼륨 또는 마운트 지점을 가리켜야 합니다. 필요하면 데이터를 다시 생성할 수 있지만, 특히 challenger가 게임에 대응하는 과정에서 cannon을 실행한 경우에는 상당한 추가 처리가 필요할 수 있습니다.
--cannon-kona-prestate / --cannon-kona-prestates-url
--cannon-kona-prestate / --cannon-kona-prestates-url
prestate는 사실상 온체인에 배포된
kona-client의 버전입니다(cannon-kona 게임 유형으로 Cannon VM 내부에서 실행됨). 체인 운영자는 반드시 올바른 버전을 사용해야 합니다. op-challenger는 잘못된 주장(claim)을 하지 않도록 absolute prestate 해시가 다른 게임과의 상호작용을 거부합니다. 자체 컨트랙트를 배포하는 경우, 체인 운영자는 컨트랙트 배포 시 just reproducible-prestate-kona 명령으로 얻은 absolute prestate 해시를 지정해야 하며, 이 명령은 필요한 prestate 파일도 함께 빌드합니다.거버넌스에서 승인된 모든 릴리스는 태그가 지정된 kona-client 버전을 사용합니다. 버전 태그를 체크아웃하고 just reproducible-prestate-kona를 실행하여 다시 빌드할 수 있습니다.- 사용할 prestate를 지정하는 방법은 두 가지입니다.
--cannon-kona-prestate: 단일 kona-client absolute-prestate 파일의 경로를 지정합니다.--cannon-kona-prestates-url: prestate를 로드할 URL을 지정합니다. 이를 통해 네트워크 업그레이드 등으로 서로 다른 prestate를 사용하는 게임에 참여할 수 있습니다. prestate는 이 디렉터리에 해시 이름으로 저장됩니다.
- prestate의 최종 URL 예시:
- https://example.com/prestates/0x031e3b504740d0b1264e8cf72b6dde0d497184cfb3f98e451c6be8b33bd3f808.bin.gz
- 이 파일에는 cannon 메모리 상태가 포함되어 있습니다.
Challenger는 일치하는 prestate가 없으면 어떤 게임과도 상호작용을 거부합니다.
absolute prestate를 생성하는 방법은 이 가이드를 확인하십시오.
challenger 시작 스크립트 생성
scripts/start-challenger.sh를 생성합니다.challenger 초기화 및 시작
challenger 시작
challenger 실행 확인
challenger가 올바르게 동작하는지 로그를 모니터링하여 확인합니다.- L1 및 L2 node에 대한 성공적인 연결
- prestate 및 구성 로드
- 분쟁 게임 모니터링
op-dispute-mon으로 모니터링하기
보안 모니터링을 강화하려면op-dispute-mon을 함께 실행하는 것을 고려하십시오.
- 최근 28일 동안의 모든 게임 상태에 대한 가시성을 제공합니다
- 프로덕션 challenger 배포에 필수적입니다
다음 단계
- 추가 배경 지식과 FAQ는 OP-Challenger 설명서를 읽어 보십시오
- 구현 세부 사항은 상세한 challenger 명세를 검토하십시오
- 문제가 발생하면 개발자 지원에 문의하십시오