快递驿站每次取件码都不一样,即便还是同一个收件人,系统也不会告诉你"这两次是同一个人取的"
前阵子帮邻居代取快递,发现驿站系统有意思——同一个人两次取件,取件码完全不同,店员扫码也只看得到"这次要取的是谁的",看不出这个人上次是不是也来过。后来翻Dusk的Phoenix交易模型才发现,这套"每次都换新码、外人连不起来"的逻辑,链上也在用,而且用得更极致。
Phoenix这边,每笔转账收款方拿到的不是固定地址,而是一个一次性的"note public key"(记为npk)。发送方用接收方的长期公钥,加上一个随机数,算出这个一次性npk;接收方靠自己的view key去逐笔检测,能算出npk就说明这笔是发给自己的。关键在于——这个npk每次都不一样,即使同一个人收了十笔钱,外人扫链上数据,也看不出这十笔是不是同一个收款人,因为压根没有重复出现的固定地址可以对上号。
这套设计要解决的是"unlinkability"(不可关联性)——防的不是"你收了钱这件事"被看见,防的是"你这十笔钱都是同一个你"这个关联关系被拼出来。而且它还支持委托——用户可以把view key单独给第三方,让对方帮忙扫描哪些交易是自己的,但拿不到花钱的权限,这个拆分挺细。
一次性地址听着安全,但也意味着每笔交易的检测计算量比固定地址模型更大,规模上来之后,这个扫描效率能不能扛住,还得看实际数据。
$DUSK
#dusk @Dusk