안녕하세요.
Hynn 입니다.
이번 포스팅에서는 Ethereum, 이더리움에서 사용하는 주요 개념이라고 할 수 있는 스마트 컨트랙트(Smart-Contract) 에 대한 기본에 대한 포스팅을 작성해보도록 하겠습니다.
내용이 많아, 여러개의 글로 작성할 예정입니다.
============================
1. Smart-Contract 작성을 위환 환경 설정
2. 기본 사항 구축하기
3. 각 Directory 이해하기 ( Contract, Migrations, Test, Build)
4. Truffle.Config
5. Truffle.Console
============================
1. Smart-Contract 작성을 위환 환경 설정
먼저 Smart-Contract 작성을 위해서 몇가지 설정이 필요합니다.
당연하게도 사용할 IDE는, Visual Studio-Code를 사용할 예정입니다.
Smart Contract 작성을 위해서는 아래와 같은 준비사항이 필요합니다.
Truffle
Solidity Extension
Ganache-cli
2. 기본사항 구축하기
Solidity 의 경우, VS Code Extension 에서 아래의 Extension 을 사용하여 작성했습니다.
실제 이더리움의 코인을 사용하기에는 비용이 만만치 않습니다.
현재 기준으로 이더리움은 수백만원을 호가하기 때문에, 이를 위해 로컬 환경에서 테스트할 수 있는 테스트넷을 구성할 수 있습니다.
그를 도와주는 라이브러리가 바로 "Ganache" 입니다.
이 라이브러리는 Cli, Gui 모두 지원하지만, 여기서는 Terminal 을 사용할 예정이기 때문에 아래의 명령어를 사용하여, Cli 로 환경을 구축하여 사용할 예정입니다.
아래의 명령어를 순서대로 사용하여, 설치 및 실행을 진행합니다.
npm install -g ganache-cli
npx ganache-cli
정상적으로 설치가 되었다면, 아래의 화면을 마주할 수 있습니다.
그리고 Solidity 를 사용해 코드를 작성하고, 이를 손쉽게 처리할 수 있는 Truffle 을 설치하고, 이를 초기설정을 진행해야 합니다.
먼저 전역설치를 의미하는 "-g" 를 사용하여, Truffle 을 터미널을 사용해 설치를 진행해줍니다.
npm install -g truffle
그런 뒤, truffle 을 사용할 디렉토리에 이동하여 아래의 명령어를 실행합니다.
npx truffle init
그렇다면 아래의 3개의 디렉토리가 생성됩니다.
일부 블로그나 강의에서는 "Contract", "Migrations" 두개의 디렉토리에 ".sol" 파일이 반드시 있어야 한다고 설명할 수 있으나, 현재 버전의 Truffle 에서는 생성되지 않습니다.
따라서, 해당 디렉토리 두곳을 비롯하여 "test" 까지 3개의 디렉토리에는 ".gitkeep" 파일만 생성되어 있는 것이 정상입니다.
이제 기본 설정은 모두 마쳤습니다.
실제 본격적으로 작성을 해보도록 하겠습니다.
3. 각 Directory 이해하기 ( Contract, Migrations, Test, Build)
각 디렉토리에 대한 이해가 필요합니다.
먼저 이미 생성이 완료된 3개의 디렉토리는 각각 아래의 역활을 수행합니다.
1) Contract
이 Contract Directory 에는 확장자가 ".sol"인 파일이 주로 위치합니다.
즉, Smart-Contract 를 구현하기 위한 함수 및 코드가 위치하는 디렉토리입니다. 실제적인 코드는 바로 이 Contract Directory 에 위치하게 됩니다.
2) Migrations
이 Migrations Directory 에는 확장자가 ".js" 인 파일이 주로 위치합니다.
즉, 실제 Solidity 코드가 아니라, Contract 에서 작성한 Solidity 코드를 배포하기 위한 코드가 위치합니다.
즉, Solidity Code 및 Function 을 Contract 에 작성하고 이를 배포하기 위해 각 Solidity 를 연결하고, 생성자에게 전달하는 역활 역시 이곳에서 이루어집니다. 또한 이 Migrations Directory 의 파일명은 규칙이 존재합니다. 각 파일의 접두사(시작)은 숫자로 이루어져 있고, 이를 기반으로 Truffle 이 스크립트가 실행되야 하는 순서를 정의하도록 설정되어 있습니다. 즉, 최초파일을 01 혹은 1로 시작하고, 각 파일의 다음 명칭을 2,3,4 와 같은 숫자로 명명해야, 올바르게 스크립트가 순서대록 실행됩니다.
3) Test
Test Directory 는 JavaScript 기반의 TDD(Test-Driven Development) 혹은 BDD(Behavior-Driven Development) 를 위해 사용되는 Directory 입니다. Truffle 에서는 기본적으로 Mocha, Chai 라는 두개의 라이브러리를 기본적으로 지원합니다. 이를 사용하여 기본적인 Smart-Contract 의 다양한 테스트 코드를 작성하고, 이를 테스트할 수 있습니다.
사용방법의 경우, 아래의 두가지 명령어 형태로 사용할 수 있습니다.
truffle test
truffle test /location/filename
즉, truffle test 를 사용시, 전체 테스트를 진행하며, 특정 파일의 테스트 코드를 실행할 때는, 이후의 위치에 경로 및 파일명을 작성하여 테스트를 수행할 수 있습니다.
4) build
contract 와 migrations 에 파일이 준비가 되면, 이제 truffle 은 작성된 Solidity 코드 및 함수에 대한 컴파일을 수행할 수 있습니다.
이러한 컴파일이 수행되면 비로소 배포될 수 있는 환경이 준비됩니다. Solidity 는 컴파일이 완료되면 Build Directory 내에 ".json" 확장자의 파일이 생성되며, 이를 이용해 배포까지 할 준비가 완료된 것이라고 할 수 있습니다.
이를 위해서는 이제 "Truffle.config.json" 파일의 대한 기초 이해가 필요합니다.
4. Truffle.Config
이 Config 파일은 실제 작성자가 Truffle 에서 Solidity 코드를 작성하고, 이를 배포 및 빌드하는 과정에서, 어떠한 환경설정을 가질 지에 대한 수행하는 설정파일입니다.
즉, 코드가 작성이 다 되었다고 해서 완료된 것이 아니라, 이 Config 파일 내에서 현재의 환경에 맞게 설정이 필요합니다.
이 설정파일은 크게 4개의 섹션으로 구분이 되어 있고, 각 섹션에 따라 정해진 역활을 수행합니다.
환경에 맞게 아래의 섹션에서 설정을 구성해야 합니다.
1) Network
네트워크 섹션에서는 Truffle 이 Ethereum Client 에 연결하는 방법을 정의합니다. 네트워크 내에는 기본적으로 로컬 환경에서 테스트를 할 수 있도록 Development 항목이 존재하며, 이 항목을 사용하면 Ganache 와 같은 테스트넷 환경이 구축되어 있는 로컬환경에서 테스트를 수행할 수 있습니다. 추가적으로 사용자 정의를 사용하면, 특정 네트워크 및 여러 개발환경에 적용하여 테스트가 가능합니다.
2) Mocha
모카 테스트 프레임워크에 대한 설정을 정의합니다. Mocha 는 우리가 잘 알고있는 JavaScript 테스트 프레임워크로써, Smart-Contract 테스트를 위해 사용하는 설정을 정의합니다. 이 설정을 통해 보다 세부적으로 테스트 환경을 구성할 수 있습니다.
3) Compilers
이 컴파일러 섹션에서는 Solidity 버전을 비롯하여, EVM 설정을 수행할 수 있습니다. 여기서 말하는 EVM은 Ethereum Virtual Machine 의 약자로, 이더리움 네트워크 환경에서 Smart-Contract 을 실행하기 위한 런타임 환경을 뜻합니다.
Bitcoin 과는 다르게 Ethereum 은 "Turing Complete", 즉 튜링 안정성을 보장하는 환경을 사용하며, EVM 에서 실제 대다수의 계산이 수행됩니다. 즉, 가스 시스템을 사용하여, 코드 실행에 필요한 계산 비용을 정량화하고, 제한할 수 있습니다. 또한 이 EVM 의 설정을 사용하여 무한 루프와 같은 현상을 방지하고, 효율적인 리소스 사용을 구현할 수 있습니다.
4) DB
이 섹션에서는 Truffle DB에 대한 설정을 정의할 수 있습니다. 즉, Truffle 이 생성하는 아티팩트(Artifacts)을 관리할 때 사용합니다.
이 아티팩트에 대해서는 기본 예제 코드를 작성할 때 다시한번 다루도록 하겠습니다.
위에서 언급한 4개의 섹션 외에도, dotenv 를 사용하여 환경변수를 설정할 수 있습니다.
또한, HDWalletProvider 를 사용한 개인키를 관리할 수 있는 설정이 기본적으로 주석으로 제공됩니다. 이를 이용하면 보다 다양하게 사용이 가능한 설정이 존재합니다.
5. Truffle.Console
Truffle 에서 제공하는 Console 은 Smart-Contract 을 빌드한 사항에 대해서 콘솔을 통해 직접 연결하고 메서드를 호출, 수행할 수 있는 유용한 도구입니다. 이를 사용하면 특정 네트워크에서 Smart-Contract 의 기능 및 동작을 빠르게 테스트할 수 있습니다.
또한 이를 사용해 테스트 네트워크(Ganache) 를 관리할 수 있을 뿐 아니라, 실제 이더리움 네트워크와의 통신을 할 수 있는 수단으로도 사용됩니다. 즉, 특정 네트워크에서 Smart-Contract 를 관리를 가능케 하는 유용한 도구입니다.
즉, 테스트를 비롯한, 실제 메서드의 대한 동작등을 테스트할 수 있고, 블록체인의 데이터의 세부정보를 상세하게 확인할 수 있는 도구입니다.
이에 대한 실제 예제는 코드 작성 포스팅에서 다루어보도록 하겠습니다.
위 내용을 이해한다면 Smart-Contract 을 구성하기 위해 기본적으로 알아야 할 사항을 이해하였다고 할 수 있습니다.
이제 기본 코드작성등을 통해, 실제 어떠한 방식으로 작성되는지 단계별로 구성해보도록 하겠습니다.
감사합니다.
'개발공부일지 > Block-Chain' 카테고리의 다른 글
Ethereum - 이더리움 네트워크 기반 DeFi 기본 구축 (0) | 2023.07.28 |
---|---|
Ethereum - Smart-Contract(2) : 기본 코드 작성하기 (0) | 2023.05.31 |
Block-Chain - Toy-Bitcoin 작성기 (0) | 2023.05.30 |
Block-Chain : 참고로 알아보는 Etherium vs Bitcoin (0) | 2023.04.17 |
Block-Chain - 블록체인 기초 알아보기 (0) | 2023.04.17 |
댓글