이더리움 PoS에서 트랜잭션이 만들어지는 과정

프동프동·2023년 5월 16일
0

이더리움 PoS에서 트랜잭션이 만들어지는 과정

1. 트랜잭션 생성 및 브로드캐스팅

사용자는 개인 키로 트랜잭션을 생성하고 서명하여 이더리움 JSON-RPC API를 사용해 노드에 요청을 한다.

  • 사용자는 자신이 만든 트랜잭션을 블록에 포함시키기 위해 Validator에게 팁으로 줄 가스 양을 함께 정의한다.
    • 팁은 검증자에게 돌아가는 반면, 기본 수수료는 소각되어 제거된다.

2. 트랜잭션 유효성 확인

트랜잭션을 받은 노드들은 자신에게 설치되어 있는 Execution Client(Geth)를 사용해 받은 트랜잭션의 유효성을 확인한다.

  • 트랜잭션을 받은 노드들은 송신자(트랜잭션을 생성한 사람)가 트랜잭션을 이행하기에 충분한 양의 이더리움을 가지고 있는지, 올바른 개인 키로 서명을 했는지 확인한다.
  • 트랜잭션이 유효하면 각 노드에 설치된 Execution Client는 로컬에 있는 Mempool(보류 중인 트랜잭션 목록)에 트랜잭션을 추가하고 Execution Client의 [Gossip Network]를 통해 다른 노드들에게 브로드캐스팅을 한다.
    • 이때 브로드캐스팅으로 트랜잭션을 받은 다른 노드들도 트랜잭션 데이터를 자신의 로컬 Mempool에 추가한다.

3. Block Proposer 선정 및 역할

네트워크에 있는 노드 중 임의의 노드는 현재 슬롯에 대한 Block Proposer이며 [RANDAO] 를 사용하여 무작위로 선택된 Proposer이다.
이 노드는 이더리움 블록체인에 추가될 다음 블록을 생성 및 브로드캐스트하고 글로벌 상태를 업데이트하는 역할을 담당한다.

  • 선정된 Proposer의 노드는 Execution Client, Consensus Client, Validator Client로 이루어져 있다.
    • Execution Client는 보류 중인 트랜잭션들이 모인 로컬 멤풀(Mempool)에 있는 트랜잭션을 모아 Execution Payload로 패키징하는 역할을 담당한다.
      • 그런 다음 Execution Client는 이러한 트랜잭션을 로컬에서 실행하여 상태를 변경한다.
      • 이러한 정보는 Consensus Client로 전달된다.
    • Consensus Client는 Execution Client에서 생성한 Execution Payload를 포함하는 “Beacon Block”을 생성하는 역할을 한다.
    • Beacon Block에는 Rewards, Penalties, Slashings, Attestations 및 네트워크가 블록체인의 블록 시퀀스에 동의하는 데 필요한 기타 세부 정보와 같은 추가 정보가 포함된다.
    • Execution Payload는 Beacon Block의 다른 정보와 함께 이더리움 네트워크의 글로벌 상태를 업데이트하는데 사용된다.
      • 글로벌 상태에는 계정 잔고, 스마트 컨트랙트 데이터 및 기타 관련 정보를 포함한 블록체인의 현재 상태를 나타낸다.

4. Validator의 역할

Block Proposer 노드가 아닌 Validator 노드들은 Consensus Layer의 Gossip network를 통해 새 beacon block을 수신한다.

  • 받은 Beacon Block에는 Execution Payload, Rewards, Penalties, Slashings, Attestations 및 기타 필요한 세부 정보와 같은 정보가 포함되어 있다.
  • Beacon Block을 받으면 이를 Execution Client에 전달한다.
  • Execution Client는 받은 블록을 포함한 트랜잭션을 로컬에서 다시 실행시켜 proposed(제안)된 상태 변경이 유효한지 확인한다.(블록체인에 추가될 수 있는지 확인한다)
  • 이때 Validator Client를 이용해 재실행된 블록이 유효하다는 것을 증명한다.
    • Validator Client는 제안된 블록이 블록체인에 추가될 수 있는지 확인한다.
      • 해당 블록이 유효하며 노드의 블록체인 관점에서 논리적으로 다음 블록으로 간주될 수 있음을 증명하는 역할을 담당한다.
      • [LMD GHOST 알고리즘]을 기반으로 블록체인에 추가될 수 있음을 확인한다.
  • 노드의 Validator Client가 블록의 유효성을 증명하면 해당 블록을 로컬 데이터베이스에 추가된다.

5. 트랜잭션의 완결성(Finality)

트랜잭션의 확정 및 완결

블록이 네트워크에 스테이킹된 총 이더리움의 66% 이상으로부터 증명을 받으면 각 Epoch가 시작될 때 체크포인트는 “supermajority link”를 갖게된다. “supermajority link”는 네트워크 참여자 사이에서 체크포인트의 유효성에 대한 강력한 합의가 이루어졌음을 나타낸다. 여기서 트랜잭션의 Finality라는 개념이 등장한다. 트랜잭션이 두 체크포인트 사이의 “supermajority link”를 포함하는 체인의 일부가 되면 트랜잭션이 “Finalized”된 것으로 간주할 수 있다. 이는 해당 트랜잭션이 참여자 대다수의 확인과 동의를 받았으며, 되돌리거나 취소할 수 없다는 의미이다.

이더리움 네트워크에서 트랜잭션이 “finalized”된 것으로 간주되었다는 것은 해당 트랜잭션이 확정되었으며 되돌리거나 취소할 수 없다는 의미이다.

“Finality”여부는 두 체크포인트 사이에 “supermajority link” 과반수 링크가 있는지 여부에 따라 결정된다.

→ 비콘 체인의 tempo는 Slot(12초)과 Epoch(32슬롯)로 나뉜다. 각 Epoch의 첫번째 Slot은 체크포인트다. 과반수 이상의 검증자가 두 체크포인트 사이의 연결을 증명하면 해당 체크포인트가 정당화되고, 그 위에 다른 체크포인트가 정당화되면 해당 체크포인트가 최종확정된다.

Gossip Network

노드가 탈중앙화된 P2P 방식으로 이웃 노드와 정보를 교환하는 통신 네트워크의 한 유형이다.
Gossip network에서 노드는 이웃 노드의 하위 집합을 무작위로 선택해 정보를 퍼뜨려 정보를 공유한다. 이러한 노드는 다시 자신이 선택한 이웃과 정보를 공유하며 이 과정이 계속된다.
Gossip network는 분산 컴퓨팅 및 P2P 네트워크와 같은 분산형 시스템에서 정보를 효율적이고 빠르게 전파하기 위해 자주 사용된다.
각 노드는 정보의 발신자이자 수신자 역할을 모두 수행할 수 있다. 노드가 새로운 정보를 수신하면 무작위로 선택된 몇 명의 이웃과 공유하도록 선택할 수 있으며, 이 이웃은 계속해서 정보를 전파할 수 있다.

Gossip network는 정보가 네트워크 전체에 중복적으로 확산될 수 있으므로 복원력과 내결함성을 갖추도록 설계되었다. 노드에 장애가 발생하거나 연결할 수 없게 되더라도 다른 노드는 네트워크의 다른 경로를 통해 정보를 수신할 수 있다.

profile
좋은 개발자가 되고싶은

0개의 댓글