keeper

package
v1.7.0 Latest Latest
Warning

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

Go to latest
Published: Aug 25, 2022 License: Apache-2.0 Imports: 26 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ERC20 = iota
	ERC721
)
View Source
const MaxResults = 100 // todo: impl pagination
View Source
const OutgoingTxBatchSize = 100

Variables

View Source
var MAX_UINT, _ = new(big.Int).SetString("115792089237316195423570985008687907853269984665640564039457", 10)

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 NewMsgServerImpl

func NewMsgServerImpl(keeper Keeper) types.MsgServer

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

func NewQuerier

func NewQuerier(keeper Keeper) sdk.Querier

NewQuerier is the module level router for state queries

Types

type AttestationHandler

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

AttestationHandler processes `observed` Attestations

func (AttestationHandler) Handle

func (a AttestationHandler) Handle(ctx sdk.Context, gravityID string, att types.Attestation, claim types.EthereumClaim) error

Handle is the entry point for Attestation processing. TODO-JT add handler for ERC20DeployedEvent

type Hooks

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

Wrapper struct

func (Hooks) AfterDelegationModified

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

func (Hooks) AfterValidatorBeginUnbonding

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

func (Hooks) AfterValidatorBonded

func (h Hooks) AfterValidatorBonded(_ sdk.Context, _ sdk.AccAddress, _ sdk.AccAddress)

func (Hooks) AfterValidatorCreated

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

func (Hooks) AfterValidatorRemoved

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

func (Hooks) BeforeDelegationCreated

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

func (Hooks) BeforeDelegationRemoved

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

func (Hooks) BeforeDelegationSharesModified

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

func (Hooks) BeforeValidatorModified

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

func (Hooks) BeforeValidatorSlashed

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

type Keeper

type Keeper struct {
	AccountKeeper account.AccountKeeper
	StakingKeeper staking.StakingKeeper
	SupplyKeeper  supply.Keeper

	SlashingKeeper slashing.Keeper

	AttestationHandler interface {
		Handle(sdk.Context, string, types.Attestation, types.EthereumClaim) error
	}
	// 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, accountKeeper account.AccountKeeper,
	stakingKeeper staking.StakingKeeper, supplyKeeper supply.Keeper, slashingKeeper slashing.Keeper) Keeper

NewKeeper returns a new instance of the gravity keeper

func (Keeper) AddToOutgoingPool

func (k Keeper) AddToOutgoingPool(ctx sdk.Context, sender sdk.AccAddress, counterpartReceiver string, amount sdk.Coin, fee sdk.Coin, tokenType uint64) (uint64, error)

AddToOutgoingPool - checks a counterpart denominator exists for the given voucher type - burns the voucher for transfer amount and fees - persists an OutgoingTx - adds the TX to the `available` TX pool via a second index

func (Keeper) Attest

func (k Keeper) Attest(ctx sdk.Context, claim types.EthereumClaim) (*types.Attestation, error)

TODO-JT: carefully look at atomicity of this function

func (Keeper) BatchConfirms

BatchConfirms returns the batch confirmations by nonce and token contract

func (Keeper) BatchFees

BatchFees queries the batch fees from unbatched pool

func (Keeper) BatchRequestByNonce

BatchRequestByNonce queries the BatchRequestByNonce of the gravity module

func (Keeper) BuildOutgoingTXBatch

func (k Keeper) BuildOutgoingTXBatch(ctx sdk.Context, contractAddress string, maxElements int, tokenType uint64, requestor common.Address) (*types.OutgoingTxBatch, error)

BuildOutgoingTXBatch 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 outgoing transaction pool sorted by fee desc
  • persist an outgoing batch object with an incrementing ID = nonce
  • emit an event

func (Keeper) CancelOutgoingTXBatch

func (k Keeper) CancelOutgoingTXBatch(ctx sdk.Context, tokenContract string, nonce uint64) error

CancelOutgoingTXBatch releases all TX in the batch and deletes the batch

func (*Keeper) Cdc added in v1.7.0

func (k *Keeper) Cdc() *codec.Codec

func (Keeper) CurrentValset

