[truffle & ganache] 스마트 컨트랙트 배포하기

HyeongA·2023년 6월 8일
2

Blockchain_dev

목록 보기
16/20
post-thumbnail

truffle & ganache 설치

💻 local에 배포하기

환경설정 → 프로젝트 생성 → 개발 → 컴파일 → 배포 (migrate) → 배포 확인(ganache)

1. 환경설정 (cmd)

//cmd 관리자 권한으로 실행
//원하는 위치로 파일 경로 설정 
mkdir 파일이름		;파일생성
cd 파일이름			;위치이동

2. 프로젝트 생성

  • truffle init
    : truffle 시작
    : contracts, migrations, test, truffle-config.js 생성됨
    ※ 확인 : ls (하위항목 보여줌)

3. 개발

  • truffle create contract 파일이름
    : contract 파일 만들기
    ※ 확인 : cd contracts > ls > cat 파일이름.sol

  • vscode에서 생성한 contract에 샘플 코드 입력
    : contract의 이름과 solidity 파일명은 통일시키면 사용하기 좋음
//사용한 샘플 코드
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
contract ADD {
  function add(uint a, uint b) public pure returns(uint) {
    return a+b;
  }
}

4. compile

  • truffle compile
    : 폴더 내 모든 파일이 컴파일 됨
    ※ 확인 : 아래와 같이 Compild successfully

5. 배포 (vscode)

  • migrations 폴더 안에 "1_파일명.js" 생성 후 샘플코드 작성
    : 파일명 작성 시 "1_" 형식을 지켜줘야 실행됨
//샘플 코드
const 변수명 = artifacts.require("solidity의 contract명");
module.exports = function (deployer) {
  deployer.deploy(변수명);
};

  • ganache 실행
    1) cli설치한 경우 : ganache-cli
    2) window 프로그램 다운 받은 경우

  • truffle-config.js 파일에서 주석 수정
    - networks의 development 부분 주석 해제
    - port번호 확인 (ganache의 포트 번호와 동일하게 수정)
    - compiler의 version "0.8.19"으로 수정

  • truffle migrate
    : 터미널 (powershell)에서 migrate 실행

6. 배포 확인 및 사용 (cmd)

  • truffle console

  • let 변수명 = await 컨트랙트명.deployed()
    ex ) let contract = await ADD.deployed()

  • 함수 실행 (ex : contract.add())
  • 함수 실행 후 ganache에서 거래를 확인 할 수 있음
    : 새로운 코드 예시 ↓

💻 testnet, mainnet 배포

환경설정 ~ 컴파일 부분은 local과 동일

5. 배포 (vscode)

  • contracts, migrations폴더와 같은 레벨에 .env파일 생성
  • .env파일 작성
//작성 내용
MNEMONIC = 니모닉 코드	//메타마스트 시드구문 사용
PROJECT_ID = api key   //(infura) API api 사용
  • truffle-config.js파일에서 주석 해제
// 첫 문단 
require('dotenv').config();
const { MNEMONIC, PROJECT_ID } = process.env;
const HDWalletProvider = require('@truffle/hdwallet-provider');
// networks
goerli: {
      provider: () => new HDWalletProvider(MNEMONIC, `https://goerli.infura.io/v3/${PROJECT_ID}`),
      network_id: 5,       // Goerli's id
      confirmations: 2,    // # of confirmations to wait between deployments. (default: 0)
      timeoutBlocks: 200,  // # of blocks before a deployment times out  (minimum/default: 50)
      skipDryRun: true     // Skip dry run before migrations? (default: false for public nets )
    },
  • npm install dotenv
  • npm i @truffle/hdwallet-provider@next
  • migrations 폴더 안에 "1_파일명.js" 생성 후 샘플코드 작성
  • truffle migrate --network goerli

6. 배포확인 및 사용

  • truffle console --network goerli
  • let 변수명 = await 컨트랙트명.deployed()
  • 변수명.함수명() ; 함수실행

💻 truffle 추가 명령어 및 기능

  • truffle전체 명령어 확인
    : truffle
  • 특정 파일만 컴파일 하고 싶은 경우
    : truffle compile .\contracts\파일명.sol
  • 특정 파일만 migrate 하고 싶은 경우
    : truffle migrate --f 2 (2번부터 끝까지)
    : truffle migrate --f 2 --to 2 : 2번만 실행됨
  • 여러 파일의 동일한 컨트랙트 명이 존재할때 제일 마지막에 컴파일된 컨트랙트만 인정됨
    : 같은 이름의 컨트랙트 여러개 배포 x (사용 지양)
    : 마이그레이션과 상관없이 컴파일이 늦게된 애가 나타남
    : 특정 파일만 마이그레이션 진행해도 컴파일된 순서로 나타남
  • 반복 실행
var a = 0;
let timer = setInterval(()=>add.setA(a+=1), 2000);
setTimeout(()=>{clearInterval(timer)}, 40000)
  • constructor가 있는 컨트랙트의 경우
    : migration과정에서 아래와 같이 작성
    : deployer.deploy(변수명, 컨스트럭트 input값);

📝 용어정리

  • compile
    : 내가 짠 코드를 기계가 읽을 수 있게 번역하는 과정을 의미
  • migrate
    : contract를 블록체인 네트워크에 배포할 때 사용
    : migration은 서로 다른 네트워크에서 스마트 계약 배포를 자동화하고 관리하는 방법
  • truffle-config.js
    : 네트워크 연결 및 설정
  • MNEMONIC 시드 구문
    : 지갑을 사용할 수 있음(개인키 역할)
    : 사람들이 사용하기 쉽게 만들기 위해 등장)
  • Infura api
    : The Infura Ethereum API (application programming interface) provides developers with easy-to-access Ethereum-based infrastructure to build decentralized applications (dApps).
    : 이더리움 환경을 사용하기 위해 가지고 오는 provider

profile
Solidity | React | Python

0개의 댓글