primitives

package
v0.0.0-...-b9de96a Latest Latest
Warning

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

Go to latest
Published: Apr 28, 2023 License: MIT Imports: 12 Imported by: 0

Documentation

Overview

Code generated by fastssz. DO NOT EDIT. Hash: f038da96ba0d658b4d2b7f6ab3b07a46861892f02d6dfd95a206d2d0ff0cdf7a

Code generated by fastssz. DO NOT EDIT. Hash: c02cdefb0be72cdd4edfdc0cbed048bb58baf99cfa86cefab5fbbc23bc9ebf5f

Code generated by fastssz. DO NOT EDIT. Hash: 92940119d74c371234317281a0e5d60765ec237622e3db83fab6bf4b10d686a6

Code generated by fastssz. DO NOT EDIT. Hash: f1b317ec85fa1190193b9d89824d9bcdfeb4caa352b0e251651eed6ce30766bd

Code generated by fastssz. DO NOT EDIT. Hash: 4ef52fd70ddf37c4ff497e8f5f3c844c975757e056812503ea985152f5a77d2e

Code generated by fastssz. DO NOT EDIT. Hash: 9d36818c78e26a72424da7e1160d30aa09f0c928224cd95b1abd2429881362cc

Code generated by fastssz. DO NOT EDIT. Hash: a96971d81d31139bbeadcd94adc091b8d1b196cecc085b3bb1af158dd408386d

Code generated by fastssz. DO NOT EDIT. Hash: de79a2259891762a3df86f91f0f632fe6d22ef8a4d4ac01de2c1950c25262397

Code generated by fastssz. DO NOT EDIT. Hash: 80beec617a2a44bc20a5c0a5995aa3196720ba26e4478d005aaaa135cc99a2e1

Code generated by fastssz. DO NOT EDIT. Hash: c1927e3d4e67b84b9ebc817090f665125bb0b97231eb2568d151db7230440fd3

Code generated by fastssz. DO NOT EDIT. Hash: 4d779758de79d566b2f9c09c1fc0f1ea9cb51726f00db054cc11d51543e97abd

Code generated by fastssz. DO NOT EDIT. Hash: 9583a2d2eeeaad602ef5a1a8a0b5078e980f3b4081c0a334810de75fb1906c0b

Index

Constants

View Source
const (
	RewardMatchedFromEpoch uint64 = iota
	PenaltyMissingFromEpoch
	RewardMatchedToEpoch
	PenaltyMissingToEpoch
	RewardMatchedBeaconBlock
	PenaltyMissingBeaconBlock
	RewardIncludedVote
	RewardInclusionDistance
	PenaltyInactivityLeak
	PenaltyInactivityLeakNoVote
)
View Source
const (
	// StatusStarting is when the validator is waiting to join.
	StatusStarting uint64 = iota

	// StatusActive is when the validator is currently in the queue.
	StatusActive

	// StatusActivePendingExit is when a validator is queued to be removed from the
	// active set.
	StatusActivePendingExit

	// StatusExitedWithPenalty is when the validator is exited due to a slashing condition
	// being violated.
	StatusExitedWithPenalty

	// StatusExitedWithoutPenalty is when a validator is exited due to a drop below
	// the ejection balance.
	StatusExitedWithoutPenalty
)
View Source
const BlockHeaderSize = 12 + (14 * 32) // 468 bytes

BlockHeader

View Source
const DepositDataSize = 48 + 96 + 20 // 164 bytes
View Source
const DepositSize = DepositDataSize + 48 + 96 // 308 bytes
View Source
const ExitSize = (48 * 2) + 96 // 192 bytes

MaxBlockSize defines the maximum bytes on a block object.

View Source
const MaxDepositsPerBlock = 32

Deposits

View Source
const MaxExitSize = 192

MaxExitSize is the maximum amount of bytes an exit can contain.

View Source
const MaxExitsPerBlock = 32

Exits

View Source
const MaxMultiValidatorVoteSize = VoteDataSize + 96 + 6255 // 6479 bytes
View Source
const MaxPartialExitsPerBlock = 32

PartialExits

View Source
const MaxProposerSlashingsPerBlock = 2

ProposerSlashing

View Source
const MaxRANDAOSlashingsPerBlock = 20

RANDAOSlashing

View Source
const MaxTxsPerBlock = 5000

Tx

View Source
const MaxVoteSlashingsPerBlock = 5

VoteSlashing

View Source
const MaxVotesPerBlock = 16

Vote

View Source
const MaxVotesSlashingSize = MaxMultiValidatorVoteSize*2 + 8 // 12966 bytes
View Source
const PartialExitsSize = (48 * 2) + 96 + 8 // 200 bytes
View Source
const ProposerSlashingSize = (96 * 2) + 48 + (BlockHeaderSize * 2) // 1160 bytes
View Source
const RANDAOSlashingSize = 96 + 48 + 8 // 152 bytes
View Source
const TxSize = 20 + 48 + (8 * 3) + 96 // 188 bytes
View Source
const VoteDataSize = 30 * 4 // 120 bytes

Variables

View Source
var (
	// ErrorInvalidSignature returned when a tx signature is invalid.
	ErrorInvalidSignature = errors.New("invalid tx signature")
)

Functions

This section is empty.

Types

type AcceptedVoteInfo