CurrentValset queries the CurrentValset of the gravity module

func (Keeper) DeleteAttestation

func (k Keeper) DeleteAttestation(ctx sdk.Context, eventNonce uint64, claimHash []byte, att *types.Attestation)

DeleteAttestation deletes an attestation given an event nonce and claim

func (Keeper) DeleteBatch

func (k Keeper) DeleteBatch(ctx sdk.Context, batch types.OutgoingTxBatch)

DeleteBatch deletes an outgoing transaction batch

func (Keeper) DeleteValset

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

DeleteValset deletes the valset at a given nonce from state

func (Keeper) DenomToERC20

DenomToERC20 queries the Cosmos Denom that maps to an Ethereum ERC20

func (Keeper) DenomToERC20Lookup

func (k Keeper) DenomToERC20Lookup(ctx sdk.Context, denom string) (bool, string, 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) DenomToERC721Lookup added in v1.6.21

func (k Keeper) DenomToERC721Lookup(ctx sdk.Context, denom string) (bool, string, error)

func (Keeper) ERC20ToDenom

ERC20ToDenom queries the ERC20 contract that maps to an Ethereum ERC20 if any

func (Keeper) ERC20ToDenomLookup

func (k Keeper) ERC20ToDenomLookup(ctx sdk.Context, tokenContract string) (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) ERC721ToDenomLookup added in v1.6.21

func (k Keeper) ERC721ToDenomLookup(ctx sdk.Context, tokenContract string) (bool, string)

func (Keeper) GetAllBatchFees

func (k Keeper) GetAllBatchFees(ctx sdk.Context) (batchFees []*types.BatchFees)

GetAllBatchFees creates a fee entry for every batch type currently in the store this can be used by relayers to determine what batch types are desireable to request

func (Keeper) GetAllGravityIDs added in v1.6.47

func (k Keeper) GetAllGravityIDs(ctx sdk.Context) (ids []string)

func (Keeper) GetAttestation

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

GetAttestation return an attestation given a nonce

func (Keeper) GetAttestationClaim added in v1.6.47

func (k Keeper) GetAttestationClaim(att *types.Attestation) (types.EthereumClaim, error)

func (Keeper) GetAttestationMapping

func (k Keeper) GetAttestationMapping(ctx sdk.Context) (out map[uint64][]types.Attestation)

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

func (Keeper) GetBatchConfirmByNonceAndTokenContractWithGID added in v1.6.47

func (k Keeper) GetBatchConfirmByNonceAndTokenContractWithGID(ctx sdk.Context, nonce uint64, tokenContract string) (out []types.MsgConfirmBatch)

GetBatchConfirmByNonceAndTokenContract returns the batch confirms

func (Keeper) GetBatchConfirmWithGID added in v1.6.47

func (k Keeper) GetBatchConfirmWithGID(ctx sdk.Context, nonce uint64, tokenContract string, validator sdk.AccAddress) *types.MsgConfirmBatch

GetBatchConfirm returns a batch confirmation given its nonce, the token contract, and a validator address

func (Keeper) GetBatchFeesByTokenType

func (k Keeper) GetBatchFeesByTokenType(ctx sdk.Context, tokenContractAddr string) *types.BatchFees

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

func (k Keeper) GetCurrentValset(ctx sdk.Context) *types.Valset

GetCurrentValset 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) GetDelegateKeys

func (k Keeper) GetDelegateKeys(ctx sdk.Context) []*types.MsgSetOrchestratorAddress

GetDelegateKeys iterates both the EthAddress and Orchestrator address indexes to produce a vector of MsgSetOrchestratorAddress entires containing all the delgate keys for state export / import. This may seem at first glance to be excessively complicated, why not combine the EthAddress and Orchestrator address indexes and simply iterate one thing? The answer is that even though we set the Eth and Orchestrator address in the same place we use them differently we always go from Orchestrator address to Validator address and from validator address to Ethereum address we want to keep looking up the validator address for various reasons, so a direct Orchestrator to Ethereum address mapping will mean having to keep two of the same data around just to provide lookups.

For the time being this will serve

