스마트 컨트랙트 검증
검증은 컨트랙트의 소스 코드를 블록 탐색기에 업로드하고 배포된 바이트코드로 컴파일되었음을 증명합니다. 일단 검증되면, 사용자는 코드를 다시 호스팅할 필요 없이 Stablescan에서 상태를 읽고, 함수를 호출하고, 소스를 감사할 수 있습니다. 이 가이드는 Stable에 배포된 Foundry 컨트랙트를 검증하는 과정을 안내합니다.
전제 조건
- Stable 테스트넷 또는 메인넷에 이미 배포된 컨트랙트. 아직 배포하지 않았다면, 스마트 컨트랙트 배포를 참조하세요.
- Foundry 설치 (
forge가 PATH에 있어야 함). forge create출력에서 얻은 배포된 컨트랙트 주소.
1. 배포된 주소 확인
이전 배포에서 얻은 Deployed to 주소를 확인하세요. 스마트 컨트랙트 배포 흐름에서 이는 forge create 이후에 출력된 값이었습니다.
cast code 0xDeployedContractAddress --rpc-url https://rpc.testnet.stable.xyz | head -c 200x6080604052600436...비어 있지 않은 바이트코드는 해당 주소에 컨트랙트가 배포되었음을 확인합니다.
2. forge verify-contract 실행
Foundry의 검증 흐름은 소스를 Stablescan 검증기에 제출합니다.
forge verify-contract \
0xDeployedContractAddress \
src/Counter.sol:Counter \
--chain-id 2201 \
--verifier blockscout \
--verifier-url https://testnet.stablescan.xyz/api \
--watch2201에 배포된 컨트랙트 `0xDeployedContractAddress` 검증 시작
컨트랙트 검증 제출: Counter
검증을 위해 제출된 컨트랙트:
응답: `OK`
GUID: `abc123...`
URL: https://testnet.stablescan.xyz/address/0xDeployedContractAddress
컨트랙트 검증 상태:
응답: `OK`
세부 정보: `Pass - Verified`
컨트랙트가 성공적으로 검증되었습니다.--watch는 검증이 완료될 때까지 블록을 유지하므로 폴링할 필요가 없습니다. 메인넷에서는 체인 ID를 988로, 검증기 URL을 https://stablescan.xyz/api로 변경하세요.
3. Stablescan에서 검증 확인
탐색기에서 컨트랙트 페이지를 엽니다.
https://testnet.stablescan.xyz/address/0xDeployedContractAddress이제 Contract 탭에 소스 코드, 녹색 "Verified" 배지 및 전체 ABI가 표시되어야 합니다. 사용자는 Read Contract에서 상태를 읽고 Write Contract에서 트랜잭션을 보낼 수 있습니다.
문제 해결
- "바이트코드가 일치하지 않습니다": 소스가 배포된 바이트코드와 다르게 컴파일됩니다. 가장 흔한 원인은 솔리디티 버전 또는 최적화 프로그램 설정 불일치입니다.
foundry.toml과 일치하도록--compiler-version및--optimizer-runs를 명시적으로 전달하세요. - "GUID를 찾을 수 없습니다": 검증기가 아직 제출을 등록하지 않았습니다.
--watch로 다시 실행하거나 응답에 출력된 URL을 수동으로 확인하세요. - 컨트랙트가 라이브러리를 사용합니다: 연결된 각 라이브러리에 대해
--libraries src/Lib.sol:Lib:0xDeployedLibAddress를 추가하세요.
다음 권장 사항
- 컨트랙트 이벤트 인덱싱: ethers.js로 온체인 이벤트를 구독하고 실시간 이벤트 스트림을 구축합니다.
- 스마트 컨트랙트 배포: 새로운 Foundry 프로젝트를 스캐폴드하고 Stable 테스트넷에 배포합니다.
- JSON-RPC 참조: Stable이 온체인 상호 작용을 위해 지원하는
eth_*메서드를 확인합니다.

