J’ai recodé entièrement la signature/vérification bLSAG à partir du document Zero to Monero (page 29), ça marche. (dépôt sur le GitLab)
Pour vérifier qu’une même clé n’a pas émis deux signatures, pas besoin de faire O(N²) vérifications. Il suffit d’indexer les signatures dans une hashmap dans le storage, avec pour clé le hash de la clé privée qui est fourni dans la signature (et qui ne peut être altéré sans invalider la signature). Si la clé est déjà présente, on a détecté une tentative de double dépense.
Je ne sais pas encore s’il est possible de trouver spécifiquement quelle clé publique a émis une signature de trop. Si oui, on peut lui appliquer des frais. Sinon, on peut soit conserver la première signature et ignorer les suivantes, soit invalider définitivement la première, en guise de frais (la monnaie réservée pour le transfert anonyme sera prélevée et non remboursée).