MCPcopy Create free account
hub / github.com/DNAProject/DNA / VerifyBlock

Function VerifyBlock

core/validation/block_validator.go:35–82  ·  view source on GitHub ↗

VerifyBlock checks whether the block is valid

(block *types.Block, ld *ledger.Ledger, completely bool)

Source from the content-addressed store, hash-verified

33
34// VerifyBlock checks whether the block is valid
35func VerifyBlock(block *types.Block, ld *ledger.Ledger, completely bool) error {
36 header := block.Header
37 if header.Height == 0 {
38 return nil
39 }
40
41 m := len(header.Bookkeepers) - (len(header.Bookkeepers)-1)/3
42 hash := block.Hash()
43 err := signature.VerifyMultiSignature(hash[:], header.Bookkeepers, m, header.SigData)
44 if err != nil {
45 return err
46 }
47
48 prevHeader, err := ld.GetHeaderByHash(block.Header.PrevBlockHash)
49 if err != nil {
50 return fmt.Errorf("[BlockValidator], can not find prevHeader: %s", err)
51 }
52
53 err = VerifyHeader(block.Header, prevHeader)
54 if err != nil {
55 return err
56 }
57
58 //verfiy block's transactions
59 if completely {
60 /*
61 //TODO: NextBookkeeper Check.
62 bookkeeperaddress, err := ledger.GetBookkeeperAddress(ld.Blockchain.GetBookkeepersByTXs(block.Transactions))
63 if err != nil {
64 return errors.New(fmt.Sprintf("GetBookkeeperAddress Failed."))
65 }
66 if block.Header.NextBookkeeper != bookkeeperaddress {
67 return errors.New(fmt.Sprintf("Bookkeeper is not validate."))
68 }
69 */
70 for _, txVerify := range block.Transactions {
71 if errCode := VerifyTransaction(txVerify); errCode != ontErrors.ErrNoError {
72 return errors.New(fmt.Sprintf("VerifyTransaction failed when verifiy block"))
73 }
74
75 if errCode := VerifyTransactionWithLedger(txVerify, ld); errCode != ontErrors.ErrNoError {
76 return errors.New(fmt.Sprintf("VerifyTransaction failed when verifiy block"))
77 }
78 }
79 }
80
81 return nil
82}
83
84func VerifyHeader(header, prevHeader *types.Header) error {
85 if header.Height == 0 {

Callers

nothing calls this directly

Calls 7

VerifyMultiSignatureFunction · 0.92
VerifyHeaderFunction · 0.85
VerifyTransactionFunction · 0.85
ErrorfMethod · 0.80
HashMethod · 0.65
GetHeaderByHashMethod · 0.65

Tested by

no test coverage detected