Hardhat
-
https://hardhat.org/
-
트러플과 유사한 dapp 개발도구
-
기능 : 컨트랙트 작성, 컴파일, 테스트, 배포
-
내부 가상 이더리움 가지고 있음. 단위테스트 가능 (가나슈 필요없음)
-
web3.js 대신 ethers.js를 사용함
설치 및 실행
필요사항
Node.js
설치
npm install --save-dev hardhat
실행
npx hardhat
node 에러
npm install -g n
n stable
- node active와 install이 맞지 않을때
ln -sf installed경로 active경로
기본 명령어
compile
npx hardhat compile
- 아티팩트
-
컨트랙트를 배포하고 상호작용하는데 필요한 모든 정보가 포함되어있음
- contractName
- abi
- bytecode
- linkReferences
-
컴파일할때 자동으로 생성됨.
-
테스트, 배포 스크립트 작성할때 getContractFactory(“artifacts명”) 가 해당 파일을 참조함.
test
- 로컬 또는 네트워크에 배포하지 않고 단위 테스트를 진행
npx hardhat test '.\test\sample-test.js'
- it = 하단에 테스트에 대한 내용 작성하여 실패 성공 여부 확인 가능
- expect~~.equal = 배포 후 함수 호출에 대한 결과 같을 경우에 true
node
- 로컬 환경에서 블록체인 네트워크 실행
- 노드 실행시 10000eth를 갖고있는 20개의 지갑 생성됨. #0~#19(지갑주소는 매번 동일)
- 블록은 실시간으로 생성되지 않고 컨트랙트를 배포할때 마다 증가함
- 노드 종료 시 이전 배포 결과에 대해 저장하지 않음
run
- 작성한 script로 입력한 네트워크에 컨트랙트 배포
- 배포시 노드에서 확인가능
- 아래 결과에 나온 주소는 console.log로 작성해서 나오는 결과
- 로컬 네트워크에 컨트랙트 배포
- 배포 시 node 결과
console
- 대화형 자바스크립트 콘솔 지원
- 네트워크 설정 하여 자바스크립트로 컨트랙트 호출 가능
EtherStore.sol 테스트
- await ethers.provider.getBalance(address)
- EtherStore 컨트랙트가 가지고 있는 코인 수량
- EtherStore deposit 호출(이더전송)
- await k.deposit({value:10})
hardhat debugging
- console.log를 사용하여 자유롭게 활용
- 솔리디티 작성시 import 필요. import "hardhat/console.sol";
- test, scripts 폴더에서 작성한 자바스크립트에는 import필요 없이 사용
컨트랙트별 배포 주소 변경하기(local network)
- 취약한 컨트랙트와, 공격자의 컨트랙트의 배포자를 다르게 설정하여야 할때
hardhat.config.js
- account에 privatekey 입력
배포 스크립트
참고