os detalhes do Fênix são fáceis de passar despercebidos:

as notas gastas permanecem na árvore de Merkle.

eu tratei essa árvore como um conjunto UTXO privado. uma vez que uma nota é gasta, eu assumia que ela sumiria.

a whitepaper diz o contrário.

quando uma nota do Fênix é gasta, o seu proprietário deriva um nullifier a partir da chave secreta da nota. a rede registra esse nullifier para que a nota não possa ser gasta novamente.

mas ela não aprende a qual nota o nullifier pertence.

então a nota permanece. a árvore continua crescendo.

isso cria uma distinção que eu não tinha considerado:

gravado não é o mesmo que gastável.

um Merkle root recente permite que a rede verifique que uma nota de entrada pertence à árvore. apenas a participação não significa que o valor ainda está ativo.

a resposta fica na lista de nullifiers.

e o Fênix mantém a ligação pública entre os dois escondida.

no Moonlight, Dusk mapeia uma conta para um saldo público.

o Fênix funciona de forma diferente. a rede verifica uma prova ZK de que as notas de entrada foram corretamente nulificadas e têm valor suficiente para novas notas, depósito e gás máximo, sem expor os valores.

assim, uma nota do Fênix pode permanecer registrada mesmo depois de sua utilidade econômica ter acabado.

a gravação sobrevive.

o direito de gastar não.

então há outra separação.

uma chave de visualização pode ser dada a uma parte confiável para escanear a rede e identificar transações endereçadas ao usuário. mas ainda assim ela não pode gastar essas notas, porque a chave secreta da nota exige a chave secreta completa do usuário.

então “pode ver meu estado privado” e “pode controlar meu estado privado” são permissões diferentes.

dois limites aparecem:

gravação / gastabilidade

visível / controlável

a situação-limite para a qual eu continuo voltando é uma aplicação reconstruindo o que um usuário tem agora.

a presença da nota não é suficiente.

ser capaz de reconhecê-la também não é suficiente.

você precisa de histórico, estado de nulificação e o material secreto correto.

o que me leva a pensar:

num ledger privado, “estado atual” é um objeto em si, ou a interseção de registros intencionalmente incompletos quando lidos sozinhos?

@Dusk #dusk $DUSK $VELVET $APR