Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발공부일지

BlockChain - Ethereum 본문

BlockChain

BlockChain - Ethereum

보람- 2024. 1. 24. 18:02

목차

1. 이더리움(Ethereum)

2. 상태 변환 시스템

3. 스크립팅

4. 이더리움 어카운트

5. 메시지와 트랜잭션

6. 이더리움 GAS


 

 

 

1. 이더리움(Ethereum)

 

- 비탈릭 부테린
- 차세대 스마트 컨트랙트와 탈중앙화된 어플리케이션 플랫폼

- 비트코인은 결제라는 포커스에 맞춰 구현했다면 이더리움은 탈중앙화된 어플리케이션을 제안한다!

- 블록체인 기술을 사용한 대안적인 어플리케이션
  - 사용자 정의 화폐와 금융 상품을 블록체인으로 표현하기 위한 컬러드 코인
  - 물리적 대상의 소유권을 표현하는 스마트 자산
  - 도메인 이름과 같은 비동질적 자산을 기록하는 네임 코인

- 임의적인 계약의 규칙을 구현한 코드에 의해 디지털 자산을 좀 더 편리하게 관리함!
   → 스마트 컨트랙트가 탄생됨

- 블록체인을 기반으로 한 자율조직 DAO 등이 있음
- 이더리움은 완벽한 튜링 완전 프로그래밍 언어가 심어진 블록체인이라고 할수있다
- 규칙에 따라 코딩을 하고, 상태를 다르게 변환시키는 기능이 포함된 계약을 만든다.
  - 시스템을 구현 가능하게 해줌(유저가 코드로 작성할수있게)


- 비트코인과 비슷하게 암호화폐를 만들려고 시도했으나 중앙화된 데이터의 의존도가 높아, 조명받기 힘들었음
- 사토시 나카모토가 합의알고리즘 POW로 탈중앙화를 실현시킴
- 비탈릭 부테린은 작업증명 2가지 문제를 해결함
   - 1. 간단하고 효과 좋은 합의 알고리즘 제공
   - 2. 누구나 합의 프로세스에 참여 가능함
   - 이후 지분증명(POS)라는 합의 알고리즘이 등장하게 된것임
     - 화폐 보유량에 따라 각 노드의 결정된 정도를 계산하는것! (지분을 가지고있는사람이 채굴을 할수있는)
- 이더리움은 지분증명(POS) 선택

 

 

 


2. 상태 변환 시스템

 

- 이더리움 백서에서는 비트코인의 트랜잭션을 상태 변환 시스템이라고 부른다.
- 비트코인의 트랜잭션은 UTXO 객체가 생성되는데
- 이더리움은 트랜잭션을 상태처리라고 한다.
  - 리액트의 상태라고 봐도 무방함

 


** 상태
  - 쇼핑몰을 만들고, 상품 구매하는 프로세스가 있다고 가정할때
  - 상품의 현재 상태를 보여줄 테이블 만들고 그 테이블안에 주문이라는 상태가 있는!
  - 주문 접수 → 결제 확인 → 상품 준비 → 상품 발송 → 배송 완료 → 상품 수령 (각각이 상태! order → state )
  - UTXO → Transaction → UTXO

  - UTXO가 변경되는 내용을 상태가 변한다라고 비유함

 

 

 


3. 스크립팅

 

- 비트코인은 낮은 수준의 스마트 컨트랙트가 있긴한데 (서명이 어려워서 거의 안함 )
- 이더리움은 서명에 관련된 로직을 스마트 컨트랙트라는 시점으로 바라봄

- 비트코인 UTXO는 공개키로 해당 계정의 잔액을 조회해볼수있는데 (단순 스택기반으로 표현됨)
  - 개인키 2~3개로 계약내용을 작성할수있는데 어려움(실용성 떨어짐)
- 이더리움은 위 내용을 스마트 컨트랙트로 제안한것!

- 이더리움은 분산 어플리케이션 제작을 위한 대체 프로토콜

- 생산하는 이유 (비트코인은 결제에 포커스가 맞춰져있어서)
  - 비트코인을 가지고 예금, 보험 및 금융 상품을 구현할 수 없음 (이자 구현 X)
  - 사이트 및 게임에 적용하기 힘든 부분이 많음 (상품 및 게임 아이템 매칭 X)

- 이더리움은 이런점을 보완함! 이더리움이라는 플랫폼을 만든것
- 적은 시간을 들여 탈중앙화 데이터를 저장하는 사이트 (디앱 Dapp) , 게임 등을 만들수있게됨

- 탈중앙화랑 통신을 할 수 있는 프로토콜을 유저가 쉽게 구현할 수 있도록 제공함
- 탈중앙화에 데이터를 저장할수있다 === 스마트 컨트랙트

