I'm not sure what you mean by "sec" part; but the command for vault import does not allow to provide the secret part directly
You have to only provide the "-S" argument if you want to specify another secret-format than the default which is substrate (using SubstrateURI).
example:
#Check the proper Seed value for the test mnemonicsubkey inspect --scheme ed25519URI: Secret phrase: bottom drive obey lake curtain smoke basket hold race lonely fit walk Network ID: substrate Secret seed: 0xfac7959dbfe72f052e5a0c3c8d6530f202b02fd8f9f5ca3580ec8deb7797479e Public key (hex): 0x345071da55e5dccefaaa440339415ef9f2663338a38f7da0df21be5ab4e055ef Account ID: 0x345071da55e5dccefaaa440339415ef9f2663338a38f7da0df21be5ab4e055ef Public key (SS58): 5DFJF7tY4bpbpcKPJcBTQaKuCDEPCpiz8TRjpmLeTtweqmXL SS58 Address: 5DFJF7tY4bpbpcKPJcBTQaKuCDEPCpiz8TRjpmLeTtweqmXL#We can use that seed "fac7959dbfe72f052e5a0c3c8d6530f202b02fd8f9f5ca3580ec8deb7797479e" in the importgcli vault import -S seed > Seed: ********...#And by the way, this is also equivalent to calling with the default "substrate" format and providing# the "0x" prefixed seed as SURI: "0xfac7959dbfe72f052e5a0c3c8d6530f202b02fd8f9f5ca3580ec8deb7797479e"gcli vault import Substrate URI can be a mnemonic or a mini-secret ('0x' prefixed seed) together with optional derivation path> Substrate URI: ********> Enter password to encrypt the key: ********? Account Base[address:5DFJF7tY4bpbpcKPJcBTQaKuCDEPCpiz8TRjpmLeTtweqmXL, g1v1_pub_key:4XDM51AWupjKLWkVPxxJxrqN8DEhmPuY3S1FEepvHvxN, name:Some("predefined"), crypto_scheme:Some(Ed25519)] already exists. Do you want to update it?
Side note; I'm using a development branch from Poca that uses the "ed25519" crypto-scheme by default - which is why the addresses are different.
UPlanet utilise des portefeuilles "g1v1" liés à des géo-coordonnées (et des objets) dont les "id/pass" sont créés de cette façon :
G1v1 id: $SECRET$LAT
G1v1 password: $SECRET$LON
Entre lesquels l'application effectue des transactions.
Malheureusement gcli vault import -S g1v1 force une saisie via "prompt bloquant" qui n'est pas adapté aux traitements automatiques.
Il faudrait un mode non interactif : #37
Ensuite, comment réaliser les payements entre ces adresses...
Vaut-t-il mieux entrer tous les portefeuilles dans gcli (il y en a 654.000.000 !!) ou les ajouter un à un, faire la TX, puis les effacer du "vault" ?
Finalement, dois-je récupérer l'adresse V2 pour gcli account transfer <AMOUNT> <ADDRESS> ou est-il possible de mettre une adresse V1 ?
Une précision pour commencer; je suis assez nouveau dans les devs de la Gune et je connais surtout Gcli parceque j'ai récemment faire un changement pour la partie du vault.
@pokapow a une MR en cours qui ajoute la possibilité de donner tous les arguments de l'import en paramètres: !44 (merged)
Par contre, pour l'usage de clés G1v1; avec le passage à la v2 et les clés Substrate; je me demande si ce ne serait pas une meilleure idée d'utiliser les dérivations d'une seule clé pour toutes les "coordonnées" ?
En gros, à partir du mnemonic (ou du seed d'une clé g1v1 préfixé par "0x") on peut créer plein de dérivations.
Je vais faire un exemple avec une clé G1v1 (en utilisant la branche de la MR mentionnée plus haut); mais je me dois de préciser que c'est sans doute une mauvaise idée d'uiliser une clé G1v1 (avec id & mot-de-passe manuels) comme clé de base pour ajouter des dérivations.
D'un point de vue sécurité, il serait mieux de faire un compte basé sur mnémonique et avec les mêmes dérivations.
# Import de la clé de basegcli vault import -S g1v1 --g1v1-id"test_cesium_id"--g1v1-password"test_cesium_pwd"The G1v1 public key for the provided secret is: '86pW1doyJPVH3jeDPZNQa1UZFBo5zcdvHERcaeE758W7'> Enter password to encrypt the key: ********(Optional) Enter a name for the vault entry> Name: base-g1v1Creating <Base> account Base[address:5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4, g1v1_pub_key:86pW1doyJPVH3jeDPZNQa1UZFBo5zcdvHERcaeE758W7, name:Some("base-g1v1"), crypto_scheme:Some(Ed25519)]Change done
Pour le derive, il n'y a pas encore de support de tous les arguments en paramètres; mais on pourrait l'ajouter
2 manière possible d'ajouter les dérivations:
directement avec le path de dérivation complet (2 niveaux de dérivation hard "//")
gcli vault derive -a 5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4 Adding derivation to: Base[address:5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4, g1v1_pub_key:86pW1doyJPVH3jeDPZNQa1UZFBo5zcdvHERcaeE758W7, name:Some("base-g1v1"), crypto_scheme:Some(Ed25519)]Its parent hierarchy is this:┌─────────────────────────────────────────────────────────────────────────────────────┐│ SS58 Address/G1v1 public key Crypto Path Name │╞═════════════════════════════════════════════════════════════════════════════════════╡│ 5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4 ed25519 <Base> base-g1v1 ││ └ G1v1: 86pW1doyJPVH3jeDPZNQa1UZFBo5zcdvHERcaeE758W7 │└─────────────────────────────────────────────────────────────────────────────────────┘The linked <Base> account is Base[address:5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4, g1v1_pub_key:86pW1doyJPVH3jeDPZNQa1UZFBo5zcdvHERcaeE758W7, name:Some("base-g1v1"), crypto_scheme:Some(Ed25519)]Enter password to decrypt the <Base> account key> Password ********> Derivation path: //0.00//0.00Trying to create derivation with address '5CMWUKCfmKQHb7oHK3N9TLBpvmvm9LsdDX6c8q2FYnVDosBd'(Optional) Enter a name for the vault entry> Name: Creating derivation account Derivation[address:5CMWUKCfmKQHb7oHK3N9TLBpvmvm9LsdDX6c8q2FYnVDosBd, name:None, path:Some("//0.00//0.00"), parent:Some("5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4")]Change done
gcli vault derive -a 5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4 Adding derivation to: Base[address:5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4, g1v1_pub_key:86pW1doyJPVH3jeDPZNQa1UZFBo5zcdvHERcaeE758W7, name:Some("base-g1v1"), crypto_scheme:Some(Ed25519)]Its parent hierarchy is this:┌─────────────────────────────────────────────────────────────────────────────────────┐│ SS58 Address/G1v1 public key Crypto Path Name │╞═════════════════════════════════════════════════════════════════════════════════════╡│ 5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4 ed25519 <Base> base-g1v1 ││ └ G1v1: 86pW1doyJPVH3jeDPZNQa1UZFBo5zcdvHERcaeE758W7 │└─────────────────────────────────────────────────────────────────────────────────────┘The linked <Base> account is Base[address:5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4, g1v1_pub_key:86pW1doyJPVH3jeDPZNQa1UZFBo5zcdvHERcaeE758W7, name:Some("base-g1v1"), crypto_scheme:Some(Ed25519)]Enter password to decrypt the <Base> account key> Password ********> Derivation path: //0.00Trying to create derivation with address '5EzGGwwR7xrPzaoxKARy7j4QL83KdJBitqT2wQ4f6d1WU2ge'(Optional) Enter a name for the vault entry> Name: Creating derivation account Derivation[address:5EzGGwwR7xrPzaoxKARy7j4QL83KdJBitqT2wQ4f6d1WU2ge, name:None, path:Some("//0.00"), parent:Some("5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4")]Change done
On a du coup une arborescence dans ce cas-ci (mais les adresses des dérivations de 2ème niveau sont les mêmes; puisque leur Substrate URI est la même)
Et pour montrer cela, on peut utiliser la commande vault inspect avec '-a' ou '-v' et récupérer le Substrate URI complet lié à l'adresse ou au vault name
gcli vault inspect -v base-g1v1//1.00//1.00 Enter password to decrypt the <Base> account key> Password ********Substrate URI: '0x2101d2bc68de9ad149c06293bfe489c8608de576c88927aa5439a81be17aae84//1.00//1.00'
Ça peut faire le job si la dérivation (UPlanet a 5 niveaux d'arborescence: ex : //A/A, //4/10, //4./10., //4.1/10.3, //4.17/10.35) donne les même sous-clef sur tous les gcli.
De ce tu expliques ça à l'air d'être le cas... Tu confirmes que c'est possible ?
Oui, le même Substrate URI (avec le même crypto-scheme sr25519 ou ed25519) donnera toujours la même Adresse SS58.
Par contre, pour le path; dans mes exemples ce sont 2 niveaux de dérivations "hard" (les dérivatiosn "soft" ne sont pas compatibles avec tous les crypto-scheme je pense); donc des double "/" à chaque fois:
Exemples:
<mnemonic>//0.00//0.00
0x<seed>//0.00//0.00
Edit: J'oubliais qu'il y a un élément supplémentaire qui intervient dans l'adresse SS58: le "network address format". Quand on sera en "production" avec la v2, le "network format" utilisé sera "g1" et il donne des adresses qui commencent par "g1..."
Exemple en utilisant la commande subkey liée à Substrate et le Substrate URI mentionné plus haut.
Sans le network specifié, c'est équivalent au network "substrate"
subkey inspect --scheme ed25519 URI: Secret Key URI `0x2101d2bc68de9ad149c06293bfe489c8608de576c88927aa5439a81be17aae84` is account: Network ID: substrate Secret seed: 0x2101d2bc68de9ad149c06293bfe489c8608de576c88927aa5439a81be17aae84 Public key (hex): 0x697f6bd16ddebf142384e503fd3f3efc39fe5c7be7c693bd98d982403bb6eb74 Account ID: 0x697f6bd16ddebf142384e503fd3f3efc39fe5c7be7c693bd98d982403bb6eb74 Public key (SS58): 5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4 SS58 Address: 5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4#Equivalentsubkey inspect --scheme ed25519 -n substrateURI: Secret Key URI `0x2101d2bc68de9ad149c06293bfe489c8608de576c88927aa5439a81be17aae84` is account: Network ID: substrate Secret seed: 0x2101d2bc68de9ad149c06293bfe489c8608de576c88927aa5439a81be17aae84 Public key (hex): 0x697f6bd16ddebf142384e503fd3f3efc39fe5c7be7c693bd98d982403bb6eb74 Account ID: 0x697f6bd16ddebf142384e503fd3f3efc39fe5c7be7c693bd98d982403bb6eb74 Public key (SS58): 5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4 SS58 Address: 5ET2jhgJFoNQUpgfdSkdwftK8DKWdqZ1FKm5GKWdPfMWhPr4
Et en spécifiant le network pour "g1"
subkey inspect --scheme ed25519 -n g1 URI: Secret Key URI `0x2101d2bc68de9ad149c06293bfe489c8608de576c88927aa5439a81be17aae84` is account: Network ID: g1 Secret seed: 0x2101d2bc68de9ad149c06293bfe489c8608de576c88927aa5439a81be17aae84 Public key (hex): 0x697f6bd16ddebf142384e503fd3f3efc39fe5c7be7c693bd98d982403bb6eb74 Account ID: 0x697f6bd16ddebf142384e503fd3f3efc39fe5c7be7c693bd98d982403bb6eb74 Public key (SS58): g1MN6Vmscx6TK6F41EPhAYJY3UKa9iRUJ9j4Tbf1Wxy4doBAe SS58 Address: g1MN6Vmscx6TK6F41EPhAYJY3UKa9iRUJ9j4Tbf1Wxy4doBAe
OK. Merci pour les détails... J'avoue que je ne pige pas vraiment tout ;)
A part que je devrai utiliser un format "//...//..." pour le path.
Quels caractères sont acceptés ?
Tes exemples représentent des coordonnées sur 360° ou cela n'a rien à voir ?
Je pensais essayer un truc comme ça :
# Pour une UMAP (ex: 43.61_1.43)gcli vault derive -a [UPLANET_ADDRESS] --path "//UMAP//43.61_1.43" --name "umap-43.61_1.43"# Pour le SECTOR correspondant (43.6_1.4)gcli vault derive -a [UPLANET_ADDRESS] --path "//SECTOR//43.6_1.4" --name "sector-43.6_1.4"# Pour la REGION correspondante (43._1.)gcli vault derive -a [UPLANET_ADDRESS] --path "//REGION//43_1" --name "region-43_1"
Je vais attendre que les MR "non-interactive" et "output-json" soient ajoutées pour faire mes essais...
Les paths que j'ai pris comme exemple venaient d'un de tes exemples je pense.
Mais en gros, on peut normalement avoir plusieurs niveaux de dérivation hard "//" (pas sur qu'il y ait une limite)
J'avoue que je ne connais pas bien les restrictions qu'il pourrait y avoir pour les paths de dérivation eux-même; juste que le caractère "/" est probablement interdit vu qu'il sert à séparer les différents niveaux de paths de dérivation
Si tu sais builder Gcli en local, tu peux prendre la branche liée à !46 "json-output"; elle contient les changements des 2 MR (je l'ai mise à jour tout à l'heure).
Avec celle la, il y a moyen de faire import et derive en fournissant toutes les données - et on peut ajouter tout au début de la commande le paramètre "-o json" pour avoir une sortie json de plusieurs des commandes disponibles.
Si tu sais builder Gcli en local, tu peux prendre la branche liée à !46 "json-output"; elle contient les changements des 2 MR (je l'ai mise à jour tout à l'heure).
Je peux essayer, mais je ne sais pas trop comment faire...
Celle qui devrait passer en 1er est la MR !44 (merged) (en gros la possibilité de donner tous les arguments pour vault import et vault derive en plus d'utiliser le crypto-scheme ed25519 par défaut partout)
Mais si tu veux aussi le format de sortie JSON ajouté à d'autres endroits, la !46 se base sur la !44 (merged) et à presque tous ces changements (il en manque quelques uns que j'ai ajoutés depuis et pas encore rebase)
(A chaque fois, depuis une MergeRequest, tu peux voir tout en haut la branche associée)
J'avoue que je n'ai pas regardé pour la branche nostr et j'attendais également un retour à mon commentaire de la part de Poka (pour info, MR !45)
la branche nostr ajoute la gestion d'un profil (event kind=0) enregistrée sur un relay NOSTR et qui utilise (je ne sais pas comment elle se fait), mais doit dériver (ou être jumelle) de la clef du wallet...
Une fonction parfaite (à tester) pour déplacer le profil Cesium+ su compte membre dans Nostr ;)
Et on peut sauvegarder l'impact de l'argument global avec config save
gcli -v base-g1v1//0.00//1.00 config save Configuration updated!# C'est bien sauvé dans la configgcli config show Ğcli configduniter endpoint wss://archive-rpc.gdev.de.brussels.ovhindexer endpoint https://squid-hasura.gdev.de.brussels.ovh/v1/graphqladdress 5C5RDh8op763U3V8vNsBxcKAsuXX8bmc5r7uTW3ya2eceaqj(Vault: Derivation[address:5C5RDh8op763U3V8vNsBxcKAsuXX8bmc5r7uTW3ya2eceaqj, name:None, path:Some("//1.00"), parent:Some("5EzGGwwR7xrPzaoxKARy7j4QL83KdJBitqT2wQ4f6d1WU2ge")])
Option 2 : on modifie la config depuis le vault avec vault use et un argument '-a' ou '-v'
Exemple en changeant pour une autre adresse
gcli vault use -v base-g1v1//1.00//1.00 Using: Derivation[address:5H69Z4GaHbv2jqBYgQe6pvvbZUeBUebf9Mvsfp3aRBnepVFF, name:None, path:Some("//1.00"), parent:Some("5GRg4N48snD8a3KzAFakke6yJDQfpM3ntp2hkmYC5E3Q8vPE")]Configuration updated!# C'est bien sauvé dans la configgcli config show Ğcli configduniter endpoint wss://archive-rpc.gdev.de.brussels.ovhindexer endpoint https://squid-hasura.gdev.de.brussels.ovh/v1/graphqladdress 5H69Z4GaHbv2jqBYgQe6pvvbZUeBUebf9Mvsfp3aRBnepVFF(Vault: Derivation[address:5H69Z4GaHbv2jqBYgQe6pvvbZUeBUebf9Mvsfp3aRBnepVFF, name:None, path:Some("//1.00"), parent:Some("5GRg4N48snD8a3KzAFakke6yJDQfpM3ntp2hkmYC5E3Q8vPE")])
Pour ce qui est du format de sortie JSON
@pokapow a déjà une MR en cours pour ajouter le format de sortie JSON sur beaucoup de commandes