keeper

package
v3.0.0-...-143c0cb Latest Latest
Warning

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

Go to latest
Published: Aug 18, 2023 License: Apache-2.0 Imports: 70 Imported by: 2

Documentation

Index

Constants

View Source
const BatchTxSize = 100

TODO: should we make this a parameter or a a call arg?

Variables

View Source
var (
	// ConsPrivKeys generate ed25519 ConsPrivKeys to be used for validator operator keys
	ConsPrivKeys = []ccrypto.PrivKey{
		ed25519.GenPrivKey(),
		ed25519.GenPrivKey(),
		ed25519.GenPrivKey(),
		ed25519.GenPrivKey(),
		ed25519.GenPrivKey(),
	}

	// ConsPubKeys holds the consensus public keys to be used for validator operator keys
	ConsPubKeys = []ccrypto.PubKey{
		ConsPrivKeys[0].PubKey(),
		ConsPrivKeys[1].PubKey(),
		ConsPrivKeys[2].PubKey(),
		ConsPrivKeys[3].PubKey(),
		ConsPrivKeys[4].PubKey(),
	}

	// AccPrivKeys generate secp256k1 pubkeys to be used for account pub keys
	AccPrivKeys = []ccrypto.PrivKey{
		secp256k1.GenPrivKey(),
		secp256k1.GenPrivKey(),
		secp256k1.GenPrivKey(),
		secp256k1.GenPrivKey(),
		secp256k1.GenPrivKey(),
	}

	// AccPubKeys holds the pub keys for the account keys
	AccPubKeys = []ccrypto.PubKey{
		AccPrivKeys[0].PubKey(),
		AccPrivKeys[1].PubKey(),
		AccPrivKeys[2].PubKey(),
		AccPrivKeys[3].PubKey(),
		AccPrivKeys[4].PubKey(),
	}

	// AccAddrs holds the sdk.AccAddresses
	AccAddrs = []sdk.AccAddress{
		sdk.AccAddress(AccPubKeys[0].Address()),
		sdk.AccAddress(AccPubKeys[1].Address()),
		sdk.AccAddress(AccPubKeys[2].Address()),
		sdk.AccAddress(AccPubKeys[3].Address()),
		sdk.AccAddress(AccPubKeys[4].Address()),
	}

	// ValAddrs holds the sdk.ValAddresses
	ValAddrs = []sdk.ValAddress{
		sdk.ValAddress(AccPubKeys[0].Address()),
		sdk.ValAddress(AccPubKeys[1].Address()),
		sdk.ValAddress(AccPubKeys[2].Address()),
		sdk.ValAddress(AccPubKeys[3].Address()),
		sdk.ValAddress(AccPubKeys[4].Address()),
	}

	// EthAddrs holds etheruem addresses
	EthAddrs = []gethcommon.Address{
		gethcommon.BytesToAddress(bytes.Repeat([]byte{byte(1)}, 20)),
		gethcommon.BytesToAddress(bytes.Repeat([]byte{byte(2)}, 20)),
		gethcommon.BytesToAddress(bytes.Repeat([]byte{byte(3)}, 20)),
		gethcommon.BytesToAddress(bytes.Repeat([]byte{byte(4)}, 20)),
		gethcommon.BytesToAddress(bytes.Repeat([]byte{byte(5)}, 20)),
	}

	// TokenContractAddrs holds example token contract addresses
	TokenContractAddrs = []string{
		"0x6b175474e89094c44da98b954eedeac495271d0f",
		"0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e",
		"0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
		"0xc00e94cb662c3520282e6f5717214004a7f26888",
		"0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f",
	}

	// InitTokens holds the number of tokens to initialize an account with
	InitTokens = sdk.TokensFromConsensusPower(110, sdk.DefaultPowerReduction)

	// InitCoins holds the number of coins to initialize an account with
	InitCoins = sdk.NewCoins(sdk.NewCoin(TestingStakeParams.BondDenom, InitTokens))

	// StakingAmount holds the staking power to start a validator with
	StakingAmount = sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)

	// StakingCoins holds the staking coins to start a validator with
	StakingCoins = sdk.NewCoins(sdk.NewCoin(TestingStakeParams.BondDenom, StakingAmount))

	// TestingStakeParams is a set of staking params for testing
	TestingStakeParams = stakingtypes.Params{
		UnbondingTime:     100,
		MaxValidators:     10,
		MaxEntries:        10,
		HistoricalEntries: 10000,
		BondDenom:         "stake",
	}

	// TestingGravityParams is a set of gravity params for testing
	TestingGravityParams = types.Params{
		GravityId:                                 "testgravityid",
		ContractSourceHash:                        "62328f7bc12efb28f86111d08c29b39285680a906ea0e524e0209d6f6657b713",
		BridgeEthereumAddress:                     "0x8858eeb3dfffa017d4bce9801d340d36cf895ccf",
		BridgeChainId:                             11,
		ConfirmedOutgoingTxWindow:                 10,
		SignedSignerSetTxsWindow:                  10,
		UnbondSlashingSignerSetTxsWindow:          10,
		EthereumSignaturesWindow:                  10,
		TargetEthTxTimeout:                        60001,
		AverageBlockTime:                          5000,
		AverageEthereumBlockTime:                  15000,
		SlashFractionSignerSetTx:                  sdk.NewDecWithPrec(1, 2),
		SlashFractionBatch:                        sdk.NewDecWithPrec(1, 2),
		SlashFractionEthereumSignature:            sdk.NewDecWithPrec(1, 2),
		SlashFractionConflictingEthereumSignature: sdk.NewDecWithPrec(1, 2),
	}
)

