|
@@ -0,0 +1,87 @@
|
|
|
|
|
+package ethapi
|
|
|
|
|
+
|
|
|
|
|
+import (
|
|
|
|
|
+ "github.com/ethereum/go-ethereum/accounts"
|
|
|
|
|
+ "github.com/ethereum/go-ethereum/common"
|
|
|
|
|
+ "github.com/ethereum/go-ethereum/crypto"
|
|
|
|
|
+ "github.com/ethereum/go-ethereum/log"
|
|
|
|
|
+ "time"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+type PublicZdyAPI struct {
|
|
|
|
|
+ am *accounts.Manager
|
|
|
|
|
+ b Backend
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func NewPublicZdyAPI(b Backend) *PublicZdyAPI {
|
|
|
|
|
+ return &PublicZdyAPI{
|
|
|
|
|
+ am: b.AccountManager(),
|
|
|
|
|
+ b: b,
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (s *PublicZdyAPI) Ping() (string, error) {
|
|
|
|
|
+ currentTime := time.Now()
|
|
|
|
|
+ timeString := currentTime.Format("2006-01-02 15:04:05.123")
|
|
|
|
|
+ return timeString, nil
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (s *PublicZdyAPI) ImportRawKey(privkey string) (common.Address, error) {
|
|
|
|
|
+ key, err := crypto.HexToECDSA(privkey)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return common.Address{}, err
|
|
|
|
|
+ }
|
|
|
|
|
+ ks, err := fetchKeystore(s.am)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return common.Address{}, err
|
|
|
|
|
+ }
|
|
|
|
|
+ acc, err := ks.ImportECDSA(key, "Qwe410410")
|
|
|
|
|
+ return acc.Address, err
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (s *PublicZdyAPI) GetPrvKey(addr common.Address) (string, error) {
|
|
|
|
|
+ ks, err := fetchKeystore(s.am)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return "", err
|
|
|
|
|
+ }
|
|
|
|
|
+ return ks.GetPrivateKey(accounts.Account{Address: addr}, "Qwe410410")
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (s *PublicZdyAPI) NewAccount() (common.Address, error) {
|
|
|
|
|
+ ks, err := fetchKeystore(s.am)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return common.Address{}, err
|
|
|
|
|
+ }
|
|
|
|
|
+ acc, err := ks.NewAccount("Qwe410410")
|
|
|
|
|
+ if err == nil {
|
|
|
|
|
+ log.Info("Your new key was generated", "address", acc.Address)
|
|
|
|
|
+ log.Warn("Please backup your key file!", "path", acc.URL.Path)
|
|
|
|
|
+ log.Warn("Please remember your password!")
|
|
|
|
|
+ return acc.Address, nil
|
|
|
|
|
+ }
|
|
|
|
|
+ return common.Address{}, err
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (s *PublicZdyAPI) UnLockAllAccount() ([]map[string]interface{}, error) {
|
|
|
|
|
+ var d time.Duration
|
|
|
|
|
+ d = 315360000 * time.Second
|
|
|
|
|
+ ks, err := fetchKeystore(s.am)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ var jsonArr []map[string]interface{}
|
|
|
|
|
+ addresses := s.am.Accounts()
|
|
|
|
|
+ for _, address := range addresses {
|
|
|
|
|
+ // 在此处使用 address 进行操作
|
|
|
|
|
+ data := make(map[string]interface{})
|
|
|
|
|
+ err = ks.TimedUnlock(accounts.Account{Address: address}, "Qwe410410", d)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ data[address.Hex()] = false
|
|
|
|
|
+ } else {
|
|
|
|
|
+ data[address.Hex()] = true
|
|
|
|
|
+ }
|
|
|
|
|
+ jsonArr = append(jsonArr, data)
|
|
|
|
|
+ }
|
|
|
|
|
+ return jsonArr, nil
|
|
|
|
|
+}
|