Cashu é um protocolo aberto de e-cash: tokens digitais emitidos por uma entidade chamada mint. Em muitos casos representam valores em bitcoin; depósitos ou retiradas podem ser feitos, por exemplo, pela Lightning Network. O usuário controla os tokens, não as chaves de bitcoin do emissor, de cuja colaboração continua dependendo.
Imagine Anna enviando um token Cashu a Petr numa mensagem privada. Ela não está transmitindo uma transação Bitcoin para a blockchain. Ela está entregando dados que Petr pode resgatar junto do emissor correspondente. Um token pode conter uma ou mais provas (Proof). São registros de dados que incluem, entre outros campos, um valor, um segredo e uma assinatura do emissor. Cashu é um protocolo comum, não um único serviço com uma reserva compartilhada. Importam o emissor, a unidade monetária e o conjunto de chaves de assinatura. Uma quantia em sats representa pequenas unidades de bitcoin; o mesmo número em outra unidade significa algo diferente. Os tokens de um emissor não são automaticamente aceitos por outro. Para quem se interessa pelo formato, V4 usa a codificação binária compacta CBOR e contém provas de um único emissor. [1] [2] [9]
Anna pode conservar uma cópia de um token normal sem condições adicionais de gasto. Petr precisa, por isso, de um swap: a carteira entrega as provas antigas ao emissor e recebe outras novas com segredos que Anna desconhece. O emissor invalida as entradas antigas. Essa troca concluída impede Anna de gastar novamente a mesma cópia. Consultar o estado não chega. UNSPENT indica que não há registro de processamento nem de gasto; não reserva nada para Petr. PENDING significa processamento em curso e SPENT uma prova já resgatada. Não publique um token como se fosse um recibo: quem obtiver uma cópia utilizável pode resgatá-la primeiro. [3] [5]
Uma Blind Signature, assinatura cega, separa a emissão do token da sua utilização posterior. A carteira cria um segredo, oculta a sua representação matemática e pede ao emissor que a assine. Depois retira essa ocultação. O token apresentado mais tarde não deve, por si só, permitir identificar o pedido de emissão original. Isto não esconde tudo: as diferentes denominações têm chaves diferentes, pelo que o emissor conhece as classes de valor emitidas. O método chama-se BDHKE e utiliza a curva secp256k1. Não é preciso calcular pontos da curva para entender um pagamento; interessa compreender qual a ligação que esta matemática protege. [1]
A extensão opcional NUT-12 acrescenta DLEQ, uma prova matemática de que foi usada para assinar a mesma chave privada que corresponde à chave pública do emissor. Com os dados complementares necessários, Petr consegue verificar a assinatura sem contatar o emissor. Isso não mostra se outra cópia já foi gasta, se o serviço responde ou se tem reservas suficientes de bitcoin. Quando DLEQ acompanha o token, a especificação exige a sua verificação pela carteira. Verificar a assinatura continua sem substituir um swap concluído. Mantém-se o Counterparty risk: o risco de o operador não cumprir. [7]
Petr pode preferir pagar um pedido na Lightning Network em vez de receber mais tokens. Essa operação chama-se melt. Primeiro, a carteira solicita uma proposta: quantidade e unidade necessárias, prazo de validade e eventual reserva para taxas. Podem somar-se taxas por entrada. Depois entrega as provas e o emissor realiza o pagamento externo. HTTP 200 confirma o tratamento bem-sucedido do pedido web, não necessariamente o pagamento. PENDING ainda significa «em processamento»; PAID comunica sucesso. A carteira deve acompanhar o resultado final e a eventual confirmação própria do método de pagamento. [4]
O emissor pode renovar o conjunto de chaves de assinatura. active=false significa que o conjunto antigo deixa de emitir novos tokens; por si só, não impede aceitar provas antigas como entradas. Outra coisa é o campo opcional final_expiry: após esse prazo final, a especificação deixa de obrigar o emissor a honrar os compromissos. Não confunda estas situações. A taxa input_fee_ppk aplica-se por entrada, não simplesmente como porcentagem da quantia enviada. Somam-se as taxas de todas as provas utilizadas, divide-se a soma por 1000 e só então se arredonda a taxa para cima, para unidades inteiras. Por exemplo, em um conjunto de chaves com unidade sat, 3 entradas a 100 ppk somam 300; após a divisão e o arredondamento, a taxa é de 1 sat. Pagamentos do mesmo valor podem custar montantes diferentes se usarem quantidades diferentes de provas ou conjuntos de chaves distintos. [2]
Uma assinatura cega não apaga horários, quantias nem dados de ligação. Até a forma de pedir novas denominações pode revelar informação. NUT-03 recomenda ordenar os valores pedidos do menor para o maior, para que a ordem não revele desnecessariamente a divisão entre pagamento e troco. Consultas repetidas do remetente sobre os tokens enviados também podem facilitar a ligação ao destinatário. Cashu oferece ferramentas para uma circulação de dinheiro mais privada; isso não significa que todas as aplicações e situações escondam automaticamente todas as relações. [3] [5]
A recuperação deve corresponder à carteira e ao emissor utilizados. NUT-13 descreve como voltar a derivar segredos dos tokens e fatores de ocultação a partir da seed, o segredo inicial, do conjunto de chaves e de um contador. A versão 01 utiliza HMAC-SHA256 e a antiga 00 utiliza BIP32. As assinaturas que a seed não consegue criar são obtidas do emissor por NUT-09; depois é preciso verificar o que já foi gasto. «Tenho uma Seed Phrase e recupero tudo em qualquer carteira» não basta. Antes de depender de uma carteira, confirme a cópia, a recuperação e uma pequena retirada. Uma cópia não faz responder um emissor desaparecido nem repõe as suas reservas. [8] [6]
Para ter uma visão mais completa, leia este verbete junto com Fedimint, Chaumian eCash, Blind Signature, Lightning Network, Counterparty risk, Satoshi. Também há referências a este verbete em Chaumian eCash, Blind Signature, Fedimint, Fiduciary Media.