Functions

func ExportGenesis

func ExportGenesis(ctx sdk.Context, k Keeper) types.GenesisState

ExportGenesis exports all the state needed to restart the chain from the current state of the chain

func InitGenesis

func InitGenesis(ctx sdk.Context, k Keeper, data types.GenesisState)

InitGenesis starts a chain from a genesis state

func MakeTestCodec

func MakeTestCodec() *codec.LegacyAmino

MakeTestCodec creates a legacy amino codec for testing

func MakeTestMarshaler

func MakeTestMarshaler() codec.Codec

MakeTestMarshaler creates a proto codec for use in testing

func MintVouchersFromAir

func MintVouchersFromAir(t *testing.T, ctx sdk.Context, k Keeper, dest sdk.AccAddress, amount types.ERC20Token) sdk.Coin

MintVouchersFromAir creates new gravity vouchers given erc20tokens

func NewMsgServerImpl

func NewMsgServerImpl(keeper Keeper) types.MsgServer

NewMsgServerImpl returns an implementation of the gov MsgServer interface for the provided Keeper.

func NewTestMsgCreateValidator

func NewTestMsgCreateValidator(address sdk.ValAddress, pubKey ccrypto.PubKey, amt sdk.Int) *stakingtypes.MsgCreateValidator

func NewTestMsgUnDelegateValidator

func NewTestMsgUnDelegateValidator(address sdk.ValAddress, amt sdk.Int) *stakingtypes.MsgUndelegate

Types

type AlwaysPanicStakingMock

type AlwaysPanicStakingMock struct{}

AlwaysPanicStakingMock is a mock staking keeper that panics on usage

func (AlwaysPanicStakingMock) GetBondedValidatorsByPower

func (s AlwaysPanicStakingMock) GetBondedValidatorsByPower(ctx sdk.Context) []stakingtypes.Validator

GetBondedValidatorsByPower implements the interface for staking keeper required by gravity

func (AlwaysPanicStakingMock) GetLastTotalPower

func (s AlwaysPanicStakingMock) GetLastTotalPower(ctx sdk.Context) (power sdk.Int)

GetLastTotalPower implements the interface for staking keeper required by gravity

func (AlwaysPanicStakingMock) GetLastValidatorPower

func (s AlwaysPanicStakingMock) GetLastValidatorPower(ctx sdk.Context, operator sdk.ValAddress) int64

GetLastValidatorPower implements the interface for staking keeper required by gravity

func (AlwaysPanicStakingMock) IterateBondedValidatorsByPower

func (s AlwaysPanicStakingMock) IterateBondedValidatorsByPower(sdk.Context, func(index int64, validator stakingtypes.ValidatorI) (stop bool))

IterateBondedValidatorsByPower staisfies the interface

func (AlwaysPanicStakingMock) IterateLastValidators

func (s AlwaysPanicStakingMock) IterateLastValidators(sdk.Context, func(index int64, validator stakingtypes.ValidatorI) (stop bool))

IterateLastValidators staisfies the interface

func (AlwaysPanicStakingMock) IterateValidators

func (s AlwaysPanicStakingMock) IterateValidators(sdk.Context, func(index int64, validator stakingtypes.ValidatorI) (stop bool))

IterateValidators staisfies the interface

func (AlwaysPanicStakingMock) Jail

Jail staisfies the interface

func (AlwaysPanicStakingMock) Slash

Slash staisfies the interface

func (AlwaysPanicStakingMock) Validator

Validator staisfies the interface

func (AlwaysPanicStakingMock) ValidatorByConsAddr

ValidatorByConsAddr staisfies the interface

type Hooks

type Hooks struct {
	// contains filtered or unexported fields
}

