keeper

package
v0.13.4-rc.2 Latest Latest
Warning

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

Go to latest
Published: Jun 30, 2022 License: Apache-2.0 Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const MaxPageLimit = 200

Variables

This section is empty.

Functions

func CalcLiquidityFee

func CalcLiquidityFee(toRowan bool, normalizationFactor sdk.Dec, adjustExternalToken bool, X, x, Y sdk.Uint) (sdk.Uint, error)

func CalcProviderDistributionAmount added in v0.13.4

func CalcProviderDistributionAmount(rowanProviderDistribution sdk.Dec, totalPoolUnits, providerPoolUnits sdk.Uint) sdk.Uint

func CalcRowanSpotPrice added in v0.13.4

func CalcRowanSpotPrice(pool *types.Pool, pmtpCurrentRunningRate sdk.Dec) (sdk.Dec, error)

Calculates spot price of Rowan accounting for PMTP

func CalcRowanValue added in v0.13.4

func CalcRowanValue(pool *types.Pool, pmtpCurrentRunningRate sdk.Dec, rowanAmount sdk.Uint) (sdk.Uint, error)

func CalcSwapPmtp added in v0.13.0

func CalcSwapPmtp(toRowan bool, y, pmtpCurrentRunningRate sdk.Dec) sdk.Dec

func CalcSwapPrice added in v0.13.0

func CalcSwapPrice(from types.Asset,
	sentAmount sdk.Uint,
	to types.Asset,
	pool types.Pool,
	normalizationFactor sdk.Dec,
	adjustExternalToken bool,
	pmtpCurrentRunningRate sdk.Dec) sdk.Dec

func CalcSwapPriceResult added in v0.13.0

func CalcSwapPriceResult(toRowan bool,
	normalizationFactor sdk.Dec,
	adjustExternalToken bool,
	X, x, Y sdk.Uint,
	pmtpCurrentRunningRate sdk.Dec) sdk.Dec

func CalcSwapResult

func CalcSwapResult(toRowan bool,
	normalizationFactor sdk.Dec,
	adjustExternalToken bool,
	X, x, Y sdk.Uint,
	pmtpCurrentRunningRate sdk.Dec) (sdk.Uint, error)

func CalculateAllAssetsForLP

func CalculateAllAssetsForLP(pool types.Pool, lp types.LiquidityProvider) (sdk.Uint, sdk.Uint, sdk.Uint, sdk.Uint)

func CalculatePoolUnits

func CalculatePoolUnits(oldPoolUnits, nativeAssetBalance, externalAssetBalance, nativeAssetAmount,
	externalAssetAmount sdk.Uint, normalizationFactor sdk.Dec, adjustExternalToken bool,
	symmetryThreshold, ratioThreshold sdk.Dec) (sdk.Uint, sdk.Uint, error)

func CalculateWithdrawal

func CalculateWithdrawal(poolUnits sdk.Uint, nativeAssetBalance string,
	externalAssetBalance string, lpUnits string, wBasisPoints string, asymmetry sdk.Int) (sdk.Uint, sdk.Uint, sdk.Uint, sdk.Uint)

More details on the formula https://github.com/Sifchain/sifnode/blob/develop/docs/1.Liquidity%20Pools%20Architecture.md

func CalculateWithdrawalFromUnits added in v0.13.0

func CalculateWithdrawalFromUnits(poolUnits sdk.Uint, nativeAssetBalance string,
	externalAssetBalance string, lpUnits string, withdrawUnits sdk.Uint) (sdk.Uint, sdk.Uint, sdk.Uint)

More details on the formula https://github.com/Sifchain/sifnode/blob/develop/docs/1.Liquidity%20Pools%20Architecture.md

func CollectProviderDistribution added in v0.13.4

func CollectProviderDistribution(ctx sdk.Context, pool *types.Pool, poolDepthRowan, blockRate sdk.Dec, poolUnits sdk.Uint, lps []ValidLiquidityProvider, globalLpRowanMap LpRowanMap, globalLpPoolMap LpPoolMap) sdk.Uint

func CollectRewards added in v0.13.4

