什么是 ZCash Names?
简介
ZCash Names 是一个运行在链上、基于私密备注(memo)的 ZCash 命名协议。它让你注册像 richard.zcash 这样便于阅读的名称,并把它们映射到 ZCash 地址。每一次注册的正确性都由零知识证明(Zero-Knowledge Proof)来保证。
问题
ZCash 地址太长了。它们长这样:
u1zk30kje24v9n08lxq6ja9lfd8q3q54g7uawra7hwa05k4r56nkzzu62cy2apdungu4ehws95vjflw2lakt62j5wynwcje6t6yjcg9v5sp7r7048lgsprukv8r70pmpsk4tsqrqy58aglywh23grvs7kq75zk4c3zy57267u34vecm35yuexkrsmzphcu2dzph4r8rk0h0rlh5su7yhs
解决方案
只需发送一笔 ZCash 交易即可注册名称。索引器监听区块链,校验每一次注册,并构建名称登记簿。随后,零知识证明生成器会产出一份数学证明,表明每一次注册都是正确的。
任何人都可以解析 richard.zcash 取得 Richard 的地址。任何人都可以验证证明。无需信任。
名称规则
| 规则 | 取值 |
|---|---|
| 允许的字符 | a-z、0-9、连字符 |
| 长度 | 1 - 64 个字符 |
| 大小写 | 不区分(以小写存储) |
| 连字符 | 不能位于开头、结尾,也不能连续出现 |
| 顶级区域 | .zcash, .zec, .private, .secure, .safe |
注册费用
参见名称注册
| 名称长度 | 费用 |
|---|---|
| 1 个字符 | 5.5 ZEC |
| 2 个字符 | 4 ZEC |
| 3 个字符 | 2.45 ZEC |
| 4 个字符 | 1.2 ZEC |
| 5 个字符 | 0.65 ZEC |
| 6 个字符 | 0.35 ZEC |
| 7+ 个字符 | 0.15 ZEC |
变更费用
| 名称长度 | 费用 |
|---|---|
| 1 个字符 | 0.006 ZEC |
| 2 个字符 | 0.004 ZEC |
| 3 个字符 | 0.002 ZEC |
| 4 个字符 | 0.0011 ZEC |
| 5 个字符 | 0.0008 ZEC |
| 6 个字符 | 0.0005 ZEC |
| 7+ 个字符 | 0.00025 ZEC |
注册方
注册方的协议地址、查看密钥以及锚定合约三者都是公开的。这是有意为之:查看密钥让任何人无需申请许可即可 审计该服务,而合约则是他们用来比对自己计算结果的依据。
协议地址 — 所有命令都发送到这里:
u1nlded5cat3n9r4m0tpxr5a7sy3emccvaun7n4x9w848qa7ncl4eg5v2zyat4kevaa4fwfq0unwj3vnczfax3s9rutma43dckgqss8qrg
查看密钥 — 可解密该地址曾经收到的一切:
uview1uxy3j27qhwkh8peq8k6g0vldalgqm4lyfxwuc2r95jelk458gmx6elc4e92t9g75x655vd7nxrtv3gllvajt3n8v0x36224ma3hrtvvtps7ejxysx8puelggt86vfuslxvdvjq7a778chqtcg626lcsr0ht26v3wgyfu5u04sn2qsle9k7faakg479tqf
锚定合约 — 每一个状态根都发布于此,位于 BNB Smart Chain(chain ID 56):
0x6c01003716b0a74933325be1baf34fe34cf3e0d3
重放历史必须从一个已知的起点开始,因此链条的两端也都被钉住了。以下就是独立索引器启程时所用的检查点:
| 检查点 | 取值 |
|---|---|
| ZCash 起始区块 | 3438108 — 协议钱包的诞生高度;在它之前不可能存在任何服务交易 |
| 初始状态根 | 0x0000…0000 — 32 个零字节,空登记簿的根 |
| 合约部署区块 | 114326974 |
| 部署交易 | 0x9a4b9a22…e6a5bd6c |
初始根之所以全是零,是因为在紧凑稀疏默克尔树中,空子树在任何高度都是 32 个零字节:空登记簿哈希出来
就是零,而合约正是以这个值部署的。任何人从区块 3438108 开始重放,都会得到相同的初始状态,无需别人
告知。
有了这些数值,你可以从起始区块扫描 ZCash,解密该服务收到过的每一条命令和每一笔付款,通过
开源索引器重放它们,自己计算出状态根,并用
isRootValid(bytes32) 与合约比对——参见验证证明。若注册方曾经审查、
重排或凭空捏造过某个操作,你算出的根就会与链上的不一致。
索引器自带解析 API,因此你永远不必依赖某个公共端点——包括我们的在内。