Programming

블록체인 개발자를 위한 Truffle 설치와 스마트 계약 개발 환경 구성 (truffle, ganache-cli, solc )

IT오이시이 2023. 7. 28. 13:33
728x90

 

블록체인 개발자를 위한  Truffle 설치와 스마트 계약 개발 환경 구성 (truffle, ganache-cli, solc )

 
 
Truffle 설치 와 스마트 계약(Smart Contract) 개발

1. Truffle 설치 - 스마트 계약 개발 환경 구성 (truffle, ganache-cli, solc )
    - npm install -g truffle
    - npm install -g ganache-cli
    - npm install -g solc

2. Truffle 사용 - 스마트 계약(Smart Contract)개발
   - truffle create contract YourContractName
   - truffle create test YourTestName 

3. [Truffle 환경 설정] 컴파일 오류 대처 - Error: Failed to fetch the Solidity compiler from the following locations:
     - Are you connected to the internet?

4.  [Truffle 환경 설정] Deploy 오류 대처 - Error: Could not find artifacts for SimpleStorage from any sources
  - throw new Error("Could not find artifacts for " + import_path + " from any sources");

 

 ㅁ Truffle 명령은  스마트 계약을 개발하고 테스트 하는 도구 입니다.


# Truffle을 이용하여 스마트 컨트렉트를 이용하는 명령은 다음과 같습니다.

$ ganache-cli  -h 0.0.0.0 -p 8545 &  # 테스트용 블록체인 네트웍을 작동 합니다.
$ truffle init
->  smart contract  소스를 작성 합니다.
$ truffle compile
$ truffle migration ./migration/deploy_someContract.js
$ truffle deploy
$ truffle test ./test/someContrace_test.js

이번에는 truffle 도구 설치에 필요한 과정에  대하여 알아 보고자 합니다.


 
 

1. Truffle 설치 - 스마트 계약 개발 환경 구성 (truffle, ganache-cli, solc )

 
Truffle은 Ethereum 스마트 계약(Smart Contract)을 개발하고 배포하기 위한 강력한 개발 도구이며, Ethereum 블록체인 기반의 분산 응용 프로그램(DApp)을 더욱 쉽게 개발할 수 있도록 지원합니다. Truffle은 개발자들이 스마트 계약, 테스트 및 배포를 관리하는 데 도움이 되는 다양한 기능을 제공합니다.
 
Truffle은 스마트 계약(Smart Contract)을 개발하고 컴파일, 배포, 테스트하는 과정을 쉽게 할 수 있습니다.
1. smart contract의 컴파일 (compile) : solc, solcjs로 solidity 소스를 컴파일합니다.
2. smart contract의 배포 (migrate) : 컴파일한 소스를 배포할 수 있습니다.
3. smart contract의 테스트 (test) : 배포된 contract를 테스트합니다.
 
 

1. Truffle의 주요 기능

1. 스마트 계약 개발:
Truffle은 스마트 계약을 Solidity와 같은 Ethereum 지원 언어로 작성할 수 있도록 지원합니다. 개발자들은 Truffle을 사용하여 스마트 계약을 빠르고 효율적으로 개발할 수 있습니다.

2. 스마트 계약 컴파일 및 배포:
Truffle은 스마트 계약을 컴파일하고 Ethereum 네트워크에 배포하는 데 필요한 작업들을 자동화하여  빠르게 배포하고 테스트할 수 있습니다.

3. 스마트 계약 테스트:
  Truffle은 스마트 계약의 기능을  테스트하고  스마트 계약의 동작을 확인하고 버그를 찾아내는데 도움을 줍니다.

4. Migrations:
  Truffle은 스마트 계약의 배포를 관리하는 "Migrations" 기능을 제공하고  스마트 계약의 업그레이드와 버전 관리를 수행할 수 있습니다.

6. 자산 관리:
 - Truffle은 블록체인 기반의 자산 (예: 토큰)을 쉽게 관리할 수 있는 기능을 제공합니다.

 
Truffle은 개발자들이 Ethereum 블록체인을 활용한 분산 응용 프로그램 (DApp)을 개발하는데 매우 유용한 도구이며, Ethereum 개발 생태계에서 스마트 계약의 개발과 관리를 보다 편리하고 효율적으로 수행할 수 있습니다.
 
 

