Go语言开发以太坊:密钥库

一个密钥库是包含加密的文件,钱包 私钥。在密钥库中去 - 复仇只能包含一个钱包每个文件的密钥对。要首先生成密钥库,您必须调用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)}

完整代码

keystore.go

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()}


链客

2019.11.26
4370
收藏

个评论:

发表评论

感谢您的善举,每一次解答会成为新人的灯塔。回答被采纳后获得20算力和相应LK币奖励。

关闭