README
¶
Topup
Heimdall Topup is an amount which will be used to pay fees on Heimdall chain.
There are two ways to topup your account:
- When new validator joins, they can mention a
topup
amount as top-up in addition to the staked amount, which will be moved as balance on Heimdall chain to pays fees on Heimdall. - A user can directly call the top-up function on the staking smart contract on Ethereum to increase top-up balance on Heimdall.
Messages
MsgTopup
MsgTopup
transaction is responsible for minting balance to an address on Heimdall based on Ethereum chain's TopUpEvent
on staking manager contract.
Handler for this transaction processes top-up and increases the balance only once for any given msg.TxHash
and msg.LogIndex
. It throws Older invalid tx found
error, if trying to process the top-up more than once.
Here is the structure for the top-up transaction message:
type MsgTopup struct {
FromAddress types.HeimdallAddress `json:"from_address"`
User types.HeimdallAddress `json:"user"`
Fee sdk.Int `json:"fee"`
TxHash types.HeimdallHash `json:"tx_hash"`
LogIndex uint64 `json:"log_index"`
BlockNumber uint64 `json:"block_number"`
}
MsgWithdrawFee
MsgWithdrawFee
transaction is responsible for withdrawing balance from Heimdall to Ethereum chain. A Validator can withdraw any amount from Heimdall.
Handler processes the withdraw by deducting the balance from the given validator and prepares the state to send the next checkpoint. The next possible checkpoint will contain the withdraw related state for the specific validator.
Handler gets validator information based on ValidatorAddress
and processes the withdraw.
// MsgWithdrawFee - high-level transaction of the fee coin withdrawal module
type MsgWithdrawFee struct {
UserAddress types.HeimdallAddress `json:"from_address"`
Amount sdk.Int `json:"amount"`
}
CLI Commands
Topup fee
heimdallcli tx topup fee --fee-amount <fee-amount> --log-index <log-index> --tx-hash <transaction-hash> --user <validator ID> --block-number <block-number>
Withdraw fee
heimdallcli tx topup withdraw --amount=<withdraw-amount>
To check reflected topup on account run following command
heimdallcli query auth account <validator-address> --trust-node
REST APIs
Topup fee
curl -X POST "http://localhost/topup/fee" -H "accept: application/json" -d "{
"block_number": 0,
"fee": "string",
"log_index": 0,
"tx_hash": "string",
"user": "string"
}"
Withdraw fee
curl -X POST "http://localhost/topup/withdraw" -H "accept: application/json" -d "{
"amount": "string",
}"
Documentation
¶
Index ¶
- Variables
- func ExportGenesis(ctx sdk.Context, keeper Keeper) types.GenesisState
- func GetDividendAccountMapKey(address []byte) []byte
- func GetTopupSequenceKey(sequence string) []byte
- func HandleMsgTopup(ctx sdk.Context, k Keeper, msg types.MsgTopup, ...) sdk.Result
- func HandleMsgWithdrawFee(ctx sdk.Context, k Keeper, msg types.MsgWithdrawFee) sdk.Result
- func InitGenesis(ctx sdk.Context, keeper Keeper, data types.GenesisState)
- func NewHandler(k Keeper, contractCaller helper.IContractCaller) sdk.Handler
- func NewPostTxHandler(k Keeper, contractCaller helper.IContractCaller) hmTypes.PostTxHandler
- func NewQuerier(k Keeper, contractCaller helper.IContractCaller) sdk.Querier
- func NewSideTxHandler(k Keeper, contractCaller helper.IContractCaller) hmTypes.SideTxHandler
- func PostHandleMsgTopup(ctx sdk.Context, k Keeper, msg types.MsgTopup, ...) sdk.Result
- func SideHandleMsgTopup(ctx sdk.Context, k Keeper, msg types.MsgTopup, ...) (result abci.ResponseDeliverSideTx)
- type AppModule
- func (AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock)
- func (AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate
- func (am AppModule) ExportGenesis(ctx sdk.Context) json.RawMessage
- func (AppModule) GenerateGenesisState(simState *hmModule.SimulationState)
- func (am AppModule) InitGenesis(ctx sdk.Context, data json.RawMessage) []abci.ValidatorUpdate
- func (AppModule) Name() string
- func (am AppModule) NewHandler() sdk.Handler
- func (am AppModule) NewPostTxHandler() hmTypes.PostTxHandler
- func (am AppModule) NewQuerierHandler() sdk.Querier
- func (am AppModule) NewSideTxHandler() hmTypes.SideTxHandler
- func (AppModule) ProposalContents(simState hmModule.SimulationState) []simTypes.WeightedProposalContent
- func (AppModule) QuerierRoute() string
- func (AppModule) RandomizedParams(r *rand.Rand) []simTypes.ParamChange
- func (AppModule) RegisterInvariants(_ sdk.InvariantRegistry)
- func (AppModule) RegisterStoreDecoder(sdr hmModule.StoreDecoderRegistry)
- func (AppModule) Route() string
- func (AppModule) WeightedOperations(_ hmModule.SimulationState) []simTypes.WeightedOperation
- type AppModuleBasic
- func (AppModuleBasic) DefaultGenesis() json.RawMessage
- func (AppModuleBasic) GetQueryCmd(cdc *codec.Codec) *cobra.Command
- func (AppModuleBasic) GetTxCmd(cdc *codec.Codec) *cobra.Command
- func (AppModuleBasic) Name() string
- func (AppModuleBasic) RegisterCodec(cdc *codec.Codec)
- func (AppModuleBasic) RegisterRESTRoutes(ctx context.CLIContext, rtr *mux.Router)
- func (AppModuleBasic) ValidateGenesis(bz json.RawMessage) error
- func (AppModuleBasic) VerifyGenesis(bz map[string]json.RawMessage) error
- type Keeper
- func (k *Keeper) AddDividendAccount(ctx sdk.Context, dividendAccount hmTypes.DividendAccount) error
- func (k *Keeper) AddFeeToDividendAccount(ctx sdk.Context, userAddress hmTypes.HeimdallAddress, fee *big.Int) sdk.Error
- func (k *Keeper) CheckIfDividendAccountExists(ctx sdk.Context, userAddr hmTypes.HeimdallAddress) (ok bool)
- func (keeper Keeper) Codespace() sdk.CodespaceType
- func (k *Keeper) GetAllDividendAccounts(ctx sdk.Context) (dividendAccounts []hmTypes.DividendAccount)
- func (k *Keeper) GetDividendAccountByAddress(ctx sdk.Context, address hmTypes.HeimdallAddress) (dividendAccount hmTypes.DividendAccount, err error)
- func (keeper *Keeper) GetTopupSequences(ctx sdk.Context) (sequences []string)
- func (keeper *Keeper) HasTopupSequence(ctx sdk.Context, sequence string) bool
- func (k *Keeper) IterateDividendAccountsByPrefixAndApplyFn(ctx sdk.Context, prefix []byte, ...)
- func (keeper *Keeper) IterateTopupSequencesAndApplyFn(ctx sdk.Context, f func(sequence string) error)
- func (keeper Keeper) Logger(ctx sdk.Context) log.Logger
- func (keeper *Keeper) SetTopupSequence(ctx sdk.Context, sequence string)
Constants ¶
This section is empty.
Variables ¶
var ( // DefaultValue default value DefaultValue = []byte{0x01} // TopupSequencePrefixKey represents topup sequence prefix key TopupSequencePrefixKey = []byte{0x81} DividendAccountMapKey = []byte{0x82} // prefix for each key for Dividend Account Map )
Functions ¶
func ExportGenesis ¶
func ExportGenesis(ctx sdk.Context, keeper Keeper) types.GenesisState
ExportGenesis returns a GenesisState for a given context and keeper.
func GetDividendAccountMapKey ¶ added in v0.1.7
GetDividendAccountMapKey returns dividend account map
func GetTopupSequenceKey ¶
GetTopupSequenceKey drafts topup sequence for address
func HandleMsgTopup ¶ added in v0.1.7
func HandleMsgTopup(ctx sdk.Context, k Keeper, msg types.MsgTopup, contractCaller helper.IContractCaller) sdk.Result
HandleMsgTopup handles topup event
func HandleMsgWithdrawFee ¶ added in v0.1.7
HandleMsgWithdrawFee handle withdraw fee event
func InitGenesis ¶
func InitGenesis(ctx sdk.Context, keeper Keeper, data types.GenesisState)
InitGenesis sets distribution information for genesis.
func NewHandler ¶
func NewHandler(k Keeper, contractCaller helper.IContractCaller) sdk.Handler
NewHandler returns a handler for "topup" type messages.
func NewPostTxHandler ¶ added in v0.1.7
func NewPostTxHandler(k Keeper, contractCaller helper.IContractCaller) hmTypes.PostTxHandler
NewPostTxHandler returns a side handler for "bank" type messages.
func NewQuerier ¶
func NewQuerier(k Keeper, contractCaller helper.IContractCaller) sdk.Querier
NewQuerier returns a new sdk.Keeper instance.
func NewSideTxHandler ¶ added in v0.1.7
func NewSideTxHandler(k Keeper, contractCaller helper.IContractCaller) hmTypes.SideTxHandler
NewSideTxHandler returns a side handler for "topup" type messages.
func PostHandleMsgTopup ¶ added in v0.1.7
func SideHandleMsgTopup ¶ added in v0.1.7
func SideHandleMsgTopup(ctx sdk.Context, k Keeper, msg types.MsgTopup, contractCaller helper.IContractCaller) (result abci.ResponseDeliverSideTx)
SideHandleMsgTopup handles MsgTopup message for external call
Types ¶
type AppModule ¶
type AppModule struct { AppModuleBasic // contains filtered or unexported fields }
AppModule implements an application module for the auth module.
func NewAppModule ¶
func NewAppModule(keeper Keeper, contractCaller helper.IContractCaller) AppModule
NewAppModule creates a new AppModule object
func (AppModule) BeginBlock ¶
func (AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock)
BeginBlock returns the begin blocker for the auth module.
func (AppModule) EndBlock ¶
func (AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate
EndBlock returns the end blocker for the auth module. It returns no validator updates.
func (AppModule) ExportGenesis ¶
func (am AppModule) ExportGenesis(ctx sdk.Context) json.RawMessage
ExportGenesis returns the exported genesis state as raw bytes for the auth module.
func (AppModule) GenerateGenesisState ¶ added in v0.1.7
func (AppModule) GenerateGenesisState(simState *hmModule.SimulationState)
GenerateGenesisState creates a randomized GenState of the chainManager module
func (AppModule) InitGenesis ¶
func (am AppModule) InitGenesis(ctx sdk.Context, data json.RawMessage) []abci.ValidatorUpdate
InitGenesis performs genesis initialization for the auth module. It returns no validator updates.
func (AppModule) NewHandler ¶
NewHandler returns an sdk.Handler for the module.
func (AppModule) NewPostTxHandler ¶ added in v0.1.7
func (am AppModule) NewPostTxHandler() hmTypes.PostTxHandler
NewPostTxHandler side tx handler
func (AppModule) NewQuerierHandler ¶
NewQuerierHandler returns the auth module sdk.Querier.
func (AppModule) NewSideTxHandler ¶ added in v0.1.7
func (am AppModule) NewSideTxHandler() hmTypes.SideTxHandler
func (AppModule) ProposalContents ¶ added in v0.1.7
func (AppModule) ProposalContents(simState hmModule.SimulationState) []simTypes.WeightedProposalContent
ProposalContents doesn't return any content functions.
func (AppModule) QuerierRoute ¶
QuerierRoute returns the auth module's querier route name.
func (AppModule) RandomizedParams ¶ added in v0.1.7
func (AppModule) RandomizedParams(r *rand.Rand) []simTypes.ParamChange
RandomizedParams creates randomized param changes for the simulator.
func (AppModule) RegisterInvariants ¶
func (AppModule) RegisterInvariants(_ sdk.InvariantRegistry)
RegisterInvariants performs a no-op.
func (AppModule) RegisterStoreDecoder ¶ added in v0.1.7
func (AppModule) RegisterStoreDecoder(sdr hmModule.StoreDecoderRegistry)
RegisterStoreDecoder registers a decoder for chainmanager module's types
func (AppModule) WeightedOperations ¶ added in v0.1.7
func (AppModule) WeightedOperations(_ hmModule.SimulationState) []simTypes.WeightedOperation
WeightedOperations doesn't return any chainmanager module operation.
type AppModuleBasic ¶
type AppModuleBasic struct{}
AppModuleBasic defines the basic application module used by the auth module.
func (AppModuleBasic) DefaultGenesis ¶
func (AppModuleBasic) DefaultGenesis() json.RawMessage
DefaultGenesis returns default genesis state as raw bytes for the auth module.
func (AppModuleBasic) GetQueryCmd ¶
func (AppModuleBasic) GetQueryCmd(cdc *codec.Codec) *cobra.Command
GetQueryCmd returns the root query command for the auth module.
func (AppModuleBasic) GetTxCmd ¶
func (AppModuleBasic) GetTxCmd(cdc *codec.Codec) *cobra.Command
GetTxCmd returns the root tx command for the auth module.
func (AppModuleBasic) Name ¶
func (AppModuleBasic) Name() string
Name returns the auth module's name.
func (AppModuleBasic) RegisterCodec ¶
func (AppModuleBasic) RegisterCodec(cdc *codec.Codec)
RegisterCodec registers the auth module's types for the given codec.
func (AppModuleBasic) RegisterRESTRoutes ¶
func (AppModuleBasic) RegisterRESTRoutes(ctx context.CLIContext, rtr *mux.Router)
RegisterRESTRoutes registers the REST routes for the auth module.
func (AppModuleBasic) ValidateGenesis ¶
func (AppModuleBasic) ValidateGenesis(bz json.RawMessage) error
ValidateGenesis performs genesis state validation for the auth module.
func (AppModuleBasic) VerifyGenesis ¶
func (AppModuleBasic) VerifyGenesis(bz map[string]json.RawMessage) error
VerifyGenesis performs verification on auth module state.
type Keeper ¶
type Keeper struct {
// contains filtered or unexported fields
}
Keeper stores all related data
func NewKeeper ¶
func NewKeeper( cdc *codec.Codec, storeKey sdk.StoreKey, paramSpace subspace.Subspace, codespace sdk.CodespaceType, chainKeeper chainmanager.Keeper, bankKeeper bank.Keeper, stakingKeeper staking.Keeper, ) Keeper
NewKeeper create new keeper
func (*Keeper) AddDividendAccount ¶ added in v0.1.7
AddDividendAccount adds DividendAccount index with DividendID
func (*Keeper) AddFeeToDividendAccount ¶ added in v0.1.7
func (k *Keeper) AddFeeToDividendAccount(ctx sdk.Context, userAddress hmTypes.HeimdallAddress, fee *big.Int) sdk.Error
AddFeeToDividendAccount adds fee to dividend account for withdrawal
func (*Keeper) CheckIfDividendAccountExists ¶ added in v0.1.7
func (k *Keeper) CheckIfDividendAccountExists(ctx sdk.Context, userAddr hmTypes.HeimdallAddress) (ok bool)
CheckIfDividendAccountExists will return true if dividend account exists
func (Keeper) Codespace ¶
func (keeper Keeper) Codespace() sdk.CodespaceType
Codespace returns the keeper's codespace.
func (*Keeper) GetAllDividendAccounts ¶ added in v0.1.7
func (k *Keeper) GetAllDividendAccounts(ctx sdk.Context) (dividendAccounts []hmTypes.DividendAccount)
GetAllDividendAccounts returns all DividendAccountss
func (*Keeper) GetDividendAccountByAddress ¶ added in v0.1.7
func (k *Keeper) GetDividendAccountByAddress(ctx sdk.Context, address hmTypes.HeimdallAddress) (dividendAccount hmTypes.DividendAccount, err error)
GetDividendAccountByAddress will return DividendAccount of user
func (*Keeper) GetTopupSequences ¶
GetTopupSequences checks if topup already exists
func (*Keeper) HasTopupSequence ¶
HasTopupSequence checks if topup already exists
func (*Keeper) IterateDividendAccountsByPrefixAndApplyFn ¶ added in v0.1.7
func (k *Keeper) IterateDividendAccountsByPrefixAndApplyFn(ctx sdk.Context, prefix []byte, f func(dividendAccount hmTypes.DividendAccount) error)
IterateDividendAccountsByPrefixAndApplyFn iterate dividendAccounts and apply the given function.
func (*Keeper) IterateTopupSequencesAndApplyFn ¶
func (keeper *Keeper) IterateTopupSequencesAndApplyFn(ctx sdk.Context, f func(sequence string) error)
IterateTopupSequencesAndApplyFn iterate validators and apply the given function.