모든 거래(Transaction)는 일회성이다.
nonce는 계정에서 보내는 트랜잭션에 할당 된 번호이다.
거래 전송시 nonce는 1씩 증가한다.
예) 최초 계정 생성시 nonce는 0 (계정 기준으로 전송된 트랜잭션이 하나도 없을 때)
전송한 Transaction1: 1(nonce)
전송한 Transaction2: 2(nonce)
전송한 Transaction3: 3(nonce)
.
..
...
전송한 Transaction10: 10(nonce)
nonce 규칙
-
거래(Transaction)은 순서대로 이루어져야 한다.
현재 계정의 nonce가 1이라면, nonce가 0인 트랜잭션을 전송할 수 없다.
(오류발생: 순서를 역행할 수 없습니다.)
-
순번을 건너 뛰지 않는다.
nonce는 순차적으로 증가하고 처리되기 때문에 nonce가 3인 트랜잭션을 전송하려면, nonce의 값 0~2까지 전송한 내역이 존재해야 한다.
만약 현재 계정의 nonce가 1인데 3인 트랜잭션을 전송 시, 트랜잭션이 처리되지 않고 Transaction Pool Queue에 남게된다.
nonce가 2인 트랜잭션을 전송했을 경우 2,3이 연속으로 처리된다.
왜 nonce가 필요한가?
nonce는 중복되지 않고 순차적이기 때문에 같은 nonce에 트랜잭션 전송이 발생했다면 해당 트랜잭션 중 제일 높은 가스비를 지불한 트랜잭션이 처리된다.
nonce를 통해 트랜잭션을 취소할 수 있는가?
결론적으로는 트랜잭션이 네트워크에 정상적으로 전파됐다면 취소 방법은 없다.
하지만 nonce를 현재nonce+1 보다 높게 설정했거나 너무 낮은 가스를 지불한 경우 아직 Transaction Pool에 남아있는 상태(Pending)라면 nonce를 이용하여 해당 트랜잭션을 재전송하여 취소된 효과를 줄 수 있다.
'블록체인' 카테고리의 다른 글
Bitcoin (0) | 2019.05.14 |
---|---|
geth 사설 이더리움 네트워크 테스트 명령어 (0) | 2019.04.01 |
Hot Wallet / Cold Wallet (0) | 2019.03.28 |