type AcceptedVoteInfo struct {
	// Data is the data of the vote which specifies the signed part of the attestation.
	Data *VoteData

	// ParticipationBitfield is any validator that participated in the vote.
	// Max size is the same as the MultiValidatorVote bitlist size.
	ParticipationBitfield bitfield.Bitlist `ssz:"bitlist" ssz-max:"6250"`

	// Proposer is the proposer that included the attestation in a block.
	Proposer uint64

	// InclusionDelay is the delay from the attestation slot to the slot included.
	InclusionDelay uint64
}

AcceptedVoteInfo is vote data and participation for accepted votes.

func (*AcceptedVoteInfo) Copy

Copy returns a copy of the AcceptedVoteInfo.

func (*AcceptedVoteInfo) HashTreeRoot

func (a *AcceptedVoteInfo) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the AcceptedVoteInfo object

func (*AcceptedVoteInfo) HashTreeRootWith

func (a *AcceptedVoteInfo) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the AcceptedVoteInfo object with a hasher

func (*AcceptedVoteInfo) Marshal

func (a *AcceptedVoteInfo) Marshal() ([]byte, error)

Marshal encodes the data.

func (*AcceptedVoteInfo) MarshalSSZ

func (a *AcceptedVoteInfo) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the AcceptedVoteInfo object

func (*AcceptedVoteInfo) MarshalSSZTo

func (a *AcceptedVoteInfo) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the AcceptedVoteInfo object to a target array

func (*AcceptedVoteInfo) SizeSSZ

func (a *AcceptedVoteInfo) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the AcceptedVoteInfo object

func (*AcceptedVoteInfo) Unmarshal

func (a *AcceptedVoteInfo) Unmarshal(b []byte) error

Unmarshal decodes the data.

func (*AcceptedVoteInfo) UnmarshalSSZ

func (a *AcceptedVoteInfo) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the AcceptedVoteInfo object

type AccountInfo

type AccountInfo struct {
	Account [20]byte
	Info    uint64
}

AccountInfo is the information contained into both slices. It represents the account hash and a value.

func (*AccountInfo) HashTreeRoot

func (a *AccountInfo) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the AccountInfo object

func (*AccountInfo) HashTreeRootWith

func (a *AccountInfo) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the AccountInfo object with a hasher

func (*AccountInfo) MarshalSSZ

func (a *AccountInfo) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the AccountInfo object

func (*AccountInfo) MarshalSSZTo

func (a *AccountInfo) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the AccountInfo object to a target array

func (*AccountInfo) SizeSSZ

func (a *AccountInfo) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the AccountInfo object

func (*AccountInfo) UnmarshalSSZ

func (a *AccountInfo) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the AccountInfo object

type Block

type Block struct {
	Header            *BlockHeader          // 																		= 500 bytes
	Signature         [96]byte              // 																		= 96 bytes
	RandaoSignature   [96]byte              // 																		= 96
	Votes             []*MultiValidatorVote `ssz-max:"16"`   // MaxVotesPerBlock 						16 * 6479 		= 103664 bytes
	Deposits          []*Deposit            `ssz-max:"32"`   // MaxDepositsPerBlock 					32 * 308 		= 9856 bytes
	Exits             []*Exit               `ssz-max:"32"`   // MaxExitsPerBlock     					32 * 192 		= 6144 bytes
	PartialExit       []*PartialExit        `ssz-max:"32"`   // MaxPartialExitsPerBlock            	32 * 200		= 6400 bytes
	Txs               []*Tx                 `ssz-max:"5000"` // MaxTxsPerBlock						5000 * 188  	= 940000 bytes
	ProposerSlashings []*ProposerSlashing   `ssz-max:"2"`    // MaxProposerSlashingsPerBlock 			2 * 1240 		= 2480 bytes
	VoteSlashings     []*VoteSlashing       `ssz-max:"5"`    // MaxVoteSlashingsPerBlock				10 * 12948 		= 129480 bytes
	RANDAOSlashings   []*RANDAOSlashing     `ssz-max:"20"`   // MaxRANDAOSlashingsPerBlock  			20 * 152 		= 3040 bytes
}

Block is a block in the blockchain.

func GetGenesisBlock

func GetGenesisBlock() Block

GetGenesisBlock gets the genesis block for a certain chain parameters.

func (*Block) DepositMerkleRoot

func (b *Block) DepositMerkleRoot() chainhash.Hash

DepositMerkleRoot calculates the merkle root of the Deposits in the block.

func (*Block) ExitMerkleRoot

func (b *Block) ExitMerkleRoot() chainhash.Hash

ExitMerkleRoot calculates the merkle root of the Exits in the block.

func (*Block) GetTxs

func (b *Block) GetTxs() []string

GetTxs returns a slice with tx hashes

func (*Block) Hash

func (b *Block) Hash() chainhash.Hash

Hash calculates the hash of the block.

func (*Block) HashTreeRoot

func (b *Block) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the Block object

func (*Block) HashTreeRootWith

func (b *Block) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the Block object with a hasher

func (*Block) Marshal

func (b *Block) Marshal() ([]byte, error)

Marshal encodes the block.

func (*Block) MarshalSSZ

func (b *Block) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the Block object

func (*Block) MarshalSSZTo

func (b *Block) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the Block object to a target array

