트러플(Truffle)은 리믹스에서 수동으로 진행하는 [Compile] - [Deploy] - [Test] 과정을 자동을 진행해주는 개발 프레임워크이다. 트러플로 스마트 콘트랙트를 배포할 때는 그 과정을 직접 코드롤 작성한다.
트러플과 같은 기능을 하는 도구로 타입스크립트 기반의 하드햇(Hardhat)이 있다. 자바스크립트로 진행 하고 후에 아래 블로그로 학습해보자
[ethereum] hardhat을 이용하여 스마트 컨트랙트 개발하기
안녕하세요. 멍개입니다. https://meongae.tistory.com/83으로 이관되었습니다. 지난 시간에 truffle을 이...
blog.naver.com
npm install -g truffle
mkdir dapp
cd dapp
truffle init

프로젝트를 생성하고 구조를 확인해보자
tree /F

- contracts : 스마트 코트랙트의 코드를 관리
- migrations : 배포할 때 필요한 값들을 전달
- test : 배포한 스마트 콘트랙트의 테스트 코드를 관리
- truffle-config.js : 이더리움 네트워크 정보, 솔리디티 컴파일 버전 등 개발 환경 정보를 기록
개발환경 정보를 추가자
// truffle-config.js
module.exports = {
// 스마트 콘트랙트를 배포하고 실행할 노드 정보
networks: {
// 개발 환경
dev: {
host: "127.0.0.1",
port: 8545,
// 모든 네트워크
network_id: "*",
},
// 메인네트워크 추가 시
// production: {
// host: "main network node IP",
// port: 8545,
// 메인 네트워크 = "1", 테스트용 롭스텐 네트워크 = "2" <= 이미 지정됐음
// network_id: "1",
// },
},
// 테스트 코드를 실행할 때 사용하는 JS의 테스트 프레임워크 정보 작성
mocha: {},
// 컴파일러 버전 명시
compilers: {
// solc == solidity compiler
solc: {
version: "0.8.10",
}
},
};
네트워크 환경을 dev로 정의했기 때문에, truffle을 실행할 때 --network dev 옵션을 추가해야 한다.
코드작성
트러플로 만들어진 폴더 중 dapp/contract/ 디렉토리에 스마트 콘트랙트를 작성하자. IDE는 리믹스VSCode 등 원하는걸로 작성하면 된다.
// Mung.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
contract Mung {
string public text;
constructor(string memory _text){
text = _text;
}
function setText(string memory _text) public {
text = _text;
}
function say() public view returns (string memory){
return text;
}
function errorOccur(uint a) public pure returns (uint) {
require(a == 0, "hello world error");
return a;
}
}
컴파일
truffle compile

Artifacts written to ~ 문구 뒤에 컴파일 결과가 저장된 위치를 보여준다.dapp/build/contracts 밑에 저장이 됨을 알 수있다.
이 파일을 메타데이터(metadata)라 부른다
배포
truffle-config.js에 배포환경을 정의했다. 배포에 필요한 정보를 migrations/ 폴더에 작성하자
파일 이름 작성 규칙은 반드시 "숫자_" 형태여야 배포가 가능하다.
const Mung = artifacts.require("Mung");
module.exports = function (deployer){
deployer.deploy(Mung, "hello mung"); // 생성자에 "Hello mung" 문자열 전달
};
다음 명령어로 컴파일한 스마트 콘트랙트를 배포한다. 이때 dev로 정의도니 네트워크가 존재하지 않으면 정상적으로 배포되지 않으므로 가나슈 CLI는 계속 실행 중이어야 한다.
truffle migrate --network dev

migrations/ 디렉토리에 정의도니 파일을 하나씩 읽어 배포한 결과이다. 스마트 콘트랙트를 배포하기 위해 생성한 트랜잭션 밑 블록 정보와 수수료 정보를 확인할 수 있다.
수수료 == 가스(gas) : 코드를 실행할 때 소모하는 비용
배포 후 결과는 스마트 콘트랙트를 활용할 때 필요하므로 꼭 보관하자
'Block Chain' 카테고리의 다른 글
| web3.js(HttpProvider) (0) | 2023.10.20 |
|---|---|
| Truffle 테스트 (0) | 2023.10.20 |
| 솔리디티 언어 개발도구(리믹스) (0) | 2023.10.19 |
| 파일 업로드/다운로드 (0) | 2023.10.18 |
| 분산형 파일 시스템(IPFS : InterPlanetary File System) (0) | 2023.10.18 |