npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

wepublic-contract-sdk

v1.0.4

Published

## 권장사항

Downloads

3

Readme

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

배포