Python script to generate Ğ1v2 genesis json

Si ça serait mieux. Si je devais le faire moi je comptais utiliser dex: Dex (Duniter DBs Explorer)

Je pense que @tuxmain et @HugoTrentesaux sont tout à fait capable de recoder dex de façon à générer un json qui contient les données dont tu à besoin @poka :slight_smile:

Non il faut prendre en compte uniquement la date d’émission, et calculer et la date d’expiration qui en découle, puis déterminer le numéro de bloc d’expiration à inscrire dans le genesis (sur une base de 6s par bloc), c’est pourquoi le script de migration des données doit connaître le timestamp prévisionnel de lancement du nouveau réseau.

En effet j’avais déjà prévu et codé ce besoin. Il suffit de remplacer "issuer" par ["issuer", blockNumber].

Ce qui donnerait par exemple (avec des nombres factices):

    "poka": {
      "balance": 10000,
      "certs": [
        ["cgeek", 321456],
        ["tuxmain", 413782],
        ..
      ],
      "pubkey": "5CQ8T4qpbYJq7uVsxGPQ5q2df7x3Wa4aRY6HUWMBYjfLZhnn"
    },
2 Likes

Voilà je viens de finir la génération et formatage du genesis: https://git.duniter.org/pokapow/py-g1-migration/-/raw/master/gtest.json

Tout y est, les paramètres wot (à adapter là j’ai juste repris les valeurs de la gdev), et toutes les 9787 identités (même non membre), sauf leurs certifications (j’attends la requêtes wot-wizard qui va bien).
Vous pouvez voir le code, il est très simple, il s’exécute en 1.1 seconds chez moi environ.
Mais le plus gros du parsing sera l’ajout des certifications.

Ok c’est compris, je transformerai les dates en numéro de bloc relatif par rapport à la date de lancement.


Si quelqu’un veut utiliser dex pour faire tout ça allez y, ce sera mieux, mais en attendant je continue mon script python, c’est presque fini.


Par contre @elois, pour le moment on ne peut pas ajouter de simples portefeuilles à solde non null sans identité attaché au genesis, si ?

Il faudrait rajouter une map genre wallets au json genesis et sa prise en charge c’est ça ?

1 Like

Qu’est ce que tu appelles "balance" ?
Et ce que tu appelles "identités", ce sont les membres ?

balance c’est le solde de Ğ1.

Oui les membres, plus ceux qui ne sont pas membres mais qui ont une identité, si possible.

Les exclus et les révoqués ? Est-ce que tu comptes les nouveaux encore dans la piscine ?

Pour l’instant, WW ne s’occupe pas encore des données monétaires, donc pas de balance.

WW peut aussi fournir les diverses dates relatives aux certifications. J’essaierai demain de t’écrire la requête. Je suis trop fatigué ce soir.

2 Likes

Oui si ils sont identifiés correctement comme tel.

OK ça c’est bon j’ai autrement.

Génial merci Gérard !
Moi aussi je vais pas tarder, bonne nuit!

Cette requête :

{
  identities(status_list: [REVOKED, MISSING, MEMBER]) {
    status
    uid
    certs: sent_certifications {
      pending
      to {
        uid
      }
      validation: block {
        blockNb: number
        time: bct
      }
      expires_on
    }
    pubkey
  }
}

donne une réponse très longue dont voici un extrait :

