Package convex.core

Class Order

All Implemented Interfaces:
IAssociative<Keyword,ACell>, IValidated, IWriteable, Map<Keyword,ACell>

public class Order extends ARecord
Class representing an Ordering of transactions, along with the consensus position. An Ordering contains:
  • The Vector of known verified Blocks announced by the Peer
  • The proposed consensus point (point at which the peer believes there is sufficient alignment for consensus)
  • The current consensus point (point at which the peer has observed sufficient consistent consensus proposals)
An Ordering is immutable.
  • Method Details

    • create

      public static Order create(long proposalPoint, long consensusPoint, SignedData<Block>... blocks)
      Create an Order with the given consensus positions and Blocks. Mainly for testing.
      Parameters:
      proposalPoint - Proposal Point
      consensusPoint - Consensus Point
      blocks - Blocks in Order
      Returns:
      New Order instance
    • create

      public static Order create()
      Create an empty Order
      Returns:
      New Order instance
    • encode

      public int encode(byte[] bs, int pos)
      Description copied from class: ACell
      Writes this Cell's encoding to a byte array, including a tag byte which will be written first. Cell must be canonical, or else an error may occur.
      Specified by:
      encode in interface IWriteable
      Specified by:
      encode in class ACell
      Parameters:
      bs - A byte array to which to write the encoding
      pos - The offset into the byte array
      Returns:
      New position after writing
    • encodeRaw

      public int encodeRaw(byte[] bs, int pos)
      Description copied from class: ARecord
      Writes the raw fields of this record in declared order
      Overrides:
      encodeRaw in class ARecord
      Parameters:
      bs - Array to write to
      pos - The offset into the byte array
      Returns:
      New position after writing
    • estimatedEncodingSize

      public int estimatedEncodingSize()
      Description copied from interface: IWriteable
      Estimate the encoded data size for this Cell. Used for quickly sizing buffers. Implementations should try to return a size that is highly likely to contain the entire object when encoded, including the tag byte. Should not traverse soft Refs, i.e. must be usable on arbitrary partial data structures
      Specified by:
      estimatedEncodingSize in interface IWriteable
      Overrides:
      estimatedEncodingSize in class ARecord
      Returns:
      The estimated size for the binary representation of this object.
    • read

      public static Order read(ByteBuffer bb) throws BadFormatException
      Decode an Order from a ByteBuffer
      Parameters:
      bb - ByteBuffer to read from
      Returns:
      Order instance
      Throws:
      BadFormatException - If encoding format is invalid
    • read

      public static Order read(Blob b, int pos) throws BadFormatException
      Throws:
      BadFormatException
    • isCVMValue

      public final boolean isCVMValue()
      Description copied from class: ACell
      Returns true if this Cell represents a first class CVM Value. Sub-structural cells that are not themselves first class values should return false, pretty much everything else should return true. Note: CVM values might not be in a canonical format, e.g. temporary data structures
      Overrides:
      isCVMValue in class ARecord
      Returns:
      true if the object is a CVM Value, false otherwise
    • checkConsistent

      public boolean checkConsistent(Order bc)
      Checks if another Order is consistent with this Order. Order is defined as consistent iff:
      • Blocks are equal up to the Consensus Point of this Order
      Parameters:
      bc - Order to compare with
      Returns:
      True if chains are consistent, false otherwise.
    • getConsensusPoint

      public long getConsensusPoint()
      Gets the Consensus Point of this Order
      Returns:
      Consensus Point
    • getProposalPoint

      public long getProposalPoint()
      Gets the Proposal Point of this Order
      Returns:
      Proposal Point
    • getTimestamp

      public long getTimestamp()
      Gets the timestamp of this Order
      Returns:
      Proposal Point
    • getBlocks

      public AVector<SignedData<Block>> getBlocks()
      Gets the Blocks in this Order
      Returns:
      Vector of Blocks
    • getBlock

      public SignedData<Block> getBlock(long i)
      Get a specific Block in this Order
      Parameters:
      i - Index of Block
      Returns:
      Block at specified index.
    • append

      public Order append(SignedData<Block> block)
      Append a new block of transactions in this Order
      Parameters:
      block - Block to append
      Returns:
      The updated chain
    • withBlocks

      public Order withBlocks(AVector<SignedData<Block>> newBlocks)
      Updates blocks in this Order. Returns the same Order if the blocks are identical.
      Parameters:
      newBlocks - New blocks to use
      Returns:
      Updated Order, or the same order if unchanged
    • withTimestamp

      public Order withTimestamp(long newTimestamp)
      Updates timestamp in this Order. Returns the same Order if timestamp is identical.
      Parameters:
      newTimestamp - New timestamp to use
      Returns:
      Updated Order, or the same Order if unchanged
    • withProposalPoint

      public Order withProposalPoint(long newProposalPoint)
      Updates this Order with a new proposal position. It is an error to set the proposal point before the consensus point, or beyond the last block.
      Parameters:
      newProposalPoint - New Proposal Point in Order
      Returns:
      Updated Order
    • withConsenusPoint

      public Order withConsenusPoint(long newConsensusPoint)
      Updates this Order with a new consensus position. Proposal point will be set to the max of the consensus point and the current proposal point
      Parameters:
      newConsensusPoint - New consensus point
      Returns:
      Updated chain, or this Chain instance if no change.
    • getBlockCount

      public long getBlockCount()
      Get the number of Blocks in this Order
      Returns:
      Number of Blocks
    • withoutConsenus

      public Order withoutConsenus()
      Clears the consensus and proposal point
      Returns:
      Updated order with zeroed consensus positions
    • validate

      public void validate() throws InvalidDataException
      Description copied from interface: IValidated
      Validates the complete structure of this object. It is necessary to ensure all child Refs are validated, so the general contract for validate is:
      1. Call super.validate() - which will indirectly call validateCell()
      2. Call validate() on any contained cells in this class
      Specified by:
      validate in interface IValidated
      Overrides:
      validate in class ACell
      Throws:
      InvalidDataException - If the data Value is invalid in any way
    • validateCell

      public void validateCell() throws InvalidDataException
      Description copied from class: ACell
      Validates the local structure and invariants of this cell. Called by validate() super implementation. Should validate directly contained data, but should not validate all other structure of this cell. In particular, should not traverse potentially missing child Refs.
      Specified by:
      validateCell in class ACell
      Throws:
      InvalidDataException - If the Cell is invalid
    • getRefCount

      public int getRefCount()
      Description copied from class: ACell
      Gets the number of Refs contained within this Cell. This number is final / immutable for any given instance and is defined by the Cell encoding rules. WARNING: may not be valid id Cell is not canonical Contained Refs may be either external or embedded.
      Specified by:
      getRefCount in class ACell
      Returns:
      The number of Refs in this Cell
    • getRef

      public <R extends ACell> Ref<R> getRef(int i)
      Description copied from class: ACell
      Gets a numbered child Ref from within this Cell. WARNING: May be unreliable is cell is not canonical
      Overrides:
      getRef in class ACell
      Type Parameters:
      R - Type of referenced Cell
      Parameters:
      i - Index of ref to get
      Returns:
      The Ref at the specified index
    • getTag

      public byte getTag()
      Description copied from class: ARecord
      Gets the tag byte for this record type. The Tag is the byte used to identify the record in the binary encoding.
      Specified by:
      getTag in class ARecord
      Returns:
      Record tag byte
    • get

      public ACell get(ACell key)
      Description copied from class: ARecord
      Gets the record field content for a given key, or null if not found.
      Specified by:
      get in class ARecord
      Parameters:
      key - Key to look up in this record
      Returns:
      Field value for the given key
    • updateRefs

      public Order updateRefs(IRefFunction func)
      Description copied from class: ACell
      Updates all Refs in this object using the given function. The function *must not* change the hash value of Refs, in order to ensure structural integrity of modified data structures. The implementation *should* re-attach any original encoding in order to prevent re-encoding or surplus hashing This is a building block for a very sneaky trick that enables use to do a lot of efficient operations on large trees of smart references. Must return the same object if no Refs are altered.
      Overrides:
      updateRefs in class ACell
      Parameters:
      func - Ref update function
      Returns:
      Cell with updated Refs
    • consensusEquals

      public boolean consensusEquals(Order b)
      Tests if this Order is equivalent to another in terms of consensus (timestamp ignored)
      Parameters:
      b - Order to compare with
      Returns:
      True if Orders are functionally equal, false otherwise
    • getFormat

      public RecordFormat getFormat()
      Description copied from class: ARecord
      Gets the RecordFormat instance that describes this Record's layout
      Specified by:
      getFormat in class ARecord
      Returns:
      RecordFormat instance