Use ed25519 vs sr25519 for v2s clients

@poka, @HugoTrentesaux Je viens de finir les changements dans la MR et elle est en attente de review avant de la merger et faire une release.

@vit Effectivement je ne pense pas que cette colonne supplémentaire aurait aidé pour ce que tu dis.

Pour ce point là, j’avoue que je n’ai pas encore touché à la partie du code Gcli qui effectue des appels RPC, …

Est-ce que quelqu’un peut détailler la marche à suivre pour faire cela ?
Est-ce que c’est quelque chose que l’on peut déjà accéder dans les appels RPC via polkadot ?

1 Like

@poka, @Nicolas80 pouvez-vous me dire quelle adresse de compte en ED25519 vous obtenez pour la dérivation //Alice avec le mnémonique de dev ?

J’ai un code proposé par chatGPT qui me paraît un peu foireux et j’obtiens
‘5CMZywDW1xRZ1XacJsaByzmgsnZEdvaovE5a6bsqvhQz6z89’

    mnemonic_dev = "bottom drive obey lake curtain smoke basket hold race lonely fit walk"
    keypair_ed25519 = Keypair.create_from_uri(mnemonic_dev+"//Alice", 42, KeypairType.ED25519)
    assert keypair_ed25519.ss58_address == '5CMZywDW1xRZ1XacJsaByzmgsnZEdvaovE5a6bsqvhQz6z89'

@vit
En utilisant le code de la MR 44:

gcli vault inspect -v predef-ed//Alice            
The linked <Base> account is Base[address:5DFJF7tY4bpbpcKPJcBTQaKuCDEPCpiz8TRjpmLeTtweqmXL, g1v1_pub_key:4XDM51AWupjKLWkVPxxJxrqN8DEhmPuY3S1FEepvHvxN, name:Some("predef-ed"), crypto_scheme:Some(Ed25519)]
Enter password to decrypt the <Base> account key
> Password ********
Substrate URI: 'bottom drive obey lake curtain smoke basket hold race lonely fit walk//Alice'
Crypto scheme: ed25519
Secret seed/mini-secret: '0xabf8e5bdbe30c65656c0a3cbd181ff8a56294a69dfedd27982aace4a76909115'
Public key (hex): '0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee'
SS58 Address: '5FA9nQDVg267DEd8m1ZypXLBnvN7SFxYwV7ndqSYGiN9TTpu'

Sinon, avec subkey

subkey inspect --scheme ed25519
URI: 
Secret Key URI `bottom drive obey lake curtain smoke basket hold race lonely fit walk//Alice` is account:
  Network ID:        substrate
  Secret seed:       0xabf8e5bdbe30c65656c0a3cbd181ff8a56294a69dfedd27982aace4a76909115
  Public key (hex):  0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee
  Account ID:        0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee
  Public key (SS58): 5FA9nQDVg267DEd8m1ZypXLBnvN7SFxYwV7ndqSYGiN9TTpu
  SS58 Address:      5FA9nQDVg267DEd8m1ZypXLBnvN7SFxYwV7ndqSYGiN9TTpu
1 Like

J’ai zappé de quoi retourne ce post. En effet, je trouve que ça fait sens de rester en ed25519, car il est possible de le convertir en sr25519 en passant par la seed. L’inverse n’est pas possible il me semble (à vérifier). Je n’arrive pas à accéder à la seed à partir du fichier d’authentification JSON chiffré généré par py-polkadot-sdk pour lequel sr25519 est utilisé.
Passer en sr25519 nous enferme, car il n’est possible de revenir à la source : la seed.

>>> from substrateinterface import Keypair
>>> k = Keypair.create_from_mnemonic("clock tomato moment expand derive hospital among spray abandon face pear border")
>>> k
<Keypair (address=5HWcaif99dWLkBSJr9pmwuLhCH1DBwQ7xxaifbcXCfSNoxje)>
>>> k.seed_hex
b'rv\x1c\x1d\x15\x91}\xa8\xe37\xc5\x8cz\x83c6\x89:\x93\x986\xe6\xf4Ux\xa5\xe0,\xc5\xa8\xb7\x82'

À partir du fichier d’authentification JSON chiffré :

k = Keypair.create_from_encrypted_json(auth_file_content, password)
<Keypair (address=5HDikVWZ2xHfqvVVFwex5zmRsH4LuR3KqMgKZYEbCSjStSKw)>
(Pdb) k.seed_hex
# c’est vide

Du coup, d’un point de vue choix de fichier d’authentification, il faudrait rester sur le format (E)WIF et non le JSON chiffré compatible Polkadot.js. py-polkadot-sdk ne gère que sr25519 pour la génération de ce fichier.

2 Likes