2. Truffle 설치 전 nodejs 환경 구성 (엄청 중요함)

    - truffle 은 개발 언어로  nodejs 환경을 이용하므로 설치 버전에 따라 작동이 안 될 수 있습니다. 저도 안되어서 한참 헤매었습니다. 
     * 특히 금융 전산망에서는 SSL을 통한 파일 다운로드가 안되어서 더 힘들게 설치하고 있습니다.
     반드시 truffle 설치 전에  최신 버전이 아닌  LTS (long-term support) Stable 버전을 확인하고  LTS 버전을 설치 후에 진행 바랍니다.
     >> 인터넷에서  nvm을 이용한 nodejs 버전 관리 방법을 참조하여 설치 진행 바랍니다.
           (관련 게시글은 조만간 작성할 예정입니다.)

 
 

3. Truffle 설치 확인

#다음 명령어를 입력하여 트러플이 설치되어있는지 확인합니다.
$truffle

#트러플이 설치되어있지 않다면 (root 계정으로)
# npm install -g truffle 명령어를 입력해 설치합니다.


#truffle --version
Truffle v5.11.1 (core: 5.11.1)
Ganache v7.9.0
Solidity v0.5.16 (solc-js)
Node v18.17.0
Web3.js v1.10.0

 

  • npm:
  • Node.js 패키지 관리자로, Node.js 환경에서 소프트웨어 패키지를 설치하고 관리하는 도구입니다.
  • npm은 JavaScript 생태계에서 매우 인기 있는 패키지 관리자로 사용되며, 수많은 패키지를 쉽게 다운로드 및 관리할 수 있게 해 줍니다.

 

  • npm  install:
  • npm 명령어 중 하나로, 패키지를 설치하는 데 사용됩니다. npm install 명령은 지정된 패키지를 현재 프로젝트에 로컬로 설치합니다.

 

  • npm install  -g: 
  • npm install 명령에 붙이는 옵션으로, 패키지를 전역(global)으로 설치하도록 지정합니다. 전역 설치를 하면 해당 패키지는 시스템 전체에서 사용할 수 있습니다. 일반적으로 독립적인 도구 또는 프레임워크와 같은 것들을 전역 설치합니다.

 

  • npm install -g truffle 명령:
  • Node.js 패키지 관리자인 npm을 사용하여 Truffle 프레임워크를 시스템 전체에 전역 설치하는 것입니다. 이로써 Ethereum 스마트 계약 개발과 관련된 다양한 작업을 수행할 수 있게 됩니다.

 
 

4. 설치 테스트

truffle 이 설치되었는지 확인하는 방법은 version을 이용할 수 있습니다. 
 2023.7월 현재 nodejs LTS 버전은  v18.17.0이고 이 글을 보는 시점에는 LTS 버전이 다를 수 있습니다.
반드시  https://nodejs.org/ko"를 참조하여 확인 후 nodejs도 설치 바랍니다.

[ipman@vm1 ~]$ truffle --version
Truffle v5.11.1 (core: 5.11.1)
Ganache v7.9.0
Solidity v0.5.16 (solc-js)
Node v18.17.0
Web3.js v1.10.0

 

아래 node v16 버전에서 작동하지 않습니다. 반드시 최신 LTS를 설치하고 진행 바랍니다.

[root@vm1 app_svc]# truffle version
Truffle v5.11.1 (core: 5.11.1)
Ganache v7.9.0
Solidity v0.5.16 (solc-js)
Node v16.18.1
Web3.js v1.10.0

 

만약 Truffle이 설치되지 않았다면, 해당 명령을 실행하면 command not found 또는 유사한 오류가 발생할 수 있습니다. 

 
 

5. truffle에 필요한 추가 개발 도구 설치

 

npm install -g truffle
npm install -g ganache-cli
npm install -g solc

 
Solidity 컴파일러 (solc)를 설치
Solidity 컴파일러를 설치합니다.
터미널 또는 명령 프롬프트에서 다음 명령을 사용하여 Solidity 컴파일러를 설치합니다.

npm install -g solc

설치가 완료되면, 다시 truffle test 명령을 실행하여 테스트를 수행할 수 있습니다.
* 인터넷에 연결되어 있는지 않은 환경에서 다음과 같은 에러가 발생하므로 solc를 설치해야 합니다.

