트랜잭션
트랜잭션은 체인에 보내는 서명된 지시입니다. 누군가에게 지불하기, 토큰 발행하기, 주문 내기, 주소를 그룹에 연결하기 같은 것입니다. ZooBC에는 사용자 코드를 위한 가상 머신이 없습니다. 모든 기능은 모든 노드가 정확히 같은 방식으로 적용하는 고정 규칙을 가진 내장 트랜잭션 유형이므로, 지갑은 서명하기 전에 트랜잭션이 할 수 있는 모든 일과 그 최소 수수료를 알 수 있습니다.
내장 유형
버전 0.5.8부터 ZooBC는 유형 0을 포함해 73개의 트랜잭션 유형 번호를 열두 개의 계열로 정의합니다.
유형 번호는 그룹에 256 곱하기 하위 유형을 더한 값이므로, 번호는 띄엄띄엄 있습니다. 2는 NodeRegistration이고, 258(그룹 2, 하위 유형 1)은 그 갱신입니다. 체인이 정의하지 않은 번호는 거부되며, 정의된 모든 유형은 블록 1부터 받아들여집니다.
두 번호는 특별합니다. 유형 0인 Empty는 아무것도 옮기지 않습니다. 메시지를 담기 위해 존재하며, 그래도 0보다 큰 수수료를 내야 하고, 체인이 송신자마다 유지하는 카운터인 송신자의 논스를 올리지 않습니다. 유형 53인 CancelLongevity는 폐지되었습니다. 모든 체인이 이를 거부하며, 대신 CloseLongevity(309)를 씁니다.
트랜잭션의 일생
- 지갑이 모든 유형에 공통인 구조의 봉투를 만들고, 한 체인을 위해 서명합니다.
- 서명된 바이트를
POST /api/v1/transactions로 제출합니다. HTTP 202는 노드가 트랜잭션을 풀에 받아들였다는 뜻이지, 블록에 들어갔다는 뜻이 아닙니다. 같은 바이트를 다시 보내도 안전합니다. 사본은 중복으로 표시됩니다. - 노드들이 트랜잭션을 전달하고, 블록 생산자가 이를 포함합니다. 블록 하나는 최대 2,000개의 트랜잭션과 524,288바이트의 페이로드를 담으며, 계정마다 최대 하나의 트랜잭션만 담습니다(블록당 계정당 트랜잭션 하나, 그리고 배치 참조).
GET /api/v1/transactions/<hash>/status가 진행 상황을 알려 줍니다. staging, mempool(대기 순번과 함께), confirmed(블록 높이와 함께), rejected(사유와 함께), not_found 중 하나입니다.
유효 기간 안에 어떤 블록에도 포함되지 않은 트랜잭션은 만료됩니다(만료와 타임스탬프 참조).
그 사이에 상태가 바뀌면
서명과 블록 포함 사이에, 다른 트랜잭션들이 이 트랜잭션이 의존하는 것을 바꿀 수 있습니다. 에스크로가 정산되거나, 제안을 다른 사람이 가져가거나, 토큰이 만료되는 경우입니다. 그런 트랜잭션은 수수료를 내는 무동작(no-op)이 됩니다. 블록에 포함되고, 수수료를 내며, 그 밖에는 아무것도 바꾸지 않습니다. 블록은 모든 노드에서 유효하게 남으므로, 누구도 곧 무의미해질 트랜잭션을 보내 체인을 멈추게 할 수 없습니다.
블록이 무효가 되는 것은 잘못된 서명, 하한보다 낮은 수수료(수수료 참조), 송신자의 잔액보다 큰 결제처럼 모든 노드가 똑같이 보는 결함이 있을 때뿐입니다.
이 분류의 문서
- 트랜잭션 봉투: 모든 트랜잭션이 담는 필드와 수수료
- 트랜잭션 서명: 체인 결속 다이제스트와 서명할 수 있는 키 유형
- 만료와 타임스탬프: 서명된 트랜잭션이 얼마나 오래 유효한지
- 블록당 계정당 트랜잭션 하나, 그리고 배치: 블록당 계정당 트랜잭션 하나, 그리고 배치
- 에스크로: 승인자가 결정할 때까지 체인이 보관하는 결제
- 다중서명: 여러 서명이 있어야만 지출하는 계정
- 리퀴드 페이먼트 (스트림): 몇 분에 걸쳐 수신자에게 흘러가는 돈
- 예약 이체: 한 번 서명하는 일련의 결제
- 트리거와 증언: 특정 높이에서나 이벤트 뒤에 풀리는 돈
- 계정 그룹: 하나의 계정을 공유하는 여러 주소
같이 보기
이 주제의 문서
- 계정 그룹
ZooBC 계정 그룹이 어떤 키 유형이든 여러 주소가 하나의 잔액을 공유하게 하고, 컨트롤러가 각 구성원의 지출 한도를 정하게 하는 방식을 설명합니다. - 다중서명
ZooBC 다중서명 계정이 정해진 수의 참여자가 서명했을 때만 지출하는 방식을, 참여자들이 서로 다른 체인의 키를 쓰는 경우까지 포함해 설명합니다. - 리퀴드 페이먼트 (스트림)
ZooBC 리퀴드 페이먼트가 ZBC나 토큰을 몇 분에 걸쳐 수신자에게 흘려보내는 방식과, 어느 쪽이든 공정한 분할로 이를 중지하는 방법을 설명합니다. - 만료와 타임스탬프
모든 ZooBC 트랜잭션이 자기 시각을 담는 이유, 트랜잭션이 얼마나 오래 유효한지(기본 1시간, 최대 하루), 그리고 블록과 정산이 시간을 쓰는 방식을 설명합니다. - 블록당 계정당 트랜잭션 하나, 그리고 배치
ZooBC 블록이 각 계정의 트랜잭션을 하나만 담을 수 있는 이유와, 배치를 통해 한 계정이 트랜잭션 하나로 여러 결제나 전송을 하는 방법을 설명합니다. - 에스크로
ZooBC 결제를 지정된 승인자가 결정할 때까지 체인이 보관하는 방식, 가능한 네 가지 결말, 그 비용, 그리고 지급받을 사람이 발행하는 에스크로 요청을 설명합니다. - 예약 이체
ZooBC의 ScheduledTransfer 하나로 ZBC나 토큰의 일련의 결제를 설정하는 방식(미리 잠그거나 기한에 가져가는 방식)과, 이를 취소하거나 다른 곳으로 돌리는 방법을 설명합니다. - 트랜잭션 봉투
모든 ZooBC 트랜잭션이 순서대로 담는 필드, 각 필드의 내용, 그리고 가스 한도나 체인 id처럼 의도적으로 빠진 것을 설명합니다. - 트랜잭션 서명
ZooBC 서명이 무엇을 포함하는지, 트랜잭션의 해시와 id가 어떻게 도출되는지, 어떤 키 유형이 서명할 수 있는지, 그리고 외부 지갑이 자기 체인의 트랜잭션에 서명하는 방법을 설명합니다. - 트리거와 증언
ZooBC 트리거가 미래의 블록 높이나 외부 세계의 이벤트까지 ZBC를 잠가 두는 방식과, 등록 노드들이 증언으로 이벤트를 확정하는 방식을 설명합니다.