func (*Block) PartialExitsMerkleRoot

func (b *Block) PartialExitsMerkleRoot() chainhash.Hash

PartialExitsMerkleRoot calculates the merkle root of the PartialExit in the block.

func (*Block) ProposerSlashingsRoot

func (b *Block) ProposerSlashingsRoot() chainhash.Hash

ProposerSlashingsRoot calculates the merkle root of the ProposerSlashings in the block.

func (*Block) RANDAOSlashingsRoot

func (b *Block) RANDAOSlashingsRoot() chainhash.Hash

RANDAOSlashingsRoot calculates the merkle root of the RANDAOSlashings in the block.

func (*Block) SizeSSZ

func (b *Block) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the Block object

func (*Block) TxsMerkleRoot

func (b *Block) TxsMerkleRoot() chainhash.Hash

TxsMerkleRoot calculates the merkle root of the Txs in the block.

func (*Block) Unmarshal

func (b *Block) Unmarshal(bb []byte) error

Unmarshal decodes the block.

func (*Block) UnmarshalSSZ

func (b *Block) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the Block object

func (*Block) VoteSlashingRoot

func (b *Block) VoteSlashingRoot() chainhash.Hash

VoteSlashingRoot calculates the merkle root of the VoteSlashings in the block.

func (*Block) VotesMerkleRoot

func (b *Block) VotesMerkleRoot() chainhash.Hash

VotesMerkleRoot calculates the merkle root of the Votes in the block.

type BlockHeader

type BlockHeader struct {
	Version                     uint64
	Timestamp                   uint64
	Slot                        uint64
	PrevBlockHash               [32]byte
	FeeAddress                  [20]byte
	VoteMerkleRoot              [32]byte
	DepositMerkleRoot           [32]byte
	ExitMerkleRoot              [32]byte
	PartialExitMerkleRoot       [32]byte
	CoinProofsMerkleRoot        [32]byte
	ExecutionsMerkleRoot        [32]byte
	TxsMerkleRoot               [32]byte
	ProposerSlashingMerkleRoot  [32]byte
	VoteSlashingMerkleRoot      [32]byte
	RANDAOSlashingMerkleRoot    [32]byte
	GovernanceVotesMerkleRoot   [32]byte
	MultiSignatureTxsMerkleRoot [32]byte
}

BlockHeader is the container of merkle roots for the blockchain

func (*BlockHeader) Hash

func (b *BlockHeader) Hash() chainhash.Hash

Hash calculates the hash of the block header.

func (*BlockHeader) HashTreeRoot

func (b *BlockHeader) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the BlockHeader object

func (*BlockHeader) HashTreeRootWith

func (b *BlockHeader) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the BlockHeader object with a hasher

func (*BlockHeader) Marshal

func (b *BlockHeader) Marshal() ([]byte, error)

Marshal encodes the data.

func (*BlockHeader) MarshalSSZ

func (b *BlockHeader) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the BlockHeader object

func (*BlockHeader) MarshalSSZTo

func (b *BlockHeader) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the BlockHeader object to a target array

func (*BlockHeader) SizeSSZ

func (b *BlockHeader) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the BlockHeader object

func (*BlockHeader) Unmarshal

func (b *BlockHeader) Unmarshal(by []byte) error

Unmarshal decodes the data.

func (*BlockHeader) UnmarshalSSZ

func (b *BlockHeader) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the BlockHeader object

type BlockNodeDisk

type BlockNodeDisk struct {
	Height   uint64
	Slot     uint64
	Children [][32]byte `ssz-max:"64"`
	Hash     [32]byte   `ssz-size:"32"`
	Parent   [32]byte   `ssz-size:"32"`
}

BlockNodeDisk is a block node stored on disk.

func (*BlockNodeDisk) HashTreeRoot

func (b *BlockNodeDisk) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the BlockNodeDisk object

func (*BlockNodeDisk) HashTreeRootWith

func (b *BlockNodeDisk) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the BlockNodeDisk object with a hasher

func (*BlockNodeDisk) Marshal

func (b *BlockNodeDisk) Marshal() ([]byte, error)

Marshal encodes de data

func (*BlockNodeDisk) MarshalSSZ

func (b *BlockNodeDisk) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the BlockNodeDisk object

func (*BlockNodeDisk) MarshalSSZTo

func (b *BlockNodeDisk) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the BlockNodeDisk object to a target array

func (*BlockNodeDisk) SizeSSZ

func (b *BlockNodeDisk) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the BlockNodeDisk object

func (*BlockNodeDisk) Unmarshal

func (b *BlockNodeDisk) Unmarshal(by []byte) error

Unmarshal decodes the data

func (*BlockNodeDisk) UnmarshalSSZ

func (b *BlockNodeDisk) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the BlockNodeDisk object

type CoinsState

type CoinsState struct {
	Balances       map[[20]byte]uint64
	Nonces         map[[20]byte]uint64
	ProofsVerified map[[32]byte]struct{}
}

CoinsState is the state that we use to store accounts balances and Nonces

func (*CoinsState) Copy

func (u *CoinsState) Copy() CoinsState

Copy copies CoinsState and returns a new one.

func (*CoinsState) FromSerializable

func (u *CoinsState) FromSerializable(ser *CoinsStateSerializable)