func (Keeper) GetLastEventNonceByValidator

func (k Keeper) GetLastEventNonceByValidator(ctx sdk.Context, validator sdk.AccAddress) uint64

GetLastEventNonceByValidator returns the latest event nonce for a given validator

func (Keeper) GetLastObservedEthereumBlockHeight

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

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

func (Keeper) GetLastObservedEventNonceWithGid added in v1.6.47

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

GetLastObservedEventNonce returns the latest observed event nonce

func (Keeper) GetLastOutgoingBatchByTokenType

func (k Keeper) GetLastOutgoingBatchByTokenType(ctx sdk.Context, token string) *types.OutgoingTxBatch

GetLastOutgoingBatchByTokenType gets the latest outgoing tx batch by token type

func (Keeper) GetLastUnBondingBlockHeight

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

GetLastUnBondingBlockHeight returns the last unbonding block height

func (Keeper) GetLastValsetConfirmNonce added in v1.6.24

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

GetLastValsetConfirmNonce returns the latest observed valset confirm nonce

func (Keeper) GetLatestValset

func (k Keeper) GetLatestValset(ctx sdk.Context) (out *types.Valset)

GetLatestValset returns the latest validator set in state

func (Keeper) GetLatestValsetNonce

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

GetLatestValsetNonce returns the latest valset nonce

func (Keeper) GetMapedERC721Token added in v1.6.21

func (k Keeper) GetMapedERC721Token(ctx sdk.Context, wrc721 string) (string, bool)

func (Keeper) GetMapedEthToken added in v1.5.53

func (k Keeper) GetMapedEthToken(ctx sdk.Context, wrc20 string) (string, bool)

func (Keeper) GetMapedWRC721Token added in v1.6.21

func (k Keeper) GetMapedWRC721Token(ctx sdk.Context, erc721 string) (string, bool)

func (Keeper) GetMapedWlkToken added in v1.5.53

func (k Keeper) GetMapedWlkToken(ctx sdk.Context, erc20 string) (string, bool)

func (Keeper) GetOutgoingTXBatch

func (k Keeper) GetOutgoingTXBatch(ctx sdk.Context, tokenContract string, nonce uint64) *types.OutgoingTxBatch

GetOutgoingTXBatch loads a batch object. Returns nil when not exists.

func (Keeper) GetOutgoingTxBatches

func (k Keeper) GetOutgoingTxBatches(ctx sdk.Context) (out []*types.OutgoingTxBatch)

GetOutgoingTxBatches returns the outgoing tx batches

func (Keeper) GetParams

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

GetParams returns the parameters from the store

func (Keeper) GetPoolTransactions

func (k Keeper) GetPoolTransactions(ctx sdk.Context) []*types.OutgoingTransferTx

GetPoolTransactions, grabs all transactions from the tx pool, useful for queries or genesis save/load

func (Keeper) GetRequestBatch added in v1.6.21

func (k Keeper) GetRequestBatch(ctx sdk.Context, tokenContract string, nonce uint64) *types.RequestBatch

GetRequestBatch loads a batch object. Returns nil when not exists.

func (Keeper) GetTokenMetaData added in v1.5.53

func (k Keeper) GetTokenMetaData(ctx sdk.Context, contract string) types.MetaData

func (Keeper) GetTxidTokenType added in v1.6.70

func (k Keeper) GetTxidTokenType(ctx sdk.Context, txid uint64) uint64

func (Keeper) GetUnbondingvalidators

func (k Keeper) GetUnbondingvalidators(unbondingVals []byte) []sdk.AccAddress

GetUnbondingvalidators returns UnbondingValidators. Adding here in gravity keeper as cdc is available inside endblocker.

func (Keeper) GetValset

func (k Keeper) GetValset(ctx sdk.Context, nonce uint64) *types.Valset

GetValset returns a valset by nonce

func (Keeper) GetValsetConfirmByGID added in v1.6.47

func (k Keeper) GetValsetConfirmByGID(ctx sdk.Context, nonce uint64, validator sdk.AccAddress) *types.MsgValsetConfirm