func (Hooks) AfterDelegationModified

func (h Hooks) AfterDelegationModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress)

func (Hooks) AfterValidatorBeginUnbonding

func (h Hooks) AfterValidatorBeginUnbonding(ctx sdk.Context, _ sdk.ConsAddress, _ sdk.ValAddress)

func (Hooks) AfterValidatorBonded

func (h Hooks) AfterValidatorBonded(_ sdk.Context, _ sdk.ConsAddress, _ sdk.ValAddress)

func (Hooks) AfterValidatorCreated

func (h Hooks) AfterValidatorCreated(ctx sdk.Context, valAddr sdk.ValAddress)

func (Hooks) AfterValidatorRemoved

func (h Hooks) AfterValidatorRemoved(ctx sdk.Context, _ sdk.ConsAddress, valAddr sdk.ValAddress)

func (Hooks) BeforeDelegationCreated

func (h Hooks) BeforeDelegationCreated(_ sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress)

func (Hooks) BeforeDelegationRemoved

func (h Hooks) BeforeDelegationRemoved(_ sdk.Context, _ sdk.AccAddress, _ sdk.ValAddress)

func (Hooks) BeforeDelegationSharesModified

func (h Hooks) BeforeDelegationSharesModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress)

func (Hooks) BeforeValidatorModified

func (h Hooks) BeforeValidatorModified(_ sdk.Context, _ sdk.ValAddress)

func (Hooks) BeforeValidatorSlashed

func (h Hooks) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, fraction sdk.Dec)

type Keeper

type Keeper struct {
	StakingKeeper types.StakingKeeper

	SlashingKeeper     types.SlashingKeeper
	DistributionKeeper types.DistributionKeeper
	PowerReduction     sdk.Int

	ReceiverModuleAccounts map[string]string
	SenderModuleAccounts   map[string]string
	// contains filtered or unexported fields
}

Keeper maintains the link to storage and exposes getter/setter methods for the various parts of the state machine

func NewKeeper

func NewKeeper(
	cdc codec.Codec,
	storeKey sdk.StoreKey,
	paramSpace paramtypes.Subspace,
	accKeeper types.AccountKeeper,
	stakingKeeper types.StakingKeeper,
	bankKeeper types.BankKeeper,
	slashingKeeper types.SlashingKeeper,
	distributionKeeper types.DistributionKeeper,
	powerReduction sdk.Int,
	receiverModuleAccounts map[string]string,
	senderModuleAccounts map[string]string,
) Keeper

NewKeeper returns a new instance of the gravity keeper

func (Keeper) AfterBatchExecutedEvent

func (k Keeper) AfterBatchExecutedEvent(ctx sdk.Context, event types.BatchExecutedEvent)

func (Keeper) AfterContractCallExecutedEvent

func (k Keeper) AfterContractCallExecutedEvent(ctx sdk.Context, event types.ContractCallExecutedEvent)

func (Keeper) AfterERC20DeployedEvent

func (k Keeper) AfterERC20DeployedEvent(ctx sdk.Context, event types.ERC20DeployedEvent)

func (Keeper) AfterSendToCosmosEvent

func (k Keeper) AfterSendToCosmosEvent(ctx sdk.Context, event types.SendToCosmosEvent)

func (Keeper) AfterSignerSetExecutedEvent

func (k Keeper) AfterSignerSetExecutedEvent(ctx sdk.Context, event types.SignerSetTxExecutedEvent)

func (Keeper) BatchTx

func (Keeper) BatchTxFees

func (Keeper) BatchTxs

func (Keeper) CancelBatchTx

func (k Keeper) CancelBatchTx(ctx sdk.Context, batch *types.BatchTx)

CancelBatchTx releases all TX in the batch and deletes the batch

func (Keeper) CompleteOutgoingTx

func (k Keeper) CompleteOutgoingTx(ctx sdk.Context, otx types.OutgoingTx)

func (Keeper) CreateBatchTx

func (k Keeper) CreateBatchTx(ctx sdk.Context, contractAddress common.Address, maxElements int) *types.BatchTx

CreateBatchTx starts the following process chain:

  • find bridged denominator for given voucher type
  • determine if a an unexecuted batch is already waiting for this token type, if so confirm the new batch would have a higher total fees. If not exit withtout creating a batch
  • select available transactions from the unbatched SendToEthereums sorted by fee desc
  • persist an OutgoingTx (BatchTx) object with an incrementing ID = nonce
  • emit an event

func (Keeper) CreateContractCallTx

