0.5.8 • Published 11 days ago

wepublic-sdk v0.5.8

Weekly downloads
-
License
-
Repository
-
Last release
11 days ago

Hardhat & Foundry 보일러플레이트

권장사항

  • 기본적으로 테스트는 foundry test를 활용할 것을 권장합니다.

    • 다만, 백엔드와 관련된 테스트는 hardhat을 통해서 하는 것이 좋습니다.
      • ex: 백엔드에서 ethers로 호출하는 함수가 있을 경우
  • hardhat.config.ts에서 solidity compiler 버전을 설정해도, solidity extension을 Juan Blanco의 것을 사용하면 vscode 단에서 compiler version을 인식 못해 pragma 에러가 발생합니다. Nomic Foundation의 solidity를 설치해서 사용하시면 vscode단에서 hardhat config와의 호환이 더 잘됩니다.

  • mocha test explorer extension을 사용하시면, hardhat test시 에러가 발생한 라인에 하이라이트가 되는 등의 소소한 지원이 됩니다.

Hardhat

환경변수 설정

  • *.env 파일에 환경변수 추가후 process-env.d.ts에 반영 요망

테스트

  • 주의사항

    • 이전 보일러플레이트와 비교해서 테스트에서 가장 크게 달라진 부분은 블록체인 상태값을 관리하는 로직과 setup.ts의 존재 여부입니다.
    • 이전 보일러플레이트에서는 before를 비롯한 여러 훅에서 직접 스냅샷을 조작하는 방식이었습니다.
    • 이 보일러플레이트에서는 fixture로 snapshot을 조작합니다.
    • /hardhat/test/Lock.ts를 보시면, 최상단에 deloyOneYearLockFixture라는 함수가 있습니다. 이전 보일러플레이트의 setup.ts에 해당한다고 봐주시면 됩니다.
    • 이 함수는 createFixture함수로 생성하는데, 이 함수를 통해 매 테스트(it)마다 fixture에 정의된 블록체인 상태값을 보장합니다.
    • 해당 함수의 첫줄은 await hre.deployments.fixture()인데, 이는 네트워크에서 아직 배포되지 않은 모든 배포 스크립트를 실행하는 구문입니다.
    • 로컬 테스트에서는 하드햇 네트워크를 매번 새로 생성하므로, 모든 컨트랙이 배포되지 않은 상태이고, 따라서 /hardhat/deploy_scripts/hardhat/todo에 정의된 모든 배포 스크립트를 실행합니다.
    • 따라서, await hre.deployments.fixture()이후 모든 컨트랙은 배포된 상태이므로 그 아래줄에서는 ethers.getContract 등의 함수로 배포된 컨트랙을 가져올 수 있습니다.
    • 이 setup함수(deployOneYearLockFixture)에서 테스트에서 사용할 값들을 return하면 이 setup함수를 사용하는 구문에서는 반환값을 사용하면 됩니다.(이전에 최상단 describe에 변수를 선언하고 setup함수의 반환값을 할당하는 방식보다 직관적이라고 판단하여 이렇게 구성하였습니다.)
    • 한 테스트 파일에서 이와 같은 setup함수가 하나일 필요는 없습니다. 테스트 계층이 깊다면 각 describe에 맞게 setup함수를 구성해서 사용하면 될 것입니다.
  • 전제

    • 로컬에서의 테스트가 주로 배포 이후의 정상 동작에 대한 것이라고 한다면, 포크 테스트는 주로 특정 시점(블록)에서 특정 액션에 관한 것일 가능성이 높을 것입니다.
    • 즉, 포크 테스트에서는 이미 배포된 컨트랙의 주소를 참조하는 등 파일의 구성이 로컬 테스트의 그것과는 다소 다를 것이므로 파일을 달리 정의하는 것이 일반적이라고 판단했습니다.
    • 따라서, /hardhat/test/fork_test라는 별도의 디렉토리에 fork 테스트를 따로 정의합니다.
    • 다만, fork test로 간주하는 로직은 describeit의 식별자 안에서 특정 문구가 있느냐입니다.
    • 따라서 로컬 테스트 중 fork test로 실행하고 싶은 것이 있다면, 굳이 따로 파일을 만들지 않고 해당 테스트 식별자에 포크할 네트워크명('테스트넷', '메인넷')을 포함시켜주시면 되겠습니다.
  • 로컬 테스트

    • 커맨드: yarn hardhat:test:local
    • describeit의 식별자 중 '테스트넷', '메인넷'이라는 문구가 없는 테스트만 실행이 됩니다.
    • foundry와 유사하게 --vvv처럼 플래그를 전달하면 스택 트레이싱 레벨을 조정할 수 있습니다.
  • 테스트넷 포크 테스트

    • 커맨드: yarn hardhat:test:testnet
    • describeit의 식별자 중 '테스트넷'이라는 문구가 있는 테스트만 실행이 됩니다.
      • 식별자는 describeit문구의 합이므로 상위 describe에 '테스트넷'이 포함되어 있다면 해당 그룹의 it은 모두 실행됩니다.
    • foundry와 유사하게 --vvv처럼 플래그를 전달하면 스택 트레이싱 레벨을 조정할 수 있습니다.
  • 메인넷 포크 테스트

    • 커맨드: yarn hardhat:test:mainnet
    • describeit의 식별자 중 '메인넷'이라는 문구가 있는 테스트만 실행이 됩니다.
      • 식별자는 describeit문구의 합이므로 상위 describe에 '메인넷'이 포함되어 있다면 해당 그룹의 it은 모두 실행됩니다.
    • foundry와 유사하게 --vvv처럼 플래그를 전달하면 스택 트레이싱 레벨을 조정할 수 있습니다.

