0. 목차
1. 개요
2. EVM
3. Account
4. Transaction
5. GETH
1. 개요
기존의 포스팅에서 비트코인을 야매로 카피해서 구현했었다.
그리고 오늘 부턴 이더리움에 대해 포스팅을 하려고 한다.
이더리움에는 비트코인에는 존재하지 않는 EVM(이더리움 가삼머신) 이란것이 존재하고,
비트코인과는 Transaction의 내용과 처리도 다르며,
account를 만드는 방법도 다르다.
(기존 포스팅에서 사용했던 방법이 이더리움의 account 생성 방식을 어줍잖게 따라했었다.)
비트코인은 PublicKey를 2번의 hash화를 거쳐서 만든다
하나씩 알아보자.
2. EVM
EVM(Ethereum Virtual Machine = 이더리움 가상머신 이하 EVM)은 스마트 컨트랙트에 작성된 코드를 동작하게끔 해주는 역할을 한다.
스마트 컨트랙트에 작성된 코드를 컴퓨터가 알아들을 수 있는 언어 즉 바이트코드(0과1로 이루어짐)로 변환하여, 동작시킨다.
나에게는 가상머신이란것이 굉장히 낯설다.
가상 머신의 역할을 모든 환경에서 코드가 똑같이 동작하도록 만들어주는 역할을 한다.
예를 들어, C 또는 C++ 같은 경우는 컴퓨터의 환경에 따라 빌드를 다르게 해주어야 한다.
쉽게 말해서, 윈도우에서 작업한 코드가, 맥에서는 다르게 동작할 수 도 있다는 뜻이다.
이거 매우 귀찮을 일일거다.
그래서 나온 언어가 Java 였다.
Java는 JVM 이라는 가상머신을 이용해서 코드를 실행시킨다.
이로인해, JVM의 버젼만 동일하다면, 어떤 환경의 컴퓨터에서라도 동일하게 동작한다.
이더리움은 Transaction의 내용에 스마트 컨트랙트에 작성된 코드가 모든 컴퓨터에서 동일하게 동작해야한다.
그렇기 때문에 이더리움은 자체적인 가상먼신 EVM을 사용한다.
3. Account
이더리움에는 두가지의 다른 계정이 존재한다.
하나는 EOA(Externall Owned Account=외부소유계정)이고,
또 하나는 CA(Contract Account)이다.
우선 오늘은 EOA에 대해서만 얘기를 해보려한다.
CA에 대한 얘기는 나중에 스마트 컨트랙트를 다룰 때 다시 해보려한다
EOA는 이전 포스팅에서 작성했던 Account의 내용과 크게 다르지않다.
코인을 주고 받을 수 있는 계정이다.
만드는 방식 또한 Public Key를 이용해서 만든다
(앞에 24글자 잘라서 40글자로 만들기)
비트코인의 Account 와 가장 큰 차이점을 보이는 점은
비트코인 같은 경우에는 현재 내가 가진 코인들이
언제,누구에게, 얼마나 받은 것인지 하나하나를 알 수 있는 구조이다.
이를 가능하게 해주는 것이 UTXO(Unspent Transaction Out)이다.
반면, 이더리움은 내가 가진 잔액만 보여준다.
비유를 하자면, 비트코인의 Account는 장부와 같이 언제 누가 얼마를 나에게 보냈는지를 기록하지만,
이더리움의 EOA는 현실세계의 지갑과 같아서 남은 잔액만 보여준다.
4. Transaction
비트코인과 이더리움은 트랜잭션의 구조가 다르다.
각각의 요소에 대해서는 앞으로 시간을 들이고 천천히 알아보도록하고
오늘은 대충 이렇게 생겼구나만 알고 가자.
트랜잭션은 다음 데이터를 포함하는 시리얼라이즈된 바이너리 메세지이다.
- 논스(nonce): 발신 EOA에 의해 발행되어 메세지 재사용을 방지하는 데 사용되는 일련번호
- 가스 가격(gas price): 발신가자 지급하는 가스의 가격(웨이, wei)
- 가스 한도(gas limit): 이 트랜잭션을 위해 구입할 가스의 최대량
- 수신자(recipient): 목적지 이더리움 주소
- 값(value): 목적지에 보낼 이더의 양
- 데이터: 가변 길이 바이너리 데이터 페이로드
- v,r,s: EOA의 ECDSA 디지털 서명의 세 가지 구성요소
음.. 뭐 그렇구나..
5. GETH
Go + Ethereum 의 합성어 이다.
이더리움은 여러가지 언어로 네트워크를 만들었는데,
그중에서 사용자가 가장 많은 것이 Go 언어로 만들어진 네트워크 줄여서 Geth이다.
다음 포스팅에서 GETH의 설치하는 방법을 작성하겠다.
'경일 > Block-chain' 카테고리의 다른 글
[Blockchain/블록체인] ganache(가나슈)와 테스트코드를 통해 Ethereum(이더리움) Transaction(트랜잭션) 만들기 (1) | 2022.06.28 |
---|---|
[Block-chain/블록체인] Mac GETH 설치 (1) | 2022.06.27 |
[Blockchain/블록체인] Wallet(지갑)/PrivateKey(개인키)/PublicKey(공개키)/account(계정) 톺아보기 (0) | 2022.06.20 |
[Blockchain/블록체인] P2P 서버로 받은 블록 검증 및 업데이트 (0) | 2022.06.15 |
[Blockchain/블록체인] P2P 네트워크 이용하여 블록정보 주고 받기 (0) | 2022.06.14 |
댓글