트리거와 증언
트리거는 체인이 보관하는 조건부 결제입니다. 지금 ZBC를 잠그고, 나중에 조건이 충족되면 수신자에게 풀어 줍니다. 조건은 블록 높이이거나, 경기 결과처럼 등록 노드들이 증언으로 확인하는 외부 세계의 이벤트입니다. 트리거를 쓰면 컨트랙트 코드 없이 타임 록, 지연된 선물, 현실 세계의 결과에 따른 지급을 만들 수 있습니다.
트리거 만들기
CreateTrigger 트랜잭션(유형 15)은 수신자, 금액, 조건을 명시합니다. 트리거는 ZBC만 담습니다. 조건에는 두 종류가 있습니다.
- 높이 트리거는 블록 높이를 지정하며, 그 높이는 미래여야 합니다. 블록은 15초마다 나오므로 높이는 날짜처럼 쓰입니다. 하루 뒤는 5,760블록입니다.
- 이벤트 트리거는 이벤트 id를 지정하며, 등록 노드들이 그 이벤트를 확정하면 발동합니다. 그때까지, 또는 취소될 때까지 대기 상태로 남습니다. 발동 높이도 담지만, 이 값은 쓰이지 않습니다.
금액은 즉시 생성자의 잔액에서 빠져나가 잠깁니다. 트리거가 발동하기 전까지 생성자는 CancelTrigger(유형 16)로 돈을 되찾을 수 있습니다. 트리거는 한 번 지급합니다. 스크립트를 실행하지 않으며, 반복하지도 않습니다.
증언: 이벤트가 확정되는 방식
블록체인은 스스로 외부 세계를 읽을 수 없습니다. 모든 노드가 웹 페이지를 가져온다면 서로 다른 답을 보고 의견이 갈릴 수 있습니다. 그래서 ZooBC는 대신 증언을 사용합니다.
- 등록 노드가 이벤트 id와 값을 담은 AttestEvent(유형 17)를 보냅니다. 각각 최대 4,096바이트입니다.
- 각 노드는 이벤트마다 한 표를 가지며, 새 증언이 이전 증언을 대체합니다. 등록 노드의 증언만 집계됩니다.
- 매 블록이 끝날 때 체인은 확정되지 않은 각 이벤트의 증언을 집계합니다. 활성 레지스트리의 3분의 2가 정확히 같은 값을 증언하면(예를 들어 좌석 11개 중 8개), 그 값이 영구히 이벤트의 결과가 됩니다.
- 바로 그 블록에서, 그 이벤트를 지정한 대기 중인 모든 트리거가 수신자에게 지급합니다.
증언은 수수료 없는 의무입니다. 수수료를 정확히 0으로 선언하며 노드 자신의 계정에서 나옵니다(수수료 참조). 레지스트리의 좌석 수와 서로 다른 소유자 수가 하한 max(3, min_registry_size), 즉 mainnet에서 7보다 적은 동안에는 레지스트리 전체의 어떤 결정도 확정되지 않습니다(3분의 2 규칙 참조).
예약된 이벤트 id
같은 증언이 이벤트 id의 예약된 접두사 아래에서 다른 네트워크 결정도 전달합니다. 각각은 트리거 단계가 아니라 자기 고유의 단계로 확정됩니다.
| 접두사 | 용도 |
|---|---|
ZBRDEP1: | 브리지 입금(브리지와 래핑된 코인 참조) |
ZBWDR1: | 브리지 출금 |
ZBCGOV1: | 거버넌스 |
ZBCREL1: | 릴리스 투표(릴리스와 업데이트 참조) |
다른 기능과 함께
- 트리거의 지급은 들어오는 입금이므로 수신자의 분배 정책을 거칩니다(분배 정책과 거래 정책 참조).
- 수신자의 거래 정책은 CreateTrigger 자체에 대해서만 검사합니다. 수신자가 나중에 결제를 받지 않기로 하더라도 지급은 그대로 도착합니다.
- 거래 정책에서 AttestEvent는 Bridge 범주에 속합니다.
반복되는 결제는 예약 이체를, 1분 단위로 귀속되는 돈은 리퀴드 페이먼트 (스트림)을 참조하십시오.