리믹스
리믹스(Remix)는 브라우저에서 솔리디티 프로그래밍 언어로 스마트 계약 개발과 구축을 지원하는 통합개발환경(IDE)이다. 브라우저로 사설망이나 테스트넷의 이더리움 블록체인에 연결해 스마트 계약 배포와 테스트를 할 수 있다.
개요
솔리디티는 이더리움의 스마트 계약 기능을 구현하기 위한 프로그래밍 언어로 EVM(Ethereum Virtual Machine)에서 구동된다. 리믹스는 브라우저 상에서 솔리디티 언어를 코딩, 컴파일, 디버깅, 배포 등을 통합적으로 수행할 수 있게 지원하는 통합개발환경 사이트이다. 쉽게 말해 인터넷상에서 솔리디티 코드를 작성하고 컴파일 할 수 있는 사이트이다. 별도의 설치 없이 웹 브라우저에서 사용할 수 있고, 자체적으로 컴파일러 solc과 가나슈(Ganache) 같은 개인 블록체인을 포함하고 있다.
특징
통합개발환경
통합개발환경이란 프로그램 개발 시 코딩, 디버깅, 컴파일, 배포 등 일련의 모든 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어이다. 다양한 언어들이 프로그램 개발을 위해 통합개발환경을 사용하는데 솔리디티 언어의 경우 브라우저 기반의 리믹스를 많이 이용한다. 이외에도 솔리디티를 프로그래밍할 수 있는 플러그인을 제공하는 제트브레인의 인테리제에이와 이맥스, 빔 등 솔리디티 언어로 프로그램 개발 시 이용 가능한 다양한 통합개발환경 등이 있다. 일반적으로 솔리디티를 지원하는 통합개발환경 및 플러그인은 아래와 같다.
- 리믹스(Remix) : 브라우저에서 솔리디티를 실행할 수 있는 통합개발환경으로 설치 없이 바로 사용이 가능하다.
- 인텔리제이(Intellij-Solidity) : 구문 강조기능, 컴파일 전 오류를 감지 기능 등을 제공한다. 또한 트러플 프레임워크에서 개발할 때 사용하는 플러그인이다.
- 비주얼 스튜디오(Visual Studio Solidiy) : 이더리움 애플리케이션 개발을 지원하는 컨센시스(ConsenSys)에 제공하는 플러그인이다.
- 서브프라임 텍스트(Ethereum Solidity language syntax for SublimeText) : 구문 강조 표시 기능을 지원한다.
- 빔(vim-solidity) : 구문 강조 기능을 지원하는 플러그인이다.
- 이맥스(Emacs Solidity Mode) : 솔리디티 개발을 지원하는 별도의 개발 모드가 있다.[1]
디버그
이 모듈을 사용하면 트랜잭션을 디버깅할 수 있다. 리믹스에서 작성된 트랜잭션과 이미 마이닝 된 트랜잭션을 배치하는 데 사용할 수 있다.(디버깅은 현재 환경이 필요한 기능을 제공하는 경우에만 작동한다.)
디버거로 이동하려면 트랜잭션이 성공 또는 실패하면 터미널에서 디버그 버튼을 클릭하면된다. 플러그인 관리자에서 모듈을 로드한 다음 아이콘 패널에서 버그를 클릭하거나 콘솔에서 디버그 명령을 실행하여 디버거로 이동할 수 있다.
[리믹스 디버깅] |
컴파일
프로그램 개발 시 사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로 바꾸는 과정을 컴파일이라고 한다. 리믹스는 컴파일 기능이 구성되어 있다. 리믹스의 컴파일러는 아래와 같다.
리믹스 사이트에 접속한 뒤 아이콘 패널에서 솔리디티 로고 아이콘을 클릭하면 솔리디티 컴파일러로 이동한다. 컴파일 버튼을 클릭하면 컴파일이 시작된다(이미지에서 D.). 파일을 저장할 때마다 또는 다른 파일을 선택할 때 파일을 컴파일하려면 자동 컴파일 확인란을 선택하면된다(이미지에서 E.). 언어 드롭다운(이미지에서 B.)을 사용하여 언어를 전환 할 수 있다. 이 드롭다운 목록은 보다 크거나 같은 버전에서만 사용할 수 있다. 포크 선택 드롭다운 목록(이미지에서 C.)을 사용하면 특정 이더리움 하드포크에 대해 코드를 컴파일 할 수 있다. 이는 특정 버전에서 사용하는 기본 하드포크에 해당한다. 그리고 세션 설정에서 “Compilation Details”(그림G.)으로 이동하여 현재 편집에 사용된 하드포크 이름을 확인한다. 만약 계약에 많은 종속성이 있는 경우 컴파일하는 시간이 걸릴 수 있으므로 재량에 따라 자동 컴파일을 사용하면 된다.
각 컴파일 후 목록이 새로 컴파일된 모든 계약으로 업데이트된다. 계약 풀다운 메뉴(이미지에서 F.)를 사용하면 컴파일된 계약을 선택할 수 있다. 한 계약이 다른 계약을 가져올 때 여러 계약이 같이 컴파일된다. 계약을 선택하면 해당 계약에 대한 정보가 표시된다.
“Compilation Details”단추를 클릭하면(이미지에서 G.) 현재 선택된 계약에 대한 자세한 정보를 표시하는 모달이 열린다. 사용자 정의 견고성 컴파일러를 작성하는 경우 “+” 버튼(이미지의 X.)을 클릭하여 로드할 컴파일러의 URL을 입력할 수 있는 모달을 열어 이를 가져올 수 있다.
솔리디티 컴파일러 모듈에서 계약을 스왐(Swarm) 및 IPFS에 게시 할 수도 있다. 게시된 데이터는 특히 abi 및 소스 코드가 포함되어 있다. 계약이 게시된 후 세부 모달 대화 상자에 있는 bzz URL을 사용하여 메타 데이터 정보를 찾을 수 있다.
배포 및 실행
배포 및 실행 모듈을 사용하면 현재 환경으로 트랜잭션을 보낼 수 잇다. 이 모듈을 사용하려면 계약서를 컴파일해야한다. 따라서 계약 선택 상자에 계약 이름이 있으면 이 모듈을 사용할 수 있다. 계약이 없거나 원하는 계약이 표시되지 않으면 편집기에서 계약을 선택하여 활성화하고 컴파일러 모듈로 이동하여 컴파일한 후 다시 배치 및 실행으로 돌아와야한다.
[리믹스 배포 및 실행] |
명령어
콘솔에서 아래 나열된 명령을 실행할 수 있다. 그리고 이 명령들은 ethers, remix, web3, warmgw등의 라이브러리를 이용한다.
- remix.debug (hash) : 트랜잭션 디버깅을 시작한다.
- remix.debugHelp () : 디버깅을 위한 도움말 메시지 표시한다.
- remix.execute (filepath) : 파일 경로로 지정된 스크립트를 실행 파일 경로가 비어 있으면 편집기에 현재 표시된 스크립트가 실행된다.
- remix.exeCurrent () : 편집기에 현재 표시된 스크립트를 실행한다.
- remix.getFile (path) : 주어진 경로에 위치한 파일의 내용을 반환한다.
- remix.help () :이 도움말 메시지를 표시한다.
- remix.loadgist (id) : 파일 탐색기에 요점을 로드한다.
- remix.loadurl (url) : 파일 탐색기에 지정된 URL을 로드 URL은 github, swarm 또는 ipfs 유형일 수 있다.
- remix.setFile (path, content) : 주어진 경로에 위치한 파일의 내용을 설정한다.
- remix.setproviderurl (url) : 현재 제공자를 Web3 제공자로 변경하고 URL 엔드 포인트를 설정한다.
- swarmgw.get (url, cb) : https ** : //swarm-gateways.net/을 통해 Swarm에서 파일 다운로드한다.
- swarmgw.put (content, cb) : https ** : //swarm-gateways.net/을 통해 Swarm에 파일 업로드한다.
- ethers.Contract :이 API는 블록체인에 배포된 계약과의 원활한 연결을 제공하여 함수 호출 및 쿼리를 단순화하고 모든 이진 프로토콜 및 변환을 반드시 처리한다.
- ethers.HDNode : 계층적 결정론적 지갑은 초기 시드에서 안정적으로 재현할 수 있는 큰 개인 키 트리를 나타낸다.
- ethers.Interface : Interface Object는 Solidity (또는 호환 가능한) ABI (Application Binary Interface)를 허용하고 전달할 매개 변수를 인코딩 및 디코딩하고 결과를 반환하는 함수를 채우는 메타 클래스이다.
- ethers.providers : 공급자는 이더 리움 블록체인에 대한 연결을 추상화하여 쿼리를 실행하고 상태 변경 트랜잭션을 보낸다.
- ethers.SigningKey’‘’ : SigningKey 인터페이스는 secp256k1 타원 곡선 암호화 라이브러리 주위에 추상화를 제공한다.
- ethers.utils : 유틸리티 기능은 ethers umbrella package 및 ethers-utils에 모두 제공한다.
- ethers.utils.AbiCoder : 새로운 ABI Coder 객체 생성한다.
- ethers.utils.RLP :이 인코딩 방법은 거래 인코딩 및 계약 주소 결정과 같은 Ethereum의 여러 측면에 내부적으로 사용한다.
- ethers.Wallet : 지갑은 거래 서명을 암호화하고 Ethereum 네트워크의 소유권을 증명하는 데 사용되는 개인 / 공개 키 쌍을 관리한다.
- ethers.version : ethers 컨테이너 오브젝트의 버전을 포함한다.
- web3.bzz : 웜 네트워크와 상호 작용하기위한 Bzz 모듈이다.
- web3.eth : Ethereum 네트워크와 상호 작용하기위한 Eth 모듈이다.
- web3.eth.accounts : web3.eth.accounts는 이더 리움 계정을 생성하고 거래 및 데이터에 서명하는 기능을 포함한다.
- web3.eth.abi : web3.eth.abi 함수를 사용하면 EVM (Ethereum Virtual Machine)에 대한 함수 호출을 위해 ABI (Application Binary Interface)로 매개 변수를 정의하고 인코딩 할 수 있다.
- web3.eth.ens : web3.eth.ens 함수를 사용하면 ENS와 상호 작용할 수 있다.
- web3.eth.Iban : web3.eth.Iban 기능을 사용하면 Ethereum 주소를 IBAN 및 BBAN으로 변환 할 수 있다.
- web3.eth.net : 네트워크 속성과 상호 작용하기위한 네트 모듈이다.
- web3.eth.personal : 이더 리움 계정과 상호 작용하기위한 개인 모듈이다.
- web3.eth.subscribe : web3.eth.subscribe 함수를 사용하면 블록체인의 특정 이벤트를 구독 할 수 있다.
- web3.givenProvider : Ethereum 호환 브라우저에서 web3.js를 사용하면 해당 브라우저에서 현재 기본 공급자로 설정된다. (브라우저) 환경에서 지정된 공급자를 반환 그렇지 않으면 null이다.
- web3.modules : web3 컨테이너 객체의 버전을 포함한다.
- web3.providers : 현재 사용 가능한 제공자가 포함되어 있다.
- web3.shh : s 속말 프로토콜과 상호 작용하기위한 Shh 모듈이다.
- web3.utils :이 패키지는 Ethereum dapps 및 기타 ** web3.js 패키지를위한 유틸리티 기능을 제공한다.
- web3.version : web3 컨테이너 객체의 버전을 포함한다.
- web3.eth.clearSubscriptions (); : 구독을 재설정한다.
- web3.eth.Contract (jsonInterface [, address] [, options]) : ** web3.eth.Contract 객체를 사용하면 이더 리움 블록체인에서 스마트 계약과 쉽게 상호 작용할 수 있다.
- web3.eth.accounts.create ([엔트로피]); : web3.eth.accounts는 이더 리움 계정을 생성하고 거래 및 데이터에 서명하는 기능을 포함한다.
각주
- ↑ 한빛미디어, 〈솔리디티를 이용한 애플리케이션 개발〉, 《한빛미디어-네이버포스트》, 2018-07-05
참고자료
- 리믹스 사이트 – https://remix.ethereum.org/
- 리믹스 설명서 – https://remix-ide.readthedocs.io/en/latest/index.html
- 한빛미디어, 〈솔리디티를 이용한 애플리케이션 개발〉, 《한빛미디어-네이버포스트》, 2018-07-05
같이 보기
이 문서는 로고 수정이 필요합니다.
|