본문 바로가기
Block Chain

솔리디티 언어 개발도구(트러플 v5.11.5)

by Coarti 2023. 10. 19.

트러플(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) : 코드를 실행할 때 소모하는 비용

배포 후 결과는 스마트 콘트랙트를 활용할 때 필요하므로 꼭 보관하자

728x90

'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