package v38_5 import ( "encoding/json" "github.com/tendermint/tendermint/crypto" sdk "github.com/cosmos/cosmos-sdk/types" ) // BaseAccount - a base account structure. // This can be extended by embedding within in your AppAccount. // However one doesn't have to use BaseAccount as long as your struct // implements Account. type BaseAccount struct { Address sdk.AccAddress `json:"address" yaml:"address"` Coins sdk.Coins `json:"coins" yaml:"coins"` PubKey crypto.PubKey `json:"public_key" yaml:"public_key"` AccountNumber uint64 `json:"account_number" yaml:"account_number"` Sequence uint64 `json:"sequence" yaml:"sequence"` } // NewBaseAccount creates a new BaseAccount object func NewBaseAccount(address sdk.AccAddress, coins sdk.Coins, pubKey crypto.PubKey, accountNumber uint64, sequence uint64) *BaseAccount { return &BaseAccount{ Address: address, Coins: coins, PubKey: pubKey, AccountNumber: accountNumber, Sequence: sequence, } } type baseAccountPretty struct { Address sdk.AccAddress `json:"address" yaml:"address"` Coins sdk.Coins `json:"coins" yaml:"coins"` PubKey string `json:"public_key" yaml:"public_key"` AccountNumber uint64 `json:"account_number" yaml:"account_number"` Sequence uint64 `json:"sequence" yaml:"sequence"` } // UnmarshalJSON unmarshals raw JSON bytes into a BaseAccount. func (acc *BaseAccount) UnmarshalJSON(bz []byte) error { var alias baseAccountPretty if err := json.Unmarshal(bz, &alias); err != nil { return err } if alias.PubKey != "" { pk, err := sdk.GetPubKeyFromBech32(sdk.Bech32PubKeyTypeAccPub, alias.PubKey) if err != nil { return err } acc.PubKey = pk } acc.Address = alias.Address acc.Coins = alias.Coins acc.AccountNumber = alias.AccountNumber acc.Sequence = alias.Sequence return nil }