123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // Copyright 2017 The go-ethereum Authors
- // This file is part of the go-ethereum library.
- //
- // The go-ethereum library is free software: you can redistribute it and/or modify
- // it under the terms of the GNU Lesser General Public License as published by
- // the Free Software Foundation, either version 3 of the License, or
- // (at your option) any later version.
- //
- // The go-ethereum library is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU Lesser General Public License for more details.
- //
- // You should have received a copy of the GNU Lesser General Public License
- // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
- package istanbul
- import (
- "math/big"
- "time"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/event"
- )
- // Backend provides application specific functions for Istanbul core
- type Backend interface {
- // Address returns the owner's address
- Address() common.Address
- // Validators returns the validator set
- Validators(proposal Proposal) ValidatorSet
- // EventMux returns the event mux in backend
- EventMux() *event.TypeMux
- // Broadcast sends a message to all validators (include self)
- Broadcast(valSet ValidatorSet, code uint64, payload []byte) error
- // Gossip sends a message to all validators (exclude self)
- Gossip(valSet ValidatorSet, code uint64, payload []byte) error
- // Commit delivers an approved proposal to backend.
- // The delivered proposal will be put into blockchain.
- Commit(proposal Proposal, seals [][]byte, round *big.Int) error
- // Verify verifies the proposal. If a consensus.ErrFutureBlock error is returned,
- // the time difference of the proposal and current time is also returned.
- Verify(Proposal) (time.Duration, error)
- // Sign signs input data with the backend's private key
- Sign([]byte) ([]byte, error)
- // SignWithoutHashing sign input data with the backend's private key without hashing the input data
- SignWithoutHashing([]byte) ([]byte, error)
- // CheckSignature verifies the signature by checking if it's signed by
- // the given validator
- CheckSignature(data []byte, addr common.Address, sig []byte) error
- // LastProposal retrieves latest committed proposal and the address of proposer
- LastProposal() (Proposal, common.Address)
- // HasPropsal checks if the combination of the given hash and height matches any existing blocks
- HasPropsal(hash common.Hash, number *big.Int) bool
- // GetProposer returns the proposer of the given block height
- GetProposer(number uint64) common.Address
- // ParentValidators returns the validator set of the given proposal's parent block
- ParentValidators(proposal Proposal) ValidatorSet
- // HasBadProposal returns whether the block with the hash is a bad block
- HasBadProposal(hash common.Hash) bool
- Close() error
- // IsQBFTConsensus checks qbftBlock fork block and returns if it should be enabled
- IsQBFTConsensusAt(*big.Int) bool
- // StartQBFTConsensus stops existing legacy ibft consensus and starts the new qbft consensus
- StartQBFTConsensus() error
- }
|