Eh, j’ai deux nouvelles, une bonne et une mauvaise !
Cesium dépense des sources après un délai CSV() passé
La bonne : Si je n’arrivais à rien dépenser, c’est parce que les comptes étaient à 0 : j’avais envoyé moins de 100GT, soit 1GT *10^2 !
Mais depuis j’ai vérifié, avec des envois de 100 GT. La condition d’unlock est :
(SIG({recipient}) || (SIG({sender}) && CSV({delay})))
J’ai envoyé depuis Cesium, une tx avec la SIG(recipient), et une avec la SIG(sender), une fois le délai passé. Les deux ont été validées !
Et lorsque je veux utiliser toute la monnaie du compte (sender) avant le délai, je ne peux pas… Car le délai n’est pas passé, les sources sont bloquées ! J’ai une erreur “wrong unlocker in transaction”
Donc Cesium gère (un peu) la condition CSV(), et les opérandes || et &&. Je suppose que CLTV() fonctionne également. C’est cool !
MAIS Cesium bloque la plupart des tx depuis un compte avant que le délai CSV() soit passé
En revanche, Cesium me refuse certaines transactions depuis le compte “sender”, de petits montants, avec la même erreur “Wrong Unlocker”. Donc il ne sait pas trier des sources qui seraient bloquées pour ne pas les utiliser. Autant dire que ce n’est pas encore utilisable pour Ğ1Pourboire.
Par ex. Si un compte a 1000GT dont 100 sont bloquées par CSV(), il ne pourra pas dépenser 500GT car Cesium choisit la mauvaise source, alors même qu’il a 900 GT en sources libres
Conclusion : on peut bloquer TOUTE la monnaie d’un compte sur Cesium en utilisant la condition CSV(), ou en tout cas le rendre quasi inutilisable. C’est un vecteur d’attaque très facile, je peux faire chier qui je veux en lui envoyant une tx avec une condition, Cesium ne saura pas trier le bon grain de l’ivraie. J’ai 10 caractères à modifier dans Silkaj pour faire une telle attaque.
Testé sur Cesium v 1.4.2 et 1.4.6
Et Silkaj ?
Silkaj utilise uniquement les inputs avec SIG(pubkey) comme seule condition. Donc il ne saura pas dépenser les pourboires ou les CSV() passés, mais il ne sera pas non plus bloqué par des tx exotiques : il ne les lit pas.
Vous pouvez regarder les tx émises/reçues par le compte AhRMHUxMPXSeG7qXZrE6qCdjwK9p2bu5Eqei7xAWVEDK sur la GTest.
Solution 1 (court terme): n’utiliser que les conditions de dépenses simples en SIG(pubkey) et rien d’autre, aucune condition composée ni rien d’autre qu’un SIG unique.
Solution 2 (long terme): modifier l’algo de choix des sources pour écarter les sources sous condition de lock.
Et je vais faire un rapport de bug sur Cesium de ce pas. ping @kimamila
Si vous voulez étudier le problème, le compte 6etdjZMRV8p5e5V7AAu4ewChoS3vWrhbh7jn7ZL5g3X6 avec id et mdp : 123456789 a des inputs sous conditions SIG(6etdjZMRV8p5e5V7AAu4ewChoS3vWrhbh7jn7ZL5g3X6) && CSV(5 jours, me demandez pas).
3000 GT en tout, 1200 bloquées.
Si vous appréciez ce rapport de bug, vous pouvez me remercier : CvrMiUhAJpNyX5sdAyZqPE6yEFfSsf6j9EpMmeKvMCWW