GetValsetConfirm returns a valset confirmation by a nonce and validator address

func (Keeper) GetValsetConfirmsByGID added in v1.6.47

func (k Keeper) GetValsetConfirmsByGID(ctx sdk.Context, nonce uint64) (confirms []*types.MsgValsetConfirm)

GetValsetConfirms returns all validator set confirmations by nonce

func (Keeper) GetValsets

func (k Keeper) GetValsets(ctx sdk.Context) (out []*types.Valset)

GetValsets returns all the validator sets in state

func (Keeper) HasValsetRequest

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

HasValsetRequest returns true if a valset defined by a nonce exists

func (Keeper) Hooks

func (k Keeper) Hooks() Hooks

Create new gravity hooks

func (Keeper) IsWlkToken added in v1.5.53

func (k Keeper) IsWlkToken(token string) bool

func (Keeper) IterateAttestaions

func (k Keeper) IterateAttestaions(ctx sdk.Context, cb func([]byte, types.Attestation) bool)

IterateAttestaions iterates through all attestations

func (Keeper) IterateBatchConfirmByNonceAndTokenContractWithGID added in v1.6.47

func (k Keeper) IterateBatchConfirmByNonceAndTokenContractWithGID(ctx sdk.Context, nonce uint64, tokenContract string, cb func([]byte, types.MsgConfirmBatch) bool)

IterateBatchConfirmByNonceAndTokenContract iterates through all batch confirmations MARK finish-batches: this is where the key is iterated in the old (presumed working) code TODO: specify which nonce this is

func (Keeper) IterateERC20ToDenom

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

IterateERC20ToDenom iterates over erc20 to denom relations

func (Keeper) IterateERC721ToDenom added in v1.6.21

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

IterateERC721ToDenom iterates over erc721 to denom relations

func (Keeper) IterateOutgoingPoolByFee

func (k Keeper) IterateOutgoingPoolByFee(ctx sdk.Context, contract string, cb func(uint64, *types.OutgoingTransferTx) bool)

IterateOutgoingPoolByFee iterates over the outgoing pool which is sorted by fee

func (Keeper) IterateOutgoingTXBatches

func (k Keeper) IterateOutgoingTXBatches(ctx sdk.Context, cb func(key []byte, batch *types.OutgoingTxBatch) bool)

IterateOutgoingTXBatches iterates through all outgoing batches in DESC order.

func (Keeper) IterateValsetConfirmByNonceWithGID added in v1.6.47

func (k Keeper) IterateValsetConfirmByNonceWithGID(ctx sdk.Context, nonce uint64, cb func([]byte, types.MsgValsetConfirm) bool)

IterateValsetConfirmByNonce iterates through all valset confirms by nonce in ASC order MARK finish-batches: this is where the key is iterated in the old (presumed working) code TODO: specify which nonce this is

func (Keeper) IterateValsets

func (k Keeper) IterateValsets(ctx sdk.Context, cb func(key []byte, val *types.Valset) bool)

IterateValsets retruns all valsetRequests

func (Keeper) LastEventNonceByAddr

LastEventNonceByAddr returns the last event nonce for the given validator address, this allows eth oracles to figure out where they left off

func (Keeper) LastPendingBatchRequestByAddr

LastPendingBatchRequestByAddr queries the LastPendingBatchRequestByAddr of the gravity module

func (Keeper) LastPendingValsetRequestByAddr

LastPendingValsetRequestByAddr queries the LastPendingValsetRequestByAddr of the gravity module

func (Keeper) LastValsetRequests

LastValsetRequests queries the LastValsetRequests of the gravity module

func (Keeper) Logger added in v1.6.8

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

Logger returns a module-specific logger.

func (Keeper) OutgoingTxBatchExecuted

func (k Keeper) OutgoingTxBatchExecuted(ctx sdk.Context, tokenContract string, nonce uint64) error

OutgoingTxBatchExecuted is run when the Cosmos chain detects that a batch has been executed on Ethereum It frees all the transactions in the batch, then cancels all earlier batches

func (Keeper) OutgoingTxBatches

OutgoingTxBatches queries the OutgoingTxBatches of the gravity module

