Ich versuche, mehrere Wallet-Adressen mit einer einzigen Keystore-Datei zu generieren. Kann mir bitte jemand einen Rat geben, ob es möglich ist? ODER kann ein Keystore nur eine Wallet-Adresse haben?
Ich generiere Schlüsselspeicher und Konto einfach mit folgendem Code
ks := keystore.NewKeyStore("./dir", keystore.StandardScryptN, keystore.StandardScryptP)
// Create a new account with the specified encryption passphrase
newAcc, err := ks.NewAccount(password)
// Return address & array
return newAcc.Address.String(), err
Problem, mit dem ich konfrontiert bin, ist, dass jedes Mal eine neue Datei aufgrund der Funktion erstellt wird NewKeyStore
. Ich kann keine geeignete Funktion finden, keystore.go
die den Dateinamen als Pfad verwendet
Bitte helfen Sie.
Danke
Keystores von go-ethereum können nur ein Wallet-Schlüsselpaar pro Datei enthalten. Um Keystores zuerst zu generieren, müssen Sie NewKeyStore
es aufrufen und ihm den Verzeichnispfad zum Speichern der Keystores geben. Danach können Sie eine neue Wallet generieren, indem Sie die Methode aufrufen und NewAccount
ihr ein Passwort zur Verschlüsselung übergeben. Bei jedem Aufruf NewAccount
wird eine neue Keystore-Datei auf der Festplatte generiert.
Hier ist ein vollständiges Beispiel für die Generierung eines neuen Keystore-Kontos:
package main
import (
"fmt"
"log"
"github.com/ethereum/go-ethereum/accounts/keystore"
)
func main() {
ks := keystore.NewKeyStore("./wallets", keystore.StandardScryptN, keystore.StandardScryptP)
password := "secret"
account, err := ks.NewAccount(password)
if err != nil {
log.Fatal(err)
}
fmt.Println(account.Address.Hex()) // 0x20F8D42FB0F667F2E53930fed426f225752453b3
}
Das Importieren Ihres Schlüsselspeichers ist nicht wirklich intuitiv, und ich hoffe, dass jemand den Ablauf ändern kann, oder wenn jemand einen besseren Weg kennt, aber im Grunde müssen Sie wie gewohnt erneut aufrufen und dann die Methode aufrufen, die den Schlüsselspeicher NewKeyStore
JSON Import
akzeptiert Daten als Bytes. Das zweite Argument ist das Passwort, das zum Verschlüsseln verwendet wird, um es zu entschlüsseln. Das dritte Argument besteht darin, ein neues Verschlüsselungskennwort anzugeben, aber wir verwenden im Beispiel dasselbe. Durch das Importieren des Kontos erhalten Sie wie erwartet Zugriff auf das Konto, es wird jedoch eine neue Keystore-Datei generiert! Es hat keinen Sinn, zwei gleiche Dinge zu haben, also löschen wir das alte.
Hier ist ein vollständiges Beispiel für den Import eines Schlüsselspeichers und den Zugriff auf das Konto.
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"github.com/ethereum/go-ethereum/accounts/keystore"
)
func main() {
file := "./wallets/UTC--2018-07-04T09-58-30.122808598Z--20f8d42fb0f667f2e53930fed426f225752453b3"
ks := keystore.NewKeyStore("./tmp", keystore.StandardScryptN, keystore.StandardScryptP)
jsonBytes, err := ioutil.ReadFile(file)
if err != nil {
log.Fatal(err)
}
password := "secret"
account, err := ks.Import(jsonBytes, password, password)
if err != nil {
log.Fatal(err)
}
fmt.Println(account.Address.Hex()) // 0x20F8D42FB0F667F2E53930fed426f225752453b3
if err := os.Remove(file); err != nil {
log.Fatal(err)
}
}
Auf diese Weise kann ich den Schlüsselspeicher wiederherstellen, aber ich hoffe, dass jemand auf eine sauberere Weise Licht ins Dunkel bringen kann.