- package core
-
- import (
- "fmt"
- acm "github.com/tendermint/tendermint/account"
- . "github.com/tendermint/tendermint/common"
- ctypes "github.com/tendermint/tendermint/rpc/core/types"
- )
-
- func GenPrivAccount() (*ctypes.ResultGenPrivAccount, error) {
- return &ctypes.ResultGenPrivAccount{acm.GenPrivAccount()}, nil
- }
-
- // If the account is not known, returns nil, nil.
- func GetAccount(address []byte) (*ctypes.ResultGetAccount, error) {
- cache := mempoolReactor.Mempool.GetCache()
- account := cache.GetAccount(address)
- if account == nil {
- return nil, nil
- }
- return &ctypes.ResultGetAccount{account}, nil
- }
-
- func GetStorage(address, key []byte) (*ctypes.ResultGetStorage, error) {
- state := consensusState.GetState()
- account := state.GetAccount(address)
- if account == nil {
- return nil, fmt.Errorf("UnknownAddress: %X", address)
- }
- storageRoot := account.StorageRoot
- storageTree := state.LoadStorage(storageRoot)
-
- _, value := storageTree.Get(LeftPadWord256(key).Bytes())
- if value == nil {
- return &ctypes.ResultGetStorage{key, nil}, nil
- }
- return &ctypes.ResultGetStorage{key, value.([]byte)}, nil
- }
-
- func ListAccounts() (*ctypes.ResultListAccounts, error) {
- var blockHeight int
- var accounts []*acm.Account
- state := consensusState.GetState()
- blockHeight = state.LastBlockHeight
- state.GetAccounts().Iterate(func(key interface{}, value interface{}) bool {
- accounts = append(accounts, value.(*acm.Account))
- return false
- })
- return &ctypes.ResultListAccounts{blockHeight, accounts}, nil
- }
-
- func DumpStorage(address []byte) (*ctypes.ResultDumpStorage, error) {
- state := consensusState.GetState()
- account := state.GetAccount(address)
- if account == nil {
- return nil, fmt.Errorf("UnknownAddress: %X", address)
- }
- storageRoot := account.StorageRoot
- storageTree := state.LoadStorage(storageRoot)
- storageItems := []ctypes.StorageItem{}
- storageTree.Iterate(func(key interface{}, value interface{}) bool {
- storageItems = append(storageItems, ctypes.StorageItem{
- key.([]byte), value.([]byte)})
- return false
- })
- return &ctypes.ResultDumpStorage{storageRoot, storageItems}, nil
- }
|