[GCli] Balance too low alors que j'ai plein de GDev

$ bin/gcli account balance
5GBVhdJUdsGhxozu6R8X6x2pTZvuuW46s7JSU4tiW7Zd3WmY has 15436699994261730.70 ĞD
$ bin/gcli identity request-distance-evaluation
Substrate URI can be a mnemonic or a mini-secret ('0x' prefixed seed) together with optional derivation path
> Substrate URI:  ********
Subxt(Rpc(ClientError(Call(ErrorObject { code: ServerError(1010), message: "Invalid Transaction", data: Some(RawValue("Inability to pay some fees (e.g. account balance too low)")) }))))

Comment contourner ce pb ?

1 Like

C’est probablement un bug de génération de key dans gcli, il n’utilise pas la bonne address pour cette action je pense, mauvais préfix ss58, ou bien mauvais algo sr au lieu de ed.

On voit que le ss58 n’est pas bon pour l’address ici, ça ne devrait pas être 42 sur le réseau gtest.

Cette commande utilise l’adresse définie dans la config (gcli config show).

Cette commande a besoin d’un secret, et s’il n’est pas dans le vault, le demande à l’utilisateur. Tu peux regarder l’adresse générée à partir du mnemonic en faisant quelque chose comme :

gcli -S substrate account balance
> Substrate URI:  ********

et qui devrait utiliser l’adresse correspondant au secret en priorité par rapport à l’adresse définie en config. Je parie que ce n’est pas la même.

Il y a un problème de SS58 dans gcli, ce sera toujours 42 avant qu’on corrige ça. Par contre, il sait détecter le symbole de monnaie et on voit ici “ĞD”, ce qui signifie que gcli se connecte à un noeud ĞDev et non un noeud ĞTest.

Et effectivement, les versions récentes de gcli utilisent ed25519 au lieu de sr25519 par défaut (il est même question de laisser tomber le support sr25519 complètement), et c’est probablement ce qui explique une adresse différente si le mnemonic est le même.

2 Likes

J’ai eu le même problème, j’espère qu’il y a une solution plus ergonomique mais on peut faire comme ça :

let pk: AccountId32 = pair.public().into();
let pk: sp_core::crypto::AccountId32 = pk.0.into();
let pk_str = pk.to_ss58check_with_version(Ss58AddressFormat::custom(4450));