Ethereum [1] (Transaction, Block)
2023. 6. 13. 18:34ㆍBlockchain/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 |