FromSerializable creates a CoinsState

func (*CoinsState) GetTotal

func (u *CoinsState) GetTotal() uint64

GetTotal returns the total supply on the state

func (*CoinsState) Marshal

func (u *CoinsState) Marshal() ([]byte, error)

Marshal serialize to bytes the struct

func (*CoinsState) ToSerializable

func (u *CoinsState) ToSerializable() CoinsStateSerializable

ToSerializable converts the struct from maps to slices.

func (*CoinsState) Unmarshal

func (u *CoinsState) Unmarshal(b []byte) error

Unmarshal deserialize the bytes to struct

type CoinsStateSerializable

type CoinsStateSerializable struct {
	Balances []*AccountInfo `ssz-max:"2097152"`
	Nonces   []*AccountInfo `ssz-max:"2097152"`
	Proofs   [][32]byte     `ssz-max:"2097152"`
}

CoinsStateSerializable is a struct to properly serialize the coinstate efficiently

func (*CoinsStateSerializable) HashTreeRoot

func (c *CoinsStateSerializable) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the CoinsStateSerializable object

func (*CoinsStateSerializable) HashTreeRootWith

func (c *CoinsStateSerializable) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the CoinsStateSerializable object with a hasher

func (*CoinsStateSerializable) Marshal

func (c *CoinsStateSerializable) Marshal() ([]byte, error)

func (*CoinsStateSerializable) MarshalSSZ

func (c *CoinsStateSerializable) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the CoinsStateSerializable object

func (*CoinsStateSerializable) MarshalSSZTo

func (c *CoinsStateSerializable) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the CoinsStateSerializable object to a target array

func (*CoinsStateSerializable) SizeSSZ

func (c *CoinsStateSerializable) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the CoinsStateSerializable object

func (*CoinsStateSerializable) Unmarshal

func (c *CoinsStateSerializable) Unmarshal(b []byte) error

func (*CoinsStateSerializable) UnmarshalSSZ

func (c *CoinsStateSerializable) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the CoinsStateSerializable object

type Deposit

type Deposit struct {
	// PublicKey is the public key of the address that is depositing.
	PublicKey [48]byte

	// Signature is the signature signing the deposit data.
	Signature [96]byte

	// Data is the data that describes the new validator.
	Data *DepositData
}

Deposit is a deposit a user can submit to queue as a validator.

func (*Deposit) GetPublicKey

func (d *Deposit) GetPublicKey() (common.PublicKey, error)

GetPublicKey returns the bls public key of the deposit.

func (*Deposit) GetSignature

func (d *Deposit) GetSignature() (common.Signature, error)

GetSignature returns the bls signature of the deposit.

func (*Deposit) Hash

func (d *Deposit) Hash() chainhash.Hash

Hash calculates the hash of the deposit

func (*Deposit) HashTreeRoot

func (d *Deposit) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the Deposit object

func (*Deposit) HashTreeRootWith

func (d *Deposit) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the Deposit object with a hasher

func (*Deposit) Marshal

func (d *Deposit) Marshal() ([]byte, error)

Marshal encodes the data.

func (*Deposit) MarshalSSZ

func (d *Deposit) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the Deposit object

func (*Deposit) MarshalSSZTo

func (d *Deposit) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the Deposit object to a target array

func (*Deposit) SizeSSZ

func (d *Deposit) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the Deposit object

func (*Deposit) Unmarshal

func (d *Deposit) Unmarshal(b []byte) error

Unmarshal decodes the data.

func (*Deposit) UnmarshalSSZ

func (d *Deposit) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the Deposit object

type DepositData

type DepositData struct {
	// PublicKey is the key used for the validator.
	PublicKey [48]byte

	// ProofOfPossession is the public key signed by the private key to prove that you own the address and prevent rogue public-key attacks.
	ProofOfPossession [96]byte

	// WithdrawalAddress is the address to withdraw to.
	WithdrawalAddress [20]byte
}

DepositData is the part of the deposit that is signed

func (*DepositData) GetPublicKey

func (d *DepositData) GetPublicKey() (common.PublicKey, error)

GetPublicKey returns the bls public key of the deposit data.

func (*DepositData) GetSignature

func (d *DepositData) GetSignature() (common.Signature, error)

GetSignature returns the bls signature of the deposit data.

func (*DepositData) HashTreeRoot

func (d *DepositData) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the DepositData object

func (*DepositData) HashTreeRootWith

func (d *DepositData) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the DepositData object with a hasher

func (*DepositData) Marshal

func (d *DepositData) Marshal() ([]byte, error)

Marshal encodes the data.

func (*DepositData) MarshalSSZ

func (d *DepositData) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the DepositData object

func (*DepositData) MarshalSSZTo

func (d *DepositData) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the DepositData object to a target array

func (*DepositData) SizeSSZ

func (d *DepositData) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the DepositData object

func (*DepositData) Unmarshal

func (d *DepositData) Unmarshal(b []byte) error

Unmarshal decodes the data.

func (*DepositData) UnmarshalSSZ

func (d *DepositData) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the DepositData object

type EpochReceipt

type EpochReceipt struct {
	Type      uint64
	Amount    int64
	Validator uint64
}

EpochReceipt is a balance change carried our by an epoch transition.

func (*EpochReceipt) String