스크립트 실행

  • 권장사항
    • 정말 급한 경우가 아니라면, 테스트넷과 메인넷에 실행할 스크립트는 fork 테스트를 작성하여 통과 여부 확인후 실행해주시길 바랍니다.
    • hardhat 스크립트의 경우 따로 시뮬레이션 과정이 없기 때문에 스크립트 중간에 실패하게 된다면, 스크립트의 원자성을 보장할 수 없습니다.(불필요한 가스비의 사용도 방지하기 위함)
    • 이것이 번거롭다고 생각될 경우 foundry의 스크립트 실행을 추천합니다. 기본적으로 로컬 시뮬레이션을 통과한 경우에만 실행이 되며, fork url을 옵션으로 줄 경우 해당 네트워크의 시뮬레이션까지 통과한 경우에만 실제 네트워크에 전파됩니다.

배포

  • 이전 보일러플레이트와 크게 다른 점이 없습니다.

Foundry

테스트

  1. 로컬 테스트
  • forge test
  • -vvv 와 같은 플래그로 스택 트레이싱 레벨 조정
  1. fork 테스트
  • forge test --fork-url 해당 네트워크 노드 주소
  • -vvv 와 같은 플래그로 스택 트레이싱 레벨 조정

스크립트 실행

  1. 온체인 시뮬레이션
  • forge script 스크립트 경로 --rpc-url 해당 네트워크 노드 주소 --private-key 비밀키
  1. 트랜잭션 전파
  • forge script 스크립트 경로 --rpc-url 해당 네트워크 노드 주소 --private-key 비밀키 --with-gas-price 해당 네트워크 가스비 --broadcast

배포

0.5.8

11 days ago

0.5.6

1 month ago

0.5.7

1 month ago

0.5.5

1 month ago

0.5.4

2 months ago

0.5.3

2 months ago

0.5.2

2 months ago

0.5.1

3 months ago

0.5.0

3 months ago

0.4.9

3 months ago

0.4.8

3 months ago

0.4.7

3 months ago

0.4.6

3 months ago

0.4.5

3 months ago

0.4.4

3 months ago

0.4.3

3 months ago

0.4.2

3 months ago

0.4.1

4 months ago

0.4.0

4 months ago

0.3.9

4 months ago

0.3.6

4 months ago

0.3.5

4 months ago

0.3.8

4 months ago

0.3.7

4 months ago

0.3.4

4 months ago

0.3.3

4 months ago

0.3.2

4 months ago

0.3.1

4 months ago

0.3.0

4 months ago

0.2.1

4 months ago

0.2.7

4 months ago

0.2.6

4 months ago

0.2.9

4 months ago

0.2.8

4 months ago

0.2.3

4 months ago

0.2.2

4 months ago

0.2.4

4 months ago

0.2.0

4 months ago

0.1.0

4 months ago

0.1.2

4 months ago

0.1.1

4 months ago

0.1.8

4 months ago

0.0.9

4 months ago

0.1.7

4 months ago

0.0.8

4 months ago

0.1.9

4 months ago

0.1.4

4 months ago

0.1.3

4 months ago

0.1.6

4 months ago

0.0.7

4 months ago

0.1.5

4 months ago

0.0.5

4 months ago

0.0.4

4 months ago

0.0.6

4 months ago

0.0.3

4 months ago

0.0.2

4 months ago

0.0.1

4 months ago