Cashu 是采用盲签名的开放电子现金协议,常通过 Lightning Network 与 Bitcoin 配合使用。钱包持有特定铸币方发行的证明,并不拥有支配其比特币储备的签名权限。
Cashu 并不是一个统一的铸币方。代币标识发行方、单位及签名密钥集;相同的数字金额不代表相同的货币或债务。一家铸币方的代币不能自动在另一家兑付。V4 格式使用 CBOR,且只包含一家铸币方的证明。 [Cashu — NUT-00: Protocol and tokens] [Cashu — NUT-02: Keysets and fees] [Cashu — Project introduction]
基础协议在 secp256k1 上使用 BDHKE。钱包生成秘密并对其对应的点进行盲化,铸币方签名后,钱包再解除盲化。不同面额使用不同密钥:铸币方知道所发行证明的面额,但不应知道这些证明未来解除盲化后的形式。 [Cashu — NUT-00: Protocol and tokens]
普通的无条件代币可以被复制。收款人通过 swap 将其换成使用自身秘密的新证明,铸币方使旧输入失效。UNSPENT 只是某一时刻的状态,并非为收款人保留代币。PENDING 表示正在处理,SPENT 表示证明已被兑用。 [Cashu — NUT-03: Swap tokens] [Cashu — NUT-07: Token state check]
可选的 NUT-12 增加 DLEQ 证明,证明签名对应铸币方的公钥。收款人具备必要数据时,可以离线验证签名。但这无法判断代币是否已被他人花费、铸币方是否响应或是否有储备。因此,离线验证不能替代通过 swap 接收代币。 [Cashu — NUT-12: Offline signature validation]
NUT-02 区分 active=false 与可选的 final_expiry。非活跃密钥集不再发行新代币,但其证明仍可作为输入被接受;最终到期后,规范不再要求铸币方履行兑付义务。输入费用 input_fee_ppk 按证明数量及各自费率相加,再向上取整。 [Cashu — NUT-02: Keysets and fees]
在 melt 操作中,钱包提交证明以换取外部支付,通常通过 Lightning Network。报价规定金额、单位、有效期及可能的手续费预留,还可能收取输入费用。HTTP 200 且状态为 PENDING 并不表示支付已确认。必须区分最终结果与请求被接受。 [Cashu — NUT-05: Melting tokens]
盲化不能消除金额、时间或网络连接信息。NUT-03 建议对请求的面额排序,以免顺序泄露支付与找零的划分。付款人查询已转移证明的状态,可能帮助铸币方关联付款人与收款人。 [Cashu — NUT-03: Swap tokens] [Cashu — NUT-07: Token state check]
NUT-13 根据密钥集和计数器,从 seed 派生秘密与盲化因子。版本 01 使用 HMAC-SHA256,旧版 00 使用 BIP32。恢复需要原始密钥集及通过 NUT-09 取得的签名,然后检查花费状态。没有铸币方配合,seed 既不能保证恢复签名,也不能保证提取储备。 [Cashu — NUT-13: Deterministic secrets] [Cashu — NUT-09: Restore signatures]
要获得更完整的理解,请将本词条与以下词条结合阅读: Fedimint, 乔姆式电子现金, 盲签名, Lightning Network, 交易对手风险, Satoshi. 反向关联还来自: 乔姆式电子现金, 盲签名, Fedimint, Fiduciary Media.