환경설정 → 프로젝트 생성 → 개발 → 컴파일 → 배포 (migrate) → 배포 확인(ganache)
//cmd 관리자 권한으로 실행 //원하는 위치로 파일 경로 설정 mkdir 파일이름 ;파일생성 cd 파일이름 ;위치이동
truffle init
: truffle 시작
: contracts, migrations, test, truffle-config.js 생성됨
※ 확인 :ls
(하위항목 보여줌)
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; } }
truffle compile
: 폴더 내 모든 파일이 컴파일 됨
※ 확인 : 아래와 같이 Compild successfully
- 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 실행
truffle console
let 변수명 = await 컨트랙트명.deployed()
ex )let contract = await ADD.deployed()
- 함수 실행 (ex :
contract.add()
)- 함수 실행 후 ganache에서 거래를 확인 할 수 있음
: 새로운 코드 예시 ↓
환경설정 ~ 컴파일 부분은 local과 동일
- 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
truffle console --network goerli
let 변수명 = await 컨트랙트명.deployed()
변수명.함수명()
; 함수실행
- 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