github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/eventcheck/parentscheck/parents_check.go (about) 1 package parentscheck 2 3 import ( 4 "errors" 5 6 base "github.com/unicornultrafoundation/go-helios/eventcheck/parentscheck" 7 8 "github.com/unicornultrafoundation/go-u2u/native" 9 ) 10 11 var ( 12 ErrPastTime = errors.New("event has lower claimed time than self-parent") 13 ) 14 15 // Checker which require only parents list + current epoch info 16 type Checker struct { 17 base *base.Checker 18 } 19 20 // New validator which performs checks, which require known the parents 21 func New() *Checker { 22 return &Checker{ 23 base: &base.Checker{}, 24 } 25 } 26 27 // Validate event 28 func (v *Checker) Validate(e native.EventI, parents native.EventIs) error { 29 if err := v.base.Validate(e, parents.Bases()); err != nil { 30 return err 31 } 32 33 if e.SelfParent() != nil { 34 selfParent := parents[0] 35 if !e.IsSelfParent(selfParent.ID()) { 36 // sanity check, self-parent is always first, it's how it's stored 37 return base.ErrWrongSelfParent 38 } 39 // selfParent time 40 if e.CreationTime() <= selfParent.CreationTime() { 41 return ErrPastTime 42 } 43 } 44 45 return nil 46 }