topup

package
v1.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 18, 2024 License: GPL-3.0 Imports: 33 Imported by: 0

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:

  1. 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.
  2. 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

Constants

This section is empty.

Variables

View Source
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

func GetDividendAccountMapKey(address []byte) []byte

GetDividendAccountMapKey returns dividend account map

func GetTopupSequenceKey

func GetTopupSequenceKey(sequence string) []byte

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

func HandleMsgWithdrawFee(ctx sdk.Context, k Keeper, msg types.MsgWithdrawFee) sdk.Result

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 PostHandleMsgTopup(ctx sdk.Context, k Keeper, msg types.MsgTopup, sideTxResult abci.SideTxResultType) sdk.Result

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

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) Name

func (AppModule) Name() string

Name returns the auth module's name.

func (AppModule) NewHandler

func (am AppModule) NewHandler() sdk.Handler

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

func (am AppModule) NewQuerierHandler() sdk.Querier

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

func (AppModule) QuerierRoute() string

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) Route

func (AppModule) Route() string

Route returns the message routing key for the auth module.

func (AppModule) WeightedOperations added in v0.1.7

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

func (k *Keeper) AddDividendAccount(ctx sdk.Context, dividendAccount hmTypes.DividendAccount) error

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

func (keeper *Keeper) GetTopupSequences(ctx sdk.Context) (sequences []string)

GetTopupSequences checks if topup already exists

func (*Keeper) HasTopupSequence

func (keeper *Keeper) HasTopupSequence(ctx sdk.Context, sequence string) bool

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.

func (Keeper) Logger

func (keeper Keeper) Logger(ctx sdk.Context) log.Logger

Logger returns a module-specific logger

func (*Keeper) SetTopupSequence

func (keeper *Keeper) SetTopupSequence(ctx sdk.Context, sequence string)

SetTopupSequence sets mapping for sequence id to bool

Directories

Path Synopsis
client
cli
rest
nolint
nolint

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL