Merge pull request #112 from harmony-one/rj_branch
[HAR-85] Delete bft.go and implement valid txs selectionpull/128/head
commit
683a5d471f
@ -1,121 +0,0 @@ |
||||
package consensus |
||||
|
||||
import ( |
||||
"github.com/ethereum/go-ethereum/common" |
||||
"github.com/ethereum/go-ethereum/crypto/sha3" |
||||
"github.com/ethereum/go-ethereum/params" |
||||
"github.com/ethereum/go-ethereum/rlp" |
||||
"github.com/harmony-one/harmony/core/state" |
||||
"github.com/harmony-one/harmony/core/types" |
||||
) |
||||
|
||||
// Bft is the struct for Bft protocol.
|
||||
type Bft struct { |
||||
} |
||||
|
||||
// NewFaker returns Bft.
|
||||
func NewFaker() *Bft { |
||||
return &Bft{} |
||||
} |
||||
|
||||
// Author implements Engine, returning the header's coinbase as the
|
||||
// proof-of-work verified author of the block.
|
||||
func (bft *Bft) Author(header *types.Header) (common.Address, error) { |
||||
return header.Coinbase, nil |
||||
} |
||||
|
||||
// VerifyHeader checks whether a header conforms to the consensus rules of the
|
||||
// stock Ethereum bft engine.
|
||||
func (bft *Bft) VerifyHeader(chain ChainReader, header *types.Header, seal bool) error { |
||||
return nil |
||||
} |
||||
|
||||
// VerifyHeaders is similar to VerifyHeader, but verifies a batch of headers
|
||||
// concurrently. The method returns a quit channel to abort the operations and
|
||||
// a results channel to retrieve the async verifications.
|
||||
func (bft *Bft) VerifyHeaders(chain ChainReader, headers []*types.Header, seals []bool) (chan<- struct{}, <-chan error) { |
||||
abort, results := make(chan struct{}), make(chan error, len(headers)) |
||||
for i := 0; i < len(headers); i++ { |
||||
results <- nil |
||||
} |
||||
return abort, results |
||||
} |
||||
|
||||
func (bft *Bft) verifyHeaderWorker(chain ChainReader, headers []*types.Header, seals []bool, index int) error { |
||||
var parent *types.Header |
||||
if index == 0 { |
||||
parent = chain.GetHeader(headers[0].ParentHash, headers[0].Number.Uint64()-1) |
||||
} else if headers[index-1].Hash() == headers[index].ParentHash { |
||||
parent = headers[index-1] |
||||
} |
||||
if parent == nil { |
||||
return ErrUnknownAncestor |
||||
} |
||||
if chain.GetHeader(headers[index].Hash(), headers[index].Number.Uint64()) != nil { |
||||
return nil // known block
|
||||
} |
||||
return bft.verifyHeader(chain, headers[index], parent, false, seals[index]) |
||||
} |
||||
|
||||
// verifyHeader checks whether a header conforms to the consensus rules of the
|
||||
// stock Ethereum bft engine.
|
||||
// See YP section 4.3.4. "Block Header Validity"
|
||||
func (bft *Bft) verifyHeader(chain ChainReader, header, parent *types.Header, uncle bool, seal bool) error { |
||||
return nil |
||||
} |
||||
|
||||
// VerifySeal implements consensus.Engine, checking whether the given block satisfies
|
||||
// the PoW difficulty requirements.
|
||||
func (bft *Bft) VerifySeal(chain ChainReader, header *types.Header) error { |
||||
return nil |
||||
} |
||||
|
||||
// Prepare implements consensus.Engine, initializing the difficulty field of a
|
||||
// header to conform to the ethash protocol. The changes are done inline.
|
||||
func (bft *Bft) Prepare(chain ChainReader, header *types.Header) error { |
||||
return nil |
||||
} |
||||
|
||||
// Finalize implements consensus.Engine, accumulating the block and uncle rewards,
|
||||
// setting the final state and assembling the block.
|
||||
func (bft *Bft) Finalize(chain ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, receipts []*types.Receipt) (*types.Block, error) { |
||||
// Accumulate any block and uncle rewards and commit the final state root
|
||||
// Header seems complete, assemble into a block and return
|
||||
accumulateRewards(chain.Config(), state, header) |
||||
header.Root = state.IntermediateRoot(false) |
||||
return types.NewBlock(header, txs, receipts), nil |
||||
} |
||||
|
||||
// SealHash returns the hash of a block prior to it being sealed.
|
||||
func (bft *Bft) SealHash(header *types.Header) (hash common.Hash) { |
||||
hasher := sha3.NewKeccak256() |
||||
|
||||
rlp.Encode(hasher, []interface{}{ |
||||
header.ParentHash, |
||||
header.Coinbase, |
||||
header.Root, |
||||
header.TxHash, |
||||
header.ReceiptHash, |
||||
header.Bloom, |
||||
header.Difficulty, |
||||
header.Number, |
||||
header.GasLimit, |
||||
header.GasUsed, |
||||
header.Time, |
||||
header.Extra, |
||||
}) |
||||
hasher.Sum(hash[:0]) |
||||
return hash |
||||
} |
||||
|
||||
// Seal ...
|
||||
func (bft *Bft) Seal(chain ChainReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error { |
||||
return nil |
||||
} |
||||
|
||||
// AccumulateRewards credits the coinbase of the given block with the mining
|
||||
// reward. The total reward consists of the static block reward and rewards for
|
||||
// included uncles. The coinbase of each uncle block is also rewarded.
|
||||
func accumulateRewards(config *params.ChainConfig, state *state.StateDB, header *types.Header) { |
||||
|
||||
} |
Loading…
Reference in new issue