너의 개발은/Blockchain

이더리움: 이더리움과 스마트 컨트렉트

이더리움

최근 블록체인을 공부를 시작하면서 관심이 갖게 된 것이 바로 비트코인, 이더리움, 클레이튼과 같은 퍼블릭 블록체인이다. 퍼블릭 블록체인은 누구나 참여하여 노드가 될 수 있고 트랜잭션 내역을 몽땅 확인할 수 있기때문에 투명성이 뛰어나며 다수의 익명의 노드에 의해 운영되므로 프라이빗 블록체인에 비해서 검열저항성을 지니고 있다.

 

이더리움은 1세대 비트코인, 2세대 이더리움, 3세대인 EOS 로 분리되는 세계에서 2세대에 속하며 비트코인의 추종자였던 비탈릭 부테린이더리움 백서를 공개함으로써 등장한 블록체인이다. 이더리움이 블록체인 생태계에서 중요한 것은, 바로 프로그래밍 가능한 블록체인, 즉 스마트 컨트렉트의 존재다. 비트코인도 물론 스트립트 프로그래밍이 가능했지만, 이더리움에 비하면 갓난쟁이에 불과하다.

 

이더리움은 탈중앙화된 싱글톤 상태머신이다. 즉, 분산화된 노드들이 단일 상태를 가지고 움직인다는 이야기다. 이는 어찌보면 블록체인에 있어서는 상당히 중요한 특징이니 꼭 이더리움 하고만 관련된 것은 아니다. 현재 이더리움 2.0 의 발표가 있었고, 기존의 이더리움 1.0 의 스마트 컨트렉트가 EVM(Ethereum Vritual Mechine)에서 돌던 것이,  eWASM(Ethereum WebAssembly)로, 합의 알고리즘이 작업증명(PoW)에서 지분증명(PoS)으로 변하는 등 큰 변화가 있다. 

스마트 컨트렉트

스마트 컨트렉트이더리움 가상머신 위에서 도는 어플리케이션이다. 이름은 스마트 컨트렉트이지만, 그냥 블록체인 위에서 돌아가는 프로그램이다. 스마트 컨트렉트는 트랜잭션 주소가 0x00 ... 이며, 이는 특수한 트랜잭션으로 취급된다. 일반적인 유저가 스마트 컨트렉트에 트랜잭션을 보내면 함수를 호출하거나 이더를 저장해놓을 수도 있다. 스마트 컨트렉트는 일반적인 어플리케이션 처럼 갱신이 불가능하고, 기존의 컨트렉트를 페기한 뒤, 다시 배포해야 하므로 조심해야 한다. 게다가 암호화폐가 왔다갔다 거리기 때문에 보안도 중요하다.

솔리디티

스마트 컨트렉트는 일반적으로 솔리디티로 작성한다. 물론, 다른 언어로도 작성할 수 있고, BIN, ABI(Application Binary Interface)만 있으면 배포도 가능할 것이다. 하지만, 솔리디티는 컨트렉트를 위한 언어이고 가장 많이 사용되고 있으므로 굳이 다른 언어를 사용해야 할 필요는 없을 것이다. ABI 는 JSON 이며, 스마트 컨트렉트에 포함한 함수의 호출 등을 다른 어플리케이션이 할 수 있게 하기위한 인터페이스이다. BIN 은 이더리움 블록체인에 컨트렉트를 배포하기 위한 것이다.

 

https://solidity.readthedocs.io/en/v0.6.11/#

 

Solidity — Solidity 0.6.11 documentation

If you are new to the concept of smart contracts we recommend you start with an example smart contract written in Solidity. When you are ready for more detail, we recommend you read the “Solidity by Example” and “Language Description” sections to l

solidity.readthedocs.io

Remix IDE

리믹스는 솔리디티의 온라인 통합개발환경(IDE)이다. 스마트 컨트렉트 개발 환경을 일반적인 프로그래밍 언어랑 비교해서는 안 된다. 사설 블록체인이든, 이더리움 메인넷이든 그것과 연결해줄 매개체가 필요하며, 스마트 컨트렉트를 배포해줄 수도 있어야 하고, 그에 관련된 각종 디버깅, 이더리움 주소로 표현되는 유저의 관리, 트랜잭션 수수료에 해당하는 가스에 관한 것들이 필요하다. 이는 그러한 사항들을 포함하고 있기에 이더리움 스마트 컨트렉트를 개발하기에 적합하다고 볼 수 있다. 보통은 이것으로 시작하는 것이 일반적이다. 이를 사용하여 스마트 컨트렉트를 개발해보는 일은, 짧지만 다음 포스팅해서 할 예정이다.

 

리믹스 IDE 에서 솔리디티를 통해 스마트 컨트렉트를 작성한다.


http://remix.ethereum.org/

 

Remix - Ethereum IDE

 

remix.ethereum.org

Web3.js

Web3.js 는 이더리움 메인넷이나 사설 블록체인에 연결된 이더리움 클라이언트와 연결해주는 Ehtereum Javascript API 라고 볼 수 있다. 자바 버전도 있으나 내가 자바를 싫어하므로 패스한다.

 

이를 사용하면 현재 가스의 값이라든가, 유저의 목록이라든가 이러한 것들을 볼 수 있다. 이더리움 클라이언트인 패리티나 게스에서 JSON-RPC 서버를 열어두었다면, 클라이언트와 연결된 이더리움 블록체인에 연결할 수 있을 것이다. 어플리케이션(DApp) - Web3.js - 이더리움 클라이언트 - 이더리움 블록체인으로 연결된다고 보면 좋을 것 같다.

 

사설 블록체인을 구성해두었다면, 리믹스에서 Web3 Provider 를 통해 접근할 수 있으며, MetaMask 등의 지갑을 위해서는 Injected Web3 를 사용할 수 있다. 사실 사설 블록체인을 굳이 직접 켜놓지 않더라도 Javascript VM 으로 시동하면 개발할 수 있긴 하다.

 

https://github.com/ethereum/web3.js

 

ethereum/web3.js

Ethereum JavaScript API. Contribute to ethereum/web3.js development by creating an account on GitHub.

github.com

'너의 개발은 > Blockchain' 카테고리의 다른 글

이더리움: 이더리움과 스마트 컨트렉트  (0) 2020.07.23