func (k Keeper) CreateContractCallTx(ctx sdk.Context, invalidationNonce uint64, invalidationScope tmbytes.HexBytes,
	address common.Address, payload []byte, tokens []types.ERC20Token, fees []types.ERC20Token) *types.ContractCallTx

CreateContractCallTx xxx

func (Keeper) CreateSignerSetTx

func (k Keeper) CreateSignerSetTx(ctx sdk.Context) *types.SignerSetTx

CreateSignerSetTx gets the current signer set from the staking keeper, increments the nonce, creates the signer set tx object, emits an event and sets the signer set in state

func (Keeper) CurrentSignerSet

func (k Keeper) CurrentSignerSet(ctx sdk.Context) types.EthereumSigners

CurrentSignerSet gets powers from the store and normalizes them into an integer percentage with a resolution of uint32 Max meaning a given validators 'gravity power' is computed as Cosmos power / total cosmos power = x / uint32 Max where x is the voting power on the gravity contract. This allows us to only use integer division which produces a known rounding error from truncation equal to the ratio of the validators Cosmos power / total cosmos power ratio, leaving us at uint32 Max - 1 total voting power. This is an acceptable rounding error since floating point may cause consensus problems if different floating point unit implementations are involved.

func (Keeper) DelegateKeys

func (Keeper) DeleteCompletedOutgoingTx

func (k Keeper) DeleteCompletedOutgoingTx(ctx sdk.Context, storeIndex []byte)

DeleteCompletedOutgoingTx deletes a given outgoingtx

func (Keeper) DeleteEthereumEventVoteRecord

func (k Keeper) DeleteEthereumEventVoteRecord(ctx sdk.Context, eventNonce uint64, claimHash []byte)

func (Keeper) DeleteEthereumSignatures

func (k Keeper) DeleteEthereumSignatures(ctx sdk.Context, storeIndex []byte)

DeleteEthereumSignatures deletes all ethereum signatures for a given outgoing tx by store index

func (Keeper) DeleteOutgoingTx

func (k Keeper) DeleteOutgoingTx(ctx sdk.Context, storeIndex []byte)

DeleteOutgoingTx deletes a given outgoingtx

func (Keeper) DenomToERC20

func (Keeper) DenomToERC20Lookup

func (k Keeper) DenomToERC20Lookup(ctx sdk.Context, denom string) (bool, common.Address, error)

DenomToERC20 returns (bool isCosmosOriginated, string ERC20, err) Using this information, you can see if an asset is native to Cosmos or Ethereum, and get its corresponding ERC20 address. This will return an error if it cant parse the denom as a gravity denom, and then also can't find the denom in an index of ERC20 contracts deployed on Ethereum to serve as synthetic Cosmos assets.

func (Keeper) DetectMaliciousSupply

func (k Keeper) DetectMaliciousSupply(ctx sdk.Context, denom string, amount sdk.Int) (err error)

func (Keeper) ERC20ToDenom

func (Keeper) ERC20ToDenomLookup

func (k Keeper) ERC20ToDenomLookup(ctx sdk.Context, tokenContract common.Address) (bool, string)

ERC20ToDenom returns (bool isCosmosOriginated, string denom, err) Using this information, you can see if an ERC20 address represents an asset is native to Cosmos or Ethereum, and get its corresponding denom

func (Keeper) GetBatchFeesByTokenType

func (k Keeper) GetBatchFeesByTokenType(ctx sdk.Context, tokenContractAddr common.Address, maxElements int) sdk.Int

GetBatchFeesByTokenType gets the fees the next batch of a given token type would have if created. This info is both presented to relayers for the purpose of determining when to request batches and also used by the batch creation process to decide not to create a new batch

func (Keeper) GetBondedValidatorSlashingInfos

func (k Keeper) GetBondedValidatorSlashingInfos(ctx sdk.Context) ([]stakingtypes.Validator, []ValidatorSlashingInfo)

GetBondedValidatorSlashingInfos returns the information needed for slashing for each bonded validator

func (Keeper) GetCompletedOutgoingTx

func (k Keeper) GetCompletedOutgoingTx(ctx sdk.Context, storeIndex []byte) (out types.OutgoingTx)

GetCompletedOutgoingTx gets a completed outgoing tx

func (Keeper) GetEthereumEventVoteRecord

func (k Keeper) GetEthereumEventVoteRecord(ctx sdk.Context, eventNonce uint64, claimHash []byte) *types.EthereumEventVoteRecord

GetEthereumEventVoteRecord return a vote record given a nonce

func (Keeper) GetEthereumEventVoteRecordMapping

func (k Keeper) GetEthereumEventVoteRecordMapping(ctx sdk.Context) (out map[uint64][]*types.EthereumEventVoteRecord)