func CollectRewards(ctx sdk.Context, pool *types.Pool, poolDistribution sdk.Uint, poolUnits sdk.Uint, lps []ValidLiquidityProvider, poolRowanMap PoolRowanMap, lpRowanMap LpRowanMap, lpPoolMap LpPoolMap)

func CreateEventBlockHeight added in v0.13.4

func CreateEventBlockHeight(ctx sdk.Context, eventType string, attribute sdk.Attribute) sdk.Event

func CreateEventMsg added in v0.13.4

func CreateEventMsg(signer string) sdk.Event

func FindProviderDistributionPeriod added in v0.13.4

func FindProviderDistributionPeriod(currentHeight int64, periods []*types.ProviderDistributionPeriod) *types.ProviderDistributionPeriod

func GetMinLen

func GetMinLen(inputs []sdk.Uint) int64

func GetPoolMultiplier added in v0.13.4

func GetPoolMultiplier(asset string, period *types.RewardPeriod) sdk.Dec

func GetSwapFee

func GetSwapFee(sentAmount sdk.Uint,
	to types.Asset,
	pool types.Pool,
	normalizationFactor sdk.Dec,
	adjustExternalToken bool,
	pmtpCurrentRunningRate sdk.Dec) sdk.Uint

func IncreasePrecision

func IncreasePrecision(dec sdk.Dec, po int64) sdk.Dec

func IsDistributionBlockPure added in v0.13.4

func IsDistributionBlockPure(blockHeight int64, startHeight, mod uint64) bool

do the thing every mod blocks starting at startHeight

func NewMsgServerImpl

func NewMsgServerImpl(keeper Keeper) types.MsgServer

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

func NewQuerier

func NewQuerier(keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) sdk.Querier

NewQuerier is the module level router for state queries

func ReducePrecision

func ReducePrecision(dec sdk.Dec, po int64) sdk.Dec

func SetInputs

func SetInputs(sentAmount sdk.Uint, to types.Asset, pool types.Pool) (sdk.Uint, sdk.Uint, sdk.Uint, bool)

func SwapOne

func SwapOne(from types.Asset,
	sentAmount sdk.Uint,
	to types.Asset,
	pool types.Pool,
	normalizationFactor sdk.Dec,
	adjustExternalToken bool,
	pmtpCurrentRunningRate sdk.Dec) (sdk.Uint, sdk.Uint, sdk.Uint, types.Pool, error)

------------------------------------------------------------------------------------------------------------------ More details on the formula https://github.com/Sifchain/sifnode/blob/develop/docs/1.Liquidity%20Pools%20Architecture.md

func ValidateZero

func ValidateZero(inputs []sdk.Uint) bool

Types

type Keeper

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

Keeper of the clp store

func NewKeeper

func NewKeeper(cdc codec.BinaryCodec, key sdk.StoreKey, bankkeeper types.BankKeeper, accountKeeper types.AuthKeeper,
	tokenRegistryKeeper tokenregistrytypes.Keeper, adminKeeper types.AdminKeeper, mintKeeper mintkeeper.Keeper, ps paramtypes.Subspace) Keeper

NewKeeper creates a clp keeper

func (Keeper) AddLiquidity

func (k Keeper) AddLiquidity(ctx sdk.Context, msg *types.MsgAddLiquidity, pool types.Pool, newPoolUnits sdk.Uint, lpUnits sdk.Uint) (*types.LiquidityProvider, error)

func (Keeper) BurnRowan added in v0.13.4

func (k Keeper) BurnRowan(ctx sdk.Context, amount sdk.Int) error

func (Keeper) Codec

func (k Keeper) Codec() codec.BinaryCodec

func (Keeper) CollectProviderDistributions added in v0.13.4

func (k Keeper) CollectProviderDistributions(ctx sdk.Context, pools []*types.Pool, blockRate sdk.Dec) (PoolRowanMap, LpRowanMap, LpPoolMap)

func (Keeper) CreateLiquidityProvider

func (k Keeper) CreateLiquidityProvider(ctx sdk.Context, asset *types.Asset, lpunits sdk.Uint, lpaddress sdk.AccAddress) types.LiquidityProvider

func (Keeper) CreatePool

func (k Keeper) CreatePool(ctx sdk.Context, poolUints sdk.Uint, msg *types.MsgCreatePool) (*types.Pool, error)

