Ganache 간략 사용법 (feat. 소소한 추가 정보)
들어가며
스마트 컨트랙트 코드 작성법에 관해 공부하던 중 로컬 테스트를 할 수 있는 Ganache(가나슈)를 알게 됐습니다. Ganache는 Solidity(솔리디티)와 더불어 로컬 블록체인 네트워크에서 스마트 컨트랙트와 dApp(Decentralized applications)을 테스트하고 배포할 수 있는 툴인데요. 예전에 팀장님께서도 Ganache를 언급했던 기억이 나, 간략한 사용법을 공유합니다.
New Workspace 개발 환경 설정하기
Ganache를 실행하면 나오는 첫 화면입니다. Quickstart와 New Workspace 중 하나를 선택합니다.
두 작업 환경 모두 Ethereum(이더리움)과 Filecoin(파일코인) 네트워크를 지원하니 원하는 메인넷을 선택한 뒤 설정 여부를 확인하고 진행합니다.
New Workspace를 선택하면 첫 번째 탭인 Workspace가 나옵니다.
Workspace Name을 원하는 문구로 바꿀 수 있는데요. 만약 변경하지 않으면 컴퓨터의 기본 이름으로 설정됩니다.
배포 전의 Truffle Project를 연결할 수도 있습니다. 이를 통해 트랜잭션 로그, 가스 사용량 등의 정보를 확인해서 디버깅하고, 결과를 분석할 수 있죠. 개발자 입장에서는 미리 문제를 파악하고 해결할 수 있는 것이지요.
Server 탭에서는 Host Name과 Port Number를 입력합니다.
Port Number는 로컬 테스트 시 연결 오류, 포트 충돌, 네트워크 제한 같은 일이 발생하는 것을 방지하기 위해 기본값 그대로 사용한다고 하는데요. Ganache 6.0.0 이전 버전에서는 7545가, 6.0.0 이후 버전에서는 8545가 기본값이라고 합니다.
Network ID는 Ganache 서버의 내부 블록체인 식별자이기 때문에 기본 설정값을 사용하면 충분하다고 합니다.
Automine 옵션은 트랜잭션이 처리될 때마다 다음 블록을 자동으로 채굴하고, Error on transaction failure 옵션은 다양한 트랜잭션 오류를 추적해 줍니다.
Account & Key 탭에서는 지갑(wallet)의 기본 잔고 및 개수를 입력합니다. 기본값은 각각 100 ether(ETH)와 10개이며, 나중에 바꿀 수 있습니다.
Mnemonic은 지갑 복구 시 본인 확인용으로 쓰이는 12~24개의 단어 목록인데요. 시드 문구, 복구 문구라고 불리기도 합니다. HD Mnemonic 옵션을 활성화하면 Mnemonic의 단어를 자동으로 완성해 주며, 비활성화 시 기본으로 입력된 것들을 사용하게 됩니다. 되도록 기본 제공되는 Mnemonic을 사용하는 것이 작업할 때 편하다고 합니다.
Chain 탭에서는 Gas limit와 Gas Price를 정합니다. 각 블록 및 트랜잭션에 사용할 Gas limit는 기본으로 설정돼 있지만, 이 또한 바꿀 수 있습니다. Hardfork에는 여러 옵션이 있으며 테스트 진행 시 시스템이 자동으로 설정한 값을 사용해도 되며, Petersberg와 Muir Glacier도 많이 사용한다고 합니다.
마지막으로 Advanced 탭에서는 로그를 파일로 저장하는 OUTPUT LOGS TO FILE 옵션이 있습니다.
이 옵션을 활성화하면 LOG FILE DIRECTORY 옵션 선택이 가능하며, 폴더를 지정하면 전체 트랜잭션에서 발견되는 모든 로그와 오류가 지정한 폴더에 기록됩니다.
설정을 모두 마치고 우측 상단의 START 버튼을 클릭하면, workspace 생성 시 설정한 지갑의 정보를 보여주는 Accounts 화면이 나옵니다. Blocks에서는 트랜잭션이 검증되고 있는 지갑 중 하나만 확인할 수 있습니다. Transactions은 발생하는 전체 트랜잭션 기록을, Contracts는 실행 중인 스마트 컨트랙트의 기록을 보여줍니다. Logs에서는 LOG FILE DIRECTORY 옵션에서 지정한 폴더에 자동으로 기록되는 모든 로그와 오류를 볼 수 있습니다.
아울러 Quickstart는 Ethereum에서 Ganache를 빠르게 사용할 수 있도록 모든 설정들이 자동으로 기본값으로 입력된 채 시작됩니다.
Remix IDE에서 Ganache 이용하는 법
Ganache는 스마트 컨트랙트 테스트 시 사용할 수 있는 Remix IDE에 연결해서 이용할 수 있습니다. Remix IDE를 통해 온라인에서 스마트 컨트랙트 코드를 작성하고 배포할 수 있으며, 코드 컴파일도 가능합니다. 로컬 블록체인이나 Ethereum 메인넷에도 배포할 수 있죠. Remix IDE에서 Ganache를 이용하는 방법은 아래와 같습니다.
- 작성한 Solidity 파일을 컴파일
- Deploy & Run transactions 메뉴에서 ENVIRONMENT 옵션 중 Web3 Provider 선택
- Ganache에서 제공하는 서버 주소 입력
- Deploy 버튼 눌러 스마트 컨트랙트 배포
- Ganache 작업 화면 상단의 Transactions 메뉴에 트랜잭션으로 처리된 스마트 컨트랙트 목록 생성
Solidity 파일상 코드로 입력한 store 값들이 스마트 컨트랙트 목록의 왼쪽 패널에 나옵니다. 각 store 값을 바꿔가며 테스트해 보면 스마트 컨트랙트가 변경되고, 트랜잭션이 처리될 때마다 Gas Price가 나오는 것을 확인할 수 있습니다.
Feat. 소소한 추가 정보
앞서 언급한 Solidity 컴파일과 Ethereum 또는 Ethereum 기반의 블록체인 생태계에서 쓰이는 Gas에 대해 번외 편처럼 잠깐 설명드리려고 합니다. 자세한 내용은 블록체인이 필요한 이유와 스마트 컨트랙트, 스마트 컨트랙트는 뭘로 만들어요? 에서 볼 수 있으며, 제 설명은 추가 내용 정도로 봐주시면 좋겠습니다.
EVM(Ethereum Virtual Machine, 이더리움 가상 머신)
EVM은 스마트 컨트랙트 기반의 dApp을 실행하기 위해 Ethereum에서 사용되는 소프트웨어 플랫폼입니다.
그런데 EVM은 Solidity를 읽지 못하기 때문에 Solidity를 컴파일 해줘야 한다고 해요. 코드와 Solidity를 컴파일하면 op_codes와 Bytecode로 바뀌고, 둘 중에 Bytecode를 읽을 수 있다고 합니다.
Gas(가스)
Gas는 Ethereum 또는 Ethereum 기반의 네트워크에서 채굴자(또는 검증자)가 트랜잭션을 처리(연산)하는 데 필요한 컴퓨팅 파워의 양을 측정하는 단위입니다. 그래서 트랜잭션을 요청할 때 내는 수수료를 Gas Fees(Price)라고 불러요. 네트워크상의 모든 트랜잭션에는 Gas Fees가 나오며 해당 네트워크의 네이티브 코인으로 냅니다. 만약 Ethereum 네트워크라면 Gas Fees는 ether의 최하위 단위인 wei로 표기하며, 1 gwei(1 ETH의 10억 분의 1)도 많이 쓰입니다. Gas의 양은 트랜잭션의 복잡도와 네트워크의 혼잡도에 따라 달라지니 트랜잭션을 빠르게 처리해야 하면 Gas Fees를 더 내고, 반대로 시간 여유가 있다면 덜 내면 됩니다. ‘모든 거래에는 Gas Fees가 든다’고 알아두면 좋을 것 같습니다.
마치며
Ganache를 직접 사용하며 알아두면 좋을 것 같다고 생각한 옵션에 대해 설명드렸습니다.
스마트 컨트랙트를 비롯해 블록체인 관련 작업 시 소소하게나마 도움이 되면 좋겠습니다.
글 읽어주셔서 감사합니다. 🙇🏻♀️ 그럼 안녕히…👋 -The End-
참고 문서
- 영상 강의 : 블록체인 프로그래밍 기초 과정: 이더리움 및 솔리디티
이 글은 pxd XE Group Blog에서도 보실 수 있습니다.
Edit Writing by Eun-Ju Choi, UX Writer