func (Keeper) Params

Params queries the params of the gravity module

func (Keeper) RemoveFromOutgoingPoolAndRefund

func (k Keeper) RemoveFromOutgoingPoolAndRefund(ctx sdk.Context, txId uint64, sender sdk.AccAddress) error

RemoveFromOutgoingPoolAndRefund - checks that the provided tx actually exists - deletes the unbatched tx from the pool - issues the tokens back to the sender

func (Keeper) Reset added in v1.6.42

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

reset gravity data

func (Keeper) SetAttestation

func (k Keeper) SetAttestation(ctx sdk.Context, eventNonce uint64, claimHash []byte, att *types.Attestation)

SetAttestation sets the attestation in the store

func (Keeper) SetBatchConfirmWithGID added in v1.6.47

func (k Keeper) SetBatchConfirmWithGID(ctx sdk.Context, batch *types.MsgConfirmBatch) []byte

SetBatchConfirm sets a batch confirmation by a validator

func (*Keeper) SetCurrentGid added in v1.6.47

func (k *Keeper) SetCurrentGid(gid string)

func (Keeper) SetLastObservedEthereumBlockHeight

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

SetLastObservedEthereumBlockHeight sets the block height in the store.

func (Keeper) SetLastUnBondingBlockHeight

func (k Keeper) SetLastUnBondingBlockHeight(ctx sdk.Context, unbondingBlockHeight uint64)

SetLastUnBondingBlockHeight sets the last unbonding block height

func (Keeper) SetLatestValsetNonce

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

SetLatestValsetNonce sets the latest valset nonce

func (Keeper) SetParams

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

SetParams sets the parameters in the store

func (Keeper) SetTokenMetaData added in v1.5.53

func (k Keeper) SetTokenMetaData(ctx sdk.Context, contract string, meta types.MetaData)

func (Keeper) SetTxidTokenType added in v1.6.70

func (k Keeper) SetTxidTokenType(ctx sdk.Context, txid uint64, tokenType uint64)

func (Keeper) SetValsetConfirmByGID added in v1.6.47

func (k Keeper) SetValsetConfirmByGID(ctx sdk.Context, valsetConf types.MsgValsetConfirm) []byte

SetValsetConfirm sets a valset confirmation

func (Keeper) SetValsetRequest

func (k Keeper) SetValsetRequest(ctx sdk.Context) *types.Valset

SetValsetRequest returns a new instance of the Gravity BridgeValidatorSet i.e. {"nonce": 1, "memebers": [{"eth_addr": "foo", "power": 11223}]}

func (Keeper) StoreBatch

func (k Keeper) StoreBatch(ctx sdk.Context, batch *types.OutgoingTxBatch, requestor common.Address)

StoreBatch stores a transaction batch

func (Keeper) StoreBatchUnsafe

func (k Keeper) StoreBatchUnsafe(ctx sdk.Context, batch *types.OutgoingTxBatch)

StoreBatchUnsafe stores a transaction batch w/o setting the height

func (Keeper) StoreValset

func (k Keeper) StoreValset(ctx sdk.Context, valset *types.Valset)

StoreValset is for storing a valiator set at a given height

func (Keeper) StoreValsetUnsafe

func (k Keeper) StoreValsetUnsafe(ctx sdk.Context, valset *types.Valset)

StoreValsetUnsafe is for storing a valiator set at a given height

func (Keeper) TryAttestation

func (k Keeper) TryAttestation(ctx sdk.Context, att *types.Attestation)

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

func (Keeper) ValsetConfirm

ValsetConfirm queries the ValsetConfirm of the gravity module

func (Keeper) ValsetConfirmsByNonce

ValsetConfirmsByNonce queries the ValsetConfirmsByNonce of the gravity module

func (Keeper) ValsetRequest

ValsetRequest queries the ValsetRequest of the gravity module

type MultiSigUpdateResponse

type MultiSigUpdateResponse struct {
	Valset     types.Valset `json:"valset"`
	Signatures [][]byte     `json:"signatures,omitempty"`
}

Jump to

Keyboard shortcuts

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