func (Keeper) DecommissionPool

func (k Keeper) DecommissionPool(ctx sdk.Context, pool types.Pool) error

func (Keeper) DecrementPmtpBlockCounter added in v0.13.4

func (k Keeper) DecrementPmtpBlockCounter(ctx sdk.Context)

func (Keeper) DecrementPmtpEpochCounter added in v0.13.4

func (k Keeper) DecrementPmtpEpochCounter(ctx sdk.Context)

func (Keeper) DestroyLiquidityProvider

func (k Keeper) DestroyLiquidityProvider(ctx sdk.Context, symbol string, lpAddress string)

func (Keeper) DestroyPool

func (k Keeper) DestroyPool(ctx sdk.Context, symbol string) error

func (Keeper) DistributeDepthRewards added in v0.13.0

func (k Keeper) DistributeDepthRewards(ctx sdk.Context, period *types.RewardPeriod, pools []*types.Pool) error

func (Keeper) Exists

func (k Keeper) Exists(ctx sdk.Context, key []byte) bool

func (Keeper) ExistsClpWhiteList

func (k Keeper) ExistsClpWhiteList(ctx sdk.Context) bool

func (Keeper) ExistsPool

func (k Keeper) ExistsPool(ctx sdk.Context, symbol string) bool

func (Keeper) FinalizeSwap

func (k Keeper) FinalizeSwap(ctx sdk.Context, sentAmount string, finalPool types.Pool, msg types.MsgSwap) error

func (Keeper) GetAllLiquidityProvidersForAsset added in v0.13.4

func (k Keeper) GetAllLiquidityProvidersForAsset(ctx sdk.Context, asset types.Asset) ([]*types.LiquidityProvider, error)

func (Keeper) GetAllLiquidityProvidersPaginated

func (k Keeper) GetAllLiquidityProvidersPaginated(ctx sdk.Context,
	pagination *query.PageRequest) ([]*types.LiquidityProvider, *query.PageResponse, error)

func (Keeper) GetAssetsForLiquidityProviderPaginated

func (k Keeper) GetAssetsForLiquidityProviderPaginated(ctx sdk.Context, lpAddress sdk.AccAddress,
	pagination *query.PageRequest) ([]*types.Asset, *query.PageResponse, error)

func (Keeper) GetAuthKeeper

func (k Keeper) GetAuthKeeper() types.AuthKeeper

func (Keeper) GetBankKeeper

func (k Keeper) GetBankKeeper() types.BankKeeper

func (Keeper) GetClpWhiteList

func (k Keeper) GetClpWhiteList(ctx sdk.Context) []sdk.AccAddress

func (Keeper) GetCurrentRewardPeriod added in v0.13.0

func (k Keeper) GetCurrentRewardPeriod(ctx sdk.Context, params *types.RewardParams) *types.RewardPeriod

func (Keeper) GetLiquidityProtectionParams added in v0.13.4

func (k Keeper) GetLiquidityProtectionParams(ctx sdk.Context) *types.LiquidityProtectionParams

func (Keeper) GetLiquidityProtectionRateParams added in v0.13.4

func (k Keeper) GetLiquidityProtectionRateParams(ctx sdk.Context) types.LiquidityProtectionRateParams

func (Keeper) GetLiquidityProvider

func (k Keeper) GetLiquidityProvider(ctx sdk.Context, symbol string, lpAddress string) (types.LiquidityProvider, error)

func (Keeper) GetLiquidityProviderIterator

func (k Keeper) GetLiquidityProviderIterator(ctx sdk.Context) sdk.Iterator

func (Keeper) GetLiquidityProvidersForAssetPaginated

func (k Keeper) GetLiquidityProvidersForAssetPaginated(ctx sdk.Context, asset types.Asset,
	pagination *query.PageRequest) ([]*types.LiquidityProvider, *query.PageResponse, error)

func (Keeper) GetMinCreatePoolThreshold

func (k Keeper) GetMinCreatePoolThreshold(ctx sdk.Context) (res uint64)

func (Keeper) GetModuleRowan added in v0.13.4

func (k Keeper) GetModuleRowan(ctx sdk.Context) sdk.Coin

