계약 디버그
Solidity 콘솔 로그를 사용하여 시뮬레이션된 Hardhat 로컬 노드에서 실행 중인 계약을 디버깅할 수 있습니다.
계약을 디버깅하려면 기본 제공 Hardhat Local Node 환경에 배치하고 로컬 디버깅 분기 또는 임시 작업 복사본에서만 모든 로깅 변경을 수행합니다.
내장 로컬 환경은 이름이 hardhatnode이고 체인 ID가 31337인 http://127.0.0.1:8545를 사용합니다. 저장된 Oracle Blockchain Platform 또는 기타 EVM 환경이 아닙니다. 계약을 배포하거나 실행하도록 선택하고 로컬 노드가 수신되지 않는 경우, Blockchain App Builder for Besu는 선택한 프로젝트에 대한 Hardhat 노드를 시작하고 Hardhat 로컬 노드 터미널을 엽니다.
- 검사할 코드 경로가 포함된 Solidity 파일 상단에서 Hardhat 콘솔 가져오기를 추가합니다.
import "hardhat/console.sol"; - 조사할 함수 또는 내부 도우미에 임시 로그를 추가합니다.
다음 코드는 일반적인 로그 예를 보여줍니다.console.log("value", value);
검사 중인 변수와 일치하는 값 유형을 사용합니다. 이러한 예제에서는 문자열, 주소, 정수 값 및 부울 값을 다룹니다. 로그 문을 좁고 임시로 유지합니다. 개인 키, 인증 토큰 또는 기타 자격 증명을 기록하지 마십시오.console.log("entered transfer"); console.log("caller", msg.sender); console.log("amount", amount); console.log("is allowed", isAllowed); - 배치/실행 양식에서 이전 아티팩트를 폐기해야 하는 경우 지우기를 선택한 다음 컴파일을 선택합니다.
- 환경으로 Hardhat Local Node를 선택합니다.
- 로컬 계약 인스턴스를 배치하거나 이미 배치된 로컬 프록시를 사용합니다. 로컬 네트워크에서 거버넌스 계약과 같은 프로젝트별 배포 전제 조건을 충족합니다.
- 실행 창을 열고, 로컬 토큰 또는 계정 프록시를 선택하고, 함수 매개변수를 입력한 다음, 질의 또는 호출을 선택합니다.
질의는 로컬 호출을 완료하고 호출은 로컬 트랜잭션을 전송합니다. 둘 중 하나가 로깅된 코드 경로에 도달할 수 있지만 호출만 시뮬레이션된 체인 상태를 변경합니다.
- Visual Studio Code에서 Hardhat Local Node 터미널을 열고 내보낸 로그 행을 검사합니다.
hardhat/console.solimport 문과 모든 임시console.log문을 제거합니다.- 코드를 커밋하거나 Oracle Blockchain Platform Besu, 기타 EVM 또는 프로덕션 환경을 사용하기 전에 정리하고 다시 컴파일하십시오.
Oracle Blockchain Platform 또는 기타 EVM 환경에 대해 Hardhat 전용 계측을 사용하지 마십시오. 대신 일반적인 애플리케이션 이벤트, 오프 체인 트랜잭션 추적 또는 환경 승인 관찰 기능을 사용하십시오. 콘솔 로깅은 프로덕션 진단을 대체하지 않습니다.
디버깅 프로세스 문제 해결
| 조건 | 해결 |
|---|---|
hardhat/console.sol를 찾을 수 없습니다.
|
선택한 프로젝트에서 Install Dependencies를 실행한 다음 다시 컴파일합니다. 임포트는 프로젝트의 Hardhat 종속성에 의해 제공됩니다. |
| 로컬 노드가 시작되지 않습니다. | 선택한 프로젝트에 hardhat.config.ts 또는 hardhat.config.js가 포함되어 있는지 확인하고, Visual Studio Code에서 Node.js 및 npm을 사용할 수 있는지 확인하고, Hardhat Local Node 터미널에서 시작 오류를 확인합니다.
|
| 표시된 로그가 없습니다. | Hardhat Local Node가 선택된 환경이고, 호출된 코드 경로가 로그 문에 도달하고, Oracle Blockchain Platform 또는 프로젝트 터미널이 아닌 Hardhat Local Node 터미널을 보고 있는지 확인합니다. |
| 애플리케이션에서 이전 코드를 사용하고 있습니다. | 배치하거나 다시 호출하기 전에 Clean(지우기), Compile(컴파일) 순으로 선택합니다. |
| 디버깅 후 비로컬 빌드 또는 배치 실패 | 모든 hardhat/console.sol 임포트 및 console.log 호출을 제거한 다음 프로젝트를 정리하고 다시 컴파일합니다.
|