메인 콘텐츠로 건너뛰기

사전 요구 사항

  • Plasma 테스트넷에 배포된 컨트랙트. 아직 배포하지 않았다면 컨트랙트 배포하기를 참조하세요.
  • 컨트랙트의 소스 코드와 컴파일 설정.
  • 배포 시 사용된 생성자 인수(있는 경우).
Plasma 블록 익스플로러(plasmascan.to)는 Etherscan 호환 검증 API를 제공합니다. 아래 예시는 해당 API를 직접 사용하며, 검증 제출을 위해 제3자 계정이 필요하지 않습니다.

예시 컨트랙트

단순한 생성자 인수와 복잡한 생성자 인수 모두를 보여주기 위해 두 가지 예시 컨트랙트를 사용하겠습니다:

단순 컨트랙트

스마트 컨트랙트의 기본 개념을 보여주는 기본 데이터 저장 컨트랙트입니다.

복잡한 컨트랙트

구성 가능한 매개변수로 토큰 예금을 관리하는 보다 정교한 vault 시스템입니다.

Foundry로 검증하기

Foundry는 컨트랙트 검증을 위해 forge verify-contract 명령을 제공합니다.
  1. foundry.toml에 검증 설정이 포함되어 있는지 확인합니다:
  2. 컨트랙트를 검증합니다. 문자열 생성자 인수가 있는 SimpleStorage 컨트랙트의 경우:
    여러 생성자 인수가 있는 TokenVault 컨트랙트의 경우:
  3. 검증 상태를 확인합니다. Foundry는 --watch 플래그를 사용하여 실시간 검증 상태를 표시합니다. 다음을 확인하세요:

Hardhat으로 검증하기

Hardhat@nomicfoundation/hardhat-verify 플러그인을 통해 컨트랙트 검증을 제공합니다.
  1. 검증 설정을 포함하도록 hardhat.config.js를 업데이트합니다:
  2. 컨트랙트를 검증합니다. 단순 컨트랙트의 경우:
    여러 생성자 인수가 있는 컨트랙트의 경우, 검증 스크립트 scripts/verify.js를 생성합니다:
  3. 검증 스크립트를 실행합니다:

배포 시 자동 검증

배포 스크립트에 검증을 추가하여 배포 중에 컨트랙트를 자동으로 검증할 수도 있습니다:

Ethers.js로 검증하기

Ethers.js는 검증을 위해 블록 익스플로러에 수동으로 API를 호출해야 합니다. 이 방식은 검증 프로세스에 대한 완전한 제어를 제공합니다.
  1. 필요한 종속성을 설치합니다:
  2. 검증 스크립트 verify-ethers.js를 생성합니다:
  3. 생성자 인수를 인코딩합니다. 복잡한 생성자 인수의 경우 ABI 인코딩이 필요합니다. Foundry의 cast 도구를 사용할 수 있습니다:
  4. 마지막으로 검증을 실행합니다:

검증 상태 확인

검증 후 성공 여부를 확인할 수 있습니다:

블록 익스플로러에서

  1. Plasma 테스트넷 익스플로러를 방문합니다.
  2. 컨트랙트 주소를 검색합니다.
  3. “Contract” 탭 옆의 녹색 체크 표시를 확인합니다.
  4. “Contract” 탭을 클릭하여 검증된 소스 코드를 봅니다.

프로그래밍 방식

  1. 상태 확인 스크립트 check-verification.js를 생성합니다:

대체 방법

블록 익스플로러가 가장 일반적인 검증 방법이지만 다음을 사용할 수도 있습니다:

Sourcify

Sourcify는 분산형 컨트랙트 검증을 제공합니다:

Tenderly

Tenderly는 디버깅 플랫폼의 일부로 검증을 제공합니다. 자세한 내용은 문서를 참조하세요.

컨트랙트 평탄화

임포트 또는 라이브러리가 있는 컨트랙트의 경우 검증 전에 컨트랙트를 단일 파일로 평탄화해야 할 수 있습니다. 인기 있는 도구는 다음과 같습니다: 외부 라이브러리가 있는 복잡한 프로젝트의 경우 고급 구성 옵션은 Hardhat 검증 문서를 참조하세요.

문제 해결

생성자 인수 불일치

생성자 인수가 배포 시 사용된 것과 정확히 일치하는지 다시 확인하세요. cast abi-encode를 사용하여 인코딩을 검증할 수 있습니다.

컴파일러 버전 불일치

검증 요청의 컴파일러 버전이 컴파일 시 사용된 버전과 일치하는지 확인하세요.

최적화 설정 불일치

최적화 설정(활성화/비활성화 및 runs 수)이 컴파일 설정과 일치하는지 확인하세요.

이미 검증됨

이는 이전에 검증이 성공했음을 의미합니다. 블록 익스플로러에서 확인하세요.

속도 제한

몇 분 후에 다시 시도하세요. 더 높은 한도가 필요하다면 API 플랜 업그레이드를 고려하세요.