func (Keeper) GetNormalizationFactor

func (k Keeper) GetNormalizationFactor(decimals int64) (sdk.Dec, bool)

func (Keeper) GetNormalizationFactorFromAsset added in v0.13.0

func (k Keeper) GetNormalizationFactorFromAsset(ctx sdk.Context, asset types.Asset) (sdk.Dec, bool)

func (Keeper) GetParams

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

func (Keeper) GetPmtpEpoch added in v0.13.0

func (k Keeper) GetPmtpEpoch(ctx sdk.Context) types.PmtpEpoch

func (Keeper) GetPmtpParams added in v0.13.0

func (k Keeper) GetPmtpParams(ctx sdk.Context) *types.PmtpParams

func (Keeper) GetPmtpRateParams added in v0.13.0

func (k Keeper) GetPmtpRateParams(ctx sdk.Context) types.PmtpRateParams

func (Keeper) GetPool

func (k Keeper) GetPool(ctx sdk.Context, symbol string) (types.Pool, error)

func (Keeper) GetPools

func (k Keeper) GetPools(ctx sdk.Context) []*types.Pool

GetPools Use GetPoolsPaginated for RPC queries

func (Keeper) GetPoolsIterator

func (k Keeper) GetPoolsIterator(ctx sdk.Context) sdk.Iterator

func (Keeper) GetPoolsPaginated

func (k Keeper) GetPoolsPaginated(ctx sdk.Context, pagination *query.PageRequest) ([]*types.Pool, *query.PageResponse, error)

func (Keeper) GetProviderDistributionParams added in v0.13.4

func (k Keeper) GetProviderDistributionParams(ctx sdk.Context) *types.ProviderDistributionParams

func (Keeper) GetRewardsParams added in v0.13.0

func (k Keeper) GetRewardsParams(ctx sdk.Context) *types.RewardParams

func (Keeper) GetSymmetryRatio added in v0.13.3

func (k Keeper) GetSymmetryRatio(ctx sdk.Context) sdk.Dec

func (Keeper) GetSymmetryThreshold added in v0.13.1

func (k Keeper) GetSymmetryThreshold(ctx sdk.Context) sdk.Dec

func (Keeper) HasBalance

func (k Keeper) HasBalance(ctx sdk.Context, addr sdk.AccAddress, coin sdk.Coin) bool

func (Keeper) InitiateSwap

func (k Keeper) InitiateSwap(ctx sdk.Context, sentCoin sdk.Coin, swapper sdk.AccAddress) error

func (Keeper) IsDistributionBlock added in v0.13.4

func (k Keeper) IsDistributionBlock(ctx sdk.Context) bool

func (Keeper) IsInsidePmtpWindow added in v0.13.0

func (k Keeper) IsInsidePmtpWindow(ctx sdk.Context) bool

func (Keeper) Logger

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

Logger returns a module-specific logger.

func (Keeper) ParseToInt

func (k Keeper) ParseToInt(nu string) (sdk.Int, bool)

Use strings instead of Unit/Int in between conventions

func (Keeper) PolicyCalculations added in v0.13.0

func (k Keeper) PolicyCalculations(ctx sdk.Context) sdk.Dec

func (Keeper) PolicyRun added in v0.13.0

func (k Keeper) PolicyRun(ctx sdk.Context, pmtpCurrentRunningRate sdk.Dec) error

func (Keeper) PolicyStart added in v0.13.0

func (k Keeper) PolicyStart(ctx sdk.Context)

func (Keeper) ProviderDistributionPolicyRun added in v0.13.4

func (k Keeper) ProviderDistributionPolicyRun(ctx sdk.Context)

func (Keeper) PruneUnlockRecords added in v0.13.0

func (k Keeper) PruneUnlockRecords(ctx sdk.Context, lp *types.LiquidityProvider, lockPeriod, cancelPeriod uint64)

func (Keeper) RemoveLiquidity

func (k Keeper) RemoveLiquidity(ctx sdk.Context, pool types.Pool, externalAssetCoin sdk.Coin,
	nativeAssetCoin sdk.Coin, lp types.LiquidityProvider, lpUnitsLeft, poolOriginalEB, poolOriginalNB sdk.Uint) error

