poka
23 October 2025 00:17
1
Objectif : Fix bug de réévaluation quotidienne du DU
@technical-committee
ProblĂšme actuel :
Le DU est réévalué TOUS LES JOURS au lieu de tous les 6 mois
Cause: first_ud_reeval en secondes (1766232000) au lieu de millisecondes
Solution :
Migration automatique (idempotente): NextReeval passera de 1766232000 Ă 1766232000000 ms
Date correcte: 20 décembre 2025 à 13:00:00 UTC
MR :
Proposition :
Vote : https://duniter-portal.axiom-team.fr/?rpc=wss%3A%2F%2Fgt.p2p.legal%2Fws#/techcomm/proposals
Votez pour la proposition 1, la proposition 0 Ă©tant obsolĂšte. Vous pouvez voter âNonâ Ă la proposition 0 pour lâannuler avant sont expriration.
Seuil: 6
Fin du vote: Jeudi 30 Octobre Ă 16h30
Merci de vérifier le hash en compilant localement avec:
cargo xtask release runtime build gtest
cat release/srtool_output_gtest.json | grep blake2_256 | jq -r '.runtimes.compressed.blake2_256'
Voir ce tuto: Technical committee: Check runtime upgrade hash compliance
Vous pouvez également lire et vérifier que les tests de la migration passent bien:
% cargo test -p gtest-runtime --lib migrations::tests -- --nocapture
running 4 tests
Initial NextReeval (future value): 1782010800000 (June 20, 2026)
Initial NextReeval: 1766232000
Migration weight: Weight { ref_time: 16770000, proof_size: 0 }
Updated NextReeval: 1782010800000
test migrations::tests::test_migration_v1110_with_already_correct_value ... ok
Migration weight: Weight { ref_time: 22976000, proof_size: 0 }
Updated NextReeval: 1766232000000
test migrations::tests::test_migration_v1110_preserves_future_value ... ok
test migrations::tests::test_migration_v1110_is_idempotent ... ok
test migrations::tests::test_migration_v1110_fixes_incorrect_next_reeval ... ok
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 5 filtered out; finished in 0.00s```
3 Likes
poka
24 October 2025 14:50
2
Je viens de rĂ©aliser que ma condition dâexecution de la migration nâest pas bonne. Il se base sur la valeur de nextReeval alors quâil faudrait plutĂŽt se baser sur le numĂ©ro du runtime. Je dois refaire une proposition.
Et en fait je me rend compte quâici il y a beaucoup plus simple, pas besoin de runtime upgrade, juste un setStorage directement, proposition 5.
Comment jâai dĂ©terminĂ© les bonnes valeurs ?
et
python3 -c "import struct; print('0x' + struct.pack('<Q', 1766232000000).hex())"
1 Like
poka
24 October 2025 15:13
3
La proposition 6 remet la bonne valeur du DU.
duniter-v2s % python3 -c "import struct; print('0x' + struct.pack('<Q', 1148).hex())"
Pour vous y retrouver dans les diffĂ©rentes propositions ouvertes, vous pouvez vous rĂ©fĂ©rer Ă celle auquels jâai vĂŽtĂ© oui.
Actuellement les 3 derniĂšres.
Si ça vous convient je peux supprimer la MR runtime 1110 ainsi que la release 1110.
Soyez indulgent je mâentraine, le rĂ©seau gtest est fait pour ça, on se fait la main
6 Likes
cgeek
25 October 2025 12:47
4
Juste pour clarifier : quand tu dis proposition â5â câest en rĂ©fĂ©rence aux propositions visibles dans lâonglet âComitĂ© tech > Proposalsâ de Duniter Portal , donc index 5.
Proposition dâindex 5
fonctionnellement : universalDividend.nextReeval = 1766232000000
hash de la clé du storage : 0x235cdca73b1fc4b26dd60639fe5bf213510012cc03aa2d41b711cd71b8a63e85
hash de la valeur : 0x0086a13b9b010000
Jâai testĂ© le call en local sur un nĆud de dev pour bien tout vĂ©rifier par moi-mĂȘme, le storage est correctement mis Ă jour.
Jâai donc votĂ© la proposition.
Procédure de vérification détaillée
Obtention de la clé
On veut connaßtre la clé du storage associée à universalDividend.nextReeval :
Copier la valeur 0x235cdca73b1fc4b26dd60639fe5bf213510012cc03aa2d41b711cd71b8a63e85.
Obtention de la valeur
Comme Substrate attend une valeur hexadécimale, il faut convertir 1766232000000 en hexadécimal.
En python, Poka propose :
python3 -c "import struct; print('0x' + struct.pack('<Q', 1766232000000).hex())"
En JS :
const num = 1766232000000;
// Créer un buffer de 8 octets
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
// Ăcrire en little-endian (true = little-endian)
view.setBigUint64(0, BigInt(num), true);
// Convertir en hex
const hex = '0x' + Array.from(new Uint8Array(buffer))
.map(b => b.toString(16).padStart(2, '0'))
.join('');
console.log(hex);
Dans les 2 cas, on obtient 0x0086a13b9b010000.
Proposition finale
On vérifie dans la proposition que les 2 valeurs calculées correspondent bien.
clé 0x235cdca73b1fc4b26dd60639fe5bf213510012cc03aa2d41b711cd71b8a63e85
valeur 0x0086a13b9b010000
Câest OK.
Proposition dâindex 6
fonctionnellement : universalDividend.currentUd = 1148 au lieu de 1505 actuellement, mais il vaudrait mieux que la proposition 5 passe avant sinon il va falloir recommencer la proposition 6 plus tard.
hash de la clé du storage : 0x235cdca73b1fc4b26dd60639fe5bf213e693e94477a5a91aed0757f3de0b8168
hash de la valeur : 0x7c04000000000000
MĂȘmes vĂ©rifications que pour la proposition prĂ©cĂ©dente.
Câest OK.
Jâai nâai PAS votĂ© la proposition pour la bloquer temporairement tant que la proposition 5 nâest pas passĂ©e.
2 Likes
poka
25 October 2025 14:04
5
Oui je parle en index, proposition 5, la 6Ăšme .
vit
26 October 2025 09:29
6
Jâai votĂ© oui, non, oui, non, puis finalement oui avec Tikka. Pour la proposition du set storage.
Câest pas que jâhĂ©sitais, câest que je testais mon code de TikkaâŠ
Les propositions y sont affichĂ©es par ordre dâindex croissant.
3 Likes
poka
27 October 2025 13:26
7
@technical-committee pour rappel il reste 4 jours pour voter les propositions , Ă commencer par lâindex 4 et 5. Il manque 2 votes pour la 5Ăšme.
1 Like
De ce que je comprends, la date de prochaine réévaluation du DU serait au 20 dĂ©cembre avec la proposition dâindex 5.
Quitte Ă ce que ce soit pas Ă lâĂ©quinox, pourquoi ne pas la mettre plus tĂŽt pour se rendre compte plus rapidement si le problĂšme est rĂ©glĂ© et que la réévaluation ce fait correctement ?
En ce sens, jâai tentĂ© de faire un proposal aussi, mais je nâarrive pas Ă le passer (wrong length me dit-il) quâest-ce qui cloche ?
Avec la valeur que jâindique, si jâai bien compris ça donnerais le 1er novembre 2025 Ă 13h câest bien ça ?
PS : si on change quand a lieu la prochaine rééval et le montant, ça ne change pas la fréquence, il y a donc une chose de plus à changer non ?
Enfin, jâai essayer de recompiler duniter-v2s Ă plusieurs reprise, y compris en crĂ©ant le dossier quâil rĂ©clame avec un chmod o+w mais pas moyen de finir la compile avez vous eu ce problĂšme et comment lâavez vous rĂ©solu :
$ cargo xtask release runtime build gtest
Finished `dev` profile [unoptimized + debuginfo] target(s) in 2.29s
Running `target/debug/xtask release runtime build gtest`
rustc 1.91.0-nightly (7d82b83ed 2025-08-06)
cargo 1.91.0-nightly (840b83a10 2025-07-30)
đ Construction du runtime avec srtool: gtest
Docker version 28.5.1, build e180ab8
đ SRTOOL_OUTPUT = release/srtool_output_gtest.json
đł Lancement du conteneur srtool...
đ DĂ©marrage de srtool...
đ RĂ©pertoire de travail: /build
đ§ Runtime: gtest
đ Sortie: release/srtool_output_gtest.json
đš Construction du runtime avec srtool...
tee: release/srtool_output_gtest.json: Permission denied
đ§° Substrate Runtime Toolbox - srtool v0.18.3 đ§°
- by Chevdor -
info: override toolchain for '/build' set to '1.88.0-x86_64-unknown-linux-gnu'
info: component 'rust-std' for target 'wasm32-unknown-unknown' is up to date
info: component 'rust-src' is up to date
đ Building gtest-runtime as release using rustc 1.88.0 (6b00bc388 2025-06-23)
âł That can take a little while, be patient... subsequent builds may be faster.
Since you have to wait a little, you may want to learn more about Substrate runtimes:
https://docs.substrate.io/learn/architecture/
Updating git repository `https://github.com/duniter/duniter-polkadot-sdk`
Updating crates.io index
Updating git repository `https://github.com/paritytech/subxt`
Downloading crates ...
[...]
error: failed to create directory `/build/runtime/gtest/target`
Caused by:
Permission denied (os error 13)
Error: Ăchec de la construction du runtime avec srtool
1 Like
poka
28 October 2025 12:38
9
Non, voir: Duniter v2s et lâindexeur ne dĂ©marrent pas avec la valeur du DU de la Ä1 - #16 by poka
Je crois quâil y a peut ĂȘtre un bug de lâinterface polkadotjs car parfois jâai lâimpression que lengthBound est prĂ©rempli. Mais parfois jâai dĂ» la calculer Ă la main.
Pour se faire il suffit de prendre le encoded call data, retirer le 0x au début, compter son nombre de caractÚre et le diviser par 2 (nombre de bytes). Par exemple:
echo 1702101500000a2acefe9868b7798a1f61489a1a0d45b330accf87e1e88326ee97430ecbd4815700 | wc -c â 81
Ca fait 40.5, on peut mettre 50 pour avoir de la marge.
1000i100:
un chmod o+w
Regarde surtout le owner du dossier en question et dossier parent. Dans le doute pour tester fait un petit chmod 777 -R du dossier parent, pour voir si câest vraiment un pbm de droits.
Moul
28 October 2025 16:10
10
Jâai approuvĂ© les propositions aux index 4, 5 et 6. La 5 est Ă valider.
Curieux cette nouvelle maniĂšre de vĂ©rifier uniquement le changement dâune valeur.
Je cherchais ou se trouve le code (la branche) de la proposition 6.
Pour la proposition 5, jâai construit le runtime et ait obtenu le mĂȘme hash blake256.
poka
28 October 2025 17:11
11
Aucune de ces 3 propositions nâest un runtime upgrade, juste un setStorage. Donc il nây a pas de code associĂ© (pas de preimage).
Du coup je ne sais pas quel runtime tu as compilé et quel hash tu as vérifié ?
Pour ces propositions le contenu des changements est directement présenté dans la proposual, il suffit donc de vérifier que le contenu est celui attendu (@cgeek a expliqué la procédure un peu mieux que moi juste au dessus).
2 Likes
Moul
28 October 2025 17:24
12
Ah ok. Jâavais vĂ©rifiĂ© la proposition 5 en vĂ©rifiant cette branche et en obtenant ce hash, mais ça correspond aux premiĂšres propositions.
poka:
Branch: network/gtest-1110
Blake2_256: 0x514cf1f1bcb6f498436b1e441b8155401367518d080e57c0498e3e3d91dc7b1a
AprĂšs relecture du message de cgeek câest plus clair.
2 Likes
poka
28 October 2025 22:26
13
Oui je dois supprimer cette branche, elle est obsolĂšte, mais câĂ©tait un bon entrainement en soit.
La proposition 5 vient dâĂȘtre exĂ©cutĂ© avec succĂšs
La valeur du nextReeval a donc été modifié.
Avant:
AprĂšs:
Il reste donc:
Proposition 4 (manque 2 votes): Nouvelle constitution du comité technique
Proposition 6 (manque 2 votes): Nouvelle valeur du currentUd corrigé
5 Likes
Moul
29 October 2025 07:21
14
poka:
Avant:
Ătrange cette valeur. Câest pas ce qui a Ă©tĂ© configurĂ©.
Ăa fonctionne ! Le montant arrĂȘte dâĂȘtre réévaluĂ© tous les jours.
3 Likes
poka
29 October 2025 09:03
15
Si:
cgeek:
Proposition dâindex 5
fonctionnellement : universalDividend.nextReeval = 1766232000000
hash de la clé du storage : 0x235cdca73b1fc4b26dd60639fe5bf213510012cc03aa2d41b711cd71b8a63e85
hash de la valeur : 0x0086a13b9b010000
Ah tu veux parler de lâancienne valeur, si en fait câest quâelle a Ă©tĂ© réévaluĂ© plusieurs fois donc nâest plus du tout Ă©gale au first_ud_reeval (il rajoutait 6 mois tous les jours)
Moul:
image230Ă417 9.58 KB
Câest un teasing de Silkaj v2 ?
1 Like
Moul
29 October 2025 09:23
16
Le montant initialement inscrit était, toujours avec la conversion de ms en s :
date -d @1766232
Wed 21 Jan 11:37:12 CET 1970
or, ta capture dâĂ©cran indique :
date -d @270005832
Sun 23 Jul 02:37:12 CET 1978
La nouvelle valeur est :
date -d @1766232000
Sat 20 Dec 13:00:00 CET 2025
Ah oui, en effet. Intéressant.
3600 Ă 24 Ă 365.25 / 2 = 15778800
1766232 + 15778800 Ă 17 = 270005832 s
La date de réévaluation sâest dĂ©placĂ©e de huit annĂ©es et demie (17/2 semestres). Mais Ă©tait toujours dans le passĂ©. Donc, il y avait réévaluation tous les jours.
Euh, comment dire, câest un prototype. Jâai voulu tester lâaffichage de tableaux et de graphiques avec deux bibliothĂšques graphiques.
4 Likes
cgeek
29 October 2025 17:17
17
poka:
Proposition 4 (manque 2 votes): Nouvelle constitution du comité technique
Je nâavais pas regardĂ©, je vois que câest un changement de clĂ© pour Hugo, le retrait dâEloĂŻs et lâajout de @aya . Jâai votĂ©, la proposition est passĂ©e.
3 Likes
poka
29 October 2025 18:28
18
Chouette, jâai exĂ©cutĂ© la proposition, bienvenue @aya au comitĂ©
Pour executer une proposition ayant atteint le nombre de vote requis, il faut executer lâextrinsics technicalCommittee.close, qui peut se faire simplement en cliquant sur le bouton âcloseâ Ă droite de la proposition, remplaçant le bouton de vote.
Reste donc la proposition 6 pour remettre la bonne valeur du DU.
1 Like
cgeek
29 October 2025 18:46
19
Vu que la 5 est passée, je viens de voter la 6 également.
Ma clĂ© est encore dĂ©rivĂ©e du format Cesium, et je ne peux pas le faire via Äcli, je te laisse la main.
3 Likes
poka
29 October 2025 19:06
20
Proposition 6 également passé !
Avant:
AprĂšs:
Merci Ă tous !
4 Likes