Error: Failed to fetch the Solidity compiler from the following locations: 
https://relay.trufflesuite.com/solc/emscripten-wasm32/,
https://binaries.soliditylang.org/emscripten-wasm32/,
https://relay.trufflesuite.com/solc/emscripten-asmjs/,
https://binaries.soliditylang.org/emscripten-asmjs/,
https://solc-bin.ethereum.org/bin/,https://ethereum.github.io/solc-bin/bin/.
Are you connected to the internet?

 

6. ganache-cli 설치 - 블록체인 개발 네트웍 (중요)


Ganache-cli는 Truffle 프레임워크와 함께 개발자들이 이더리움 기반 애플리케이션을 로컬 환경에서 테스트하고 개발할 수 있도록 도와주는 이더리움 개발용 로컬 블록체인입니다.
ganache는 개발용 블록체인 네트웍으로  블록체인에 스마트 계약을 배포하고  스마트계약(smart contract) 가 작동되는 과정을 테스트 하고 검증 할 수 있습니다.
ganache-cli 가 작동하는 port 로 8545를 설정 했는데 ganache의 기본 포트는  9545 입니다.  해당 정보는 truffle-config.js에  함께 수정 해두어야 테스트가 가능합니다.



ganache-cli 설치와 실행

npm install -g ganache-cli

ganache-cli  -h 0.0.0.0 -p 8545

ganache-cli는 로컬 개발용 Ethereum 블록체인을 구축해 주는 명령줄 도구입니다. Truffle은 이를 자동으로 감지하고 사용할 수 있습니다. 
* 다음에  truffle test 명령을 실행할 때, Truffle은 ganache-cli가 실행 중인 로컬 블록체인과 상호작용하여 스마트 계약을 배포하고 테스트를 수행합니다. 이렇게 함으로써 실제 Ethereum 네트워크를 설치하지 않고도 테스트를 수행할 수 있습니다.

7. truffle 프로젝트 생성 

Truffle 프로젝트 생성: 새로운 스마트 계약 프로젝트를 만들기 위해 프로젝트 디렉터리를 생성합니다. 그리고 해당 디렉터리로 이동한 후에 다음 명령을 실행하여 Truffle 프로젝트를 생성합니다:

mkdir truffle
cd truffle

truffle init  # 현재 디렉토리를 초기화 합니다.

root@vm1 truffle2]# truffle init

Starting init...
================

> Copying project files to /app_svc/truffle2

Init successful, sweet!

Try our scaffold commands to get started:
  $ truffle create contract YourContractName # scaffold a contract
  $ truffle create test YourTestName         # scaffold a test

http://trufflesuite.com/docs

 
초기화된 폴더에서 샘플 스마트 계약과 테스트 스크립트를 작성합니다.

truffle create contract TestStorage
truffle create test TestStorage

# 다음과 같은 파일들이 작성이 되었습니다.
# ./contracts/TestStorage.sol
# ./test/test_storage.js
#./truffle-config.js

 

7. truffle-config.js 수정

다음과 같이 solc와 ganache에 대한 설정을 "truffle-config.js"를 수정합니다.

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 8545, // ganache-cli가 사용하는 포트로 변경합니다.
      network_id: "*", // 어떤 네트워크 ID에도 연결합니다.
    },
  },
  compilers: {
    solc: {
      // version: "^0.8.0",
      version: "/usr/local/bin/solcjs",  // local에 설치된 solcjs를 확인합니다.
    },
  },
};

 
 
Truffle의 기본 설정은 여기까지입니다. 다음 내용은 Truffle을 이용한 스마트 컨트렉트 작성을 참조 바랍니다.
 - truffle 설치하고 위의 내용이 작동이 안 되는 상황도 있는데 원인은 nodejs 버전 차이로 보입니다. 최신 버전이 아닌  LTS (long-term support) Stable 버전을 확인하고  LTS 버전을 설치 후에 진행 바랍니다.  (파이썬, nodejs 등은 모두 버전 차이마다 dependency가 생겨서 작동이 안 되는 경우가 있습니다.)
 

* Truffle의 테스트 기능은 스마트 계약의 변경 사항이나 업데이트 후에도 기능들이 여전히 예상대로 동작하는지 확인하는 데에도 유용하며, Ethereum 블록체인과 상호작용하는 애플리케이션을 개발하고 테스트하는 데 사용됩니다.
 
 
 
 

728x90
반응형