Devenir Forgeron avec Tikka

Ceci est un mini tutoriel pour devenir Forgeron avec Tikka.

Obtenir l’adhésion forgeron

  1. Soyez sûr d’avoir un compte membre “co-créateur” en important votre compte V1 ou mieux, en migrant votre compte V1 en compte V2.

Je n’ai pas testé la procédure avec un compte “co-créateur” V1, mais cela pourrait fonctionner. Merci de me faire un retour si cela fonctionne ou non.

  1. Ouvrez un tunnel SSH vers votre serveur validateur Duniter :
    ssh -L 9944:localhost:[your server RPC port] username@server
  1. Ajoutez le serveur suivant dans le menu Réseau/Ajouter un serveur
    ws://localhost:9944

La sélection aléatoire de serveur au démarrage ignorera ce serveur “spécial” qui nécessite un tunnel ssh.

  1. Une fois connecté au serveur ws://localhost:9944, ouvrez l’onglet Forgeron avec le menu Avancé/Forgeron :

  1. Sélectionner un compte “co-créateur” dont le trousseau est présent dans Tikka, avec le sélecteur “Compte”.

  2. Cliquez sur le bouton “Rotation clefs” pour créer les clefs privées de session sur le serveur et afficher les clefs publiques de session.

  3. Cliquez sur le bouton “Requête de l’adhésion”, le champ adhésion passe à “en cours…”. Patientez en attendant vos certifications venant d’autres forgerons. Celles-ci apparaîtront dans le tableau des certificateurs.

  4. Une fois vos certifications obtenues, vous devez cliquer sur le bouton “Réclamer l’adhésion”. Si tout est Ok, le champ adhésion affiche la date d’expiration de l’adhésion.

Les dates d’expiration sont approximatives. Une bulle d’aide affiche le numéro exact du bloc où l’expiration aura lieu, en passant la souris sur la date en question.

  1. Pour que votre serveur écrive des blocs, il faut maintenant cliquer sur le bouton “Go online”.

Il faut patienter environ 2h00 avant que le serveur rejoigne le groupe des serveurs forgerons.

  1. Si votre serveur a des problèmes ou doit être stoppé, vous devez cliquer sur le bouton “Go offline” pour sortir du groupe des serveurs forgerons.

Il faut patienter environ 2h00 avant que le serveur quitte le groupe des serveurs forgerons.

Renouveler les clefs de session

Régulièrement, vous devrez renouveler vos clefs de session. Pour cela :

  1. Cliquez sur le bouton “Rotation clefs”, une nouvelle clef publique apparaît dans l’interface.

  2. Cliquez sur le bouton “Publier les clefs” pour informer la blockchain du renouvellement.

Vous savez tout maintenant pour devenir forgeron avec Tikka !

6 Likes

Salut !
C’est bon ça ! je vais pourvoir m’en inspirer à mon retour de vacances (le 8 mai) pour Gecko-web !
Faudra qu’on se parle de tout ça !

3 Likes

Hello,

J’ai un souci avec l’ajout du serveur local, l’erreur générée est la suivante :

