Relayer 通过 HTTP 接收你的 Groth16 证明和收款地址,用自己的密钥对签名并广播取款交易,并由它来支付 SOL gas。作为回报,链上程序会从取款金额中扣除一小笔固定费用(每个收款人 0.003 SOL)转给它。
这解决了"自举"问题。一个真正全新的收款钱包初始 SOL 为 0。如果没有 relayer,用户就必须从原本的钱包给新钱包打一点 SOL "做油费"——而这恰恰在链上把两个地址直接关联起来,把使用 SolMask 的初衷彻底抵消。Relayer 之所以能切断这个关联,正是因为这笔 gas 是由它出。
我们只在 liveness 层面信任 relayer,而不依赖它来保障隐私。它确实能看到你的证明和收款地址(否则无法把交易递出去),却始终不知道你的证明动用的是哪一笔存款,也无法在不审查所有取款的前提下专门审查某一张票据。不想信任托管 relayer 的用户可以自己运行一个——self-relay 流程使用同一条指令,只是把用户自己的钱包设为手续费收款方。