GetEthereumEventVoteRecordMapping returns a mapping of eventnonce -> attestations at that nonce

func (Keeper) GetEthereumHeightVote

func (k Keeper) GetEthereumHeightVote(ctx sdk.Context, valAddress sdk.ValAddress) types.LatestEthereumBlockHeight

GetEthereumHeightVoteRecord gets the latest observed heights per validator

func (Keeper) GetEthereumOrchestratorAddress

func (k Keeper) GetEthereumOrchestratorAddress(ctx sdk.Context, ethAddr common.Address) sdk.AccAddress

GetEthereumOrchestratorAddress gets the orch address for a given eth address

func (Keeper) GetEthereumSignatures

func (k Keeper) GetEthereumSignatures(ctx sdk.Context, storeIndex []byte) map[string][]byte

GetEthereumSignatures returns all etherum signatures for a given outgoing tx by store index

func (Keeper) GetLastObservedEthereumBlockHeight

func (k Keeper) GetLastObservedEthereumBlockHeight(ctx sdk.Context) types.LatestEthereumBlockHeight

GetLastObservedEthereumBlockHeight height gets the block height to of the last observed attestation from the store

func (Keeper) GetLastObservedEventNonce

func (k Keeper) GetLastObservedEventNonce(ctx sdk.Context) uint64

GetLastObservedEventNonce returns the latest observed event nonce

func (Keeper) GetLastObservedSignerSetTx

func (k Keeper) GetLastObservedSignerSetTx(ctx sdk.Context) *types.SignerSetTx

GetLastObservedSignerSetTx retrieves the last observed validator set from the store

func (Keeper) GetLastSlashedOutgoingTxBlockHeight

func (k Keeper) GetLastSlashedOutgoingTxBlockHeight(ctx sdk.Context) uint64

GetLastSlashedOutgoingTxBlockHeight returns the latest slashed Batch block

func (Keeper) GetLastUnbondingBlockHeight

func (k Keeper) GetLastUnbondingBlockHeight(ctx sdk.Context) uint64

GetLastUnbondingBlockHeight returns the last unbonding block height

func (Keeper) GetLatestSignerSetTx

func (k Keeper) GetLatestSignerSetTx(ctx sdk.Context) *types.SignerSetTx

GetLatestSignerSetTx returns the latest validator set in state

func (Keeper) GetLatestSignerSetTxNonce

func (k Keeper) GetLatestSignerSetTxNonce(ctx sdk.Context) uint64

GetLatestSignerSetTxNonce returns the latest valset nonce

func (Keeper) GetOrchestratorValidatorAddress

func (k Keeper) GetOrchestratorValidatorAddress(ctx sdk.Context, orchAddr sdk.AccAddress) sdk.ValAddress

GetOrchestratorValidatorAddress returns the validator key associated with an orchestrator key.

func (Keeper) GetOutgoingTx

func (k Keeper) GetOutgoingTx(ctx sdk.Context, storeIndex []byte) (out types.OutgoingTx)

GetOutgoingTx todo: outgoingTx prefix byte

func (Keeper) GetParams

func (k Keeper) GetParams(ctx sdk.Context) (params types.Params)

GetParams returns the parameters from the store

func (Keeper) GetSignerSetTxs

func (k Keeper) GetSignerSetTxs(ctx sdk.Context) (out []*types.SignerSetTx)

GetSignerSetTxs returns all the signer set txs from the store

func (Keeper) GetUnbondingValidatorSlashingInfos

func (k Keeper) GetUnbondingValidatorSlashingInfos(ctx sdk.Context) ([]stakingtypes.Validator, []ValidatorSlashingInfo)

GetUnbondingValidatorSlashingInfos returns the information needed for slashing for each unbonding validator

func (Keeper) GetUnsignedBatchTxs

func (k Keeper) GetUnsignedBatchTxs(ctx sdk.Context, val sdk.ValAddress) []*types.BatchTx

GetUnsignedBatchTxs returns all batches for which the specified validator has not submitted confirmations in ascending nonce order

func (Keeper) GetUnsignedContractCallTxs

func (k Keeper) GetUnsignedContractCallTxs(ctx sdk.Context, val sdk.ValAddress) []*types.ContractCallTx

func (Keeper) GetUnsignedSignerSetTxs

func (k Keeper) GetUnsignedSignerSetTxs(ctx sdk.Context, val sdk.ValAddress) []*types.SignerSetTx

func (Keeper) GetUnslashedOutgoingTxs

func (k Keeper) GetUnslashedOutgoingTxs(ctx sdk.Context, maxHeight uint64) (out []types.OutgoingTx)

func (Keeper) GetValidatorEthereumAddress

