发送原理
关于发送 BTCZ,有两件事常常让人感到意外:一笔微小的付款可能比一笔巨额付款花更长时间,而且随着时间推移,您的余额会悄悄分裂成许多小碎片。这两点都归结于一个关于隐私钱包实际存储资金的基本概念。
核心概念
您的余额不是一个单一数字,而是由一叠独立的硬币组成,称为 票据。发送速度取决于您花费多少张 票据,而非它们的价值大小,因为每张票据都必须附带其自身的零知识证明。这一事实解释了为何"发送全部"速度较慢,为何数百万 BTCZ 可以在数秒内转账,以及为何 Z-Text 将您的资金分散存储在许多小票据中。
您的余额由一叠票据组成
当您打开钱包时,您看到的是一个余额数字。在这背后,该余额由许多独立的硬币组成。在像 Z-Text 这样的隐蔽钱包中,这些硬币被称为 票据(技术名称为未花费交易输出,即 UTXO)。每张票据具有固定价值,您的余额就是所有票据的总和。
关键规则:您花费的是完整的票据,而非其中一部分。这就像现金一样。如果您持有一枚价值 10 的硬币,而您想支付 2,您无法将硬币撕成两半。您需要递出整枚硬币并取回找零。
花费与找零
由于您花费的是完整票据,几乎每次发送都会产生找零。假设您花费一张价值 0.01 BTCZ 的票据以发送 0.0002。网络收取少量费用(0.0001 BTCZ),收款方收到其金额,余下部分以全新票据的形式返还给您。您花费的那张票据已消失;取而代之的是一张新的找零票据。
这就是为何随着您使用钱包,票据价值不断变化。这也是为何新创建的找零票据需要片刻时间确认后才能再次花费,而这比您预想的更为重要(见下文)。
为何速度取决于票据数量而非金额
这是最容易让人困惑的部分。要私密地花费一张票据,您的手机必须为其构建一个零知识证明:一个小型密码学证明,证明您拥有该票据并有权花费它,同时不会透露它是哪张票据。在手机上构建一个证明大约需要一到三秒。
关键在于,每张花费的票据对应一个证明。花费 1 张票据的交易需要 1 个证明。花费 50 张票据的交易需要 50 个证明。金额大小完全无关紧要;重要的只是票据的数量。
经验法则
发送速度取决于您花费多少张票据,而非您发送多少 BTCZ。
| 发送内容 | 花费票据数 | 证明数 | 速度 |
|---|---|---|---|
| 5,000,000 BTCZ 存于一张票据中 | 1 | 1 | 数秒 |
| 1 BTCZ 分散于100 张票据中 | 许多 | 许多 | 数十秒至数分钟 |
| 全额发送(全部余额) | 您拥有的每张票据 | 全部 | 最慢,分批发送 |
实例演示
发送一条消息
发送一条消息只花费一张小票据。Z-Text 保存约 0.0002 BTCZ 的票据正是为此:足以覆盖发送给联系人的 0.0001 加上 0.0001 的网络费。一张票据,一个证明,几秒钟即可完成。在双向对话中,您发送的 0.0001 会在联系人回复时返还给您,因此聊天的实际费用接近于仅支付网络费。
一张票据中的 5,000,000 BTCZ 与一百张票据中的 1 BTCZ
如果您的五百万 BTCZ 恰好存于一张票据中,发送它们只需一个证明,几秒钟即可完成。相反,如果您持有 1 BTCZ 分散在一百张小票据中,花费其中大部分意味着需要为数十张票据生成证明,耗时远更长,尽管金额小了数百万倍。数量,而非金额。
发送全部
"全额发送"是您能要求钱包执行的最慢操作,因为它必须花费您拥有的每一张票据。生成的证明数量如此之多,甚至无法装入一笔交易,因此钱包会通过多笔连续交易发送您的余额(每笔最多约 50 张票据),在处理每批次证明时暂停,在手机上每批次大约需要一到两分钟。拥有 200 张票据的钱包将产生约四笔连续交易。这是最有力的证明:成本跟踪的是票据的数量,而非金额。
为何 Z-Text 拆分您的资金
如果许多票据会使发送变慢,为何 Z-Text 故意将您的资金拆分成许多小票据?因为消息通讯面临的是相反的问题。您发送的每条消息花费一张票据。如果您的全部余额都存于一张票据中,您每次只能发送一条消息:每次发送后,您必须等待找零确认才能发送下一条。
拥有大量小票据的票据池后,每条消息只需抓取一张不同的就绪票据,您就可以连续发送许多消息而无需等待。一张票据意味着每次只能发送一条消息;一百张票据意味着一百条消息可同时进行。
等待陷阱
如果您在第一条消息的找零尚未确认时尝试发送第二条消息,发送将失败,因为您唯一可花费的票据刚刚被使用。一个健康的已确认票据池才是让快速消息通讯感觉即时的关键。一次确认大约需要一个区块,约两分半钟。
因此,Z-Text 在单笔交易中将一张大票据拆分为许多约 0.0002 BTCZ 的小票据(一张票据变为一百张,只需一笔小额费用),新授权到达时已附带现成的票据池,让您立即开始聊天。
保持您的票据池健康
您无需手动管理这些。钱包会监测您的票据数量并显示其健康状况:舒适的票据池约有五十张或更多票据,当数量不足时会给出提示。接收消息也能补充您的票据,因为您收到的每条消息都会将一张票据返还给您,因此活跃的对话自然会补充您的票据池。
如果您想手动补充,例如在发送大量消息之前,可以在 设置 → 票据管理中一键将余额拆分为新鲜票据。这是一笔只需一次费用的单笔交易。
词汇表
| 术语 | 含义 |
|---|---|
| 票据 | 固定价值的单张隐蔽硬币。您的余额是所有票据的总和。 |
| UTXO | "未花费交易输出" — 票据的技术名称。 |
| 找零 | 花费票据后剩余的价值,以新票据形式返还给您。 |
| 粉尘 | 极小的金额,例如附在消息中的 0.0001 BTCZ。 |
| 网络费 | 区块链处理交易收取的少量费用(0.0001 BTCZ)。 |
| zk-SNARK 证明 | 为每张花费票据构建的零知识证明。它使发送保持私密,也是耗时所在。 |
| 确认 | 一张票据在其交易被纳入区块后变得可靠可花费,大约每 2.5 分钟一次。 |
常见问题
为何全额发送耗时如此之长?
它花费您拥有的每一张票据,每张票据都需要其自身的证明。当票据数量较多时,钱包必须以多批次顺序发送您的余额,为每批次构建证明。它正在运行,并非卡住了。
为何小额付款有时比大额付款更慢?
因为速度取决于付款使用多少张票据,而非金额。一笔需要汇集许多小票据的小额付款可能比使用单张大票据的大额付款更慢。
为何我的余额分裂成许多小额?
这是有意为之。小票据池让您无需等待找零确认即可快速发送许多消息。
余额拆分时我是否丢失了硬币?
没有。拆分只需一笔小额网络费。消息附带的粉尘会在双向对话中返还给您。
我的发送已运行了一段时间。是出了什么问题吗?
通常没有。花费许多票据的发送操作只需要时间来构建所有证明。几乎总是证明生成的问题,而非网络或余额问题。