Go-Ethereum

Golang 相當於在節點上列出賬戶 - web3.eth.Accounts()

  • March 19, 2019

有誰知道是否可以使用 golang 獲取節點上的帳戶列表,在撥號到節點後,基本 PoC 會假設帳戶已經通過 CLI 解鎖

基本上尋找與web3.eth.Accounts()已通過 CLI 解鎖的遠端 geth 節點上的帳戶地址相同的功能或列出帳戶地址

一種方法是與密鑰庫互動,這是我為與密鑰庫函式“GetAllKeys”互動而編寫的一個包,它將列出所有帳戶。包密鑰庫

import (
   "log"

   "github.com/ethereum/go-ethereum/accounts"
   "github.com/ethereum/go-ethereum/accounts/keystore"
   "github.com/ethereum/go-ethereum/common"
)

type KeyStore struct {
   Handle *keystore.KeyStore
}

func SetUpKeyStore(kp string) *KeyStore {
   ks := &KeyStore{}
   ks.Handle = keystore.NewKeyStore(kp, keystore.LightScryptN, keystore.LightScryptP)
   return ks
}

func (ks *KeyStore) CreateNewKeys(password string) accounts.Account {
   account, err := ks.Handle.NewAccount(password)
   if err != nil {
       log.Panic(err)
   }
   return account
}

func (ks *KeyStore) GetKeysByAddress(address string) accounts.Account {

   var account accounts.Account
   var err error
   if ks.Handle.HasAddress(common.HexToAddress(address)) {
       if account, err = ks.Handle.Find(accounts.Account{Address: common.HexToAddress(address)}); err != nil {
           log.Panic(err)
       }
   }
   return account
}

func (ks *KeyStore) GetAllKeys() []accounts.Account {

   return ks.Handle.Accounts() 
}

最終編寫了我自己的實現,向節點發送了一個 post 請求,這幾乎就是 web3 在 RPC/WS 端點下所做的事情

引用自:https://ethereum.stackexchange.com/questions/63390