메인 콘텐츠로 건너뛰기

사전 요구 사항

Hardhat 프로젝트가 이미 설정되어 있고 스마트 컨트랙트가 성공적으로 배포되어 있어야 합니다. 방법은 Hardhat으로 스마트 컨트랙트 배포 튜토리얼을 참조하세요. 선택 사항이지만 강력히 권장: 스마트 컨트랙트를 성공적으로 검증했어야 합니다. 방법은 Hardhat으로 스마트 컨트랙트 검증 튜토리얼을 참조하세요.

Hardhat 콘솔 시작

다음 명령을 사용하여 대화형 Javascript REPL을 시작합니다.
npx hardhat console --network inj_testnet
이제 셸은 일반 셸(bash, zsh 등) 대신 NodeJs REPL이 됩니다. 이 REPL에서 Counter 스마트 컨트랙트의 인스턴스를 생성합니다. 이를 위해 ethers.getContractFactory(...)contract.attach('0x...');를 사용합니다. 예를 들어 스마트 컨트랙트가 0x98798cc92651B1876e9Cc91EcBcfe64cac720a1b에 배포된 경우 명령은 다음과 같습니다:
const Counter = await ethers.getContractFactory('Counter');
const counter = await Counter.attach('0x98798cc92651B1876e9Cc91EcBcfe64cac720a1b');
이 REPL에서는 > 가 셸 프롬프트로 표시됩니다. 각 프롬프트의 결과는 이 접두사 없이 출력됩니다. 따라서 터미널의 내용은 다음과 유사하게 보일 것입니다:
> const Counter = await ethers.getContractFactory('Counter');
undefined
> const counter = await Counter.attach('0x98798cc92651B1876e9Cc91EcBcfe64cac720a1b');
undefined
이제 counter를 사용하여 스마트 컨트랙트와 상호 작용할 수 있습니다.

함수 호출 - 쿼리

쿼리는 읽기 전용 작업입니다. 따라서 스마트 컨트랙트 상태는 업데이트되지 않습니다. 상태 변경이 필요하지 않으므로 지갑, 서명 또는 트랜잭션 수수료(가스)가 필요하지 않습니다. 다음 명령을 사용하여 value() 함수를 쿼리합니다.
await counter.value();
다음이 출력됩니다.
0n
0n0을 의미하며 n 접미사는 Number가 아닌 BigInt임을 나타냅니다.Solidity의 uint256(스마트 컨트랙트의 value() 함수의 반환 유형)은 Number로 표현할 수 없기 때문입니다. 가장 큰 정수 값이 2^53 - 1이기 때문입니다. 따라서 BigInt를 대신 사용해야 합니다.

함수 호출 - 트랜잭션

트랜잭션은 쓰기 작업입니다. 따라서 스마트 컨트랙트 상태가 업데이트됩니다. 상태 변경이 발생할 수 있으므로 트랜잭션은 지갑으로 서명해야 하며 트랜잭션 수수료(가스)를 지불해야 합니다. 다음 명령을 사용하여 increment(num) 함수를 트랜잭션합니다.
await counter.increment(1, { gasPrice: 160e6, gasLimit: 2e6 });
가스 가격은 wei로 표시됩니다. 1 wei = 10^-18 INJ.
성공하면 다음과 유사한 결과가 생성됩니다:
ContractTransactionResponse { ...
상태를 업데이트한 후 새 상태를 쿼리할 수 있습니다. 결과는 상태 변경을 반영합니다.
await counter.value();
이번에는 0 + 1 = 1이므로 결과가 1n이어야 합니다.
1n

Hardhat 콘솔 중지

Ctrl+C를 연속으로 두 번 누르거나 .exit 명령을 입력합니다.

다음 단계

축하합니다. Hardhat을 사용하여 Injective에서 EVM 스마트 컨트랙트를 개발하는 전체 가이드를 완료했습니다! 스마트 컨트랙트는 비기술 사용자에게 사용자 경험을 제공하지 않습니다. 이들을 위해 탈중앙화 애플리케이션을 구축해야 합니다. 이를 위해 첫 번째 dApp 가이드를 확인하세요!