func (k Keeper) GetValidatorEthereumAddress(ctx sdk.Context, valAddr sdk.ValAddress) common.Address

GetValidatorEthereumAddress returns the eth address for a given gravity validator.

func (Keeper) GetValidatorSlashingInfo

func (k Keeper) GetValidatorSlashingInfo(ctx sdk.Context, validator stakingtypes.Validator) ValidatorSlashingInfo

GetValidatorInfo returns the consensus key address, signing info, and whether or not the validator exists, for the purposes of slashing/jailing

func (Keeper) Handle

func (k Keeper) Handle(ctx sdk.Context, eve types.EthereumEvent) (err error)

Handle is the entry point for EthereumEvent processing

func (Keeper) HandleCommunityPoolEthereumSpendProposal

func (k Keeper) HandleCommunityPoolEthereumSpendProposal(ctx sdk.Context, p *types.CommunityPoolEthereumSpendProposal) error

func (Keeper) Hooks

func (k Keeper) Hooks() Hooks

Hooks Create new gravity hooks

func (Keeper) IterateBatchTxEthereumSignatures

func (k Keeper) IterateBatchTxEthereumSignatures(ctx sdk.Context, cb func(common.Address, uint64, sdk.ValAddress, []byte) bool)

func (Keeper) IterateCompletedOutgoingTxs

func (k Keeper) IterateCompletedOutgoingTxs(ctx sdk.Context, cb func(key []byte, outgoing types.OutgoingTx) bool)

IterateOutgoingTxs iterates over a specific type of outgoing transaction denoted by the chosen prefix byte

func (Keeper) IterateCompletedOutgoingTxsByType

func (k Keeper) IterateCompletedOutgoingTxsByType(ctx sdk.Context, prefixByte byte, cb func(key []byte, outgoing types.OutgoingTx) (stop bool))

IterateCompletedOutgoingTxsByType iterates over a specific type of completed outgoing transaction denoted by the chosen prefix byte

func (Keeper) IterateContractCallTxEthereumSignatures

func (k Keeper) IterateContractCallTxEthereumSignatures(ctx sdk.Context, cb func([]byte, uint64, sdk.ValAddress, []byte) bool)

func (Keeper) IterateEthereumEventVoteRecords

func (k Keeper) IterateEthereumEventVoteRecords(ctx sdk.Context, cb func([]byte, *types.EthereumEventVoteRecord) bool)

iterateEthereumEventVoteRecords iterates through all attestations

func (Keeper) IterateEthereumHeightVotes

func (k Keeper) IterateEthereumHeightVotes(ctx sdk.Context, cb func(val sdk.ValAddress, height types.LatestEthereumBlockHeight) (stop bool))

func (Keeper) IterateOutgoingTxsByType

func (k Keeper) IterateOutgoingTxsByType(ctx sdk.Context, prefixByte byte, cb func(key []byte, outgoing types.OutgoingTx) (stop bool))

IterateOutgoingTxsByType iterates over a specific type of outgoing transaction denoted by the chosen prefix byte

func (Keeper) IterateSignerSetTxEthereumSignatures

func (k Keeper) IterateSignerSetTxEthereumSignatures(ctx sdk.Context, cb func(uint64, sdk.ValAddress, []byte) bool)

func (Keeper) IterateUnbatchedSendToEthereums

func (k Keeper) IterateUnbatchedSendToEthereums(ctx sdk.Context, cb func(*types.SendToEthereum) bool)

func (Keeper) LatestSignerSetTx

func (Keeper) Logger

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

func (Keeper) MigrateGravityContract

func (k Keeper) MigrateGravityContract(ctx sdk.Context, newBridgeAddress string, bridgeDeploymentHeight uint64)

Clean up all state associated a previous gravity contract and set a new contract. This is intended to run in the upgrade handler. This implementation is partial at best. It doees not contain necessary functionality to freeze the bridge. We will have yet to implement functionality to Migrate the Cosmos ERC20 tokens or any other ERC20 tokens bridged to the gravity contracts. This just does keeper state cleanup if a new gravity contract has been deployed

func (Keeper) PaginateEthereumEventVoteRecords

func (k Keeper) PaginateEthereumEventVoteRecords(ctx sdk.Context, pageReq *query.PageRequest, cb func(key []byte, record *types.EthereumEventVoteRecord) bool) (*query.PageResponse, error)

func (Keeper) PaginateOutgoingTxsByType

func (k Keeper) PaginateOutgoingTxsByType(ctx sdk.Context, pageReq *query.PageRequest, prefixByte byte, cb func(key []byte, outgoing types.OutgoingTx) bool) (*query.PageResponse, error)

func (Keeper) Params

