본문 바로가기
블록체인/블록체인 서비스 개발

[이더리움개발101] Truffle, Ganache-cli 설치, Initial 배포

by 마고커 2022. 4. 18.


1. 이더리움 배포와 테스트를 위한 Truffle(배포), Ganach-cli(테스트) 설치

 

> npm install truffle -g
> npm install ganache-cli -g

 

2. 설치 후 version 확인

 

> truffle version
Truffle v5.5.7 (core: 5.5.7)
Ganache v^7.0.3
Solidity - 0.8.13 (solc-js)
Node v16.13.2
Web3.js v1.5.3

 

3. Truffle 초기화

 

> truffle init
> tree 
.
├── contracts
│   └── Migrations.sol
├── migrations
│   └── 1_initial_migration.js
├── test
└── truffle-config.js

 

4. Sample 계약서(Lottery.sol) 추가

 

contracts 디렉토리 안에 Lottery.sol 작성

 

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

contract Lottery {
 
}

 

5. 배포를 위한 js 작성

 

truffle에서 배포는 migrations 디렉토리 안의 번호 순으로 배포된다. 즉, 1_initial_migration.js 다음에 Lottery 계약서를 배포할 2_deploy_smart_contract.js를 작성한다. deployer는 truffle-config.js 에 정의되어 있다.

 

const Lottery = artifacts.require('Lottery');

module.exports = function(deployer) {
    deployer.deploy(Lottery);
};

 

6. development 네트워크 환경 설정

 

로컬에서 배포가 이루어질 수 있도록 truffle-config.js를 수정한다. network 안의 아래 development 부분을 주석 해제한다.

 

    development: {
      host: "127.0.0.1",     // Localhost (default: none)
      port: 8545,            // Standard Ethereum port (default: none)
      network_id: "*",       // Any network (default: none)
    },

 

7. truffle 배포

 

'truffle migrate' 명령으로 계약서 compile과 배포가 이루어진다. 다시 truffle migrate 하면 이전에 배포된 것 이외에 추가된(즉, 3_xxxx으로 시작되는 js 파일) 부분만 배포되므로, 처음부터 다시 배포하고 싶으면 'truffle migrate --reset'을 입력한다. 

> truffle migrate 

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.


Starting migrations...
======================
> Network name:    'development'
> Network id:      1650247658286
> Block gas limit: 6721975 (0x6691b7)


1_initial_migration.js
======================

   Replacing 'Migrations'
   ----------------------
✓ Transaction submitted successfully. Hash: 0x8b5fac23cffbbe375c287b3629b2ad81b0edd8ea528b42144688452f017ab500
   > transaction hash:    0x8b5fac23cffbbe375c287b3629b2ad81b0edd8ea528b42144688452f017ab500
   > Blocks: 0            Seconds: 0
   > contract address:    0xBfaD9A9982B2169E124F754b2F8036bCEA542137
   > block number:        5
   > block timestamp:     1650247847
   > account:             0xF76c9B7012c0A3870801eaAddB93B6352c8893DB
   > balance:             99.987304
   > gas used:            248854 (0x3cc16)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00497708 ETH

   ✓ Saving migration to chain.
✓ Transaction submitted successfully. Hash: 0xc46ecfb2a74a77cfae2f47ac295c0ff450184705ac2d34b8f61e4f063e3ed398
   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00497708 ETH


2_deploy_smart_contract.js
==========================

   Replacing 'Lottery'
   -------------------
✓ Transaction submitted successfully. Hash: 0x3f32dc632c21dfd9fe86733ac1e3c5af00b4a7a569e595faac063f45e8231a0a
   > transaction hash:    0x3f32dc632c21dfd9fe86733ac1e3c5af00b4a7a569e595faac063f45e8231a0a
   > Blocks: 0            Seconds: 0
   > contract address:    0xED43Bcf94743F0248d896D52A9693F775FE3642C
   > block number:        7
   > block timestamp:     1650247848
   > account:             0xF76c9B7012c0A3870801eaAddB93B6352c8893DB
   > balance:             99.98511242
   > gas used:            67066 (0x105fa)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00134132 ETH

   ✓ Saving migration to chain.
✓ Transaction submitted successfully. Hash: 0xc4ad25b1312fa37e84ae16201b9721d26a7a1c79c4445758384976f4668b6c0b
   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00134132 ETH

Summary
=======
> Total deployments:   2
> Final cost:          0.0063184 ETH

 

8. 배포된 계약서 확인

 

ganache-cli로 제대로 배포되었는 지 접근해서 확인할 수 있다. ganche-cli 의 -d 옵션은 주어진 mnemonic (여기서는 tutorial)에 기반해서 주소를 만들라는 의미라고 한다. 아래와 같이 수행되면  정상적 배포 완료

 

> ganache-cli -d -m tutorial

Ganache CLI v6.12.2 (ganache-core: 2.13.2)

Available Accounts
==================
(0) 0xF76c9B7012c0A3870801eaAddB93B6352c8893DB (100 ETH)
(1) 0x84F43c88Dc56510D043D5EE922D57549959c4C3C (100 ETH)
(2) 0x7eC36bc569C4B6fD3dDD7B7ebc9e1eDb2e736339 (100 ETH)
(3) 0x7f98395E0F0470B4a6FBC7E8828897ABBD093a00 (100 ETH)
(4) 0xfca6a8A66E8fbcd2fCc1532f5eeEDD34bF4A7e97 (100 ETH)
(5) 0x4De841B154641C4d0bceA2cb1aFC9d86779ffd0A (100 ETH)
(6) 0x77041c20FE4B1240d8b13C29dC8F541eFC576c08 (100 ETH)
(7) 0x68126B29d36451F0e2FDc6bFeCB404594099B669 (100 ETH)
(8) 0x9fcBaD0d39d77393cA6f4FE33e0b5f138E9DF59A (100 ETH)
(9) 0xcD4a6eCa58EdD41012Cf0429E59E885Bcb052Ba1 (100 ETH)

Private Keys
==================
(0) 0x8d22a0aa9c43da157ebc24bc7d70c26d198381e042ab93434757752e3f0ee8e5
(1) 0xfc953f0b751d43d825c8bdbe0cb96b5399785d63d665a8a08d4402d1744651eb
(2) 0xb29daad2e0a03bbe925d600a2096a9e4a36cc4135a5698663399049d358260da
(3) 0xd0a21a0c8bb03a589e01461470b8db428124bfd0674b2105480ea63b477d7f0f
(4) 0x2dffbad13afbc666a9c593920be3de59504923b2761cbe9a74b5b1c535fdcd45
(5) 0x9dad1cf63f92916dcb1d1e6162b32ef91622a3465e00b3cb73fe900ae6050272
(6) 0xda5ea07f6dd402aafeae6a079bef862e18ed2c2da2e7a8001434d7c19f3e9b8d
(7) 0xe9f7be5224efe8f29f849373fece147b84d041af027b91938ba6beae7c2233fd
(8) 0xaa6da5dce2bd70e453a2823a182f619d9cc1d919a044c0ade83707199c6e0018
(9) 0x800dcf712a622efcf37deff66439f1257055d50a79e2fd6414c5e8c9fd09c274

HD Wallet
==================
Mnemonic:      tutorial
Base HD Path:  m/44'/60'/0'/0/{account_index}

Gas Price
==================
20000000000

Gas Limit
==================
6721975

Call Gas Limit
==================
9007199254740991

Listening on 127.0.0.1:8545


댓글