Nonce

Updated:

Hyperledger Fabric Nonce

Hyperledger fabric 에서 reply attact 을 막기위한 nonce는 랜덤으로 생성되는데, 해당 nonce 를 가지고 TXID 도 만듭니다. 따라서 nonce 는 트랜잭션마다 가지고 있게 되며, Ledger에 그대로 저장되어 - nonce를 검증하기 위해서는 해당 트랜잭션에 대해 Ledger에 이미 동일한 TxID를 가진 트랜잭션이 있는지에 대한 중복 검사를 통해 검증됩니다.

패브릭엔 Ledger에 Address 라는 상태 개념이 없으며, StateDB에는 체인코드와 연관된 key만 존재하기 때문입니다. 이더리움에서는 보낸 사람이 누구인지를 블록체인상에 존재하는 Address로 특정하지만, 패브릭에서는 그냥 CA 로부터 인증받은 user면 되며, 그 user는 체인코드를 호출하는데 있어서 인증서 검사 및 ACL에만 사용되지, 그 user의 정보가 Unique 한 key로 Ledger상에 존재하진 않기 때문입니다.

Ethereum Nonce

image

nonce는 계정에서 보내는 트랜잭션에 할당 된 번호입니다. 거래(transaction)를 전송시 nonce는 1씩 증가합니다. nonce는 계정에서 유일합니다. 동일한 nonce 가 존재 하지 않습니다.

예)최초 계정 생성시 nonce는 0 (계정 기준으로 전송된 트랜잭션이 하나도 없을때 )
전송한 Transaction1 : 1(nonce)
전송한 Transaction2 : 2(nonce)
전송한 Transaction3 : 3(nonce)
.
…
……
전송한 Transaction10 : 10(nonce)

nonce 규칙

  • 트랜잭션은 순서대로 이루어져야 합니다.
    • 현재 계정의 nonce가 1이라면, nonce가 0인 트랜잭션을 전송할 수 없습니다. (오류발생 : 순서를 역행할 수 없습니다.)
  • 순번을 건너 뛰지 않습니다.
    • nonce 는 순차적으로 증가하고 처리되기 때문에 nonce 가 3인 트랜잭션을 전송하려면, nonce의 값 0~2까지 전송한 내역이 있어야 합니다. 예) nonce 가 3 인 트랜잭션 전송 시, 현재 계정의 nonce가 1일 경우, 트랜잭션이 처리되지 않고 Transaction Pool Queue 에 남아있게 됩니다. 만약 nonce가 2인 트랜잭션을 전송하였을 경우 2, 3 이 연달아 처리됩니다.

nonce가 필요한 이유?

nonce는 중복되지 않고 순차적이기 때문에, 같은 nonce 에 여러 트랜잭션 전송이 발생하였다면 해당 nonce 중 제일 높은 가스비를 지불한 트랜잭션이 처리됩니다. 이더리움에서는 이러한 방법으로 이중 지불 문제를 방지합니다.

Leave a comment