func (e *EpochReceipt) String() string

func (EpochReceipt) TypeString

func (e EpochReceipt) TypeString() string

type Exit

type Exit struct {
	ValidatorPubkey [48]byte
	WithdrawPubkey  [48]byte
	Signature       [96]byte
}

Exit exits the validator from the queue.

func (*Exit) GetSignature

func (e *Exit) GetSignature() (common.Signature, error)

GetSignature returns the exit bls signature.

func (*Exit) GetValidatorPubKey

func (e *Exit) GetValidatorPubKey() (common.PublicKey, error)

GetValidatorPubKey returns the validator bls public key

func (*Exit) GetWithdrawPubKey

func (e *Exit) GetWithdrawPubKey() (common.PublicKey, error)

GetWithdrawPubKey returns the withdraw bls public key

func (*Exit) Hash

func (e *Exit) Hash() chainhash.Hash

Hash calculates the hash of the exit.

func (*Exit) HashTreeRoot

func (e *Exit) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the Exit object

func (*Exit) HashTreeRootWith

func (e *Exit) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the Exit object with a hasher

func (*Exit) Marshal

func (e *Exit) Marshal() ([]byte, error)

Marshal encodes the data.

func (*Exit) MarshalSSZ

func (e *Exit) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the Exit object

func (*Exit) MarshalSSZTo

func (e *Exit) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the Exit object to a target array

func (*Exit) SizeSSZ

func (e *Exit) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the Exit object

func (*Exit) Unmarshal

func (e *Exit) Unmarshal(b []byte) error

Unmarshal decodes the data.

func (*Exit) UnmarshalSSZ

func (e *Exit) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the Exit object

type MultiValidatorVote

type MultiValidatorVote struct {
	// Data defines the vote properties.
	Data *VoteData
	// Sig is the aggregated signature for all validators voting for the VoteData.
	Sig [96]byte
	// ParticipationBitfield is a bitlist that marks the index of the validators voting.
	// Maximum amount of votes inside a bitlist is 50000
	ParticipationBitfield bitfield.Bitlist `ssz:"bitlist" ssz-max:"50000"`
}

MultiValidatorVote is a vote signed by one or many validators.

func (*MultiValidatorVote) HashTreeRoot

func (m *MultiValidatorVote) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the MultiValidatorVote object

func (*MultiValidatorVote) HashTreeRootWith

func (m *MultiValidatorVote) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the MultiValidatorVote object with a hasher

func (*MultiValidatorVote) Marshal

func (m *MultiValidatorVote) Marshal() ([]byte, error)

Marshal encodes the data.

func (*MultiValidatorVote) MarshalSSZ

func (m *MultiValidatorVote) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the MultiValidatorVote object

func (*MultiValidatorVote) MarshalSSZTo

func (m *MultiValidatorVote) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the MultiValidatorVote object to a target array

func (*MultiValidatorVote) Signature

func (m *MultiValidatorVote) Signature() (common.Signature, error)

Signature returns the signature on BLS type

func (*MultiValidatorVote) SizeSSZ

func (m *MultiValidatorVote) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the MultiValidatorVote object

func (*MultiValidatorVote) Unmarshal

func (m *MultiValidatorVote) Unmarshal(b []byte) error

Unmarshal decodes the data.

func (*MultiValidatorVote) UnmarshalSSZ

func (m *MultiValidatorVote) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the MultiValidatorVote object

type PartialExit

type PartialExit struct {
	ValidatorPubkey [48]byte
	WithdrawPubkey  [48]byte
	Signature       [96]byte
	Amount          uint64
}

PartialExit claims a partial amount of a validator balance without removing it from the validator registry.

func (*PartialExit) GetSignature

func (p *PartialExit) GetSignature() (common.Signature, error)

GetSignature returns the exit bls signature.

func (*PartialExit) GetValidatorPubKey

func (p *PartialExit) GetValidatorPubKey() (common.PublicKey, error)

GetValidatorPubKey returns the validator bls public key

func (*PartialExit) GetWithdrawPubKey

func (p *PartialExit) GetWithdrawPubKey() (common.PublicKey, error)

GetWithdrawPubKey returns the withdraw bls public key

func (*PartialExit) Hash

func (p *PartialExit) Hash() chainhash.Hash

Hash calculates the hash of the exit.

func (*PartialExit) HashTreeRoot

func (p *PartialExit) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the PartialExit object

func (*PartialExit) HashTreeRootWith

func (p *PartialExit) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the PartialExit object with a hasher

func (*PartialExit) Marshal

func (p *PartialExit) Marshal() ([]byte, error)

Marshal encodes the data.

func (*PartialExit) MarshalSSZ

func (p *PartialExit) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the PartialExit object

func (*PartialExit) MarshalSSZTo

func (p *PartialExit) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the PartialExit object to a target array

func (*PartialExit) SizeSSZ

func (p *PartialExit) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the PartialExit object

func (*PartialExit) Unmarshal

func (p *PartialExit) Unmarshal(b []byte) error

Unmarshal decodes the data.

func (*PartialExit) UnmarshalSSZ

func (p *PartialExit) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the PartialExit object

type ProposerSlashing

