Remix
만약 이더리움 블록체인에 대해서도 잘 알지도 못하는데 스마트 컨트랙트를 구현해서 배포해야 하는 상황이 왔다면 적잖이 당황할 것입니다. 제가 그랬습니다. 인터넷에서 자료를 검색하고 Solidity라는 언어가 무엇인지도 보고 했지만, 실제로 돌려보지 않는다면 이해가 잘 되지 않을 것입니다.
"백문이 불여일견" 직접 스마트 컨트랙트를 구현하고 배포해 볼 수 있는 브라우저 기반 Online IDE가 있습니다.
바로 Remix - Ethereum IDE 입니다.
Remix 는 Web3 Development 환경으로써 이더리움 기반 블록체인의 스마트 컨트랙트를 구현하고, 테스트를 위한 가상 네트워크 배포를 지원하며, 메타마스크 연동을 통한 실제 이더리움 체인 배포를 가능하게 하는 용이한 도구입니다. 또한, 관련된 타입스크립트 테스트를 구현하여 테스트 코드를 작성하는 등 스크립트 작성을 수행할 수도 있습니다.
특히, 스마트 컨트랙트를 구현하고 가상 네트워크에 배포하면 가상 계정이 이미 준비되어 있어 컨트랙트의 실행과 테스트를 수행해 볼 수 있는 큰 장점(컴파일러와 런타임 환경을 제공)이 있기 때문에, 이더리움 블록체인의 스마트 컨트랙트를 처음 접한다면 적극 추천합니다.
Remix의 화면 구성
처음 접속하게 되면 위와 같은 화면을 만나게 될 것입니다. 좌측 메뉴바에서는 다음과 같은 메뉴들을 만날 수 있습니다.
- File Explorer : 구현 작업 환경 (파일)
- Search In Files : 파일 키워드 검색
- Solidity Compiler : 구현한 Solidity 코드의 컴파일
- Deploy & Run Transactions : 컴파일된 코드의 배포와 실행 (트랜잭션)
- Debugger : 디버거 (사용해본 적 없음)
- Solidity Unit Testing : Solidity 유닛 테스트 (사용해본 적 없음)
간단하게 이더리움 블록체인 기반 스마트 컨트랙트의 구현과 실행을 확인할 때에는, 코드 구현, 컴파일, 배포, 실행의 순서로 직접 테스트를 수행할 수 있습니다.
컨트랙트 구현하기
이제 스마트 컨트랙트를 구현해 보겠습니다.
이더리움의 스마트 컨트랙트는 Solidity (이하 솔리디티)라는 언어로 구현할 수 있습니다.
솔리디티에 대한 기본 문법과 코드 작성법은, 이 글에서는 생략하도록 하겠습니다.
File Explorer 메뉴에서 원하는 Workspace를 만듭니다.
contracts 폴더에서 새로운 파일 HelloWorld.sol 을 생성해 줍니다. 솔리디티 코드 파일의 확장자는 .sol 입니다.
만들자마자 Warning 같은 색깔이 반길 것인데 다른 솔리디티 파일에서 첫 주석줄과 솔리디티 컴파일 버전 환경 라인을 복사해주면 문제가 잡힙니다.
이제 원하는 솔리디티 코드, 스마트 컨트랙트를 구현하면 됩니다.
이제 예시로 컨트랙트를 통해 Hello, World 를 출력하도록 해보겠습니다. 아래와 같이 코드를 작성합니다.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
contract HelloWorld {
function hello() public view returns(string memory) {
return "Hello, World!";
}
}
코드를 작성하면 Warning 이 발생할 것인데, 이는 함수(Function)가 반환하는 Return 값이 고정이기 때문에 컴파일러로부터 제공되는 경고입니다. 만약 Return 되는 값이 고정이라면 pure 문구를 더 추가해줘야 합니다. 경고이므로 무시하고 지나가도록 하겠습니다.
컴파일하기
솔리디티 컴파일러 메뉴에 들어갑니다.
앞서 작성한 HelloWorld.sol 파일이 선택되어 있습니다.
누가 봐도 누르고 싶게 생긴 Compile 버튼을 눌러, 작성한 솔리디티 코드를 컴파일할 수 있습니다.
Auto compile 체크박스를 통해 코드 작성 시 자동으로 컴파일이 되도록 할 수 있습니다.
배포하기
배포 및 실행 메뉴로 들어갑니다.
앞서 컴파일한 HelloWorld 컨트랙트가 세팅되어 있습니다.
위에서부터 다음과 같은 메뉴를 가지고 있습니다.
Enviroment : 컨트랙트 배포 환경을 결정할 수 있습니다.
Injected Provider - MetaMask 메뉴를 통해서 실제 자신의 메타마스크 계정을 연동할 수 있습니다. 이 경우 그 계정이 속한 체인, 메인넷 혹은 테스트넷 체인에 배포를 수행할 수 있습니다. 메타마스크 계정으로의 배포를 수행하면 키 서명을 요구하게 됩니다.
우리가 여기서 사용해볼 것은 Remix VM 입니다. 이는 Remix가 제공하는 가상 네트워크입니다. 각 가상 네트워크 중 원하는 곳을 골라서 컨트랙트를 배포하면 됩니다.
Account : 컨트랙트를 배포하거나 트랜잭션을 전송할 계정들이 있습니다.
가상 네트워크에는 이미 가상 계정들이 준비되어 있습니다.
이 계정들을 통해 컨트랙트를 배포하고 테스트할 수 있습니다.
가장 위에 있는 계정에 컨트랙트를 배포하도록 하겠습니다.
사실 처음 세팅된 것 그대로 건드릴 것 없이 배포를 수행해도 됩니다.
Environment와 Account를 결정한 뒤, 아래에 있는 Deploy 버튼을 통해 컨트랙트를 배포합니다.
(트랜잭션 전송 시에 Value = 전송할 ETH 또는 Wei 를 결정할 수 있는데, 컨트랙트에서 요구되지 않으므로 기입하지 않습니다.)
배포가 완료되면 메뉴 아래의 Deployed Contracts 항목과 우측 아래의 트랜잭션 로그를 통해 확인할 수 있습니다.
올바르게 배포가 완료되었다면 성공적인 메시지와 함께 컨트랙트 주소 및 트랜잭션 해쉬값을 확인할 수 있습니다.
위 예시에서는 컨트랙트 주소 0XD91...39138 로 배포되었고, 트랜잭션 해쉬값은 0x9552d.. 입니다.
이더리움 블록체인의 모든 행동에는 Gas가 소모되기 때문에, 컨트랙트 배포를 수행하느라 Gas가 사용되었습니다.
따라서 해당 배포를 수행한 계정의 잔고가 아마 줄어들었을 것입니다.
테스트하기
상기 Deployed Contracts 항목을 통해서 테스트를 수행해 볼 수 있습니다.
누가 봐도 누르고 싶게 생긴 hello 버튼을 누르면 아래와 같이 실행 결과를 확인할 수 있습니다.
버튼 아래에서 출력을 확인하거나, 트랜잭션 로그를 통해 결과물을 확인할 수 있습니다.
이와 같이 Remix의 메뉴들을 이용하여 이더리움 블록체인의 스마트 컨트랙트를 구현하고 테스트해볼 수 있습니다.
스마트 컨트랙트에 대한 동작과 초심자로서의 배포를 수행해보고 싶다면, Remix를 이용해보시기를 바랍니다!
'개발자 💻 > Blockchain' 카테고리의 다른 글
[Ethereum] 가스(Gas)란 무엇인가? (0) | 2023.07.13 |
---|