func (Keeper) RemoveLiquidityProvider

func (k Keeper) RemoveLiquidityProvider(ctx sdk.Context, coins sdk.Coins, lp types.LiquidityProvider) error

func (Keeper) RemoveRowanFromPool added in v0.13.4

func (k Keeper) RemoveRowanFromPool(ctx sdk.Context, pool *types.Pool, amount sdk.Uint) error

func (Keeper) SendCoins

func (k Keeper) SendCoins(ctx sdk.Context, from sdk.AccAddress, to sdk.AccAddress, coins sdk.Coins) error

func (Keeper) SendRowanFromPool added in v0.13.4

func (k Keeper) SendRowanFromPool(ctx sdk.Context, pool *types.Pool, amount sdk.Uint, recipient sdk.AccAddress) error

func (Keeper) SendRowanFromPoolNoPoolUpdate added in v0.13.4

func (k Keeper) SendRowanFromPoolNoPoolUpdate(ctx sdk.Context, pool *types.Pool, amount sdk.Uint, recipient sdk.AccAddress) error

func (Keeper) SetClpWhiteList

func (k Keeper) SetClpWhiteList(ctx sdk.Context, validatorList []sdk.AccAddress)

func (Keeper) SetLiquidityProtectionCurrentRowanLiquidityThreshold added in v0.13.4

func (k Keeper) SetLiquidityProtectionCurrentRowanLiquidityThreshold(ctx sdk.Context, currentRowanLiquidityThreshold sdk.Uint)

func (Keeper) SetLiquidityProtectionParams added in v0.13.4

func (k Keeper) SetLiquidityProtectionParams(ctx sdk.Context, params *types.LiquidityProtectionParams)

func (Keeper) SetLiquidityProtectionRateParams added in v0.13.4

func (k Keeper) SetLiquidityProtectionRateParams(ctx sdk.Context, params types.LiquidityProtectionRateParams)

func (Keeper) SetLiquidityProvider

func (k Keeper) SetLiquidityProvider(ctx sdk.Context, lp *types.LiquidityProvider)

func (Keeper) SetParams

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

set the params

func (Keeper) SetPmtpBlockCounter added in v0.13.4

func (k Keeper) SetPmtpBlockCounter(ctx sdk.Context, epochLength int64)

func (Keeper) SetPmtpBlockRate added in v0.13.0

func (k Keeper) SetPmtpBlockRate(ctx sdk.Context, blockRate sdk.Dec)

func (Keeper) SetPmtpCurrentRunningRate added in v0.13.0

func (k Keeper) SetPmtpCurrentRunningRate(ctx sdk.Context, runningRate sdk.Dec)

func (Keeper) SetPmtpEpoch added in v0.13.0

func (k Keeper) SetPmtpEpoch(ctx sdk.Context, params types.PmtpEpoch)

func (Keeper) SetPmtpInterPolicyRate added in v0.13.0

func (k Keeper) SetPmtpInterPolicyRate(ctx sdk.Context, interPolicyRate sdk.Dec)

func (Keeper) SetPmtpParams added in v0.13.0

func (k Keeper) SetPmtpParams(ctx sdk.Context, params *types.PmtpParams)

func (Keeper) SetPmtpRateParams added in v0.13.0

func (k Keeper) SetPmtpRateParams(ctx sdk.Context, params types.PmtpRateParams)

func (Keeper) SetPool

func (k Keeper) SetPool(ctx sdk.Context, pool *types.Pool) error

func (Keeper) SetProviderDistributionParams added in v0.13.4

func (k Keeper) SetProviderDistributionParams(ctx sdk.Context, params *types.ProviderDistributionParams)

func (Keeper) SetRewardParams added in v0.13.0

func (k Keeper) SetRewardParams(ctx sdk.Context, params *types.RewardParams)

func (Keeper) SetSymmetryThreshold added in v0.13.1

func (k Keeper) SetSymmetryThreshold(ctx sdk.Context, setThreshold *types.MsgSetSymmetryThreshold)

func (Keeper) TransferProviderDistribution added in v0.13.4