type ProposerSlashing struct {
	BlockHeader1       *BlockHeader
	BlockHeader2       *BlockHeader
	Signature1         [96]byte `ssz-size:"96"`
	Signature2         [96]byte `ssz-size:"96"`
	ValidatorPublicKey [48]byte `ssz-size:"48"`
}

ProposerSlashing is a slashing to a block proposer that proposed two blocks at the same slot.

func (*ProposerSlashing) GetSignature1

func (p *ProposerSlashing) GetSignature1() (common.Signature, error)

GetSignature1 returns the slashing first bls validator signature.

func (*ProposerSlashing) GetSignature2

func (p *ProposerSlashing) GetSignature2() (common.Signature, error)

GetSignature2 returns the slashing second bls validator signature.

func (*ProposerSlashing) GetValidatorPubkey

func (p *ProposerSlashing) GetValidatorPubkey() (common.PublicKey, error)

GetValidatorPubkey returns the slashing bls validator public key.

func (*ProposerSlashing) Hash

func (p *ProposerSlashing) Hash() chainhash.Hash

Hash calculates the hash of the proposer slashing.

func (*ProposerSlashing) HashTreeRoot

func (p *ProposerSlashing) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the ProposerSlashing object

func (*ProposerSlashing) HashTreeRootWith

func (p *ProposerSlashing) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the ProposerSlashing object with a hasher

func (*ProposerSlashing) Marshal

func (p *ProposerSlashing) Marshal() ([]byte, error)

Marshal encodes the data.

func (*ProposerSlashing) MarshalSSZ

func (p *ProposerSlashing) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the ProposerSlashing object

func (*ProposerSlashing) MarshalSSZTo

func (p *ProposerSlashing) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the ProposerSlashing object to a target array

func (*ProposerSlashing) SizeSSZ

func (p *ProposerSlashing) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the ProposerSlashing object

func (*ProposerSlashing) Unmarshal

func (p *ProposerSlashing) Unmarshal(b []byte) error

Unmarshal decodes the data.

func (*ProposerSlashing) UnmarshalSSZ

func (p *ProposerSlashing) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the ProposerSlashing object

type RANDAOSlashing

type RANDAOSlashing struct {
	RandaoReveal    [96]byte
	Slot            uint64
	ValidatorPubkey [48]byte
}

RANDAOSlashing is a slashing where a validator reveals their RANDAO signature too early.

func (*RANDAOSlashing) GetRandaoReveal

func (r *RANDAOSlashing) GetRandaoReveal() (common.Signature, error)

GetRandaoReveal returns the bls signature of the randao reveal.

func (*RANDAOSlashing) GetValidatorPubkey

func (r *RANDAOSlashing) GetValidatorPubkey() (common.PublicKey, error)

GetValidatorPubkey returns the validator bls public key.

func (*RANDAOSlashing) Hash

func (r *RANDAOSlashing) Hash() chainhash.Hash

Hash calculates the hash of the RANDAO slashing.

func (*RANDAOSlashing) HashTreeRoot

func (r *RANDAOSlashing) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the RANDAOSlashing object

func (*RANDAOSlashing) HashTreeRootWith

func (r *RANDAOSlashing) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the RANDAOSlashing object with a hasher

func (*RANDAOSlashing) Marshal

func (r *RANDAOSlashing) Marshal() ([]byte, error)

Marshal encodes the data.

func (*RANDAOSlashing) MarshalSSZ

func (r *RANDAOSlashing) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the RANDAOSlashing object

func (*RANDAOSlashing) MarshalSSZTo

func (r *RANDAOSlashing) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the RANDAOSlashing object to a target array

func (*RANDAOSlashing) SizeSSZ

func (r *RANDAOSlashing) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the RANDAOSlashing object

func (*RANDAOSlashing) Unmarshal

func (r *RANDAOSlashing) Unmarshal(b []byte) error

Unmarshal decodes the data.

func (*RANDAOSlashing) UnmarshalSSZ

func (r *RANDAOSlashing) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the RANDAOSlashing object

type SerializableState

