diff --git a/CHANGELOG.md b/CHANGELOG.md index 50da62d15a..3bd6a7641e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (rpc) [tharsis#733](https://github.com/tharsis/ethermint/pull/733) add JSON_RPC endpoint `personal_unpair` * (rpc) [tharsis#740](https://github.com/tharsis/ethermint/pull/740) add JSON_RPC endpoint `personal_initializeWallet` * (rpc) [tharsis#743](https://github.com/tharsis/ethermint/pull/743) add JSON_RPC endpoint `debug_traceBlockByHash` +* (rpc) [tharsis#748](https://github.com/tharsis/ethermint/pull/748) add JSON_RPC endpoint `personal_listWallets` ### Bug Fixes diff --git a/rpc/ethereum/namespaces/personal/api.go b/rpc/ethereum/namespaces/personal/api.go index 945e6918ae..536b4516f3 100644 --- a/rpc/ethereum/namespaces/personal/api.go +++ b/rpc/ethereum/namespaces/personal/api.go @@ -238,3 +238,19 @@ func (api *PrivateAccountAPI) InitializeWallet(_ context.Context, url string) (s // TODO: Smartcard wallet not supported yet, refer to: https://github.com/ethereum/go-ethereum/blob/master/accounts/scwallet/README.md return "", fmt.Errorf("smartcard wallet not supported yet") } + +// RawWallet is a JSON representation of an accounts.Wallet interface, with its +// data contents extracted into plain fields. +type RawWallet struct { + URL string `json:"url"` + Status string `json:"status"` + Failure string `json:"failure,omitempty"` + Accounts []accounts.Account `json:"accounts,omitempty"` +} + +// ListWallets will return a list of wallets this node manages. +func (api *PrivateAccountAPI) ListWallets() []RawWallet { + api.logger.Debug("personal_ListWallets") + api.logger.Info("currently wallet level that manages accounts is not supported") + return ([]RawWallet)(nil) +} diff --git a/tests/rpc/personal_test.go b/tests/rpc/personal_test.go index 9b9d858c95..9d99eb64c4 100644 --- a/tests/rpc/personal_test.go +++ b/tests/rpc/personal_test.go @@ -152,3 +152,11 @@ func TestPersonal_InitializeWallet(t *testing.T) { _, err := CallWithError("personal_initializeWallet", []interface{}{""}) require.Equal(t, "smartcard wallet not supported yet", err.Error()) } + +func TestPersonal_ListWallets(t *testing.T) { + rpcRes := Call(t, "personal_listWallets", []interface{}{}) + var res []hexutil.Bytes + err := json.Unmarshal(rpcRes.Result, &res) + require.NoError(t, err) + require.Equal(t, ([]hexutil.Bytes)(nil), res) +}