본문 바로가기
  • 개발 / 공부 / 일상
BlockChain

(BlockChain) Truffle

by JJeongHyun 2023. 3. 2.
반응형

기본설정

  • 작업하고자 하는 폴더로 이동
  • 이후 npm i truffle 입력
    • truffle 라이브러리 설치 후 npx truffle init 입력

연습용 폴더 생성 디렉토리 경로 상태

저는 오늘 날짜에 truffle-test 폴더 안에서 명령어를 입력했습니다!!

 

그리곤 3개의 폴더와 1개의 js 파일이 생성되었습니다

 

  • 생성된 폴더
    • contracts : Solidity를 이용한 Smart Contract 코드 작성 폴더
    • migration : 배포 관련된 코드를 작성하는 폴더
    • test : 테스트 코드 작성 폴더
  • 생성된 파일
    • truffle-config.js : tuffle 설정 파일

컴파일할 Solidity 코드 작성

 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Practice{
    string tempText;

    constructor(){
        tempText = "Solidity Code test";
    }

    function getText() public view returns (string memory){ 
        return tempText;
    }   
    function setText(string memory _text) public {
        tempText = _text;
    }
}

 

npx truffle compile 실행 후 생성된 데이터를 JSON형식으로 추출한다

  • build/contracts 안에 Practice.json 파일이 생성된다

 

npx truflle migration

  • 배포 명령어
    • 실행 전에 migration 폴더 내부에 파일을 생성해야 하는데 형식은 다음과 같다
      • 번호_내용_컨트랙트명.js
      • 1_deploy_Practice.js
    • 그다음엔 truffle-config.js 파일 내에 development 관련 설정을 주석을 해제해야 한다
    • 이후 정상적으로 연결되는지 보기 위해 ganache와 연결해보려고 한다

(좌) migration 내부에 생성해야 하는 파일명 형식 및 내부 코드 / (우) truffle-config.js 설정 캡
정상 연결 시 CA에 접근 가능

truffle을 사용해서 확인

  • npx truffle console
    • 실행 후 컨트랙트명.deployed().then((instance)=>저장할변수명=instance)
      • instance를 변수에 담아 사용하기 위해 실행
    • solidity 코드에 생성한 함수들을 실행해 본다

getText.call()

최초 생성된 tempText 출력

setText("변경할 텍스트 작성")

setText를 이용하여 tempText 변경 결과

setText로 변경 후 해당 getText() 실행

변경 후 다시한번더 getText 실행

Jest truffle로 실행 

  • npx truffle test
    • test 폴더 내에 작성
    • 컨트랙트명.test.js 생성
const Practice = artifacts.require("Practice");

contract("Practice", (accounts) => {
  console.log(accounts);

  let practice;

  describe("Practice Contract", () => {
    it("deploy", async () => {
      practice = await Practice.deployed();
    });
    it("getText", async () => {
      console.log(await practice.getText.call());
    });
    it("setText", async () => {
      await test.setText("Hi, hello, bye");
      console.log(await practice.getText.call());
    });
  });
});

ganache 전체 계정 출력 및 각 메서드들 정상 작동 jest 확인 결