github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/accounts/keystore/keystore_plain.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 12:09:26</date>
    10  //</624342585397219328>
    11  
    12  
    13  package keystore
    14  
    15  import (
    16  	"encoding/json"
    17  	"fmt"
    18  	"os"
    19  	"path/filepath"
    20  
    21  	"github.com/ethereum/go-ethereum/common"
    22  )
    23  
    24  type keyStorePlain struct {
    25  	keysDirPath string
    26  }
    27  
    28  func (ks keyStorePlain) GetKey(addr common.Address, filename, auth string) (*Key, error) {
    29  	fd, err := os.Open(filename)
    30  	if err != nil {
    31  		return nil, err
    32  	}
    33  	defer fd.Close()
    34  	key := new(Key)
    35  	if err := json.NewDecoder(fd).Decode(key); err != nil {
    36  		return nil, err
    37  	}
    38  	if key.Address != addr {
    39  		return nil, fmt.Errorf("key content mismatch: have address %x, want %x", key.Address, addr)
    40  	}
    41  	return key, nil
    42  }
    43  
    44  func (ks keyStorePlain) StoreKey(filename string, key *Key, auth string) error {
    45  	content, err := json.Marshal(key)
    46  	if err != nil {
    47  		return err
    48  	}
    49  	return writeKeyFile(filename, content)
    50  }
    51  
    52  func (ks keyStorePlain) JoinPath(filename string) string {
    53  	if filepath.IsAbs(filename) {
    54  		return filename
    55  	}
    56  	return filepath.Join(ks.keysDirPath, filename)
    57  }
    58