package protocol import "gitlab.com/accumulatenetwork/accumulate/internal/url" // Add records a received or delivered synthetic transaction. func (s *SubnetSyntheticLedger) Add(delivered bool, sequenceNumber uint64, txid *url.TxID) (dirty bool) { // Update received if sequenceNumber > s.Received { s.Received, dirty = sequenceNumber, true } if delivered { // Update delivered and truncate pending if sequenceNumber > s.Delivered { s.Delivered, dirty = sequenceNumber, true } if len(s.Pending) > 0 { s.Pending, dirty = s.Pending[1:], true } return } // Grow pending if necessary if n := s.Received - s.Delivered - uint64(len(s.Pending)); n > 0 { s.Pending, dirty = append(s.Pending, make([]*url.TxID, n)...), true } // Insert the hash i := sequenceNumber - s.Delivered - 1 if s.Pending[i] == nil { s.Pending[i], dirty = txid, true } return dirty } // Get gets the hash for a synthetic transaction. func (s *SubnetSyntheticLedger) Get(sequenceNumber uint64) (*url.TxID, bool) { if sequenceNumber <= s.Delivered || sequenceNumber > s.Received { return nil, false } txid := s.Pending[sequenceNumber-s.Delivered-1] return txid, txid != nil }