type SerializableState struct {
	// CoinsState keeps if accounts balances and transactions.
	CoinsState *CoinsStateSerializable

	// ValidatorRegistry keeps track of validators in the state.
	ValidatorRegistry []*Validator `ssz-max:"2097152"`

	// LatestValidatorRegistryChange keeps track of the last time the validator
	// registry was changed. We only want to update the registry if a block was
	// finalized since the last time it was changed, so we keep track of that
	// here.
	LatestValidatorRegistryChange uint64

	// RANDAO for figuring out the proposer queue. We don't want any one validator
	// to have influence over the RANDAO, so we have each proposer contribute.
	RANDAO [32]byte `ssz-size:"32"`

	// NextRANDAO is the RANDAO currently being created. Every time a block is
	// created, we XOR the 32 least-significant bytes of the RandaoReveal with this
	// value to update it.
	NextRANDAO [32]byte `ssz-size:"32"`

	// Slot is the last slot ProcessSlot was called for.
	Slot uint64

	// EpochIndex is the last epoch ProcessEpoch was called for.
	EpochIndex uint64

	// ProposerQueue is the queue of validators scheduled to create a block.
	ProposerQueue []uint64 `ssz-max:"2097152"`

	PreviousEpochVoteAssignments []uint64 `ssz-max:"2097152"`
	CurrentEpochVoteAssignments  []uint64 `ssz-max:"2097152"`

	// NextProposerQueue is the queue of validators scheduled to create a block
	// in the next epoch.
	NextProposerQueue []uint64 `ssz-max:"2097152"`

	// JustifiedBitfield is a bitfield where the nth least significant bit
	// represents whether the nth last epoch was justified.
	JustificationBitfield uint64

	// FinalizedEpoch is the epoch that was finalized.
	FinalizedEpoch uint64

	// LastBlockHashes is the last LastBlockHashesSize block hashes.
	LatestBlockHashes [][32]byte `ssz-max:"64"`

	// JustifiedEpoch is the last epoch that >2/3 of validators voted for.
	JustifiedEpoch uint64

	// JustifiedEpochHash is the block hash of the last epoch that >2/3 of validators voted for.
	JustifiedEpochHash [32]byte `ssz-size:"32"`

	// CurrentEpochVotes are votes that are being submitted where
	// the source epoch matches justified epoch.
	CurrentEpochVotes []*AcceptedVoteInfo `ssz-max:"2097152"`

	// PreviousJustifiedEpoch is the second-to-last epoch that >2/3 of validators
	// voted for.
	PreviousJustifiedEpoch uint64

	// PreviousJustifiedEpochHash is the block hash of the last epoch that >2/3 of validators voted for.
	PreviousJustifiedEpochHash [32]byte `ssz-size:"32"`

	// PreviousEpochVotes are votes where the FromEpoch matches PreviousJustifiedEpoch.
	PreviousEpochVotes []*AcceptedVoteInfo `ssz-max:"2097152"`

	// CurrentManagers are current managers of the governance funds.
	CurrentManagers [][20]byte `ssz-max:"5"`

	// ManagerReplacement is a bitfield where the bits of the managers to replace are 1.
	ManagerReplacement bitfield.Bitlist `ssz:"bitlist" ssz-max:"2048"`

	VoteEpoch          uint64
	VoteEpochStartSlot uint64
	VotingState        uint64

	LastPaidSlot uint64
}

SerializableState is a serializable copy of the state

func (*SerializableState) HashTreeRoot

func (s *SerializableState) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the SerializableState object

func (*SerializableState) HashTreeRootWith

func (s *SerializableState) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the SerializableState object with a hasher

func (*SerializableState) Marshal

func (s *SerializableState) Marshal() ([]byte, error)

func (*SerializableState) MarshalSSZ

func (s *SerializableState) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the SerializableState object

func (*SerializableState) MarshalSSZTo

func (s *SerializableState) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the SerializableState object to a target array

func (*SerializableState) SizeSSZ

func (s *SerializableState) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the SerializableState object

func (*SerializableState) Unmarshal

func (s *SerializableState) Unmarshal(b []byte) error

func (*SerializableState) UnmarshalSSZ

func (s *SerializableState) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the SerializableState object

type Tx

type Tx struct {
	To            [20]byte
	FromPublicKey [48]byte
	Amount        uint64
	Nonce         uint64
	Fee           uint64
	Signature     [96]byte
}

Tx represents a transaction on the blockchain.

func (Tx) FromPubkeyHash

func (t Tx) FromPubkeyHash() ([20]byte, error)

FromPubkeyHash calculates the hash of the from public key.

func (Tx) GetPublic

func (t Tx) GetPublic() (common.PublicKey, error)

GetPublic returns the bls public key of the transaction.

func (Tx) GetSignature

func (t Tx) GetSignature() (common.Signature, error)

GetSignature returns the bls signature of the transaction.

func (*Tx) Hash

func (t *Tx) Hash() chainhash.Hash

Hash calculates the transaction hash.

func (*Tx) HashTreeRoot

func (t *Tx) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the Tx object

func (*Tx) HashTreeRootWith

func (t *Tx) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the Tx object with a hasher

func (*Tx) Marshal

func (t *Tx) Marshal() ([]byte, error)

Marshal encodes the data.

func (*Tx) MarshalSSZ

func (t *Tx) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the Tx object

func (*Tx) MarshalSSZTo

func (t *Tx) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the Tx object to a target array

func (Tx) SignatureMessage

func (t Tx) SignatureMessage() chainhash.Hash

SignatureMessage gets the message the needs to be signed.

func (*Tx) SizeSSZ

func (t *Tx) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the Tx object

func (*Tx) Unmarshal

func (t *Tx) Unmarshal(b []byte) error

Unmarshal decodes the data.

func (*Tx) UnmarshalSSZ

func (t *Tx) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the Tx object

func (*Tx) VerifySig

func (t *Tx) VerifySig() error

VerifySig verifies the signatures is valid.

type Validator

type Validator struct {
	Balance          uint64
	PubKey           [48]byte
	PayeeAddress     [20]byte
	Status           uint64
	FirstActiveEpoch uint64
	LastActiveEpoch  uint64
}

Validator is a validator in the queue.

func (*Validator) Copy

func (v *Validator) Copy() Validator

Copy returns a copy of the validator.

func (*Validator) HashTreeRoot

func (v *Validator) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the Validator object

func (*Validator) HashTreeRootWith

func (v *Validator) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the Validator object with a hasher

func (*Validator) IsActive

func (v *Validator) IsActive() bool

IsActive checks if a validator is currently active.

func (*Validator) IsActiveAtEpoch

