Erreur `Creator Not Allowed To Create Idty`

Je suis en train d’implémenter un test cucumber sur la création d’identité. Avec Alice j’essaye de créer une identitié pour Ferdie. J’obtiens l’erreur CreatorNotAllowedToCreateIdty.

Voici mon test cucumber :

Feature: Identity creation

  Scenario: alice invites a new member to join the web of trust
    When alice sends 5 ĞD to ferdie
    When 22 block later
    When alice creates identity for ferdie
    Then ferdie identity should be created

Il semble que cette erreur se produit quand la fonction can_create_identity retourne false
(pallets/identity/src/lib.rs#L274-L276)

Ceci peut arriver dans trois cas de figure :

  • nombre de certifications reçues trop faible
  • délai non respecté
  • nombre de certification émises trop grand

(pallets/duniter-wot/src/lib.rs#L102-L111).

Or :

  • Alice a reçu deux certifications (Bob et Charlie) et wot_min_cert_for_create_idty_right vaut 2
  • wot_first_cert_issuable_on vaut 20 et j’attends 22 blocs
  • Alice a émis deux certifications (Bob et Charlie)

Je ne vois pas pourquoi cette création d’identité ne passe pas. Quelqu’un aurait-il une idée ? (j’écris ce post pour mettre à plat les idées que j’ai listé au fur et à mesure dans ma MR !82, ça peut permettre à des gens de rentrer dans le code sur un cas précis).

Le paramètre wot_first_cert_issuable_on ne s’applique qu’aux nouvelles identités post-genesis.

Le délai que tu dois attendre dans ton cas de test c’est cert_period après la dernière certif émise.

Comme on ne peut pas mesurer le temps pre-genesis, on se sert de la date d’expiration de la certif pour extrapoler quand elle a été émise, et donc quand l’émetteur pourra en émettre une de nouveau.

Donc si tu veux que les certif du genesis soit considérées comme émises au genesis, il faut que genesis_certs_expire_on soit égal à cert_validity_period dans ta genesis conf.

Je travaille sur une refacto pour supprimer le paramètre genesis_certs_expire_on, donc tu n’auras plus ce problème à l’avenir.

2 Likes