티스토리 뷰
안녕하세요 박스여우입니다. 최근 블록체인 송금 관련 토이프로젝트를 진행하던중 블록체인에 대한 기본 지식없이 진행하기에 어려움을 느껴 이더리움, 블록체인에 대해 조금씩 더 공부해보려고 합니다. 오늘 소개해드릴 내용은 nonce에 대한 이야기 입니다.
nonce - 각 어카운트의 트랜젝션 수 카운터
nonce는 트랜젝션의 수를 카운트 하는 숫자 입니다. 트랜젝션이 발생할 때 마다 nonce의 값은 증가하게 되며 여러 트랜젝션이 같은 nonce값을 가지지 못합니다. 쉽게 말해 database에서 auto increment index라고 생각하면 됩니다. 이더리움 네트워크를 구성하는 노드는 이 nonce 값에 따라 트랜젝션을 순서대로 처리합니다.
예를 들어 하나의 어카운트에서 두개의 트랜젝션을 전송했다고 했을 때 트랜젝션의 nonce값은 각각 1과 2가 될 것입니다. 채굴자는 이에따라 nonce가 1인 트랜젝션이 처리되기 전까지 nonce가 2인 트랜젝션을 처리하지 않고 1이 처리된 이후에 2를 처리하여 트랜젝션 처리의 순서를 유지합니다.
nonce를 통한 이중지불 방지
이중지불을 하고자 하는 공격자가 1 ETH만 가지고 있다고 가정해보겠습니다. 예를들어 공격자가 수수료를 10gas(예시)로 해서 1ETH를 전송하고, 이 트랜젝션이 처리되기 전에 다시 1ETH를 수수료 20gas로 높여서 다시 전송한다고 가정합니다. 트랜젝션이 처리되는 속도는 수수료가 높을수록 우선순위를 가지게 되기 때문에 첫번째 트랜젝션보다 두번째 트랜젝션이 먼저 처리되는 상황이 발생하게 됩니다.
후에 첫번째 트랜젝션이 처리되는 과정에서 공격자의 지갑에 남은 금액이 없어서 트랜젝션이 취소되겠지만 공격자는 1ETH만으로 2ETH만큼의 결제를 할 수 있게 됩니다.
하지만 nonce를 통해 트랜젝션에 고유한 순서를 두어 첫번째로 보낸 트랜젝션이 무조건 우선적으로 처리되도록 고정하여 이중지불을 방지합니다. 만약 같은 nonce를 가진 트랜젝션을 보낸다면 처음으로 처리된 트랜젝션만 유효한 트랜젝션으로 처리가 됩니다.
이외에도 작업증명(POW) 채굴 방식에서 사용되는 nonce라는 개념도 존재합니다.
'프로그래밍 > 이더리움' 카테고리의 다른 글
이더리움 지갑 해킹이 가능한가? (407) | 2019.05.11 |
---|---|
암호화폐의 현실 화폐로써의 문제점 (398) | 2019.03.15 |
이더리움 - 스마트 컨트랙트 간단히 살펴보기 (421) | 2018.06.16 |