본문 바로가기

블록체인/이더리움

트랜잭션의 유효성

트랜잭션이 실행되기 전에 노드는 트랜잭션이 5개의 룰을 통과하는지 검증하며 하나라도 통과하지 못한다면 트랜잭션은 실행되지 않습니다.

 

1. 트랜잭션은 RLP로 만들어져야 한다.

2. 트랜잭션의 서명이 유효해야 한다.

3. 트랜잭션의 nonce가 sender의 nonce와 일치해야 한다.

4. 트랜잭션의 비용이 gas limit보다 낮아야 한다.

5. sender의 account balance가 트랜잭션을 실행시키는 금액보다  크거나 같아야 한다.

 

이 5가지 룰에는 포함되지 않지만 한 가지 규칙이 더 있는데 해당 트랜잭션이 블록에 포함되었을 때 트랜잭션들의 total gas limit이 블록의 gas limit을 초과한다면 해당 트랜잭션을 블록에 포함시켜서는 안 됩니다.

 

 

1. 트랜잭션은 RLP로 만들어져야 한다.

RLP는 이더리움 네트워크에서 쓰이는 직렬화(serialization) 기법인데, 이는 노드끼리의 주고받는 데이터가 통일된 형식이어야 encoding과 decoding이 자유롭게 이루어져 데이터의 전달이 가능하기 때문입니다. 이 규칙의 목적은 트랜잭션을 수신하는 모든 클라이언트가 성공적으로 decoding 하여 실행할 수 있도록 하는 것입니다.

 

2. 트랜잭션의 서명이 유효해야 한다.

이 규칙은 타인의 서명으로 트랜잭션을 실행할 수 없도록 하기 위한 규칙입니다.

 

3. 트랜잭션의 nonce가 sender의 nonce와 일치해야 한다.

nonce는 이중 지불 및 리플레이 어택을 방지하기 위해 사용되며 이전의 게시글을 참조하면 좋을 것 같습니다.

 

4. 트랜잭션의 비용이 gas limit보다 낮아야 한다.

 

5. sender의 account balance가 트랜잭션을 실행시키는 금액보다  크거나 같아야 한다.

트랜잭션을 실행시키는 비용이란

비용 = gas limit * gas price + value이며

gas limit이란 sender가 트랜잭션을 실행하는데 소비할 최대 가스이고 gas price는 가스의 단위 당 지불할 금액입니다.

value는 sender가 recipient에게 전송할 만큼의 wei를 말한다.  이 비용은 트랜잭션 실행 초기에 지불되기 때문에 계정의 잔고가 이보다 적은 경우 트랜잭션의 실행은 불가능합니다.

 

트랜잭션의 gas limit은 블록의 gas limit을 초과할 수 없다.

이 규칙은 위의 규칙에 포함되지는 않지만. 노드가 블록에 포함시킬 트랜잭션을 선택하는 데에 중요한 역할을 합니다. 만약 해당 트랜잭션이 블록의 gas limit을 초과하여 이번 블록에 포함되지 않는다면 다음에 생성될 블록에 포함될 수 있습니다.

 

'블록체인 > 이더리움' 카테고리의 다른 글

[Hardhat] Invalid hex string ... 에러  (0) 2022.08.05
Re-Entrancy Attack  (0) 2022.07.10
머클트리  (0) 2022.06.30
업그레이드 가능한 컨트랙트 작성해보기  (0) 2022.06.27
솔리디티 프록시 패턴(Proxy Pattern)  (0) 2022.06.25