개발 환경 === 개발 툴 --- - Hardhat - Truffle과 같은 기능을 제공하고, 실제 이더리움 상태 (실제 블록들 등) 환경을 fork 해서 테스트 환경을 만들 수 있음. - 예를 들어, 현재 Uniswap 의 상태를 그대로 가져와서 Defi 를 테스트하고 싶다할 때, 유용하게 쓰일 수 있음. - Solidity 언어 개발 시 불편한 점은 print 를 찍어볼 수 없다는 것인데 event 을 활용해서 디버깅을 하게 되는데, Hardhat 을 사용하면 javascript 처럼 console.log 로 프린트를 찍어볼 수 있는 장점이 있음. - 큰 규모의 프로젝트를 할 때는 hardhat 을 사용하고 있음. (truffle 은 작은 프로젝트용이라고 보면 됨) - Truffle - test code 를 javascript 로 작성할 수 있기 때문에 복잡한 테스트는 truffle 을 사용하면 됨. - Remix - Remix 도 테스트 코드를 작성하고 테스트 할 수 있는 환경이 제공되고 있음. input 을 넣었을 때 적절히 state 변화가 발생하는지 확인할 수 있음. - Ganache - 이더리움 테스트넷이나 메인넷에 배포를 하기 전에 개인 환경에서 간단한 이더리움 로컬 프라이빗 네트워크를 구성하고 테스트를 해볼 수 있는 프로그램. GUI 와 CLI 버전 모두 사용할 수 있고, Remix 를 사용할 경우 Local Environment 로 타겟 네트워크를 설정하면 컴파일 후 배포를 할 수 있음. - Infura - 스마트 컨트랙트를 배포할 때, 오픈되어 있는 특정 네트워크를 사용할 수 있음. 이렇게 하는 이유는 내가 프라이빗 노드를 구축하거나 개인 로컬 네트워크를 구축하거나 테스트넷을 싱크받아서 사용하는 것보다 Infura 같은 플랫폼을 이용하면 손쉽게 배포할 수 있음. *여담으로 Truffle, Remix, Ganache, Infura 같은 툴을 개발하는 기업은 ConsenSys 라는 기업으로, 블록체인 관련 인프라를 구축하는 기업이라고 한다.* 개발 환경을 구축해보자 --- ### Truffle 다운받기 [Truffle Official Doc](https://trufflesuite.com/docs/truffle/) ``` OS: Mac OS X (Catalina, Macbook Air 2014 Early) ``` ```zsh $ npm -v 8.3.1 $ sudo npm install -g npm $ npm -v 8.7.0 $ npm install -g truffle ``` *TroubleShooting 1: 설치 중에 Unsupported architecture 라는 에러가 뜨면서 멈췄다. 이 경우에는 node 를 14버전으로, npm을 6 버전으로 downgrade 하면 해결된다고 한다. [출처](https://github.com/trufflesuite/truffle/issues/4683)* 다시 도전 ```zsh # TroubleShooting 1 $ npm install -g npm@6 $ npm audit fix # fix 2 vunerablities $ npm install -g n # install node version manager $ sudo n 14 $ npm uninstall -g truffle $ npm install -g truffle ``` 개발 환경 초기화하기 ```zsh $ truffle unbox metacoin # install a sample project $ truffle init # install a bare project ``` 컴파일 및 테스트 수행 ```zsh $ truffle compile $ truffle migrate $ truffle test ```