func (v *Validator) IsActiveAtEpoch(epoch uint64) bool

IsActiveAtEpoch checks if a validator is active at a slot.

func (*Validator) Marshal

func (v *Validator) Marshal() ([]byte, error)

Marshal encodes the data.

func (*Validator) MarshalSSZ

func (v *Validator) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the Validator object

func (*Validator) MarshalSSZTo

func (v *Validator) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the Validator object to a target array

func (*Validator) SizeSSZ

func (v *Validator) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the Validator object

func (*Validator) StatusString

func (v *Validator) StatusString() string

StatusString returns the status on human readable string

func (*Validator) Unmarshal

func (v *Validator) Unmarshal(b []byte) error

Unmarshal decodes the data.

func (*Validator) UnmarshalSSZ

func (v *Validator) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the Validator object

type VoteData

type VoteData struct {
	// Slot is the slot the validators were assigned.
	Slot uint64

	// FromEpoch is the source epoch of the vote which should either be
	// the current justified epoch or the previous justified epoch.
	FromEpoch uint64

	// FromHash is the block hash of the FromEpoch.
	FromHash [32]byte

	// ToEpoch is the target epoch of the vote which should either be the
	// current epoch or the previous epoch.
	ToEpoch uint64

	// ToHash is the block hash of the ToEpoch.
	ToHash [32]byte

	// BeaconBlockHash is for the fork choice.
	BeaconBlockHash [32]byte
}

VoteData is the part of a vote that needs to be signed.

func (*VoteData) Copy

func (v *VoteData) Copy() VoteData

Copy returns a copy of the vote data.

func (*VoteData) Equals

func (v *VoteData) Equals(other *VoteData) bool

Equals checks if vote data equals another vote data.

func (*VoteData) FirstSlotValid

func (v *VoteData) FirstSlotValid(p *params.ChainParams) uint64

FirstSlotValid return the first slot valid for current validator vote

func (*VoteData) Hash

func (v *VoteData) Hash() chainhash.Hash

Hash calculates the hash of the vote data.

func (*VoteData) HashTreeRoot

func (v *VoteData) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the VoteData object

func (*VoteData) HashTreeRootWith

func (v *VoteData) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the VoteData object with a hasher

func (*VoteData) IsDoubleVote

func (v *VoteData) IsDoubleVote(v2 *VoteData) bool

IsDoubleVote checks if the two votes form a double vote.

func (*VoteData) IsSurroundVote

func (v *VoteData) IsSurroundVote(v2 *VoteData) bool

IsSurroundVote checks if the two votes form a surrounded vote.

func (*VoteData) LastSlotValid

func (v *VoteData) LastSlotValid(p *params.ChainParams) uint64

LastSlotValid return the last slot valid for current validator vote

func (*VoteData) Marshal

func (v *VoteData) Marshal() ([]byte, error)

Marshal encodes the data.

func (*VoteData) MarshalSSZ

func (v *VoteData) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the VoteData object

func (*VoteData) MarshalSSZTo

func (v *VoteData) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the VoteData object to a target array

func (*VoteData) SizeSSZ

func (v *VoteData) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the VoteData object

func (*VoteData) String

func (v *VoteData) String() string

func (*VoteData) Unmarshal

func (v *VoteData) Unmarshal(b []byte) error

Unmarshal decodes the data.

func (*VoteData) UnmarshalSSZ

func (v *VoteData) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the VoteData object

type VoteSlashing

type VoteSlashing struct {
	Vote1 *MultiValidatorVote
	Vote2 *MultiValidatorVote
}

VoteSlashing is a slashing where validators vote in the span of their other votes.

func (*VoteSlashing) Hash

func (v *VoteSlashing) Hash() chainhash.Hash

Hash calculates the hash of the slashing.

func (*VoteSlashing) HashTreeRoot

func (v *VoteSlashing) HashTreeRoot() ([32]byte, error)

HashTreeRoot ssz hashes the VoteSlashing object

func (*VoteSlashing) HashTreeRootWith

func (v *VoteSlashing) HashTreeRootWith(hh *ssz.Hasher) (err error)

HashTreeRootWith ssz hashes the VoteSlashing object with a hasher

func (*VoteSlashing) Marshal

func (v *VoteSlashing) Marshal() ([]byte, error)

Marshal encodes the data.

func (*VoteSlashing) MarshalSSZ

func (v *VoteSlashing) MarshalSSZ() ([]byte, error)

MarshalSSZ ssz marshals the VoteSlashing object

func (*VoteSlashing) MarshalSSZTo

func (v *VoteSlashing) MarshalSSZTo(buf []byte) (dst []byte, err error)

MarshalSSZTo ssz marshals the VoteSlashing object to a target array

func (*VoteSlashing) SizeSSZ

func (v *VoteSlashing) SizeSSZ() (size int)

SizeSSZ returns the ssz encoded size in bytes for the VoteSlashing object

func (*VoteSlashing) Unmarshal

func (v *VoteSlashing) Unmarshal(b []byte) error

Unmarshal decodes the data.

func (*VoteSlashing) UnmarshalSSZ

func (v *VoteSlashing) UnmarshalSSZ(buf []byte) error

UnmarshalSSZ ssz unmarshals the VoteSlashing object

Jump to

Keyboard shortcuts

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