func (k Keeper) TransferProviderDistribution(ctx sdk.Context, poolRowanMap PoolRowanMap, lpRowanMap LpRowanMap, lpPoolMap LpPoolMap)

func (Keeper) TransferProviderDistributionGeneric added in v0.13.4

func (k Keeper) TransferProviderDistributionGeneric(ctx sdk.Context, poolRowanMap PoolRowanMap, lpRowanMap LpRowanMap, lpPoolMap LpPoolMap, typeStr string)

func (Keeper) TransferRewards added in v0.13.4

func (k Keeper) TransferRewards(ctx sdk.Context, poolRowanMap PoolRowanMap, lpRowanMap LpRowanMap, lpPoolMap LpPoolMap)

func (Keeper) UseUnlockedLiquidity added in v0.13.0

func (k Keeper) UseUnlockedLiquidity(ctx sdk.Context, lp types.LiquidityProvider, units sdk.Uint, any bool) error

func (Keeper) ValidateAddress

func (k Keeper) ValidateAddress(ctx sdk.Context, address sdk.AccAddress) bool

func (Keeper) ValidatePool

func (k Keeper) ValidatePool(pool types.Pool) bool

type LPPool added in v0.13.4

type LPPool struct {
	Pool   *types.Pool
	Amount sdk.Uint
}

type LpPoolMap added in v0.13.4

type LpPoolMap map[string][]LPPool

type LpRowanMap added in v0.13.4

type LpRowanMap map[string]sdk.Uint

type Migrator added in v0.13.0

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

func NewMigrator added in v0.13.0

func NewMigrator(keeper Keeper) Migrator

func (Migrator) MigrateToVer2 added in v0.13.0

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

func (Migrator) MigrateToVer3 added in v0.13.3

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

type PoolReward added in v0.13.4

type PoolReward struct {
	Pool   *types.Pool
	Reward sdk.Uint
}

func CollectPoolRewardTuples added in v0.13.4

func CollectPoolRewardTuples(pools []*types.Pool, blockDistribution sdk.Uint, totalDepth sdk.Dec, period *types.RewardPeriod) ([]PoolReward, sdk.Uint)

type PoolRowanMap added in v0.13.4

type PoolRowanMap map[*types.Pool]sdk.Uint

type Querier

type Querier struct {
	Keeper Keeper
}

Querier is used as Keeper will have duplicate methods if used directly, and gRPC names take precedence over keeper

func (Querier) GetAssetList

func (k Querier) GetAssetList(c context.Context, req *types.AssetListReq) (*types.AssetListRes, error)

func (Querier) GetLiquidityProtectionParams added in v0.13.4

func (Querier) GetLiquidityProvider

func (k Querier) GetLiquidityProvider(c context.Context, req *types.LiquidityProviderReq) (*types.LiquidityProviderRes, error)

func (Querier) GetLiquidityProviders

func (k Querier) GetLiquidityProviders(c context.Context, req *types.LiquidityProvidersReq) (*types.LiquidityProvidersRes, error)

func (Querier) GetParams added in v0.13.0

func (k Querier) GetParams(c context.Context, _ *types.ParamsReq) (*types.ParamsRes, error)

func (Querier) GetPmtpParams added in v0.13.0

func (k Querier) GetPmtpParams(c context.Context, _ *types.PmtpParamsReq) (*types.PmtpParamsRes, error)

func (Querier) GetPool

func (k Querier) GetPool(c context.Context, req *types.PoolReq) (*types.PoolRes, error)

func (Querier) GetPools

func (k Querier) GetPools(c context.Context, req *types.PoolsReq) (*types.PoolsRes, error)

func (Querier) GetProviderDistributionParams added in v0.13.4

func (Querier) GetRewardParams added in v0.13.0

func (k Querier) GetRewardParams(c context.Context, _ *types.RewardParamsReq) (*types.RewardParamsRes, error)

type ValidLiquidityProvider added in v0.13.4

type ValidLiquidityProvider struct {
	Address sdk.AccAddress
	LP      *types.LiquidityProvider
}

func FilterValidLiquidityProviders added in v0.13.4

func FilterValidLiquidityProviders(ctx sdk.Context, lps []*types.LiquidityProvider) []ValidLiquidityProvider

Jump to

Keyboard shortcuts

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