门罗币是如何运作的?
全貌:一本什么都读不出来、却什么都能验证的公开账本
门罗币和比特币一样是电子货币:一本由数千台计算机共同维护的公共账本(区块链),中间没有银行。区别在于,门罗币的账本不会显示谁发送、谁接收、金额多少。尽管如此,每个参与者仍能验证没有人凭空印钱,也没有人把同一枚币花了两次。
问题所在:区块链是一个玻璃钱包
比特币的区块链是一张公开的表格。任何人都可以打开区块链浏览器,看到 0.3 BTC 从地址 bc1q…a7 转到了地址 bc1q…f2。这里没有名字,但一旦某个地址与某个人对应起来(向交易所付款、给朋友转账、在网上公布的捐赠地址),他的整个历史就一览无余:拥有多少钱、付款给谁、谁给他付款。
门罗币确保这三样东西都无法从账本中读出。每一样都有各自的技术。
1. 谁收到的?——一次性地址
你有一个公开的地址(一长串以 4 开头的字符)。但它从不出现在区块链上。发送方拿到你的地址,混入一个随机数,计算出一个全新的一次性地址。钱就发到那里。
外人看到的是数以百万计的一次性地址,无法判断哪些属于同一个人。而你的钱包使用秘密的查看私钥扫描每一笔新交易,认出“属于自己的”。
想象一个邮箱,每来一封信就长出一个带新编号的新投信口。只有你知道,所有这些投信口都通向你的邮箱。
2. 金额多少?——隐藏的金额
区块链上存储的不是金额,而是一个承诺——一个把金额“锁”在里面的数。你无法从承诺得知金额,但承诺有一个神奇的性质:它们可以相加。网络把输入和输出的承诺加起来,检查收支是否平衡——而不需要知道任何一个金额。
还剩一个漏洞:如果有人写入负数金额怎么办?“−100 + 101 = 1”同样是平衡的,钱就凭空出现了。因此,每个输出都附带一个范围证明(Bulletproofs+):一个简短的证明,表明隐藏的数不是负数,也不是一个巨大的数。
3. 谁发送的?——环(以及即将到来的整条区块链)
花费一枚币时,你必须证明它是你的。在比特币中,这是一个直接指向被花费输出的签名。如今的门罗币使用环签名:你取出自己的输出,再从区块链上随机取 15 个他人的输出(诱饵),然后以一种方式签名,让验证者相信“这 16 个之一的主人签了名”——却不透露是哪一个。
那么如何防止同一枚币被花两次呢?每个输出在被花费时都会留下一个独一无二的“指纹”——key image(密钥镜像)。网络保存所有 key image,并拒绝 key image 已出现过的交易。从 key image 看不出花费的是 16 个输出中的哪一个,但你无法再花第二次。
16 个成员的环是一种折中:环越大,隐私越好,但交易也越重、越慢。这种折中存在已知的弱点。这就是为什么门罗币正准备切换到 FCMP++:真实输入不再只是 16 个候选之一,而可能是整条区块链上的任何一个输出——超过一亿种可能。
合在一起:RingCT
“环签名 + 隐藏金额 + 一次性地址”的组合被称为 RingCT(Ring Confidential Transactions,环机密交易)。自 2017 年起,它是每一笔门罗币交易的强制要求。门罗币的隐私不是一个你可能忘记打开的选项:所有交易看起来都一样,因此你的交易隐藏在所有其他人的交易之中。
其他方面和比特币一样
在隐私层之下,门罗币是一种普通的加密货币:
- 区块链——由区块组成的链,大约每 2 分钟产生一个新区块。
- 挖矿——使用 RandomX 的工作量证明,专为普通 CPU 设计。
- 发行——主发行已于 2022 年结束;现在每个区块永久产出 0.6 XMR(尾部发行)。
- 节点——任何人都可以运行
monerod,自己检查每一条规则。
接下来读什么
- 为什么需要隐私?——关于货币的可替代性。
- 通俗讲解 RingCT 与 FCMP++——如果你正是为此而来。
- Ed25519 曲线——技术部分的起点。