Ethereum [1] (Transaction, Block)

2023. 6. 13. 18:34Blockchain/Ethereum

728x90
반응형

※ 원글 작성 : 22년 4월 27일

이더리움 트랜잭션 구성

본인 논문

이더리움 트랜잭션 검증 방식

  • 디지털서명 검증(ECDSA)
    • 이더리움 account와 개인키의 소유자가 이더 지출 or contract를 이행했음을 승인
    • 부인 방지(Non repudiation) 보장
    • 트랜잭션이 서명된 후에는 트랜잭션 데이터가 수정되지 않았고 어느 누구도 트랜잭션 데이터를 수정할 수 없음

이더리움 nonce

  • account를 가진 user가 트랜잭션을 생성시마다 1씩 증가, 중복된 트랜잭션을 만들지 않기 때문에 이중 지불 방지
  • 비트코인은 account 기반이 아닌 UTXO 기반이기 때문에 트랜잭션 생성자의 nonce가 없음 (nonce는 블록 해시를 생성시에 임의의 값으로 존재)

트랜잭션 처리 과정

  • TX Pool 상의 transactions를 블록에 담기위해 miner가 수집
  • 수집한 transactions를 gas price와 account 별 nonce를 기준으로 transaction 처리 순서를 정함
  • Miner가 transaction 내부에 선언된 Gas fee(Gas limit * Gas price)를 확인하고 송신 account로 부터 gas를 확보 (Gas price가 높을 수록 transaction 채택 확률 증가)
  • Transaction 실행
  • Transaction에 선언된 명령에 따라 gas를 소모
  • 모든 명령 실행 후 gas limit보다 남는 gas는 송신 account로 반환, gas 부족 시 명령 실행을 되돌림
  • 이상없는 실행된 transaction을 block에 추가 (Transactions의 모든 개별 gas limit의 합은 block gas limit을 넘을 수 없음)

이더리움 블록 구조

type header struct {
    ParentHash  common.Hash    `json:"parentHash"       gencodec:"required"`
    UncleHash   common.Hash    `json:"sha3Uncles"       gencodec:"required"`
    Coinbase    common.Address `json:"miner"            gencodec:"required"`
    Root        common.Hash    `json:"stateRoot"        gencodec:"required"`
    TxHash      common.Hash    `json:"transactionsRoot" gencodec:"required"`
    ReceiptHash common.Hash    `json:"receiptsRoot"     gencodec:"required"`
    Bloom       Bloom          `json:"logsBloom"        gencodec:"required"`
    Difficulty  *big.Int       `json:"difficulty"       gencodec:"required"`
    Number      *big.Int       `json:"number"           gencodec:"required"`
    GasLimit    uint64         `json:"gasLimit"         gencodec:"required"`
    GasUsed     uint64         `json:"gasUsed"          gencodec:"required"`
    Time        *big.Int       `json:"timestamp"        gencodec:"required"`
    Extra       []byte         `json:"extraData"        gencodec:"required"`
    MixDigest   common.Hash    `json:"mixHash"          gencodec:"required"`
    Nonce       BlockNonce     `json:"nonce"            gencodec:"required"`
}
  • ParentHash : 부모블록 hash
  • UncleHash : 현재 블록의 엉클블록 hash
  • Coinbase : 마이닝 후 트랜잭션 수수료를 받을 어카운트 주소
  • Root : 어카운트 상태정보의 MPT root node hash
  • TxHash : 블록 내 모든 트랜잭션 머클트리 루트노드 hash
  • ReceiptHash : 블록 내 모든 트랜잭션에 대한 receipt들의 머클트리 루트노드 hash
  • Bloom : 로그 정보 사용하는 32bytes 블룸필터
  • Difficulty : 블록 난이도(이전블록 난이도 및 타임스탬프로 계산)
  • Number : 블록번호
  • GasLimit/GasUsed : 블록 당 지급가능 최대 가스/트랜잭션에 사용된 총 가스
  • Time : 블록 생성시간
  • Extra : 블록의 기타 정보
  • MixDigest, Nonce : PoW 해시 계산시 충분한 계산횟수 보장에 사용되는 값

엉클블록

  • 동시에 블록이 생성되어 전파되는 경우 블록의 유효성 검증은 통과되지만 블록 난이도가 상대적으로 낮아 블록으로 채택되지 못한 블록
  • 엉클블록 많아지면?
    • 트랜잭션 처리가 되지 않아 처리 지연 문제 발생
    • 엉클블록 발견에 사용된 컴퓨팅 파워 낭비
    • 엉클블록 생성 후 다음 블록 생성되면 평균 블록 생성시간 늘어남, 블록 생성 난이도 낮아짐, 네트워크 보안 수준 떨어짐
    • 고스트 알고리즘을 사용하여 해결함

참고
http://wiki.hash.kr/index.php/%EB%8C%80%EB%AC%B8
https://steemit.com/kr/@brownbears/58jo3j

728x90
반응형

'Blockchain > Ethereum' 카테고리의 다른 글

Ethereum Bootnode 기능 확인  (0) 2023.06.14
Ethereum [5] (Go-Ethereum)  (0) 2023.06.13
Ethereum [4] (EVM)  (0) 2023.06.13
Ethereum [3] (Scalability)  (0) 2023.06.13
Ethereum [2] (Algorithm, Protocol)  (1) 2023.06.13