이번 포스팅에서는 이더리움과 비트코인의 차이점에 대해 간략히 다뤄보고자 한다.
< 목차 >
- 비트코인 vs 이더리움
- EVM
- Account
- Transaction
1. 비트코인 vs 이더리움
이더리움의 가장 큰 특징이라고 한다면 스마트 컨트랙트( Smart Contract)를 구현할 수 있다는 점이다. 비트코인의 경우 트랜잭션을 생성할 때 "A 계정의 소유자가 B 계정에서 10 BTC를 전송한다."와 같은 실제 거래의 내용 자체가 주를 이뤘다. 하지만 이더리움의 스마트 컨트랙트를 사용하면 다음과 같은 기능들도 구현이 가능하다.
가령 A 가 B를 통해 C의 상품을 구입하는 상황이라고 하자. B는 A에게 상품 금액을 받고 C에게 이 사실을 알린다. C는 A에게 상품을 전달하고 A가 C로부터 상품을 제대로 전달 받았다면 해당 시점에서 스마트 컨트랙트가 작동하여 B의 계정에서 C의 계정으로 돈을 전송하게 된다. 쉽게 말해, 돈을 보내는 기능에서 더 나아가 어떠한 조건을 걸 수 있는 계약 형태의 거래를 "스마트 컨트랙트"라 하는 것이다. 이러한 스마트 컨트랙트를 활용하면 돈을 주고 받는 거래뿐만 아니라 조건에 따라 특정한 코드가 실행되게끔 하여 추가적인 기능들을 구현하는 것이 가능해진다. 그리고 이더리움 네트워크에서는 Solidity(솔리디티)라는 언어를 사용하여 스마트 컨트랙트를 작성하게 된다.
이더리움 네트워크에서는 스마트 컨트랙트(Smart Contract)를 사용하기 때문에 다음과 같은 내용에서 비트코인 네트워크와 차이점이 존재한다.
- EVM
- Account
- Transaction
스마트 컨트랙트를 구현하기 위해 이더리움은 EVM이라는 것을 사용한다. 그리고 Account , Transaction 에 대한 내용 역시 비트코인에서의 내용과 다르다. 이더리움 네트워크에서의 EVM , Account , Transaction 에 대해 간략히 알아보도록 하자.
2. EVM
EVM은 Ethereum Virtual Machine의 약자로 "이더리움 가상머신"을 의미한다. 자바(Java)를 공부했던 분들이라면 JVM과 비슷한 기능을 하는 것이라고 생각하면 된다. 이더리움 블록체인 네트워크에서는 "스마트 컨트랙트"라는 것을 실행시켜야만 하는데 이는 어떠한 언어로 작성되었든, 어떠한 OS에서 작동하든 똑같이 실행되어 동일한 결과값을 도출해 내야만 한다. 다시 말해, 분산 네트워크 환경 아래에서는 모든 노드들이 "스마트 컨트랙트"에 의해 동일한 결과물을 얻어야만 하는 것이다. 따라서 이더리움 네트워크에서는 Solidity(솔리디티)라는 언어로 작성한 스마트 컨트랙트 코드를 컴파일* 한 다음 EVM을 통해 실행시키게 된다.
컴파일이란 어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정이다. 이더리움 네트워크에서는 Solidity로 작성된 스마트 컨트랙트를 이더리움 바이트 코드로 컴파일하게 된다. 그리고 EVM을 통해 컴파일 된 바이트 코드를 실행시킨다. 따라서 바이트 코드로 컴파일 할 수 있는 코드라면 어떠한 언어로 작성되었는지에 상관없이 EVM을 통해 똑같은 결과물을 얻을 수 있다. 꼭 Solidity가 아니더라도 이더리움 바이트 코드로 컴파일 할 수만 있다면 어떠한 언어로든 스마트 컨트랙트를 작성할 수 있다.
- Solidity로 스마트 컨트랙트 코드 작성
- 바이트 코드로 컴파일
- EVM에서 컴파일 된 바이트 코드를 실행
이더리움이 스마트 컨트랙트라는 프로그램을 실행할 수 있는 플랫폼으로 기능할 수 있는 가장 핵심적인 이유는 EVM이라는 가상의 컴퓨터가 있기 때문이다. EVM은 이더리움이 정의한 규칙에 따라 스마트 컨트랙트 코드를 실행하고, 그 결과로 변화된 상태를 업데이트하는 작업을 수행해준다. 또한 EVM은 코드 실행이 성공적으로 완료됐을 때만 상태를 변경하여 스마트 컨트랙트가 직접적으로 블록체인에 영향을 미치지 않도록 보호하는 샌드박스(보호 영역)와 같은 역할을 한다.
EVM이 존재하는 또 하나의 이유는 블록체인 분산 네트워크에 참여하고 있는 노드들이 같은 전체 상태에 대한 합의를 이루어야 하는 시스템이기 때문이다. 같은 코드를 실행하였는데 각자 다른 환경에서 이를 실행하는 노드들이 모두 다른 결과값을 얻는다면 해당 네트워크는 하나의 상태에 대한 합의를 이룰 수 없을 것이다.
따라서 이더리움 네트워크의 모든 노드는 같은 코드에 대해 공통적인 결과를 도출하기 위해 EVM을 실행시키고 있다. 노드들은 블록에 담긴 트랜잭션과 스마트 컨트랙트를 각자의 EVM에서 실행시켜 자신이 유지하고 있는 블록체인의 전체 상태를 다른 노드들과 동일하게 유지할 수 있게 된다.
3. Account
이더리움 네트워크 상에는 EOA 와 CA 라는 두 종류의 계정이 존재하며 각각의 역할은 다음과 같다.
👉 EOA (Externally Owned Account) : 외부 소유 계정
- 개인키로 제어되는 계정으로 코드를 저장할 수 없다.
- 자금 또는 스마트 컨트랙트에 대한 접근을 제어한다.
- EOA로 트랜잭션을 시작할 수 있다.
EOA는 다른 EOA 또는 CA에 메세지를 보낼 수 있으며 이를 위해 개인키를 사용하여 트랜잭션을 생성하고 서명한다. 두 개의 EOA 사이에서 발생하는 메세지는 단순히 ETH 만을 전송한다. EOA에서 CA에 보내는 메세지는 CA 저장된 코드를 활성화시킨다. 이더리움 블록체인 상의 모든 기능은 EOA가 전송한 트랜잭션으로부터 시작된다.
👉 CA (Contract Account) : 계약 계정
- 스마트 컨트랙트 로직에 의해 제어되며 스마트 컨트랙트 코드를 저장할 수 있다. (정확히는 코드 해시)
- 개인키가 없어 스스로 트랜잭션을 시작할 수 없다.
- 외부 트랜잭션에 대한 응답을 통해 트랜잭션을 실행할 수 있다.
CA는 EOA와 달리 개인키를 가지고 있지 않으며 스스로 새로운 트랜잭션을 생성할 수 없다. CA는 다른 CA 또는 EOA로부터 받은 트랜잭션에 대한 응답으로만 트랜잭션을 실행할 수 있다.
EOA와 CA에 관해서는 향후 스마트 컨트랙트에 대한 내용을 다룰 때 보다 자세히 알아보도록 하고 여기서는 이더리움 네트워크 상에는 EOA와 CA라는 계정이 존재한다는 정도까지만 인지하고 넘어가도록 하자.
4. Transaction
이더리움 네트워크 상에서의 트랜잭션(Transaction)은 외부 소유 계정(EOA)에 의해 서명됨으로써 생성된다. 그리고 트랜잭션 객체 안에는 다음과 같은 속성들이 포함되어 있다.
- from : 발신자 계정
- to : 수신자 계정
- nonce : 발신자 계정이 발생시킨 총 트랜잭션 횟수
- value : 보낼 금액
- gasLimit : 해당 트랜잭션이 사용할 수 있는 가스(gas)의 최대치
- gasPrice : 발신자가 지불하고자 하는 가스(gas) 당 가격
- data : 트랜잭션에 담을 데이터
비트코인 네트워크와 다르게 이더리움 네트워크에서는 가스비(gas fee)라는 개념이 존재한다. 가스(gas)는 이더리움 네트워크에서 트랜잭션을 발생시킬 때 발신자가 부담하는 수수료이며 이는 마이너(miner)에게 보상으로 지급된다. 가스비와 관련된 내용은 이더리움 네트워크에서 중요한 부분이므로 추후에 좀 더 자세히 알아볼 예정이다.
지금까지 블록체인 네트워크에서 가장 큰 축을 이루고 있는 비트코인 네트워크와 이더리움 네트워크의 차이점에 대해 간략하게 다뤄보았다. 다음번 포스팅에서는 web3 라이브러리에 대해 다뤄보고자 한다.
'Ethereum' 카테고리의 다른 글
Ethereum/이더리움 - private 네트워크 RPC 설정하기 (1) | 2022.07.01 |
---|---|
Ethereum/이더리움 - private 네트워크 (1) | 2022.06.30 |
Ethereum/이더리움 - 메타마스크 연결하기 (5) | 2022.06.29 |
Ethereum/이더리움 - Web3 (0) | 2022.06.29 |
Ethereum/이더리움 - 개발 환경 세팅 (Go , Geth , Ganache) (0) | 2022.06.28 |