ZooBC 위키
트랜잭션

만료와 타임스탬프

모든 ZooBC 트랜잭션은 자신이 만들어진 순간을 유닉스 초 단위로 서명된 바이트 안에 담습니다. 이 타임스탬프가 유효 기간을 엽니다. 블록은 그 기간 안에서만 트랜잭션을 포함할 수 있으며, 기간이 지나면 트랜잭션은 효력을 잃어 다시 서명해야 합니다. 이 유효 기간은 서명자를 보호합니다. 혼잡한 순간에 블록에 들어가지 못한 결제가 며칠 동안 남아 있다가 뜻밖에 처리되는 일이 없습니다. 그저 만료되며, 서명자는 다시 결정할 수 있습니다.

기본 유효 기간: 1시간

기본적으로 블록은 트랜잭션의 타임스탬프 이후 3,600초까지 그 트랜잭션을 포함할 수 있습니다. 1시간, 즉 15초마다 블록 하나 기준으로 240블록입니다. 그 뒤로는 노드가 "...sign it again"으로 끝나는 메시지와 함께 거부합니다.

유효 기간에는 앞쪽 경계도 있습니다. 3,600초보다 더 미래의 시각이 찍힌 트랜잭션도 서명자의 시계를 확인하라는 안내와 함께 거부됩니다. 이로써 시계가 잘못된 기기를 잡아냅니다.

트랜잭션 타임스탬프부터의 시간 축: 1시간까지는 블록이 포함할 수 있는 초록 띠, 그 뒤는 빨간 구역, 그리고 버전 3을 위한 24시간까지의 점선 띠
트랜잭션 타임스탬프부터의 시간 축: 1시간까지는 블록이 포함할 수 있는 초록 띠, 그 뒤는 빨간 구역, 그리고 버전 3을 위한 24시간까지의 점선 띠

유효 기간 정하기: 버전 3

버전 3 트랜잭션은 수수료와 생존 필드 바로 뒤에 4바이트 만료 필드를 담아, 자체 유효 기간을 초 단위로 명시합니다.

  • 0은 기본값인 1시간을 뜻합니다.
  • 더 작은 값은 유효 기간을 줄입니다. 곧 이루어지지 않으면 의미가 없는 결제에 씁니다.
  • 허용되는 최대값은 86,400초, 즉 하루입니다. 더 큰 값은 거부됩니다.

버전 1이나 2 트랜잭션에는 만료 필드가 없으며, 그런데도 만료를 명시한 트랜잭션은 거부됩니다. 버전이 무엇이든 미래 방향 1시간 한도는 그대로 적용됩니다.

더 긴 유효 기간은 서명을 모으는 데 시간이 걸릴 때 도움이 됩니다. 하드웨어 지갑에서 서명하거나, 다중서명 계정의 참여자들 사이에서 서명을 모을 때입니다.

풀과 체인이 따라가는 방식

두 가지 동반 규칙이 하루짜리 유효 기간을 안전하게 만듭니다.

  • 노드의 트랜잭션 풀은 각 트랜잭션을 그 트랜잭션이 명시한 기간 동안 보관합니다.
  • 모든 체인은 트랜잭션 id를 최소 25시간 동안 보관합니다. 가장 긴 유효 기간에 미래 방향 1시간 허용 오차를 더한 시간입니다.

노드는 이미 확정된 id를 거부하므로(트랜잭션 서명 참조), 트랜잭션이 아직 유효한 동안에는 결코 재전송될 수 없습니다.

타임스탬프부터의 자에 1시간(기본값), 24시간(상한), 25시간(id 보관 기간) 눈금이 있고, 24시간 너머는 빨간 구역입니다
타임스탬프부터의 자에 1시간(기본값), 24시간(상한), 25시간(id 보관 기간) 눈금이 있고, 24시간 너머는 빨간 구역입니다

블록 안의 시간

블록도 같은 유효 기간을 기준으로 검사되므로 모든 노드가 같은 판정에 이릅니다.

  • 타임스탬프가 트랜잭션의 타임스탬프에 유효 기간을 더한 시각을 넘은 블록은 무효입니다.
  • 블록보다 3,600초 넘게 뒤의 시각이 찍힌 트랜잭션을 담은 블록도 무효입니다.

어떤 정산은 블록마다 저절로 일어납니다. 에스크로 기한, 리퀴드 페이먼트의 완료, 기한이 된 예약 이체, 마켓에 걸려 있는 주문의 만료, 수수료 투표의 단계가 그렇습니다. 이것들은 블록 자신의 타임스탬프가 아니라 이전 블록의 타임스탬프를 읽습니다. 따라서 생산자는 블록의 타임스탬프를 조금 앞당겨 찍어 지급을 자기 블록으로 끌어올 수 없습니다.

블록 사이의 시간 간격은 블록과 시간에서 설명합니다.

같이 보기