diff options
author | Wei-Ning Huang <w@dexon.org> | 2018-11-15 13:30:50 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@dexon.org> | 2019-04-09 21:32:53 +0800 |
commit | b26e4c9adaa2952a63bf811f991a3e6fb9fc5646 (patch) | |
tree | 84f78ba24e34b4ae6bca777fd6edc659bb16feb9 /core/block_validator.go | |
parent | 426fdd07f71aea7de2fe8ca010f17afaf774c047 (diff) | |
download | dexon-b26e4c9adaa2952a63bf811f991a3e6fb9fc5646.tar dexon-b26e4c9adaa2952a63bf811f991a3e6fb9fc5646.tar.gz dexon-b26e4c9adaa2952a63bf811f991a3e6fb9fc5646.tar.bz2 dexon-b26e4c9adaa2952a63bf811f991a3e6fb9fc5646.tar.lz dexon-b26e4c9adaa2952a63bf811f991a3e6fb9fc5646.tar.xz dexon-b26e4c9adaa2952a63bf811f991a3e6fb9fc5646.tar.zst dexon-b26e4c9adaa2952a63bf811f991a3e6fb9fc5646.zip |
core: refactor validator and fix light node sync (#25)
Remove custom Dexon validator by adding a new `ValidateWitnessData`
method into the validator interface. This allow us to properly detect
know blocks. This also allow other gdex "light" client to sync
compaction chain. Also, setup a standalone RPC node for handling RPC
reqeusts.
Diffstat (limited to 'core/block_validator.go')
-rw-r--r-- | core/block_validator.go | 41 |
1 files changed, 12 insertions, 29 deletions
diff --git a/core/block_validator.go b/core/block_validator.go index 65f311f9f..09539790b 100644 --- a/core/block_validator.go +++ b/core/block_validator.go @@ -101,37 +101,20 @@ func (v *BlockValidator) ValidateState(block, parent *types.Block, statedb *stat return nil } -// BlockValidator implements Validator. -type DexonBlockValidator struct { - config *params.ChainConfig // Chain configuration options - bc *BlockChain // Canonical block chain - engine consensus.Engine // Consensus engine used for validating -} +func (v *BlockValidator) ValidateWitnessData(height uint64, data types.WitnessData) error { + currentBlock := v.bc.CurrentBlock() + if height > currentBlock.NumberU64() && height != 0 { + pendingBlock := v.bc.GetPendingBlockByNumber(height) -// NewDexonBlockValidator returns a new block validator which is safe for re-use -func NewDexonBlockValidator(config *params.ChainConfig, blockchain *BlockChain, engine consensus.Engine) *DexonBlockValidator { - validator := &DexonBlockValidator{ - config: config, - engine: engine, - bc: blockchain, + if pendingBlock.Root() != data.Root { + return fmt.Errorf("invalid witness root %s vs %s", + pendingBlock.Root().String(), data.Root.String()) + } + if pendingBlock.ReceiptHash() != data.ReceiptHash { + return fmt.Errorf("invalid witness receipt hash %s vs %s", + pendingBlock.ReceiptHash().String(), data.ReceiptHash.String()) + } } - return validator -} - -// ValidateBody validates the given block's uncles and verifies the block -// header's transaction and uncle roots. The headers are assumed to be already -// validated at this point. -func (v *DexonBlockValidator) ValidateBody(block *types.Block) error { - // TODO(Bojie): implement it - return nil -} - -// ValidateState validates the various changes that happen after a state -// transition, such as amount of used gas, the receipt roots and the state root -// itself. ValidateState returns a database batch if the validation was a success -// otherwise nil and an error is returned. -func (v *DexonBlockValidator) ValidateState(block, parent *types.Block, statedb *state.StateDB, receipts types.Receipts, usedGas uint64) error { - // TODO(Bojie): implement it return nil } |