ZooBC 维基
数据与存储

付费保存数据(存续)

ZooBC 节点会修剪旧历史,因此一笔普通交易在 mainnet 节点上保留 30 到 60 天(历史修剪)。存续记录让一笔选定的交易及其所在区块保存在每个节点上,只要记录中还有资金就一直保存。付款证明、文档的哈希或截止期限很远的托管,都是靠它在任何节点上保持可读的。

开启记录

开启记录有两种方式。

  • survival 字段。 版本 2 或版本 3 的交易带有一个 survival 字段:发送者自己的押金,要么为 0,要么至少 0.1 ZBC(10,000,000 个原子单位)。在这里存入押金,就会为同一笔交易开启一条记录(交易信封)。
  • FundLongevity(类型 52)。任何账户都可以为任何交易出资。其交易体恰好 28 字节:目标交易的 id(8 字节)、金额(8)、包含目标交易的区块的高度(4)和目标交易的大小(8),即其交易体加上消息。金额必须至少为 0.1 ZBC。

首次出资必须在目标交易的存在时间短于一个快照间隔(mainnet 上为 172,800 个区块,约 30 天)时到达,并且必须写明目标交易真实的高度和大小。这个窗口保证每个节点仍持有目标交易,能够核对所声明的内容。迟到或有误的首次出资是付费空操作:手续费被扣下,什么也没有出资。

之后的追加出资必须写明相同的大小,可以在记录存续期间的任何时候进行。它的价格以加权平均的方式并入记录的价格。

FundLongevity 的 28 字节交易体、首次出资窗口和两个免费间隔。
FundLongevity 的 28 字节交易体、首次出资窗口和两个免费间隔。

费用

记录开启时,会锁定目标交易的大小和每 MiB 的存储价格(起始为 0.05 ZBC)。在目标交易所在区块之后的两个快照间隔内,它不支付任何费用,因为节点本来就会把交易保存那么久。此后,每个周期一次:

rent = ceil(payload bytes × locked price ÷ 1,048,576), at least 1 unit

租金从押金中扣取,记入长效池,长效池通过 coinbase 抽奖 在每个区块中向节点支付一部分。按起始价格,16 字节的载荷每个周期支付 77 个单位,1,000 字节的载荷支付 4,769 个单位,因此对较大的那个来说,0.1 ZBC 的最低押金足以支付 2,000 多个周期。当记录的资金归零时,记录被释放,其交易又可以被修剪。

快照携带有资金支持的交易以及包含它们的区块的区块头,因此从快照加入的节点同样持有它们(快照与快速同步)。

结束记录

租金按先进先出的顺序从付款者的资金中扣取:最早的押金用完之后才会动用下一笔。只要还有人在付款,记录就会一直存续。

要提前结束记录,每一个资金尚未用完的付款者都要发送一笔普通的 CloseLongevity(类型 309)进行投票。当其中最后一位也投票后,记录关闭,其余额进入长效池。

  • 追加出资会撤回该付款者的投票,新的付款者也必须投票。
  • 丢失密钥的付款者只会让记录一直存续,直到其资金用完。
  • 当计费用完最后一位尚未投票的付款者的资金时,记录在该计费区块关闭。

付入记录的资金不会退还给任何付款者,因此没有人能拿走其他人的押金。CancelLongevity 类型(53)已被废弃:每条链都拒绝它。任何外部方,包括 ZooBC Foundation,都无法关闭记录。

付款者的押金从最早的开始使用;一旦每个仍有剩余资金的付款者都已投票,记录就关闭。
付款者的押金从最早的开始使用;一旦每个仍有剩余资金的付款者都已投票,记录就关闭。

读取记录

节点 API 提供了查询记录和价格的路由:/longevity、/longevity/quote、/accounts/<address>/survival、/accounts/<address>/objects 和 /objects/<id>。

另见