[Blockchain] 블록의 구조 / 트랜잭션 & 논스 / 멤풀
트랜잭션 / 메타데이터 / 논스 / 멤풀(Mempool)
트랜잭션(Transaction)
-
트랜잭션이란 👉 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
-
데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어 A.C.I.D 를 통해 트랜잭션의 특성을 알 수 있다
-
트랜잭션은 쉽게 생각해서 은행 앱에서 쓰이는 이체 데이터와 같다
⭐ 예를들어
은행 어플으로 어떤 사람에게 돈을 이체하고 싶은 경우 💸
받을사람의 계좌번호, 금액 등의 정보를 작성하고 이체 버튼을 누르면
은행 앱에서는 전산상에 해당 거래내역을 등록함으로써
거래가 정상적으로 이루어지게된다비트코인에서도 거래를 하기 위해선
보내는 주소, 받는 사람의 주소, 금액, 수수료 등의 정보를 작성해야하고,
이렇게 작성된 것이 바로 ‘트랜잭션 데이더’ 이다
블록(Block)의 구조
-
블록체인(Blockchain)은 ‘블록’ 들이 + ‘체인’으로 연결되어 있는 구조이다 🔗
-
블록은 헤더(Header) + 바디(Body)로 이루어져 있고
-
헤더(Header)는 메타데이터
-
바디(Body)는 트랜잭션들의 리스트로 구성되어 있다
블록이라는 데이터를 설명하는 메타데이터에는
다음과 같은 정보들이 담길 수 있다
- 이 블록이 체인 중 몇 번째 블록인지
- 이 블록에 몇 개의 트랜잭션이 있는지
- 이 블록을 누가 생성했는지
- 이 블록의 크기, 총 전송량이 얼마인지
비트코인 & 이더리움 트랜잭션 데이터 구조의 차이
비트코인과 이더리움의 트랜잭션 데이터 구조는 각각 다음과 같고,
논스(Nonce)의 유무가 가장 큰 차이이다
이더리움 트랜잭션 논스(Nonce)
-
거래 전송(Transaction)시 논스는 1씩 증가한다
-
논스는 계정에서 유일하며, 동일한 논스가 존재하지 않는다
-
논스(Nonce)는 발신 주소의 속성이며,
-
발신 주소의 컨텍스트 안에서만 의미를 갖는다
-
그러나 명시적으로 블록체인 계정 상태에 저장되지 않고
-
해당 주소에서 발생한 확인된 트랜잭션 건수를 세어서 동적으로 계산되는 값이 논스이다
논스는 중복되지 않고 순차적이기 때문에,
같은 논스에 여러 트랜잭션 전송이 발생하였다면
> 해당 논스 중 제일 높은 가스비(Gas Price)를 지불한 트랜잭션이 처리된다
이더리움에서는 이러한 방법으로 ‘이중 지불 문제’ 를 방지한다
👉 만약, 논스가 0인 트랜잭션 전송 후 논스가 2인 트랜잭션을 전송하면,
두 번째 트랜잭션은 어떤 블록에도 포함되지 않는다.
이더리움 네트워크는 누락된 논스가 나타날 때까지 기다리는 동안의
두 번째 논스를 ‘멤풀(Mempool)’ 이라고 한다
멤풀(Mempool)
👉 아직 블록에 들어가지 않은 상태의 트랜잭션들이 ‘어떤 공간’에 있는 것을 의미
비트코인과 이더리움 ‘논스(Nonce)’의 유무 차이
-
비트코인과 이더리움 ‘논스(Nonce)’의 유무 차이는 결국, ‘이중지불(Double Spending)’의 방지를 위해서다
-
이중지불(Double Spending)
👉 원본 파일에 저장된 가치를 지불한 뒤, 해당 파일을 복사하여 다른 사람에게 또 지불하는 것을 말한다