Hardhat는 이더리움 스마트 컨트랙트 개발을 위한 도구로, 테스트, 배포, 디버깅 등의 기능을 제공한다. 그중 `hardhat verify`는 Hardhat에서 제공하는 명령어 중 하나로, 이더리움 블록체인 상에 배포된 스마트 컨트랙트의 소스 코드를 확인하고 검증하는 작업을 수행한다. 다만 Hardhat의 `verify` 명령어는 스마트 컨트랙트의 소스 코드가 실제로 배포된 바이트코드와 일치하는지를 검증하는 것이 아니라, 외부 서비스인 이더스캔과 같은 검증 서비스에 컨트랙트 정보를 제출하여 검증을 요청한다.
이더스캔을 예시로 들면 다음의 과정으로 verify 가 진행된다.
1. 사용자가 `hardhat verify` 명령어를 사용하여 컨트랙트 정보를 Hardhat에 전달한다.
2. Hardhat은 사용자가 제공한 컨트랙트 정보를 기반으로 이더스캔에 컨트랙트가 이미 검증되었는지 확인한다.
3. 컨트랙트가 이미 검증되었다면 Hardhat은 더 이상의 작업을 수행하지 않고 사용자에게 그 결과를 반환한다.
4. 컨트랙트가 검증되지 않은 경우, Hardhat은 이더스캔에 컨트랙트 정보를 제출하여 검증을 요청한다.
(https://docs.etherscan.io/api-endpoints/contracts#verify-source-code)
5. 이더스캔 검증 서비스는 제출된 컨트랙트 정보를 기반으로 컨트랙트의 소스 코드를 확인하고 검증한다.
6. 검증 결과가 바로 나오는 것이 아니라서 이더스캔은 검증 결과를 확인할 수 있는 GUID를 Hardhat에게 알려준다. 검증은 대략 30s ~ 60s 정도 걸린다.
7. Hardhat은 이 GUID를 사용자에게 반환하여 사용자가 컨트랙트의 검증 상태를 확인할 수 있게 한다.
(https://docs.etherscan.io/api-endpoints/contracts#check-source-code-verification-submission-status)
이러한 과정을 통해 Hardhat verify가 진행된다. 다만 Hardhat verify는 이더스캔과 같은 *scan.com 사이트나 sourcify 만 지원되고 이외의 익스플로어와는 상호작용이 되지 않는다. (이더스캔과 같은 request/response 의 API 를 만들고 hardhat.config.ts 파일에 체인과 apiURL을 추가하면 hardhat verify 를 사용할 수 있을 것 같다.)
'Blockchain' 카테고리의 다른 글
ERC4337 - Bundler 사용하기 (삽질중) (0) | 2024.05.12 |
---|---|
Polygon zkEVM 관련 메모 (0) | 2024.02.16 |
[Klaytn] Klaytn EN 무작정 띄워보기 (0) | 2022.09.01 |