{
    "data": {
        "identities": [
            {
                "status": "REVOKED",
                "uid": "Duarte",
                "certs": [],
                "pubkey": "GRBPV3Y7PQnB9LaZhSGuS3BqBJbSHyibzYq65kTh1nQ4"
            },
            {
                "status": "MISSING",
                "uid": "Ducatitude",
                "certs": [],
                "pubkey": "4PRz1cerPeTxwVwkAnBmz1gYXdmuQraNf3vjzabrU9jh"
            },
            {
                "status": "MEMBER",
                "uid": "duchesse",
                "certs": [
                    {
                        "pending": false,
                        "to": {
                            "uid": "avenarius"
                        },
                        "validation": {
                            "blockNb": 421431,
                            "time": 1620304372
                        },
                        "expires_on": 1682984325
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "gregoriev"
                        },
                        "validation": {
                            "blockNb": 438299,
                            "time": 1625561157
                        },
                        "expires_on": 1687990812
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "s00999"
                        },
                        "validation": {
                            "blockNb": 420047,
                            "time": 1619872000
                        },
                        "expires_on": 1682984325
                    }
                ],
                "pubkey": "6r95oF1XY4KbNcJudZkEDnnxKztrEeVbarE2nTTqJvoL"
            },
            {
                "status": "MEMBER",
                "uid": "Dujardin",
                "certs": [
                    {
                        "pending": false,
                        "to": {
                            "uid": "Canardargent"
                        },
                        "validation": {
                            "blockNb": 375087,
                            "time": 1605888539
                        },
                        "expires_on": 1666410110
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "Chouchou83"
                        },
                        "validation": {
                            "blockNb": 558255,
                            "time": 1662911856
                        },
                        "expires_on": 1726023240
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "chris"
                        },
                        "validation": {
                            "blockNb": 397286,
                            "time": 1612800923
                        },
                        "expires_on": 1674703752
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "EleonoreBJ"
                        },
                        "validation": {
                            "blockNb": 369453,
                            "time": 1604157547
                        },
                        "expires_on": 1666410110
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "Elouane"
                        },
                        "validation": {
                            "blockNb": 561044,
                            "time": 1663777570
                        },
                        "expires_on": 1726024179
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "Pascal74"
                        },
                        "validation": {
                            "blockNb": 368103,
                            "time": 1603725101
                        },
                        "expires_on": 1666410110
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "PatManu"
                        },
                        "validation": {
                            "blockNb": 377877,
                            "time": 1606753631
                        },
                        "expires_on": 1669776065
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "Tanagra"
                        },
                        "validation": {
                            "blockNb": 370858,
                            "time": 1604590280
                        },
                        "expires_on": 1666410110
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "tomval83"
                        },
                        "validation": {
                            "blockNb": 559651,
                            "time": 1663345053
                        },
                        "expires_on": 1726024179
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "valeriesoufflier"
                        },
                        "validation": {
                            "blockNb": 366787,
                            "time": 1603292628
                        },
                        "expires_on": 1666406057
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "VeroVey"
                        },
                        "validation": {
                            "blockNb": 372275,
                            "time": 1605022666
                        },
                        "expires_on": 1666410110
                    }
                ],
                "pubkey": "D3z61zsCEakWpq1wsM3DXh1r8BTquNPYLpcHQhdg2aas"
            },
            {
                "status": "MEMBER",
                "uid": "Duke",
                "certs": [
                    {
                        "pending": false,
                        "to": {
                            "uid": "Calypso"
                        },
                        "validation": {
                            "blockNb": 499174,
                            "time": 1644447957
                        },
                        "expires_on": 1707560904
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "Cdrix"
                        },
                        "validation": {
                            "blockNb": 489359,
                            "time": 1641416861
                        },
                        "expires_on": 1704530492
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "Emeuh31"
                        },
                        "validation": {
                            "blockNb": 369360,
                            "time": 1604126719
                        },
                        "expires_on": 1666003701
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "Pascaleg"
                        },
                        "validation": {
                            "blockNb": 500610,
                            "time": 1644880469
                        },
                        "expires_on": 1707796491
                    }
                ],
                "pubkey": "Cy49SCD2S9x6KFc8Jf9hypAXHn2SiSKF5B3xsdSgeXt2"
            },
            {
                "status": "MISSING",
                "uid": "DumaB",
                "certs": [
                    {
                        "pending": false,
                        "to": {
                            "uid": "AlexAndra2606"
                        },
                        "validation": {
                            "blockNb": 420053,
                            "time": 1619874865
                        },
                        "expires_on": 1682973872
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "Chaoun"
                        },
                        "validation": {
                            "blockNb": 380587,
                            "time": 1607600373
                        },
                        "expires_on": 1665694296
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "Coquelicot"
                        },
                        "validation": {
                            "blockNb": 424447,
                            "time": 1621240560
                        },
                        "expires_on": 1682995405
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "DidierLoquin"
                        },
                        "validation": {
                            "blockNb": 376435,
                            "time": 1606302329
                        },
                        "expires_on": 1666003701
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "DMS"
                        },
                        "validation": {
                            "blockNb": 381981,
                            "time": 1608032721
                        },
                        "expires_on": 1667414031
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "Dorian2009"
                        },
                        "validation": {
                            "blockNb": 377821,
                            "time": 1606735066
                        },
                        "expires_on": 1667413673
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "FD84"
                        },
                        "validation": {
                            "blockNb": 379212,
                            "time": 1607167574
                        },
                        "expires_on": 1668570183
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "jacquesG"
                        },
                        "validation": {
                            "blockNb": 428643,
                            "time": 1622565188
                        },
                        "expires_on": 1685321150
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "mathieu"
                        },
                        "validation": {
                            "blockNb": 470888,
                            "time": 1635681273
                        },
                        "expires_on": 1698794529
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "RomGuilb"
                        },
                        "validation": {
                            "blockNb": 370841,
                            "time": 1604585067
                        },
                        "expires_on": 1667697476
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "stridou"
                        },
                        "validation": {
                            "blockNb": 373457,
                            "time": 1605387206
                        },
                        "expires_on": 1667697817
                    }
                ],
                "pubkey": "94MXzSvFPNjj6zicir91onwnm1EGC8VNZCSdZujnJzmD"
            },
            {
                "status": "MEMBER",
                "uid": "Dunefrederique",
                "certs": [],
                "pubkey": "3RGVo2J3bXZxRvtZM4Kh7cCz1n95tT4guwS2QwyuL1zZ"
            },
            {
                "status": "MISSING",
                "uid": "Duracel",
                "certs": [],
                "pubkey": "5x1Wc8hjBxvra62pBz9ccviAhfrnDW8rpERdRYGL1m7P"
            },
            {
                "status": "MEMBER",
                "uid": "DurandSylvie",
                "certs": [],
                "pubkey": "7PVY7QDDM8oTngfKgoajXqfS8nbtWpwoqWkfFc2zb881"
            },
            {
                "status": "REVOKED",
                "uid": "Duraton",
                "certs": [],
                "pubkey": "9ad856NFt5kNqUkUzAXeBhGVAoJoZ1ATWqQvgjCzJRUP"
            },
            {
                "status": "REVOKED",
                "uid": "DustyFellow",
                "certs": [],
                "pubkey": "8kXygUHh1vLjmcRzXVM86t38EL8dfFJgfBeHmkaWLamu"
            },
            {
                "status": "MISSING",
                "uid": "DuWeab",
                "certs": [
                    {
                        "pending": false,
                        "to": {
                            "uid": "BolidoC"
                        },
                        "validation": {
                            "blockNb": 414283,
                            "time": 1618082650
                        },
                        "expires_on": 1681004367
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "Freco"
                        },
                        "validation": {
                            "blockNb": 370494,
                            "time": 1604482896
                        },
                        "expires_on": 1666771475
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "lanoire"
                        },
                        "validation": {
                            "blockNb": 391225,
                            "time": 1610892281
                        },
                        "expires_on": 1674004817
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "pataclop"
                        },
                        "validation": {
                            "blockNb": 362067,
                            "time": 1601808072
                        },
                        "expires_on": 1664920454
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "Paulart"
                        },
                        "validation": {
                            "blockNb": 392673,
                            "time": 1611358243
                        },
                        "expires_on": 1674469688
                    },
                    {
                        "pending": false,
                        "to": {
                            "uid": "theobaldi"
                        },
                        "validation": {
                            "blockNb": 373787,
                            "time": 1605494131
                        },
                        "expires_on": 1666214078
                    }
                ],
                "pubkey": "A69LS3NsLYGt7BhcAHS5nhNiBLbZeLwSH2fcjNFKAVeA"
            }
        ]
    }
}