- 비트코인의 UTXO 형식적인 데이터가 아닌 상태의 변화를 만들어서 다양한 데이터 저장(탈중앙화된 데이터)하고 사용할수있도록 트랜잭션의 구조가 완전히 바뀜

 

 


4. 이더리움 어카운트

 

- 상태(state)는 account라고 하는 객체로 구성되어있음
- 비트코인에서 만들었던 개인키, 공개키 만들고 26자리 자른 40자리 문자열이 account

interface Account {
  nonce: number; // 이 계정의 트랜잭션 발생횟수를 뜻함(이중지불방지용도), block의 nonce와 다름!!!!!
  balance: string; // 이 계정에 있는 이더리움의 양
  storageRoot: string; // account의 상태 저장 공간으로 초기엔 비어있음
  codeHash: string; // 스마트 컨트랙트 계약의 코드
}


- 이더라는 이더리움 플랫폼의 화폐 단위가 있고
- 트랜잭션을 발생시킬때 수수료를 지불하는데 사용된다.
- 이더리움 네트워크에서 이더라는 자원이 없으면 코드 실행 권한이없어 데이터 저장할수없음! (자원을 사용하게끔하는)



EOA : 지갑처럼 사용할수있는 계정의 형태(서명할수있는 개인키 존재함)   트랜잭션을 발생시킬수있는 계정
  - storageRoot,codeHash 은 사용하지 않음

interface Account {
  nonce: number; // EOA가 사용함
  balance: string; // 이더
}




CA : Account객체 구조의 모든 속성을 다 사용함(4개 전부)
  - 개인키 없음! 서명 X, 트랜잭션 발생X
  - EOA것을 받아서 사용

interface Account {
  nonce: number;
  balance: string;
  storageRoot: string;
  codeHash: string;
}



- 서명이 포함되지않은건 메세지라고 한다!
- 나중에 스마트 컨트랙트 코드를 솔리디티 언어로 작성할것!

 

// class와 같아
contract testContract{
  uint256 value; // 자료형?, 상태변수
  function setValue(uint256 value) public (
    value = newValue // 상태변수를 변경!

    // 상태를 전환한다는것 == 저장공간을 사용한다는것 ==  네트워크 자원을 사용한다는것! => 수수료(GAS fee)를 내야함 (코드복잡도에 따라 수수료 금액 정해짐)
  )

  function getValue() public view return (uint256) {
    return value
    // 조회할때는 트랜잭션발생X == 가스비X , 상태변수 변환 불가능!!!!!
  }
}


- 이때 codeHash들은 코드를 컴파일해서 바이너리 코드 내용을 저장함
- 상태변수로 선언한것은 storageRoot에 저장함 (키와 값의 형태로)
- CA는 메시지를 보낼수있다 ?
  - 개인키가 존재하지않아 서명을 만들수없음 (트랜잭션발생X)

 

 

 


5. 메시지와 트랜잭션

 

- 이더리움에서는 서명이 있는 영수증을 트랜잭션이라고 부름
- 서명이 없는 영수증이 Message

- EOA : 트랜잭션 발생
- CA : 코드실행, 상태변수저장, Message

interface Message {
  from: string; // 보내는 계정
  to: string; // 받는 계정
  gas: number; // 메시지를 처리하기 위한 가스량
  gasPrice: number; // 가스당 가격
  value: number; // 메시지와 함께 전송할 이더량
  data: string; // 메시지의 데이터
  nonce: number; // 메시지 전송한 account의 nonce횟수값
}

interface Transaction extends Message {
  v: number; // 서명의 v값 : 공개키 복구 내용
  r: string; // 서명의 r값 : n 정수 * 기준점(secp256k1)
  s: string; // 서명의 s값 : 개인키와 r의 값을 포함시켜 방정식으로 만든 값
}

 

 

 



6. 이더리움 GAS

 

- EVM상의 트랜잭션을 처리하기 위해 소모되는 자원
   - EVM : 이더리움 네트워크에 사용되는 가상머신
- 코드의 복잡성에 따라 가격 측정!
   - 바이트당 5GAS라고 된다고함!
- 가스 수수료는 네트워크 자원의 낭비를 막기 위함과 채굴자 보상으로도 사용됨 GAS fee
- 가격은 거래가 걸리는 시간에도 영향을 준다.
- 지불해야할 GAS비용 = GAS 총량 \* GAS당의 가격
   - 사용자가 GAS당의 가격을 설정할수있어 수수료를 조정할수있음
- 가스계산하는 단위 : gwei
   - 1ETH = 1,000,000 Gwei
- GAS당의 가격이 21,000일 경우 100을 곱해서 === 2,100,000 Gwei === 0.0021ETH (가스 수수료)

 

 

 

 

 


※ 이더리움 백서

https://ethereum.org/ko/whitepaper