truffle Ganache로 smart contracts 만들기

이명진·2024년 2월 2일
0

블록체인

목록 보기
1/2

블록체인 으로 smart contracts 만들기 테스트를 해보게 되었다.

공부는 https://grizzlypeaksoftware.com/articles?id=5vWBWo4Zpi02FSVCmQunxk 여기서 했다.

거의 해석하면서 따라 해본것이라서 번역해서 작성해보도록 한다.

몇년도 글인지는 모르겠지만 현재(2024.02.02) 그대로 따라 했다가는 오류를 맛본다.

일단 순서대로 따라 해보고 에러 까지 만난 후기 까지 작성해보도록 하겠다.

Setting up your dev environment

세팅을 위해서 Ganache 를 받아준다.

여러글을 읽고 따라해보니 meta-mask 까지 확장으로 받았다.
여기서는 meta-mask 까지 활용하지는 않는다.

What is Truffle?

간단하게 말하면 이더리움 과 EVM(이더리움 가상 머신)의 개발 환경을 사용하게 하는 라이브러리다.

What is Ganache?

truffle 에 맞춤 툴이다. 테스트 환경에 맞춰서 블록체인을 원래 정상 배포 하거나 하면 가스비가 드는데
테스트를 잘못하기라도 하면 이더리움만 손해보게 된다. 그래서 Ganache가
테스트를 위해서 10개의 계정을 임시로 만들어주고 100이더리움을 계정마다 채워준다.
테스트 환경에서 이 계정들을 활용해서 테스트를 해볼수가 있다 .

Initializing the Project

일단 프로젝트를 만들어준다 .

mkdir storevalue
cd storevalue
truffle init

storevalue 폴더를 만들고 truffle init 을 해준다.

truffle init을 터미널로 치면 truffle이 설치가 안되어 있다고 에러가 나오는데
npm i -g truffle 명령어를 쳐도 설치는 되는데 계속 truffle 을 못찾는다.

그래서 npx 를 사용해서 명령어를 쳐주자 .

npm과 npx의차이는 간단하게 말해서 npm은 패키지 매니저를 설치해서 저장해두는거고
npx는 저장하기 싫을때 가상머신에 저장해두고 활용할수 있게 하는 것이다.

npx truffle init 

그러면 storevalue 폴더 내부에 세가지 폴더가 생기고 config파일이 생긴다.

간단하게 설명하면

  • contracts : 스마트 컨트랙트 코드를 담을 디렉토리 (sol 파일이 들어간다. 솔라리움 코드인것 같다.)
  • tests : 테스트 코드를 담을 디렉토리 (test는 여기에서 다루지는 않는다. )
  • migrations : 배포 관련 코드를 담을 디렉토리 (contracts 를 배포한 json파일을 활용해서 배포를 진행하게하는 코드 )

compile

일단 contracts 폴더 내부로가서 StoreData.sol 파일을 만들어주자

그리고 사이트에서 보면 아래 코드를 입력하라고 한다.

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.12;

contract StoreValue{
    private uint value;

    function set(uint v) public{
        value = v;
    }

    function get() public view returns(uint){
        return value;
    }
}

작성해주고 truffle compile 명령어를 활용해서 컴파일 해준다.

하지만 우리는 npx truffle compile을 써주자 .

위에서 알려준 sol 코드를 그대로 작성하고 컴파일을 하고 빌드를 하면 아래와 같은 에러를 직면한다

Compiling ./contracts/StoreData.sol
ParserError: Function, variable, struct or modifier declaration expected.
--> project:/contracts/StoreData.sol:5:5:
|
5 | private uint value;
| ^^^^^^^

수정 코드


// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.15;


contract StoreValue{ //smart contract name
    //private uint value;  //uint 란 Unsigned integer, 양수 이다. 이거 에러가 나온다. 
    // uint256 private value; // error 
    uint private value;
    function set(uint v) public{
        value = v;
    }

    function get() public view returns(uint){
        return value;
    }
}

class 보다 함수형을 자주 써서 그런지 뭐가 문제인지 잘 몰랐다가. 찾아보면서 코드를 수정했다.

unit256 도 써보고 uint private value 도 썼다.

변경해주니 잘 작동한다. 컴파일까지 완료했다.

컴파일까지 완료하면 bulid폴더가 생기고 json파일이 생성된다.

Ganche 설정

그리고 다음으로 다운받은 Ganache 를 설정해준다.

처음에 QuickStart로 설정했는데 이사이트는 new workspace로 설정을 해준다.

truffle config file을 import 해주는건데 이렇게 설정하면 truffle config file을 안만져도 된다.

Migration

migration자체가 빌드이다.

migration 폴더에 2_StoreValue_migration.js 파일을 만들어준다.
이름을 지을때 규칙이 있다고 한다. 번호와 이름을 매칭시켜줘야 한다.

// 2_StoreValue_migration.js

const Migrations = artifacts.require("StoreValue"); //artifacts가 json 이라고 한다.

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

하지만 배포할때 에러를 직면하게 된다.

여기서 좀 시간이 걸렸다.

에러 직면

 Deploying 'StoreValue'
  ----------------------
*** Deployment Failed ***

"StoreValue" hit an invalid opcode while deploying. Try:
  * Verifying that your constructor params satisfy all assert conditions.
  * Verifying your constructor code doesn't access an array out of bounds.
  * Adding reason strings to your assert statements.


Exiting: Review successful transactions manually by checking the transaction hashes above on Etherscan.

컴파일은 계속 성공하는데 에러를 계속 만나게 되었다.
구글링좀 해보니 호환성 문제라고 하는데 sol 파일을 수정해서 저장하고 빌드만 하면 되는줄알았는데

컴파일도 다시 진행해주고 빌드도 해야 된다…

쭉 구글링 해보니 호환성 문제로 truffle_config 파일에서 버전을 낮춰주면 된다고 해서 낮춰주었다.

https://stackoverflow.com/questions/76377136/migrations-hit-an-invalid-opcode-while-deploying
여기 글을 보고 맞춰주니 배포랑 완료 되었다.

하지만 Ganache를 확인해보니 그대로인것 같다??

무슨 문제일까.. 조금더 찾아봐야 한다. 바뀐점이라면 TX Count는 1 증가 된게 보인다.
위의 성공 코드를 보니 가스비만 빠진것 같은데 0.00003468 이라서 차감이 안된건지. 아니면 뭐가 잘못된건지 차차 알아봐야겠다. .

우여곡절끝에 일단 배포까지 성공했다.

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글