Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

스마트 컨트랙트 검증

검증은 컨트랙트의 소스 코드를 블록 탐색기에 업로드하고 배포된 바이트코드로 컴파일되었음을 증명합니다. 일단 검증되면, 사용자는 코드를 다시 호스팅할 필요 없이 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 20
0x6080604052600436...

비어 있지 않은 바이트코드는 해당 주소에 컨트랙트가 배포되었음을 확인합니다.

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 \
  --watch
2201에 배포된 컨트랙트 `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를 추가하세요.

다음 권장 사항