Le client Python py-substrate-interface ne gère pas la création de dérivation en ED25519.
C’est donc à nous de le faire si on utilise ED25519 au lieu de SR25519 pour les nouveaux comptes V2.
Pour l’instant, j’échoue à obtenir l’équivalent des outils Rust/Javascript comme 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
Avec le mnémonique de dev :
bottom drive obey lake curtain smoke basket hold race lonely fit walk
et la dérivation “//Alice”,
J’ai le mini-secret suivant :
b'\xfa\xc7\x95\x9d\xbf\xe7/\x05.Z\x0c<\x8de0\xf2\x02\xb0/\xd8\xf9\xf5\xca5\x80\xec\x8d\xebw\x97G\x9e'
Le client py-substrate-interface calcul ce chaincode pour “//Alice” :
b'\x14Alice\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
Et une fois le mini-secret dérivé avec ce chaincode, je dois obtenir ce mini-secret :
derived_mini_secret = derive_ed25519_hard(mini_secret, cc)
assert derived_mini_secret.hex() == "abf8e5bdbe30c65656c0a3cbd181ff8a56294a69dfedd27982aace4a76909115"
Mais j’échoue car le code proposé par Vector n’est pas bon.
Ce code n’est pas bon :
def derive_ed25519_hard(mini_secret: bytes, cc: bytes) -> bytes:
assert len(mini_secret) == 32
assert len(cc) == 32
# Encoder le tuple complet comme en Rust
data = b'Ed25519HDKD' + b'\x00' + mini_secret + b'\x00' + cc
return hashlib.blake2b(data, digest_size=32).digest()
En s’appuyant sur le code Rust disponible ici :
/// Derive a single hard junction.
fn derive_hard_junction(secret_seed: &Seed, cc: &[u8; 32]) -> Seed {
use codec::Encode;
("Ed25519HDKD", secret_seed, cc).using_encoded(sp_crypto_hashing::blake2_256)
}
Pouvez-vous m’aider à corriger le code Python pour obtenir le bon mini-secret dérivé ?