一个密钥库是包含加密的文件,钱包 私钥。在密钥库中去 - 复仇只能包含一个钱包每个文件的密钥对。要首先生成密钥库,您必须调用NewKeyStore给它提供目录路径以保存密钥库。之后,您可以通过调用向其传递密码进行加密的方法来生成新的钱包。每次调用时,它将在磁盘上生成一个新的密钥库文件。NewAccountNewAccount
这是生成新密钥库帐户的完整示例。
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
现在,要导入密钥库,您基本上需要NewKeyStore像往常一样再次调用,然后调用Import将密钥库 JSON数据接受为字节的方法。第二个参数是用于对其进行解密以对其进行加密的密码。第三个参数是指定一个新的加密密码,但在示例中我们将使用相同的密码。导入帐户将使您能够按预期访问该帐户,但是它将生成一个新的密钥库文件!拥有两个相同的东西是没有意义的,因此我们将删除旧的东西。
这是导入密钥库并访问帐户的示例。
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()) // 0x20F8D42FB0F667F2E53930fed426f225752453b3if err := os.Remove(file); err != nil { log.Fatal(err)}
完整代码
package mainimport ( "fmt" "io/ioutil" "log" "os" "github.com/ethereum/go-ethereum/accounts/keystore")func createKs() { ks := keystore.NewKeyStore("./tmp", keystore.StandardScryptN, keystore.StandardScryptP) password := "secret" account, err := ks.NewAccount(password) if err != nil { log.Fatal(err) } fmt.Println(account.Address.Hex()) // 0x20F8D42FB0F667F2E53930fed426f225752453b3}func importKs() { file := "./tmp/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) }}func main() { createKs() //importKs()}