Does polkadot.js lib actually support multilang menmonic ?
I don’t find any information about it on internet…
@kimamila do you know ?
Does polkadot.js lib actually support multilang menmonic ?
I don’t find any information about it on internet…
@kimamila do you know ?
Fwiw Python substrateinterface supports a few languages for the mnemonic, so at least the principle exists in the ecosystem.
but i need it in polkadot.js
Bon j’ai fait une MR: add French mnemonic file by poka-IT · Pull Request #1689 · polkadot-js/common · GitHub
J’ai ajouté le fichier bip39 french au format exact qu’ils attendent, et ajouté l’import:
J’ai pas trouvé de branche dev donc j’ai MR sur master, ils me diront…
Si quelqu’un veut continuer à rendre cette lib multilang c’est avec plaisir, j’suis pas js à la base et j’ai pas mal de truc sur le feux ^^
En cado mon script python pour convertir la list bip39 aux format attendu par polkadotjs:
#!/usr/bin/env python3
import json
from urllib.request import urlopen
# utility
def load_json(data):
get_data = open(data)
return json.load(get_data)
# convert
mnemo_final = ''
mnemo_brut = load_json('french.json')
i=0
lenght=len(mnemo_brut)
for word in mnemo_brut:
if (i == lenght-1):
mnemo_final = mnemo_final + word
else:
mnemo_final = mnemo_final + word + '|'
i=i+1
FINAL_DOC = '''// Adapted from the bitcoinjs/bip39 source
// https://github.com/bitcoinjs/bip39/blob/1d063b6a6aee4145b34d701037cd3e67f5446ff9/ts_src/
export default '%s'.split('|');
''' % (mnemo_final)
print(FINAL_DOC)
# dump file
doc_file = open('bip39-fr.ts', "w")
doc_file.write(FINAL_DOC)
Bon je sais très bien que ça va pas être aussi simple de rendre la lib multlang mais faut bien commencer quoi
This will actually not get used as coded in this PR. The reasons being -
- The WASM bip39 execution path is the one that gets executed in 99.9% of the cases (JS is only used as a fallback when WASM is not available in the environment)
- The actual JS code here only used the
DEFAULT_WORDLIST
import (I believe CI will actually complain about the unused import here)So basically with this is won’t do anything. There is a way to do multiple languages, but it won’t be simple.
- The WASM environment needs to take a wordlist as input (the bonus is that this reduces bundle size, i.e. currently both the WASM and JS environment has a copy)
- Execution needs to use this list
- The same logic for specification should happen in the JS environment (it could be as simple as
setWordlist(...)
before execution happens)Overall, since each list adds to the bundle sizes (which is a huge ongoing problem), it will therefore need to be up to the developer using it to specify, instead of “having all available always”.
Faut les scouer un peu là
J’ai envie de créer un fork de polkadotjs-common et de le rendre juste French uniquement lol
Le temps qu’ils rendent la lib multilang.
Comme ça Ğecko mobile beta proposera des mnemonic Français uniquement.
Bon ça doit pas être si simple faut toucher à certains trucs dont j’ai aucune idée…
Est-ce qu’il y a le même nombre de mots dans le dictionnaire de chaque langue, ou au moins, plus de mots en français qu’en anglais ? Si oui, tu peux utiliser les mnemonics anglais de polkadotjs et mapper les mots avec le dictionnaire français. Mais ça risque de ne pas être compatible avec d’autres clients.
Je sais pas si c’est lié, mais j’ai trouvé ça, une doc de crate Rust de Bip39, y a que l’anglais… Ca sent pas bon en effet…
The team is basically me for anything and everything in polkadot-js. It is certainly something I want to do since “injecting the wordlist” results in a nice footprint drop (I did get the Rust bip39 dev to make the required changes to his lib), but it has only been hovering with no action taken. The reality is that most probably unless there is a PR that comes in with all the moving parts, it will take “forever” to get to.
(It is also not even logged, i.e. it only exists in my mind, see Issues · polkadot-js/wasm · GitHub)
Ok le gars est tout seul à dev polkadotjs ??
C’est pas du bus factor ça ?
Les utilisateurs de cryptomonnaie sont tous des ingénieurs hipster barbus anglophones, et à quoi servent les autres langues finalement ?
Possibilités que je vois :
Note : subxt, la crate client Rust qu’on utilise pour Gcli, utilise sp_core, une crate cœur de substrate, qui utilise bip32 mais n’a pas prévu le support multilingue.
Ah mais c’est une super idée temporaire !!
Mais du coup j’ai besoin de faire que ces 3 points, je vois pas pk on devrait faire la suite.
Je laisse la lib gérer les mnemonic anglais comme elle sait faire, mais j’affiche à l’utilisateur les mot français correspondants à la volé.
Mais bon je sais pas si les mnemonic français que ça donnera au gens seront fonctionnels avec la lib french quand elle fonctionnera…
Je voulais dire qu’il suffisait de faire un des points.
Mais faire le (1) signifie qu’il faut dire aux utilisateurs de mnémoniques français qu’ils ne sont compatibles qu’avec Gecko, et seulement jusqu’à ce qu’un dictionnaire plus standard soit utilisé.
Ok ça me parrait pas mal comme solution temporaire ça permet de:
Vous êtes OK avec ça ?
edit: je ne sais pas si je vais le faire hein, c’est quand même un peu de taf côté gecko (ptetre 4h) pour gérer tout ça en multilang mnemonic (déjà actuellement multilang tout court), alors qu’il ne me reste que 3 jours pour sortir une version stable (10 Décembre).
Extrait des spec SLIP-0039 :
Localization
No localization is supported. This standard deals with a set of English words only. Previous attempts with arbitrary wordlists caused lots of confusion among users and decreased interoperability across various implementations.
Wordlist
The wordlist mandated by this SLIP is available here. Several criteria were applied in creation of the list:
- The wordlist is alphabetically sorted.
- No word is shorter than 4 letters.
- No word is longer than 8 letters.
- All words begin with a unique 4-letter prefix.
- The wordlist contains only common English words (+ the word “satoshi”).
- The minimum Damerau-Levenshtein distance between any two words is at least 2.
- The similarity between the pronunciation of any two words has been minimized.
(see the test which checks whether these criteria are fulfilled).
Moi qui suis fan de parler français ou autre langue native des personnes à qui on s’adresse plutôt que d’avoir de l’anglais partout, sur le mnémonic, je suis plus sceptique :
La liste de mots français bip39 officiel existe déjà (depuis 2018):
Et est utilisé dans pas mal d’outils déjà.
Pour le reste, je suis d’accords qu’il s’agit d’un élément de sécurité et non d’UX.
Je ne suis pas contre l’idée de n’utiliser que des mnemonic anglais si cela concerne une question de sécurité (et ça me fera moins de boulo lol).
Malheureusement BIP39 ne permet pas de passer une même phrase d’une langue à une autre (alors qu’ils auraient pu associer un numéro à chaque mot, et hasher la suite de numéros) :
To create a binary seed from the mnemonic, we use the PBKDF2 function with a mnemonic sentence (in UTF-8 NFKD) used as the password and the string “mnemonic” + passphrase (again in UTF-8 NFKD) used as the salt. The iteration count is set to 2048 and HMAC-SHA512 is used as the pseudo-random function. The length of the derived key is 512 bits (= 64 bytes).
bips/bip-0039.mediawiki at master · bitcoin/bips · GitHub
Du coup un inconvénient de la phrase dans une langue à caractère spéciaux est que si on se retrouve face à un clavier auquel il manque des accents, on est embêté. Pour la plupart des langues à alphabet latin ça ne devrait pas gêner (si on peut deviner les mots en ignorant les accents), mais pour le chinois c’est un problème.
Le SLIP 39 est une évolution du BIP 39 on dirait, mais même le BIP 39 décourage l’usage de mots non anglais :
Je fini par penser également que ce sera plus sécurisé et moins de boulot aussi !
Si on est tous d’accord pour suivre les recommandations des specs, j’enlèverai le support des langues de mnemonic dans Tikka.
The way to introduce this has been logged polkadot-js/wasm#452 - once available we can have this functionality.
Je me permets de relancer cette discussion.
Dans la mesure où de nombreux utilisateurs de Ğ1 (au choix ou cumulé) :
le fait que les phrases de passe ne soient disponibles qu’en anglais sera plus qu’un frein, un blocage pour nombre de ces personnes. Avoir un système de traduction me semble nécessaire pour faciliter au plus grand nombre la migration en V2.
Le système le plus simple serait, il me semble, de s’appuyer sur bips/bip-0039 at master · bitcoin/bips · GitHub .
Tu peux ajouter :
Pour eux, certains mots sont ressentis comme étant à “énergie négative”. La question qui m’a été posé est :
“Serait-il possible de faire le retirage d’un seul mot et pas des 12 d’un coup ?”
En faisant ça on réduit l’entropie de la phrase, on la rend plus prédictible donc moins forte. Même faire plusieurs essais peut réduire la qualité de l’aléatoire (si on refuse toutes les phrases contenant certains mots, on réduit le vocabulaire donc le nombre de phrases possibles).
J’ai moi-même anticiper cela en implémentant le mnémonique multilingue (choix d’une langue disponible) dans Tikka.
Cela ne fonctionnait pas car l’api Python ne le supportait pas.
Mais le développeur de l’API Python ne pouvait le faire sans le bind Python en Rust qui ne le supportait pas non plus.
Maintenant, le binding Python en Rust supporte le multilingue ainsi que l’API Python et donc Tikka.
Mais cela a entraîné d’autres problèmes ailleurs plus tard car l’éco système technique est malheureusement anglo-saxon.
Implémenter le BIP39 n’est pas le problème, c’est comme l’IP V6, c’est mieux mais ce n’est pas adopté par la majorité des outils.
Et je le répète :
Since the vast majority of BIP39 wallets supports only the English wordlist, it is strongly discouraged to use non-English wordlists for generating the mnemonic sentences.
Donc faire créer à 8000 personnes des mnémoniques en français ou espagnols ou italiens semble être une bombe à retardement pour la compatibilité avec les autres logiciels gestionnaires de portefeuilles. Amha.
Plus la V2 sera adoptée par le grand public, moins on aura de personnes qui voudront un mnémonique “au chocolat”, “à la vanille”, “avec des mots doux”, et bien plus de gens qui le copieront/colleront sans se soucier du contenu de ce machin de douze mots dont ils se contreficheront du moment qu’il restaure bien leur compte.