ZooBC 위키
트랜잭션

트랜잭션

트랜잭션은 체인에 보내는 서명된 지시입니다. 누군가에게 지불하기, 토큰 발행하기, 주문 내기, 주소를 그룹에 연결하기 같은 것입니다. ZooBC에는 사용자 코드를 위한 가상 머신이 없습니다. 모든 기능은 모든 노드가 정확히 같은 방식으로 적용하는 고정 규칙을 가진 내장 트랜잭션 유형이므로, 지갑은 서명하기 전에 트랜잭션이 할 수 있는 모든 일과 그 최소 수수료를 알 수 있습니다.

내장 유형

버전 0.5.8부터 ZooBC는 유형 0을 포함해 73개의 트랜잭션 유형 번호를 열두 개의 계열로 정의합니다.

트랜잭션 유형의 계열마다 하나씩, 각 계열의 유형 수가 적힌 열두 개의 타일이며, 합하면 73입니다
트랜잭션 유형의 계열마다 하나씩, 각 계열의 유형 수가 적힌 열두 개의 타일이며, 합하면 73입니다

유형 번호는 그룹에 256 곱하기 하위 유형을 더한 값이므로, 번호는 띄엄띄엄 있습니다. 2는 NodeRegistration이고, 258(그룹 2, 하위 유형 1)은 그 갱신입니다. 체인이 정의하지 않은 번호는 거부되며, 정의된 모든 유형은 블록 1부터 받아들여집니다.

두 번호는 특별합니다. 유형 0인 Empty는 아무것도 옮기지 않습니다. 메시지를 담기 위해 존재하며, 그래도 0보다 큰 수수료를 내야 하고, 체인이 송신자마다 유지하는 카운터인 송신자의 논스를 올리지 않습니다. 유형 53인 CancelLongevity는 폐지되었습니다. 모든 체인이 이를 거부하며, 대신 CloseLongevity(309)를 씁니다.

트랜잭션의 일생

  1. 지갑이 모든 유형에 공통인 구조의 봉투를 만들고, 한 체인을 위해 서명합니다.
  2. 서명된 바이트를 POST /api/v1/transactions로 제출합니다. HTTP 202는 노드가 트랜잭션을 풀에 받아들였다는 뜻이지, 블록에 들어갔다는 뜻이 아닙니다. 같은 바이트를 다시 보내도 안전합니다. 사본은 중복으로 표시됩니다.
  3. 노드들이 트랜잭션을 전달하고, 블록 생산자가 이를 포함합니다. 블록 하나는 최대 2,000개의 트랜잭션과 524,288바이트의 페이로드를 담으며, 계정마다 최대 하나의 트랜잭션만 담습니다(블록당 계정당 트랜잭션 하나, 그리고 배치 참조).
  4. GET /api/v1/transactions/<hash>/status가 진행 상황을 알려 줍니다. staging, mempool(대기 순번과 함께), confirmed(블록 높이와 함께), rejected(사유와 함께), not_found 중 하나입니다.

유효 기간 안에 어떤 블록에도 포함되지 않은 트랜잭션은 만료됩니다(만료와 타임스탬프 참조).

그 사이에 상태가 바뀌면

서명과 블록 포함 사이에, 다른 트랜잭션들이 이 트랜잭션이 의존하는 것을 바꿀 수 있습니다. 에스크로가 정산되거나, 제안을 다른 사람이 가져가거나, 토큰이 만료되는 경우입니다. 그런 트랜잭션은 수수료를 내는 무동작(no-op)이 됩니다. 블록에 포함되고, 수수료를 내며, 그 밖에는 아무것도 바꾸지 않습니다. 블록은 모든 노드에서 유효하게 남으므로, 누구도 곧 무의미해질 트랜잭션을 보내 체인을 멈추게 할 수 없습니다.

블록이 무효가 되는 것은 잘못된 서명, 하한보다 낮은 수수료(수수료 참조), 송신자의 잔액보다 큰 결제처럼 모든 노드가 똑같이 보는 결함이 있을 때뿐입니다.

이 분류의 문서

같이 보기

이 주제의 문서