status : REVOKED, MISSING (exclu), ou MEMBER
pending : true (la certification est en piscine) ou false (elle est en blockchain)
validation : bloc de la prise en compte effective
expires_on : date d’expiration ; en enlevant 2 ans (63115200 s), on obtient la date d’enregistrement.

Si tu as besoin d’autres valeurs, demande moi, j’essaierai de te satisfaire.

Lorsque jessai de l’executer sur https://ww2.coinduf.eu/, j’ai cette erreur au bout de 2 minutes:

{
  "errors": [
    {
      "message": "Response.text: Body has already been consumed.",
      "stack": "graphQLFetcher/</<@https://ww2.coinduf.eu/:70:29\n"
    }
  ]
}

Je pense que c’est un problème dû à la longueur de la réponse pour ce serveur. Si tu restreins cette longueur, ça passe :

{
	identities(status_list: [REVOKED, MISSING, MEMBER], start: "DU", end: "DV") {
		status
		uid
		certs:sent_certifications {
			pending
			to {
				uid
			}
			validation:block {
				blockNb:number
				time:bct
			}
			expires_on
		}
		pubkey
	}
}

La requête complète (POST) doit être lancée vers https://wwgql.coinduf.eu à partir d’un programme qui peut gérer la longueur de la réponse.
Voir https://git.duniter.org/gerard94/wotWizard/-/blob/master/Help/Manual.en.pdf, page 3.

