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  }