데이터 보관 비용 (롱제비티)
ZooBC 노드는 오래된 이력을 정리하므로, 일반 트랜잭션은 mainnet 노드에 30~60일 동안 남습니다(이력 정리). 롱제비티 기록은 선택한 트랜잭션 하나와 그것이 든 블록을, 기록에 돈이 남아 있는 동안 모든 노드에 보관합니다. 결제 증명, 문서의 해시, 먼 기한을 가진 에스크로가 어느 노드에서든 계속 읽힐 수 있게 하는 방법입니다.
기록 열기
기록을 여는 방법은 두 가지입니다.
- 생존 필드. 버전 2나 3의 트랜잭션은 생존 필드를 담습니다. 이는 송신자 자신의 예치금으로, 0이거나 최소 0.1 ZBC(10,000,000 원자 단위)입니다. 여기에 예치금을 넣으면 바로 그 트랜잭션에 대한 기록이 열립니다(트랜잭션 봉투).
- FundLongevity(유형 52). 어떤 계정이든 어떤 트랜잭션에든 자금을 낼 수 있습니다. 본문은 정확히 28바이트입니다. 대상 트랜잭션의 id(8바이트), 금액(8), 대상을 담은 블록의 높이(4), 대상의 크기(8, 본문과 메시지)입니다. 금액은 최소 0.1 ZBC여야 합니다.
첫 자금은 대상이 스냅샷 간격 하나, 즉 mainnet에서 172,800블록(약 30일)보다 젊을 때 도착해야 하며, 대상의 실제 높이와 크기를 명시해야 합니다. 이 기간 동안에는 모든 노드가 아직 대상을 가지고 있어 주장을 검사할 수 있습니다. 늦거나 잘못된 첫 자금은 수수료를 내는 무동작입니다. 수수료는 가져가고 아무것도 적립되지 않습니다.
이후의 추가 납부는 같은 크기를 명시해야 하며, 기록이 살아 있는 동안 언제든 할 수 있습니다. 그 가격은 가중 평균으로 기록의 가격에 섞입니다.
비용
기록이 열리면 대상의 크기와 MiB당 저장 가격(시작 시 0.05 ZBC)이 고정됩니다. 노드들은 어차피 대상 블록 이후 스냅샷 간격 두 개 동안 트랜잭션을 보관하므로, 그때까지 기록은 아무것도 내지 않습니다. 그 뒤로는 기간마다 한 번 다음을 냅니다.
rent = ceil(payload bytes × locked price ÷ 1,048,576), at least 1 unit
임대료는 예치금에서 가져가 롱제비티 풀에 입금되며, 롱제비티 풀은 코인베이스 추첨을 통해 매 블록 노드들에게 한 조각씩 지급합니다. 시작 가격에서 16바이트 페이로드는 기간당 77단위, 1,000바이트 페이로드는 4,769단위를 내므로, 더 큰 쪽이라도 최소 예치금 0.1 ZBC로 2,000개가 넘는 기간을 감당합니다. 기록의 돈이 0이 되면 기록은 풀리고, 그 트랜잭션은 다시 정리될 수 있습니다.
스냅샷은 자금이 적립된 트랜잭션을 그것을 담은 블록의 헤더와 함께 담으므로, 스냅샷에서 합류한 노드도 이를 보관합니다(스냅샷과 빠른 동기화).
기록 끝내기
임대료는 납부자들의 돈에서 선입선출로 빠져나갑니다. 가장 오래된 예치금을 다 쓴 뒤에 다음 것에 손을 댑니다. 기록은 누군가 여전히 비용을 내는 한 유지됩니다.
기록을 일찍 끝내려면, 돈이 아직 남아 있는 모든 납부자가 일반 CloseLongevity(유형 309)로 투표합니다. 그중 마지막 사람이 투표하면 기록이 닫히고 나머지는 롱제비티 풀로 갑니다.
- 추가 납부를 하면 그 납부자의 투표는 철회되며, 새 납부자도 투표해야 합니다.
- 키를 잃어버린 납부자는 그저 자기 돈이 떨어질 때까지 기록을 유지시킵니다.
- 과금으로 아직 투표하지 않은 마지막 납부자의 돈이 다 쓰이면, 기록은 그 과금 블록에서 닫힙니다.
기록에 낸 것은 어떤 납부자에게도 돌아오지 않으므로, 누구도 다른 사람의 예치금을 가져갈 수 없습니다. CancelLongevity 유형(53)은 폐지되었으며, 모든 체인이 이를 거부합니다. ZooBC Foundation을 포함한 어떤 외부 당사자도 기록을 닫을 수 없습니다.
기록 조회
노드 API에는 기록과 가격을 위한 경로가 있습니다. /longevity, /longevity/quote, /accounts/<address>/survival, /accounts/<address>/objects, /objects/<id>입니다.