Nonce 계산주체 관련 질문

안녕하세요,

nonce를 계산하는 주체가 잘 이해되지 않아 질문을 남깁니다.

위 영상인 'nonce 그게 뭔데?'를 보고 몇 가지 질문이 생겼습니다.

  1. 현재 klaytn에서 nonce를 계산하는 주체가 궁금합니다.
    klaytn docs를 읽다가
    ‘발신자가 동일한 논스를 가진 두 개의 트랜잭션을 생성하면 하나만 실행됩니다.’ 라는 내용을 보았습니다.
    발신자 측에서 tx를 생성할 때, 논스를 함께 생성하는 것이라면 위 영상에서 나와있듯, race condition이 발생할 수 있습니다.

이 경우 현재 클레이튼은 어떻게 작동되고 있는지 궁금합니다.

  1. 위 질문과 관련하여 영상에서는 scale out 을 하는 것이 일반적이라고 하였습니다. 그럼 외부의 공용 저장소에서 값을 받아오게 되는데, 제가 로컬에서 CN 노드를 여러 개 돌리며 블럭 생성을 지켜본 바로는 그런 과정을 없는 것 같았습니다.

이와 관련하여 제가 놓친 부분이 있다면 관련된 코드와 놓친 부분을 알려주시면 감사하겠습니다 :smiley:

@11150 클레이튼은 계정별로 최신 논스값만을 가지고 있습니다. 클레이튼은 이 최신 논스 부터 연속적인 값의 논스를 갖는 TX만을 처리 합니다(최신 논스가 3이라면 4의 논스를 갖는 TX를 처리). 따라서 논스 계산은 TX를 생성하는 측에서 하여야 합니다.

스케일 아웃 관련된 내용은 클레이튼 노드가 아니라 클레이튼 네트워크를 사용하는 서비스에 대한 내용입니다. 스케일 아웃 된 상태에서 논스 동기화 되어야 순차적으로 논스를 만들 수 있기 때문에 외부 공용 저장소를 사용합니다. 클레이튼은 노드간 블럭을 계속 교환하면서 최신 상태를 동기화하기 때문에 외부 저장소가 필요없습니다. 노드 자체가 상태 저장소입니다.

설명이 부족한 부분이 있으면 다시 댓글주세요 :slight_smile:

1개의 좋아요

답변 감사합니다 :smiley:

답변을 보고 의문이 드는 부분이 있어 댓글 남깁니다.

  1. Tx를 생성하는 주체는 EN노드를 지칭하는 것이 맞을까요?
    그렇다면, EN 노드들간에 블럭 동기화가 이루어져있다고 하더라도, nonce값은 동기화가 되어있지 않기 때문에 race condition이 발생할 수 있을 것 같습니다.

이 부분에 대해서 클레이튼은 어떤 방식으로 해결하고 있는지 궁금합니다.

감사합니다.

TX를 생성하는 주체는 계정을 소유하고 있는 사람(계정의 private key로 싸인 가능한 장치 혹은 사람)입니다. EN은 TX를 검증하고 CN에 TX를 전달하는 역할을 합니다. 검증은 싸인 과 TX의 논스가 최신 논스 보다 이후인지를 검증합니다. 최신 논스가 3인 경우 3이하의 논스 값을 갖는 TX는 버립니다.

더 궁금하신 부분 있으면 댓글 바랍니다. 감사합니다.

1개의 좋아요