-
Notifications
You must be signed in to change notification settings - Fork 15
Definitions
This page defines the core data structures and roles that exist in Hyperdrive.
Transaction
A transaction is a data structure that can be executed over some initial state to transform it into a new output state. A transaction must be executed in full, or not at all. In this way, we say that transactions are atomic.
execute :: Tx t => t -> State -> StateAn ordered list of transactions can be also be executed over some initial state to transform it into a new output state. The transactions are executed sequentially, and the output state of one execution is used as the initial state for the next execution. An ordered list of transactions can be executed in concurrently if, and only if, the final output state is equal to the output state that would result from sequential execution.
execute :: Tx t => [t] -> State -> State
execute txs initialState = foldr (\tx state -> execute tx state) initialState txsIt is assumed that a transaction can be marshaled to/from bytes as required by the peer-to-peer networking and persistent storage device. No other properties or functionalities are assumed.
class Tx t where
marshal :: t -> [Byte]
unmarshal :: [Byte] -> tPlan
A plan is a data structure respresenting the precomputed data that is needed to execute an ordered list of transactions. The precomputed data required depends on the number of transactions, the initial state, and the secure multi-party computation algorithm.
It is assumed that a plan can be marshaled to/from bytes as required by the peer-to-peer networking and persistent storage device. No other properties or functionalities are assumed.
class Plan p where
marshal :: p -> [Byte]
unmarshal :: p -> [Byte]State
Block
Signatory
Message