개발공부일지
BlockChain - Ethereum 본문
목차
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 (가스 수수료)
※ 이더리움 백서
'BlockChain' 카테고리의 다른 글
BlockChain - truffle, ERC20, remix (0) | 2024.01.29 |
---|---|
BlockChain - RPC 통신, ganache, web3, Solidity (0) | 2024.01.25 |
BlockChain - Transaction, UTXO(Unspent Transaction Output), jest 테스트하기 (0) | 2024.01.24 |
BlockChain - P2P (0) | 2024.01.23 |
BlockChain - hash, merkle tree, transaction, block, chain, 블록체인의 4대 요소 기술, 합의 알고리즘 (0) | 2024.01.17 |