Package convex.core
Class Belief
- All Implemented Interfaces:
IValidated
,IWriteable
,Map<Keyword,ACell>
Class representing a Peer's view of the overall network consensus state.
Belief is immutable, and is designed to be independent of any particular Peer
so that it can be efficiently merged towards consensus.
Belief can be merged with other Beliefs from the perspective of a Peer. This
property is fundamental to the Convex consensus algorithm.
"Sorry to be a wet blanket. Writing a description for this thing for general
audiences is bloody hard. There's nothing to relate it to." – Satoshi
Nakamoto
-
Nested Class Summary
-
Field Summary
Fields inherited from class convex.core.data.ARecord
DEFAULT_VALUE, format
Fields inherited from class convex.core.data.ADataStructure
count
Fields inherited from class convex.core.data.ACell
cachedRef, EMPTY_ARRAY
-
Method Summary
Modifier and TypeMethodDescriptionstatic <V> double
computeVote(HashMap<V,Double> m)
Computes the total vote for all entries in a HashMapcomputeWinningOrder(HashMap<Order,Double> stakedOrders, long consensusPoint, double initialTotalStake)
Compute the new winning Order for this Peer, including any new blocks encounteredstatic Belief
Create a Belief with a single order signed by the given key pair, using initial timestamp.static Belief
Create a Belief with a single empty order.int
encode(byte[] bs, int pos)
Writes this Cell's encoding to a byte array, including a tag byte which will be written firstboolean
Tests if this Belief is equal to anotherboolean
Checks this map for equality with another map.int
Estimate the encoded data size for this Cell.Gets the record field content for a given key, or null if not found.getOrder(AccountKey address)
Gets the current Order for a given Address within this Belief.Get the map of orders for this Beliefbyte
getTag()
Gets the tag byte for this record type.long
Returns the timestamp of this Belief.static Belief
initial()
Gets an empty Beliefmerge(MergeContext mc, Belief... beliefs)
The Belief merge functionstatic double
prepareStakedOrders(AMap<AccountKey,SignedData<Order>> peerOrders, HashMap<AccountKey,Double> peerStakes, HashMap<Order,Double> dest)
Compute the total stake for every distinct Order seen.static Belief
read(ByteBuffer bb)
Read a Belief from a ByteBuffer.protected Belief
Updates all values in this record, in declared field order.void
Validates the local structure and invariants of this cell.withOrders(BlobMap<AccountKey,SignedData<Order>> newOrders)
Updates this Belief with a new set of Chains for each peer addressMethods inherited from class convex.core.data.ARecord
accumulateEntrySet, accumulateKeySet, accumulateValues, assoc, assocEntry, containsKey, containsValue, dissoc, dissoc, empty, encodeRaw, entryAt, entrySet, equalsKeys, forEach, get, getEntry, getEntryByHash, getFormat, getKeyRefEntry, getKeys, getRef, getRefCount, getType, getValuesArray, isCanonical, isCVMValue, keySet, print, reduceEntries, reduceValues, toCanonical, toHashMap, updateRefs, values
Methods inherited from class convex.core.data.AMap
clear, conj, containsKey, containsKeyRef, entryVector, equals, filterValues, get, get, getElementRef, put, putAll, remove
Methods inherited from class convex.core.data.ADataStructure
conjAll, count, isEmpty, size
Methods inherited from class convex.core.data.ACell
announce, announce, attachMemorySize, attachRef, cachedEncoding, cachedHash, calcMemorySize, createAnnounced, createEncoding, createPersisted, createPersisted, createRef, equals, getChildRefs, getEncoding, getEncodingLength, getHash, getMemorySize, getRef, hashCode, isEmbedded, toString, validate, write
Methods inherited from class convex.core.data.AObject
attachEncoding, print
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface java.util.Map
compute, computeIfAbsent, computeIfPresent, equals, getOrDefault, hashCode, isEmpty, merge, putIfAbsent, remove, replace, replace, replaceAll, size
-
Method Details
-
get
Description copied from class:ARecord
Gets the record field content for a given key, or null if not found. -
updateAll
Description copied from class:ARecord
Updates all values in this record, in declared field order. Returns this if all values are identical. -
initial
Gets an empty Belief- Returns:
- Empty Belief
-
create
Create a Belief with a single order signed by the given key pair, using initial timestamp.- Parameters:
kp
- Peer Key pair with which to sign the order.order
- Order of blocks that the Peer is proposing- Returns:
- new Belief representing the isolated belief of a single Peer.
-
createSingleOrder
Create a Belief with a single empty order. USeful for Peer startup.- Parameters:
kp
- Keypair for Peer- Returns:
- New Belief
-
merge
public Belief merge(MergeContext mc, Belief... beliefs) throws BadSignatureException, InvalidDataExceptionThe Belief merge function- Parameters:
mc
- MergeContext for Belief Mergebeliefs
- An array of Beliefs. May contain nulls, which will be ignored.- Returns:
- The updated merged belief, or the same Belief if there is no change.
- Throws:
BadSignatureException
- In case of a bad signatureInvalidDataException
- In case of invalid data
-
computeWinningOrder
public static AVector<Block> computeWinningOrder(HashMap<Order,Double> stakedOrders, long consensusPoint, double initialTotalStake)Compute the new winning Order for this Peer, including any new blocks encountered- Parameters:
stakedOrders
- Amount of stake on each distinct OrderconsensusPoint
- Current consensus pointinitialTotalStake
- Total stake under consideration- Returns:
- Vector of Blocks in wiing Order
-
computeVote
Computes the total vote for all entries in a HashMap- Type Parameters:
V
- The type of values used as keys in the HashMap- Parameters:
m
- A map of values to votes- Returns:
- The total voting stake
-
prepareStakedOrders
public static double prepareStakedOrders(AMap<AccountKey,SignedData<Order>> peerOrders, HashMap<AccountKey,Double> peerStakes, HashMap<Order,Double> dest)Compute the total stake for every distinct Order seen. Stores results in a map of Orders to staked value.- Parameters:
peerOrders
- A map of peer addresses to signed proposed OrderspeerStakes
- A map of peers addresses to weighted stakes for each peerdest
- Destination hashmap to store the stakes for each Order- Returns:
- The total stake of all chains among peers under consideration
-
withOrders
Updates this Belief with a new set of Chains for each peer address- Parameters:
newOrders
- New map of peer keys to Orders- Returns:
- The updated belief, or the same Belief if no change.
-
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- Specified by:
encode
in interfaceIWriteable
- Specified by:
encode
in classACell
- Parameters:
bs
- A byte array to which to write the encodingpos
- 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 likely to contain the entire object when represented in binary format, including the tag byte.- Specified by:
estimatedEncodingSize
in interfaceIWriteable
- Overrides:
estimatedEncodingSize
in classARecord
- Returns:
- The estimated size for the binary representation of this object.
-
read
Read a Belief from a ByteBuffer. Assumes tag already read.- Parameters:
bb
- ByteBuffer to read from- Returns:
- Belief instance
- Throws:
BadFormatException
- If encoding is invalid
-
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. -
getOrder
Gets the current Order for a given Address within this Belief.- Parameters:
address
- Address of peer- Returns:
- The chain for the peer within this Belief, or null if noy found.
-
getOrders
Get the map of orders for this Belief- Returns:
- Orders map
-
validateCell
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 classACell
- Throws:
InvalidDataException
- If the Cell is invalid
-
getTimestamp
public long getTimestamp()Returns the timestamp of this Belief. A Belief should have a new timestamp if and only if the Peer incorporates new information.- Returns:
- Timestamp of belief
-
equals
Description copied from class:AMap
Checks this map for equality with another map. In general, maps should be considered equal if they have the same canonical representation, i.e. the same hash value. Subclasses may override this this they have a more efficient equals implementation or a more specific definition of equality. -
equals
Tests if this Belief is equal to another- Parameters:
a
- Belief to compare with- Returns:
- true if equal, false otherwise
-