Traceback (most recent call last):

  • File “/home/gco/.local/pipx/venvs/tikka/lib/python3.11/site-packages/tikka/adapters/repository/sqlite3.py”, line 80, in run*
  • cursor.execute(request, arg)*
    sqlite3.OperationalError: no such column: session_keys
    DEBUG:substrateinterface.base:Connecting to ws://localhost:9944 …
    DEBUG:substrateinterface.base:RPC request #1: “system_chain”
    DEBUG:substrateinterface.base:RPC request #2: “rpc_methods”
    DEBUG:substrateinterface.base:RPC request #3: “system_localPeerId”
    DEBUG:substrateinterface.base:RPC request #4: “system_syncState”
    DEBUG:substrateinterface.base:RPC request #5: “system_name”
    DEBUG:substrateinterface.base:RPC request #6: “system_version”
    DEBUG:substrateinterface.base:Closing websocket connection
    ERROR:root:INSERT INTO nodes (url,peer_id,block,software,software_version,session_keys) VALUES (?,?,?,?,?,?)
    ERROR:root:[‘ws://localhost:9944’, ‘12D3KooWNNuTX4bXa8DwWxX8eJzDv1kv9xefjzEDTy4H6iHH8BU9’, 2982736, ‘Duniter’, ‘0.3.0-unknown’, None]
    ERROR:root:table nodes has no column named session_keys
    Traceback (most recent call last):
  • File “/home/gco/.local/pipx/venvs/tikka/lib/python3.11/site-packages/tikka/adapters/repository/sqlite3.py”, line 80, in run*
  • cursor.execute(request, arg)*
    sqlite3.OperationalError: table nodes has no column named session_keys
    qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 889, resource id: 6306896, major code: 40 (TranslateCoords), minor code: 0

L’installation a été réalisée avec pipx.
pipx --version
1.2.0
python --version
Python 3.11.3
pipx upgrade tikka
tikka is already at latest version 0.9.0 (location: /home/gco/.local/pipx/venvs/tikka)

Que puis-je faire ? Ajouter la colonne manuellement ?
Merci

S’il manque une colonne dans la base de données, c’est que tu n’as sans doute pas supprimé la base de données lors de la mise à jour de Tikka, voir :

Après la mise à jour, vous devez supprimer les données de Tikka avant de le relancer :

Exemple sur GNU/Linux :

    rm $HOME/.config/tikka/*.sqlite3
1 Like

Merci beaucoup, cela a fixé le pb.

1 Like

Voici les étapes réalisées sans trucage avec Tikka pour forger des blocs après la mise à jour de la blockchain en GDev 0.7.0 ou 700.

  1. Migration du compte de l’identité V1 numéro 58 (vit) sur le compte V2 5FH48744BHgNoLBe8syGXbTEnSpGhp8ttdAKW4MWcR7TUKai.
  • Erreur : On ne peut pas migrer une identité forgeron.
  1. Ajout d’un bouton Révocation dans le panneau Forgeron, et révocation réussie de l’adhésion forgeron pour l’identité 58.
  2. Migration du compte de l’identité V1 numéro 58 (vit) sur le compte V2 5FH48744BHgNoLBe8syGXbTEnSpGhp8ttdAKW4MWcR7TUKai avec succès (monnaie et identité)
  3. Demande d’adhésion forgeron (smithmembersip_request_membership()) pour 5FH48744BHgNoLBe8syGXbTEnSpGhp8ttdAKW4MWcR7TUKai
  • Requête réussie, mais SmithMemberShip et PendingSmithMembership sont None et Null…
  1. Seconde Demande d’adhésion forgeron (smithmembersip_request_membership()) pour 5FH48744BHgNoLBe8syGXbTEnSpGhp8ttdAKW4MWcR7TUKai
  • Requête en erreur, demande d’adhésion déjà envoyée :
    ERROR:root:{'type': 'Module', 'name': 'MembershipAlreadyRequested', 'docs': ['Membership already requested']}

Là je suis bloqué, je pensais être en pendingMembership… Ou faut-il que quelqu’un fasse quelque chose ?

1 Like

Super, merci de prendre les tests au sérieux ! Donc je vais essayer de débugger :

query MyQuery {
  calls(where: {pallet_eq: "SmithMembership"}, orderBy: block_height_ASC) {
    name
    block {
      height
    }
    success
  }
}
{
  "data": {
    "calls": [
      {
        "name": "revoke_membership",
        "block": {
          "height": 30420
        },
        "success": true
      },
      {
        "name": "request_membership",
        "block": {
          "height": 30516
        },
        "success": true
      },
      {
        "name": "claim_membership",
        "block": {
          "height": 30525
        },
        "success": true
      },
      {
        "name": "revoke_membership",
        "block": {
          "height": 75471
        },
        "success": true
      },
      {
        "name": "request_membership",
        "block": {
          "height": 75638
        },
        "success": true
      },
      {
        "name": "request_membership",
        "block": {
          "height": 90028
        },
        "success": false
      },
      {
        "name": "request_membership",
        "block": {
          "height": 90213
        },
        "success": false
      }
    ]
  }
}
  • 75471 l’adhésion forgeron de l’identité 58 est bien révoquée
  • 75638 l’adhésion forgeron de l’identité 58 est bien demandée
  • 90028 la demande échoue
  • 90213 la demande échoue

Effectivement, et c’est le comportement attendu :

  • SmithMembership.Membership est None puisque tu n’es plus membre (tu as révoqué ton adhésion forgeron)
  • SmithMembership.PendingMembership est Some(()) puisque tu as bien une adhésion en attente

Le problème est le mot “null” qui fait penser qu’il n’y a rien, alors qu’il y a quelque chose, il n’y a juste rien à dire dessus :smiley:

Tu as bien une pending membership, et comme tu as assez de certifications, tu peux bien faire SmithMembership.ClaimMembership() !

1 Like

Excellent ! Merci !

Effectivement, j’ai un tuple vide “()” en réponse en Python (avant j’avais un gros nobjet json) que je considérais comme une réponse négative.
Je le considère donc maintenant comme un statut Pending et ça fonctionne !

Je viens de faire un claim_membership et j’ai une adhésion active qui expirera au bloc 1151727.

1 Like