func (Keeper) SetCompletedOutgoingTx

func (k Keeper) SetCompletedOutgoingTx(ctx sdk.Context, outgoing types.OutgoingTx)

SetCompletedOutgoingTx sets a completed outgoing tx

func (Keeper) SetEthereumHeightVote

func (k Keeper) SetEthereumHeightVote(ctx sdk.Context, valAddress sdk.ValAddress, ethereumHeight uint64)

SetEthereumHeightVoteRecord sets the latest observed heights per validator

func (Keeper) SetEthereumSignature

func (k Keeper) SetEthereumSignature(ctx sdk.Context, sig types.EthereumTxConfirmation, val sdk.ValAddress) []byte

SetEthereumSignature sets an ethereum signature

func (*Keeper) SetHooks

func (k *Keeper) SetHooks(sh types.GravityHooks) *Keeper

func (Keeper) SetLastObservedEthereumBlockHeight

func (k Keeper) SetLastObservedEthereumBlockHeight(ctx sdk.Context, ethereumHeight uint64)

SetLastObservedEthereumBlockHeight sets the block height in the store.

func (Keeper) SetLastObservedEthereumBlockHeightWithCosmos

func (k Keeper) SetLastObservedEthereumBlockHeightWithCosmos(ctx sdk.Context, ethereumHeight uint64, cosmosHeight uint64)

SetLastObservedEthereumBlockHeight sets the block height in the store, specifying the cosmos height

func (Keeper) SetLastSlashedOutgoingTxBlockHeight

func (k Keeper) SetLastSlashedOutgoingTxBlockHeight(ctx sdk.Context, blockHeight uint64)

SetLastSlashedOutgoingTxBlockHeight sets the latest slashed Batch block height

func (Keeper) SetOrchestratorValidatorAddress

func (k Keeper) SetOrchestratorValidatorAddress(ctx sdk.Context, val sdk.ValAddress, orchAddr sdk.AccAddress)

SetOrchestratorValidatorAddress sets the Orchestrator key for a given validator.

func (Keeper) SetOutgoingTx

func (k Keeper) SetOutgoingTx(ctx sdk.Context, outgoing types.OutgoingTx)

func (Keeper) SetParams

func (k Keeper) SetParams(ctx sdk.Context, ps types.Params)

SetParams sets the parameters in the store

func (Keeper) SignerSetExecuted

func (k Keeper) SignerSetExecuted(ctx sdk.Context, nonce uint64)

TODO here we should check the contents of the validator set against the store, if they differ we should take some action to indicate to the user that bridge highjacking has occurred

func (Keeper) SignerSetTx

func (Keeper) SignerSetTxs

func (Keeper) SlashAndJail

func (k Keeper) SlashAndJail(ctx sdk.Context, validator stakingtypes.Validator, reason string)

SlashAndJail slashes the validator and sets the validator to jailed if they are not already jailed

func (Keeper) TryEventVoteRecord

func (k Keeper) TryEventVoteRecord(ctx sdk.Context, eventVoteRecord *types.EthereumEventVoteRecord)

TryEventVoteRecord checks if an event vote record has enough votes to be applied to the consensus state and has not already been marked Observed, then calls processEthereumEvent to actually apply it to the state, and then marks it Observed and emits an event.

func (Keeper) UnsignedBatchTxs

UnsignedBatchTxs returns all batch txs that have not been signed by the given validator

func (Keeper) UnsignedContractCallTxs

UnsignedContractCallTxs returns all contract call txs that have not been signed by the given validator

func (Keeper) UnsignedSignerSetTxs

UnsignedSignerSetTxs returns all signer set txs that have not been signed by the given validator

type Migrator

type Migrator struct {
	// contains filtered or unexported fields
}

Migrator is a struct for handling in-place store migrations.

func NewMigrator

func NewMigrator(keeper Keeper) Migrator

NewMigrator returns a new Migrator.

func (Migrator) Migrate1to2

func (m Migrator) Migrate1to2(ctx sdk.Context) error

Migrate1to2 migrates from consensus version 1 to 2.

func (Migrator) Migrate2to3

func (m Migrator) Migrate2to3(ctx sdk.Context) error

Migrate2to3 migrates from consensus version 2 to 3.

type MockStakingValidatorData

type MockStakingValidatorData struct {
	Operator sdk.ValAddress
	Power    int64
}

MockStakingValidatorData creates mock validator data

type StakingKeeperMock

type StakingKeeperMock struct {
	BondedValidators []stakingtypes.Validator
	ValidatorPower   map[string]int64
}

StakingKeeperMock is a mock staking keeper for use in the tests

func NewStakingKeeperMock