Merci @gerard94 , je n’ai pas encore pris le temps de tester ta requête, qu’il faudrait paginer du coup.

En attendant je me suis servi de Datajune (merci Hugo!):

J’arrive à produire ce genesis: https://git.duniter.org/pokapow/py-g1-migration/-/raw/280b5aa58fd8df7fc62b971233d23697e798b12d/gtest.json

Je n’ai mis que les membres actuels pour commencer simple.

Vous pouvez essayer de le lancer dans une blockchain local ainsi:

DUNITER_GENESIS_CONFIG=data/gtest.json cargo run -- --tmp --chain dev
ou bien via docker:

environment:
    DUNITER_CHAIN_NAME: "dev"
    DUNITER_GENESIS_CONFIG: "/var/lib/duniter/gtest.json"

Vous devriez passer correctement le parsing des identités, et arriver sur cette erreur comme moi:
Error: Input("Identity n°12 has received only 0/1 certifications)")

J’ai mis genesis_certs_min_received à 1, si je met 0, tout le parsing v2s se passe bien, la blockchain démarre, puis KernelPanic au bout de quelques secondes, ce qui ne m’étonne pas.

Par contre je n’arrive pas à avoir le nom de l’identité dans ce message de log, j’ai essayé d’ajouter ce champ en vain, dans node/src/chain_spec/gen_genesis_data.rs ligne 265:

return Err(format!(
    "Identity n°{} has received only {}/{} certifications {:?})",
    idty_index,
    receiver_certs.len(),
    genesis_certs_min_received,
    identities_[idty_index]
));

J’ai aussi essayé de reprendre la boucle for (idty_name, identity) in &identities juste au dessus mais je n’arrive même pas à mapper le bon username à une variable en dehors de cette boucle for…

Parceque là la 12èmes identité que je regarde dans le json, bah elles est OK, et comme il n’y a que les membres actuels, il ne dois pas y avoir d’identité ayant reçus 0 certifications, je n’arrive pas à l’isoler dans le json…


Après plusieurs vérifications le json que j’ai fourni me semble parfaitement bon, pouvez-vous me dire si vous voyez des anomalies sur les certifs pour certains comptes ?

2 Likes

Ce json contient les certifications périmées. Est-ce le comportement attendu ?

Lesquels par exemple ?

Non

Mes certifs pour
“AnneJutonPinson”,
“Anne_Marquer”,
“OlDog”,
“domdenantes”,
“Fleurdeschamps”,
“mimitoutvabien”,
“Julien_Jardin”,
sont périmées.

Merci, je ne trouvais pas d’exemple ainsi sur les comptes que je regardais, mais c’est normal du coup étant donnée les données de datajunes, elles sont incrémentiels @HugoTrentesaux

Malgré ça cela n’explique pas que des identités membres aient 0 certifs reçus, c’est un 2nd soucis.

L’index proviens de g1-stats et il y a exactement le bon nombre de membre.

Et du coup les certifs vers les membres qui ne le sont plus n’apparaissent pas.

1 Like

Oui ça c’est voulu, pour rendre les données cohérentes je n’avais pas trop le choix.

1 Like

Si ça peut encore t’être utile, tu peux essayer ça pour avoir le nom de l’identité :

return Err(format!(
    "Identity n°{} “{}” has received only {}/{} certifications)",
    idty_index,
    identities_[*idty_index as usize].0,
    receiver_certs.len(),
    genesis_certs_min_received
));
1 Like

Yes merci ça marche !! J’étais pas si loin finalement ^^

Error: Input("Identity n°12 “7Daniel” has received only 0/1 certifications)")

1 Like

Et bien je confirme que 7Daniel apparaît dans 9 certifications au total dans ce json, donc écoutez pour moi il s’agit d’un bug côté Duniter v2s jusqu’à nouvel ordre ^^

Si tu veux essayer de débugger tu peux utiliser dbg!(variable_ou_expression_quelconque); (soit comme instruction sur une ligne, soit sans ; en wrappant une valeur qui est utilisée, pour l’intercepter sans la toucher, par exemple remplacer foo(bar) par foo(dbg!(bar))).

Et si le compilateur n’est pas content à cause de Display ou Debug, ajouter Debug dans la ligne #[derive(...)] correspondant à la struct (définie en haut du fichier) en question.

1 Like