Documentation ¶
Index ¶
- func ApoaProto(header block.IHeader) []byte
- func New(config *params.CliqueConfig, db kv.RwDB) consensus.Engine
- func SealHash(header block.IHeader) (hash types.Hash)
- type API
- func (api *API) Discard(address common.Address)
- func (api *API) GetSigner(rlpOrBlockNr *blockNumberOrHashOrRLP) (types.Address, error)
- func (api *API) GetSigners(number *jsonrpc.BlockNumber) ([]common.Address, error)
- func (api *API) GetSignersAtHash(hash types.Hash) ([]common.Address, error)
- func (api *API) GetSnapshot(number *jsonrpc.BlockNumber) (*Snapshot, error)
- func (api *API) GetSnapshotAtHash(hash types.Hash) (*Snapshot, error)
- func (api *API) Proposals() map[common.Address]bool
- func (api *API) Propose(address common.Address, auth bool)
- func (api *API) Status() (*status, error)
- type Apoa
- func (c *Apoa) APIs(chain consensus.ChainReader) []jsonrpc.API
- func (c *Apoa) Author(header block.IHeader) (types.Address, error)
- func (c *Apoa) Authorize(signer types.Address, signFn SignerFn)
- func (c *Apoa) CalcDifficulty(chain consensus.ChainHeaderReader, time uint64, parent block.IHeader) *uint256.Int
- func (c *Apoa) Close() error
- func (c *Apoa) Finalize(chain consensus.ChainHeaderReader, header block.IHeader, ...) ([]*block.Reward, map[types.Address]*uint256.Int, error)
- func (c *Apoa) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header block.IHeader, ...) (block.IBlock, []*block.Reward, map[types.Address]*uint256.Int, error)
- func (c *Apoa) IsServiceTransaction(sender types.Address, syscall consensus.SystemCall) bool
- func (c *Apoa) Prepare(chain consensus.ChainHeaderReader, header block.IHeader) error
- func (c *Apoa) Rewards(tx kv.RwTx, header block.IHeader, state *state.IntraBlockState, ...) ([]*block.Reward, error)
- func (c *Apoa) Seal(chain consensus.ChainHeaderReader, b block.IBlock, results chan<- block.IBlock, ...) error
- func (c *Apoa) SealHash(header block.IHeader) types.Hash
- func (c *Apoa) Type() params.ConsensusType
- func (c *Apoa) VerifyHeader(chain consensus.ChainHeaderReader, header block.IHeader, seal bool) error
- func (c *Apoa) VerifyHeaders(chain consensus.ChainHeaderReader, headers []block.IHeader, seals []bool) (chan<- struct{}, <-chan error)
- func (c *Apoa) VerifyUncles(chain consensus.ChainReader, block block.IBlock) error
- type SignerFn
- type Snapshot
- type Tally
- type Vote
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type API ¶
type API struct {
// contains filtered or unexported fields
}
API is a user facing jsonrpc API to allow controlling the signer and voting mechanisms of the proof-of-authority scheme.
func (*API) Discard ¶
Discard drops a currently running proposal, stopping the signer from casting further votes (either for or against).
func (*API) GetSigner ¶
GetSigner returns the signer for a specific apoa block. Can be called with either a blocknumber, blockhash or an rlp encoded blob. The RLP encoded blob can either be a block or a header.
func (*API) GetSigners ¶
GetSigners retrieves the list of authorized signers at the specified block.
func (*API) GetSignersAtHash ¶
GetSignersAtHash retrieves the list of authorized signers at the specified block.
func (*API) GetSnapshot ¶
func (api *API) GetSnapshot(number *jsonrpc.BlockNumber) (*Snapshot, error)
GetSnapshot retrieves the state snapshot at a given block.
func (*API) GetSnapshotAtHash ¶
GetSnapshotAtHash retrieves the state snapshot at a given block.
func (*API) Proposals ¶
Proposals returns the current proposals the node tries to uphold and vote on.
type Apoa ¶
type Apoa struct {
// contains filtered or unexported fields
}
Apoa is the proof-of-authority consensus engine proposed to support the Ethereum testnet following the Ropsten attacks.
func (*Apoa) APIs ¶
func (c *Apoa) APIs(chain consensus.ChainReader) []jsonrpc.API
APIs implements consensus.Engine, returning the user facing RPC API to allow controlling the signer voting.
func (*Apoa) Author ¶
Author implements consensus.Engine, returning the Ethereum address recovered from the signature in the header's extra-data section.
func (*Apoa) Authorize ¶
Authorize injects a private key into the consensus engine to mint new blocks with. todo init
func (*Apoa) CalcDifficulty ¶
func (c *Apoa) CalcDifficulty(chain consensus.ChainHeaderReader, time uint64, parent block.IHeader) *uint256.Int
CalcDifficulty is the difficulty adjustment algorithm. It returns the difficulty that a new block should have: * DIFF_NOTURN(2) if BLOCK_NUMBER % SIGNER_COUNT != SIGNER_INDEX * DIFF_INTURN(1) if BLOCK_NUMBER % SIGNER_COUNT == SIGNER_INDEX
func (*Apoa) Close ¶
Close implements consensus.Engine. It's a noop for Apoa as there are no background threads.
func (*Apoa) Finalize ¶
func (c *Apoa) Finalize(chain consensus.ChainHeaderReader, header block.IHeader, state *state.IntraBlockState, txs []*transaction.Transaction, uncles []block.IHeader) ([]*block.Reward, map[types.Address]*uint256.Int, error)
Finalize implements consensus.Engine, ensuring no uncles are set, nor block rewards given.
func (*Apoa) FinalizeAndAssemble ¶
func (c *Apoa) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header block.IHeader, state *state.IntraBlockState, txs []*transaction.Transaction, uncles []block.IHeader, receipts []*block.Receipt) (block.IBlock, []*block.Reward, map[types.Address]*uint256.Int, error)
FinalizeAndAssemble implements consensus.Engine, ensuring no uncles are set, nor block rewards given, and returns the final block.
func (*Apoa) IsServiceTransaction ¶
func (*Apoa) Prepare ¶
Prepare implements consensus.Engine, preparing all the consensus fields of the header for running the transactions on top.
func (*Apoa) Seal ¶
func (c *Apoa) Seal(chain consensus.ChainHeaderReader, b block.IBlock, results chan<- block.IBlock, stop <-chan struct{}) error
Seal implements consensus.Engine, attempting to create a sealed block using the local signing credentials.
func (*Apoa) Type ¶
func (c *Apoa) Type() params.ConsensusType
func (*Apoa) VerifyHeader ¶
func (c *Apoa) VerifyHeader(chain consensus.ChainHeaderReader, header block.IHeader, seal bool) error
VerifyHeader checks whether a header conforms to the consensus rules.
func (*Apoa) VerifyHeaders ¶
func (c *Apoa) VerifyHeaders(chain consensus.ChainHeaderReader, headers []block.IHeader, seals []bool) (chan<- struct{}, <-chan error)
VerifyHeaders is similar to VerifyHeader, but verifies a batch of headers. The method returns a quit channel to abort the operations and a results channel to retrieve the async verifications (the order is that of the input slice).
func (*Apoa) VerifyUncles ¶
VerifyUncles implements consensus.Engine, always returning an error for any uncles as this consensus mechanism doesn't permit uncles.
type SignerFn ¶
SignerFn hashes and signs the data to be signed by a backing account. todo types.address to account
type Snapshot ¶
type Snapshot struct { Number uint64 `json:"number"` // Block number where the snapshot was created Hash types.Hash `json:"hash"` // Block hash where the snapshot was created Signers map[types.Address]struct{} `json:"signers"` // Set of authorized signers at this moment Recents map[uint64]types.Address `json:"recents"` // Set of recent signers for spam protections Votes []*Vote `json:"votes"` // List of votes cast in chronological order Tally map[types.Address]Tally `json:"tally"` // Current vote tally to avoid recalculating // contains filtered or unexported fields }
Snapshot is the state of the authorization voting at a given point in time.
type Tally ¶
type Tally struct { Authorize bool `json:"authorize"` // Whether the vote is about authorizing or kicking someone Votes int `json:"votes"` // Number of votes until now wanting to pass the proposal }
Tally is a simple vote tally to keep the current score of votes. Votes that go against the proposal aren't counted since it's equivalent to not voting.
type Vote ¶
type Vote struct { Signer types.Address `json:"signer"` // Authorized signer that cast this vote Block uint64 `json:"block"` // Block number the vote was cast in (expire old votes) Address types.Address `json:"address"` // Account being voted on to change its authorization Authorize bool `json:"authorize"` // Whether to authorize or deauthorize the voted account }
Vote represents a single vote that an authorized signer made to modify the list of authorizations.