func NewStakingKeeperMock(operators ...sdk.ValAddress) *StakingKeeperMock

NewStakingKeeperMock creates a new mock staking keeper

func NewStakingKeeperWeightedMock

func NewStakingKeeperWeightedMock(t ...MockStakingValidatorData) *StakingKeeperMock

NewStakingKeeperWeightedMock creates a new mock staking keeper with some mock validator data

func (*StakingKeeperMock) GetBondedValidatorsByPower

func (s *StakingKeeperMock) GetBondedValidatorsByPower(ctx sdk.Context) []stakingtypes.Validator

GetBondedValidatorsByPower implements the interface for staking keeper required by gravity

func (*StakingKeeperMock) GetLastTotalPower

func (s *StakingKeeperMock) GetLastTotalPower(ctx sdk.Context) (power sdk.Int)

GetLastTotalPower implements the interface for staking keeper required by gravity

func (*StakingKeeperMock) GetLastValidatorPower

func (s *StakingKeeperMock) GetLastValidatorPower(ctx sdk.Context, operator sdk.ValAddress) int64

GetLastValidatorPower implements the interface for staking keeper required by gravity

func (*StakingKeeperMock) GetParams

func (s *StakingKeeperMock) GetParams(ctx sdk.Context) stakingtypes.Params

func (*StakingKeeperMock) GetValidator

func (s *StakingKeeperMock) GetValidator(ctx sdk.Context, addr sdk.ValAddress) (validator stakingtypes.Validator, found bool)

func (*StakingKeeperMock) IterateBondedValidatorsByPower

func (s *StakingKeeperMock) IterateBondedValidatorsByPower(ctx sdk.Context, cb func(index int64, validator stakingtypes.ValidatorI) (stop bool))

IterateBondedValidatorsByPower staisfies the interface

func (*StakingKeeperMock) IterateLastValidators

func (s *StakingKeeperMock) IterateLastValidators(ctx sdk.Context, cb func(index int64, validator stakingtypes.ValidatorI) (stop bool))

IterateLastValidators staisfies the interface

func (*StakingKeeperMock) IterateValidators

func (s *StakingKeeperMock) IterateValidators(ctx sdk.Context, cb func(index int64, validator stakingtypes.ValidatorI) (stop bool))

IterateValidators staisfies the interface

func (*StakingKeeperMock) Jail

Jail staisfies the interface

func (*StakingKeeperMock) Slash

Slash staisfies the interface

func (*StakingKeeperMock) Validator

Validator staisfies the interface

func (*StakingKeeperMock) ValidatorByConsAddr

func (s *StakingKeeperMock) ValidatorByConsAddr(ctx sdk.Context, addr sdk.ConsAddress) stakingtypes.ValidatorI

ValidatorByConsAddr staisfies the interface

func (*StakingKeeperMock) ValidatorQueueIterator

func (s *StakingKeeperMock) ValidatorQueueIterator(ctx sdk.Context, endTime time.Time, endHeight int64) sdk.Iterator

type TestInput

type TestInput struct {
	GravityKeeper   Keeper
	AccountKeeper   authkeeper.AccountKeeper
	StakingKeeper   stakingkeeper.Keeper
	SlashingKeeper  slashingkeeper.Keeper
	DistKeeper      distrkeeper.Keeper
	BankKeeper      bankkeeper.BaseKeeper
	GovKeeper       govkeeper.Keeper
	Context         sdk.Context
	Marshaler       codec.Codec
	LegacyAmino     *codec.LegacyAmino
	GravityStoreKey *sdk.KVStoreKey
}

TestInput stores the various keepers required to test gravity

func CreateTestEnv

func CreateTestEnv(t *testing.T) TestInput

CreateTestEnv creates the keeper testing environment for gravity

func SetupFiveValChain

func SetupFiveValChain(t *testing.T) (TestInput, sdk.Context)

SetupFiveValChain does all the initialization for a 5 Validator chain using the keys here

func (TestInput) AddBalanceToBank

func (input TestInput) AddBalanceToBank(ctx sdk.Context, addr sdk.AccAddress, balances sdk.Coins) error

func (TestInput) AddSendToEthTxsToPool

func (input TestInput) AddSendToEthTxsToPool(t *testing.T, ctx sdk.Context, tokenContract gethcommon.Address, sender sdk.AccAddress, receiver gethcommon.Address, ids ...uint64)

type ValidatorSlashingInfo

type ValidatorSlashingInfo struct {
	Validator   stakingtypes.Validator
	Exists      bool
	SigningInfo slashingtypes.ValidatorSigningInfo
	ConsAddress sdk.ConsAddress
}

Jump to

Keyboard shortcuts

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