Copyright. 2024. 785esardiLb Co, Lid. Al oghts reserved.
• 가상머신을 내장하여 프로그래밍을 등해 상태를 변경할 수 있는 블록체인 네트워크
• Solidity로 작성된 스마트 컨트랙트를 기반으로 가상머신 상태를 변경, 추적
• 이더리움연 실행 가능한 코드와 데이터를 저장하는 메모리가 존재
->일반 컴퓨터와 유사하게 코드를 로드, 실행, 결과를 저장
• 상태 변화는 모두가 동의해야 하며, 동의를 하기 위한 방법을 합의 메커니즘이라 함
계정
컨트랙트 코드
상태 머신(EVM)
이더리움
상태 데이터 이더리움의 트랜잭션 및 시스템 상태
각 노드의 DB에 저장
클라이언트 이더리움 참여자(노드)
Client Software : geth, Parity
이더
이더리움의 기본 암호화폐 가스비 지불에 사용
®
합의 규칙
블록 제안 및 확정, 참여자 보상 및 페널티에 관한 규칙의 총체
트랜잭션
이더리움 상태를 변경하는 네트워크 메시지
가스
트랜잭션 실행을 위한 연산 비용
P2P 네트워크
이더리움의 모든 참여자가 연결된 메인넷
Саруід4 2021, T8ieathlab Co, Lud. Al nghts reserved
• EOA(External Owned Account, 외부소유계정)
• 사용자가 이더리움을 거래하기 위해 생성하는 계정으로, 최상위 계정임
• 개인키와 주소를 갖고 있어 트랜잭션을 발행하고 서명할 수 있는 권한을 가짐
• CA(Contract Account)
• 컨트랙트 계정. 코드와 저장소를 갖고 있어 특정 시점에 코드를 실행할 수 있음
• EOA와 달리 트랜잭션 발행 및 서명 권한이 없음
"이더리움의 모든 트랜잭션은 EOA가 시작"
Copyright 2024. 78ResearchLab Co, Lid. All rights reserved
이더리움의 계정은 추적 가능한 상태를 가짐
• Nonce
트랜잭션의 순서를 추적하며, 중복 트랜잭션을 방지하기 위 EOA : 트랜잭션마다 증가
CA : 컨트랙트 생성시마다 증가
• Balance
계정이 보유한 ETH 잔액
• CodeHash
CA에 저장된 스마트 컨트랙트 코드의 해시 EOA는 해당 값이 비어있음
• StorageRoot
CA의 스토리지 내용을 해시로 나타낸 값
Account
Address 1
Account state 1
Nonce
Balance
Storage hash
Code hash
0
Account storage
EVA code
84|: https://ethereum.org/content/developers/docs/accounts/accounts.png
Ethereum Client
• 이더리움은 오픈소스이므로 누구나 클라이언트 소스코드를 무료로 다운로드하여 수정하여 자유롭게 사용 가능
• execution client, consensus client, validator client
Copyright 2024. 78ResearchLab Co, Ltd. All rights resorved.
Node
• execution client, consensus client를 실행하는 객체(PC)
• 네트워크의 모든 데이터를 내려받는지 여부에 따라 Full node와 Light node로 구분
Ethereum node
p2p
webs
Engine API
cecution citent
출처 : https//athereum.org/en/dovolopers/docs/nodes-and-clients/
직분증명 함의 알고리즘을 구현하여 lecuion clent
걸한 데이터를 기반으로 노드 간 합의가 이루어지 도록 함
네트워크에서 전달되는 새로운 트랜잭션 수신
EVM에서 트랜잭션 실행
모든 이더리움 데이터의 최신 상태 및 데이터베이스
• EVM의 상태를 변경하기 위해 EOA의 개인키로 서명된 메시지
• 즉, 사람이 컨트랙트나 다른 계정으로 보내는 메시지
• 이더리움 네트워크를 통해 이더리움의 모든 노드에 전송되어 블록체인에 기록
• 일반 트랜잭션 : 한 계정(EOA)에서 다른 EOA로의 트랜잭션(이더 송금 등)
• 컨트랙트 실행 : 배포된 스마트 컨트랙트와 상호작용하는 트랜잭션 (to주소가 컨트랙트 주소)
• 컨트랙트 배포 트랜잭션 : to주소가 없고 data필드가 컨트랙트 코드로 채워지는 트랜잭션
=> 가장 간단한 트랜잭션이 이더를 송금하 는 것
=> 꼭 이더를 송금해야 트랜잭션인 것은 아
님!
Description
Field
from
signature에서 추출되는 EOA주소(transaction의 sender)
to
transaction을 받는 주소(EOA/CA)
nonce
발신 EOA의 트랜잭션 번호로, 순차 증가하는 일련번호
gas limit
이 트랜잭션에 사용할 최대 가스 양(gas unit 단위)
value
sender가 to에게 보내는 ETH의 양(wei 단위)
*data
임의의 데이터를 포함하기 위한 optional field
signature
sender의 개인키로부터 파생된 sender 식별자
maxPriorityFeePerGas
트랜잭션을 빨리 처리하도록 validator에게 팁으로 지불 할 가격 네트워크 혼잡도에 상관없이 고정
maxFeePerGas
가스 단위 당 총 지불할 최대 가격(wei 단위)
baseFee와 PriorityFee를 합친 값보다 커야 함
• 트랜잭션을 완료하기 위해 필요한 비용
• 트랜잭션 실행에 사용되는 노드의 자원, 이더리움 스토리지에 대한 사용료
• 블록체인 상태를 변경하지 않는 트랜잭션(pureL view함수와 같은)은 gas 소모 X
"gas # ETH"
gas는 ETH로 지불 할 수 있는 수수료
• 함수호줄 시 트랜잭션에서 전달하는 함수 시그니처, 인자 등을 포함하는 필드
• 데이터 필드에 전달되는 데이터(페이로드)는 ABI(ApplicationBinaryInterface)방식으로 해석
• ABI는 첫 번째 4바이트는 function selector, 나머지는 함수 인자로 인식
• 함수 데이터만 있는 경우 : 컨트랙트의 함수를 호출하는 트랜잭션
• 데이터는 없고 value만 있는 경우 : 다른 EOAL CA에 이더를 전송하는 트랜잭션
• 데이터와 value가 모두 있는 경우 : 컨트랙트 함수를 호출하며 이더를 전송하는 트랜잭션
Copylight 2024, 78ResearchLeb Co, Ltd. All rights reserved.
• transactionHlash에 sender의 개인키로 서명한 값
• 해당 계정(EOA)에 대한 ownership이 있음을 인증(authentication)
서명된 트랜잭션은 다음을 보장
• 이더리움 계정 및 개인키 소유자가 이 트랜잭션의 이행을 승인함
• 부인방지 : 계정 및 개인키 소유자는 트랜잭션 이행을 승인한 것을 부인할 수 없음
• 무결성 : 그 누구도 서명 후에 트랜잭션을 수정할 수 없음(트랜잭션은 원본에서 변조되지 않음)
• 서명작업은 Geth, Parity와 같은 Ethereum client에서 이루어짐
• 여러 트랜잭션을 묶어 처리하는 단위로, 트랜잭션들과 기타 정보를 포함하는 객체
• 블록이 처리된 이후에 네트워크 상태 변경이 반영됨
• 각 블록은 이전 블록의 해시값을 내부에 포함하여 서로 연결함
• 한 블록이 변경되면 이후 블록의 모든 해시가 변경됨 -> 트랜잭션 변조 방지
• 블록이 연결되어 체인을 구성하며, 12초에 하나씩 생성
Block
Transaction (t1)
Transaction (t2)
Transaction (£3)
World state (t)
World state (t+1)
24|: https://ethereum.org/content/developers/docs/blocks/tx-block.png
• 합의와 동기화: 모든 참여자(node)가 동기화 된 블록체인 상태를 유지하고 정확한 트랜잭션 내역에 동의
• 모든 참여자가 합의에 이를 때까지 충분한 결정 시간을 주기 위해 많은 트랜잭션이 제출되어도 블록은 12초에 한 번만 생성됨
• 블록 내역을 보존하기 위해 블록은 상위 블록의 해시를 참조하여 엄격하게 정렬되며, 블록 안의 트랜잭션도 validator에게 주는 tip이 높은 순으로 정렬됨
• 거래 배치 처리: 여러 거래를 한 번에 처리함으로써 합의와 동기화의 효율성을 높임