Documentation ¶
Overview ¶
For key value stores where buckets are not supported, we add a byte to the key to represent a bucket. For now, all buckets are hard coded, but we could change that in the future.
Buckets are not really enough to index everything we wish to index. So we have labels as well. Labels are shifted 8 bits left, so they can be combined with the buckets to create a unique key.
This allows us to put the raw directory block at DBlockBucket+L_raw, and meta data about the directory block at DBlockBucket+MetaLabel
Index ¶
- func GetReceipt(manager *MerkleManager, element Hash, anchor Hash) (r *merkle.Receipt, err error)
- func GetSha256() func(data []byte) Hash
- func GetSignaturesForSigner(transaction *Transaction, signer protocol.Signer) ([]protocol.Signature, error)
- func UpdateAccount[T protocol.Account](batch *Batch, url *url.URL, fn func(T) error) (T, error)
- type Account
- func (r *Account) AddPending(txid *url.TxID) error
- func (r *Account) AddSyntheticForAnchor(anchor [32]byte, txid *url.TxID) error
- func (c *Account) AnchorChain(partition string) *AccountAnchorChain
- func (c *Account) AnchorSequenceChain() *Chain2
- func (a *Account) BptReceipt() (*merkle.Receipt, error)
- func (a *Account) ChainByName(name string) (*Chain2, error)
- func (c *Account) Chains() record.Set[*protocol.ChainMetadata]
- func (a *Account) Commit() error
- func (c *Account) Data() *AccountData
- func (c *Account) Directory() record.Set[*url.URL]
- func (a *Account) GetChainByName(name string) (*Chain, error)
- func (a *Account) GetIndexChainByName(name string) (*Chain, error)
- func (r *Account) GetPending() (*protocol.TxIdSet, error)
- func (r *Account) GetState() (protocol.Account, error)
- func (r *Account) GetStateAs(state interface{}) error
- func (r *Account) GetSyntheticForAnchor(anchor [32]byte) ([]*url.TxID, error)
- func (c *Account) IsDirty() bool
- func (c *Account) Main() record.Value[protocol.Account]
- func (c *Account) MainChain() *Chain2
- func (c *Account) MajorBlockChain() *Chain2
- func (c *Account) Pending() record.Set[*url.TxID]
- func (r *Account) PutState(state protocol.Account) error
- func (r *Account) RemovePending(txid *url.TxID) error
- func (c *Account) Resolve(key record.Key) (record.Record, record.Key, error)
- func (c *Account) RootChain() *Chain2
- func (c *Account) ScratchChain() *Chain2
- func (c *Account) SignatureChain() *Chain2
- func (a *Account) StateReceipt() (*merkle.Receipt, error)
- func (c *Account) SyntheticAnchors() record.Set[[32]byte]
- func (c *Account) SyntheticForAnchor(anchor [32]byte) record.Set[*url.TxID]
- func (c *Account) SyntheticSequenceChain(partition string) *Chain2
- func (a *Account) UpdatedChains() ([]*protocol.BlockEntry, error)
- func (r *Account) Url() *url.URL
- func (a *Account) VerifyHash(hash []byte) error
- type AccountAnchorChain
- type AccountData
- type Batch
- func (b *Batch) Account(u *url.URL) *Account
- func (b *Batch) AccountByID(id []byte) (*Account, error)deprecated
- func (b *Batch) Begin(writable bool) *Batch
- func (b *Batch) BptReceipt(key storage.Key, value [32]byte) (*merkle.Receipt, error)
- func (b *Batch) BptRoot() []byte
- func (b *Batch) Commit() error
- func (b *Batch) DeleteAccountState_TESTONLY(url *url.URL) error
- func (b *Batch) Discard()
- func (b *Batch) GetMinorRootChainAnchor(describe *config.Describe) ([]byte, error)
- func (b *Batch) GetValue(key record.Key, value record.ValueWriter) error
- func (b *Batch) Import(db interface{ ... }) error
- func (c *Batch) IsDirty() bool
- func (c *Batch) Message(hash [32]byte) *Message
- func (b *Batch) Message2(hash []byte) *Message
- func (b *Batch) PutValue(key record.Key, value record.ValueReader) error
- func (c *Batch) Resolve(key record.Key) (record.Record, record.Key, error)
- func (b *Batch) SaveAccounts(file io.WriteSeeker, collect func(*Account) ([]byte, error)) error
- func (c *Batch) SystemData(partition string) *SystemData
- func (b *Batch) Transaction(id []byte) *Transaction
- func (b *Batch) Update(fn func(batch *Batch) error) error
- func (b *Batch) UpdatedAccounts() []*Account
- func (b *Batch) View(fn func(batch *Batch) error) error
- func (b *Batch) VisitAccounts(visit func(*Account) error) error
- type Beginner
- type BlockStateSynthTxnEntry
- func (e *BlockStateSynthTxnEntry) Compare(f *BlockStateSynthTxnEntry) int
- func (v *BlockStateSynthTxnEntry) Copy() *BlockStateSynthTxnEntry
- func (v *BlockStateSynthTxnEntry) CopyAsInterface() interface{}
- func (v *BlockStateSynthTxnEntry) Equal(u *BlockStateSynthTxnEntry) bool
- func (v *BlockStateSynthTxnEntry) IsValid() error
- func (v *BlockStateSynthTxnEntry) MarshalBinary() ([]byte, error)
- func (v *BlockStateSynthTxnEntry) MarshalJSON() ([]byte, error)
- func (v *BlockStateSynthTxnEntry) UnmarshalBinary(data []byte) error
- func (v *BlockStateSynthTxnEntry) UnmarshalBinaryFrom(rd io.Reader) error
- func (v *BlockStateSynthTxnEntry) UnmarshalJSON(data []byte) error
- type Chain
- func (c *Chain) AddEntry(entry []byte, unique bool) error
- func (c *Chain) Anchor() []byte
- func (c *Chain) AnchorAt(height uint64) ([]byte, error)
- func (c *Chain) CurrentState() *MerkleState
- func (c *Chain) Entries(start int64, end int64) ([][]byte, error)
- func (c *Chain) Entry(height int64) ([]byte, error)
- func (c *Chain) EntryAs(height int64, value encoding.BinaryUnmarshaler) error
- func (c *Chain) Height() int64
- func (c *Chain) HeightOf(hash []byte) (int64, error)
- func (c *Chain) Pending() [][]byte
- func (c *Chain) Receipt(from, to int64) (*merkle.Receipt, error)
- func (c *Chain) State(height int64) (*MerkleState, error)
- type Chain2
- func (c *Chain2) Account() *url.URL
- func (c *Chain2) Commit() error
- func (c *Chain2) Entry(height int64) ([]byte, error)
- func (c *Chain2) Get() (*Chain, error)
- func (c *Chain2) Head() record.Value[*MerkleState]
- func (c *Chain2) Index() *Chain2
- func (c *Chain2) IndexOf(hash []byte) (int64, error)
- func (c *Chain2) Inner() *MerkleManager
- func (c *Chain2) IsDirty() bool
- func (c *Chain2) Key(i int) interface{}
- func (c *Chain2) Name() string
- func (c *Chain2) Resolve(key record.Key) (record.Record, record.Key, error)
- func (c *Chain2) Type() merkle.ChainType
- func (c *Chain2) Url() *url.URL
- type Database
- func New(store storage.KeyValueStore, logger log.Logger) *Database
- func Open(cfg *config.Config, logger log.Logger) (*Database, error)
- func OpenBadger(filepath string, logger log.Logger) (*Database, error)
- func OpenEtcd(prefix string, config *clientv3.Config, logger log.Logger) (*Database, error)
- func OpenInMemory(logger log.Logger) *Database
- type Hash
- type HashFunc
- type HashList
- type MerkleManager
- func (m *MerkleManager) AddHash(hash Hash, unique bool) error
- func (m *MerkleManager) BuildReceipt(r *merkle.Receipt) error
- func (c *MerkleManager) Commit() error
- func (c *MerkleManager) Element(index uint64) record.Value[[]byte]
- func (c *MerkleManager) ElementIndex(hash []byte) record.Value[uint64]
- func (m *MerkleManager) Get(element int64) (Hash, error)
- func (m *MerkleManager) GetAnyState(element int64) (ms *MerkleState, err error)
- func (m *MerkleManager) GetElementIndex(hash []byte) (int64, error)
- func (m *MerkleManager) GetIntermediate(element, height int64) (Left, Right Hash, err error)
- func (m *MerkleManager) GetRange(begin, end int64) ([][]byte, error)
- func (m *MerkleManager) GetState(element int64) *MerkleState
- func (c *MerkleManager) Head() record.Value[*MerkleState]
- func (c *MerkleManager) IsDirty() bool
- func (c *MerkleManager) MarkFreq() int64
- func (c *MerkleManager) MarkMask() int64
- func (c *MerkleManager) MarkPower() int64
- func (c *MerkleManager) Name() string
- func (c *MerkleManager) Resolve(key record.Key) (record.Record, record.Key, error)
- func (c *MerkleManager) States(index uint64) record.Value[*MerkleState]
- func (c *MerkleManager) Type() merkle.ChainType
- type MerkleState
- func (m *MerkleState) AddToMerkleTree(hash_ []byte)
- func (m *MerkleState) Copy() *MerkleState
- func (m *MerkleState) CopyAsInterface() interface{}
- func (m *MerkleState) Equal(n *MerkleState) bool
- func (m *MerkleState) GetIntermediate(hash Hash, height int64) (left, right Hash, err error)
- func (m *MerkleState) GetMDRoot() (MDRoot Hash)
- func (m *MerkleState) InitSha256()
- func (m *MerkleState) PrintMR() (mr string)
- func (m MerkleState) String() string
- func (m *MerkleState) UnMarshal(MSBytes []byte) (err error)
- func (m *MerkleState) UnmarshalBinary(data []byte) error
- func (m *MerkleState) UnmarshalBinaryFrom(rd io.Reader) error
- type MerkleTestCase
- type Message
- type ReceiptList
- func (v *ReceiptList) Copy() *ReceiptList
- func (v *ReceiptList) CopyAsInterface() interface{}
- func (v *ReceiptList) Equal(u *ReceiptList) bool
- func (r *ReceiptList) Included(entry []byte) bool
- func (v *ReceiptList) IsValid() error
- func (v *ReceiptList) MarshalBinary() ([]byte, error)
- func (v *ReceiptList) MarshalJSON() ([]byte, error)
- func (v *ReceiptList) UnmarshalBinary(data []byte) error
- func (v *ReceiptList) UnmarshalBinaryFrom(rd io.Reader) error
- func (v *ReceiptList) UnmarshalJSON(data []byte) error
- func (r *ReceiptList) Validate() bool
- type SigOrTxn
- func (v *SigOrTxn) Copy() *SigOrTxn
- func (v *SigOrTxn) CopyAsInterface() interface{}
- func (v *SigOrTxn) Equal(u *SigOrTxn) bool
- func (v *SigOrTxn) IsValid() error
- func (v *SigOrTxn) MarshalBinary() ([]byte, error)
- func (v *SigOrTxn) MarshalJSON() ([]byte, error)
- func (v *SigOrTxn) UnmarshalBinary(data []byte) error
- func (v *SigOrTxn) UnmarshalBinaryFrom(rd io.Reader) error
- func (v *SigOrTxn) UnmarshalJSON(data []byte) error
- type SigSetEntry
- func (s *SigSetEntry) Compare(t *SigSetEntry) int
- func (v *SigSetEntry) Copy() *SigSetEntry
- func (v *SigSetEntry) CopyAsInterface() interface{}
- func (v *SigSetEntry) Equal(u *SigSetEntry) bool
- func (v *SigSetEntry) IsValid() error
- func (v *SigSetEntry) MarshalBinary() ([]byte, error)
- func (v *SigSetEntry) MarshalJSON() ([]byte, error)
- func (v *SigSetEntry) UnmarshalBinary(data []byte) error
- func (v *SigSetEntry) UnmarshalBinaryFrom(rd io.Reader) error
- func (v *SigSetEntry) UnmarshalJSON(data []byte) error
- type SignatureSet
- type SparseHashList
- type SystemData
- type Transaction
- func (t *Transaction) AddSignature(keyEntryIndex uint64, newSignature protocol.Signature) (int, error)
- func (t *Transaction) AddSyntheticTxns(txids ...*url.TxID) error
- func (t *Transaction) AddSystemSignature(net *config.Describe, newSignature protocol.Signature) (int, error)
- func (c *Transaction) Chains() record.Set[*TransactionChainEntry]
- func (c *Transaction) Commit() error
- func (t *Transaction) GetState() (*SigOrTxn, error)
- func (t *Transaction) GetStatus() (*protocol.TransactionStatus, error)
- func (t *Transaction) GetSyntheticTxns() (*protocol.TxIdSet, error)
- func (c *Transaction) IsDirty() bool
- func (c *Transaction) Main() record.Value[*SigOrTxn]
- func (c *Transaction) Produced() record.Set[*url.TxID]
- func (t *Transaction) PutState(v *SigOrTxn) error
- func (t *Transaction) PutStatus(v *protocol.TransactionStatus) error
- func (t *Transaction) PutSyntheticTxns(v *protocol.TxIdSet) error
- func (t *Transaction) ReadSignatures(signer *url.URL) (*SignatureSet, error)
- func (t *Transaction) ReadSignaturesForSigner(signer protocol.Signer2) (*SignatureSet, error)
- func (c *Transaction) Resolve(key record.Key) (record.Record, record.Key, error)
- func (t *Transaction) RestoreSignatureSets(signer *url.URL, version uint64, entries []SigSetEntry) error
- func (t *Transaction) Signatures(signer *url.URL) (*SignatureSet, error)
- func (t *Transaction) SignaturesForSigner(signer protocol.Signer2) (*SignatureSet, error)
- func (c *Transaction) Status() record.Value[*protocol.TransactionStatus]
- type TransactionChainEntry
- func (e *TransactionChainEntry) Compare(f *TransactionChainEntry) int
- func (v *TransactionChainEntry) Copy() *TransactionChainEntry
- func (v *TransactionChainEntry) CopyAsInterface() interface{}
- func (v *TransactionChainEntry) Equal(u *TransactionChainEntry) bool
- func (v *TransactionChainEntry) IsValid() error
- func (v *TransactionChainEntry) MarshalBinary() ([]byte, error)
- func (v *TransactionChainEntry) UnmarshalBinary(data []byte) error
- func (v *TransactionChainEntry) UnmarshalBinaryFrom(rd io.Reader) error
- type Updater
- type Viewer
- type YamlHexString
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetReceipt ¶ added in v1.1.0
GetReceipt Given a merkle tree and two elements, produce a proof that the element was used to derive the DAG at the anchor Note that the element must be added to the Merkle Tree before the anchor, but the anchor can be any element after the element, or even the element itself.
func GetSha256 ¶ added in v1.1.0
GetSha256 Get the a Sha256 function that can be used to create hashes compatible with a Stateful Merkle tree using sha256
func GetSignaturesForSigner ¶ added in v1.0.0
Types ¶
type Account ¶
type Account struct {
// contains filtered or unexported fields
}
func (*Account) AddSyntheticForAnchor ¶ added in v0.6.0
func (*Account) AnchorChain ¶ added in v1.0.0
func (c *Account) AnchorChain(partition string) *AccountAnchorChain
func (*Account) AnchorSequenceChain ¶ added in v1.0.0
func (*Account) BptReceipt ¶ added in v1.0.0
BptReceipt builds a BPT receipt for the account.
func (*Account) ChainByName ¶ added in v1.0.0
ChainByName returns account Chain2 for the named chain, or a not found error if there is no such chain.
func (*Account) Chains ¶ added in v1.0.0
func (c *Account) Chains() record.Set[*protocol.ChainMetadata]
func (*Account) Data ¶
func (c *Account) Data() *AccountData
func (*Account) GetChainByName ¶ added in v1.0.0
GetChainByName calls ChainByName and Get.
func (*Account) GetIndexChainByName ¶ added in v1.0.0
GetChainByName calls ChainByName, Index, and Get.
func (*Account) GetPending ¶ added in v1.0.0
func (*Account) GetStateAs ¶
GetStateAs loads the record state and unmarshals into the given value. In most cases `state` should be a double pointer.
func (*Account) GetSyntheticForAnchor ¶ added in v1.0.0
func (*Account) MajorBlockChain ¶ added in v1.0.0
func (*Account) RemovePending ¶ added in v1.0.0
func (*Account) ScratchChain ¶ added in v1.0.0
func (*Account) SignatureChain ¶ added in v1.0.0
func (*Account) StateReceipt ¶ added in v0.5.1
StateReceipt returns a Merkle receipt for the account state in the BPT.
func (*Account) SyntheticAnchors ¶ added in v1.0.0
func (*Account) SyntheticForAnchor ¶ added in v0.6.0
func (*Account) SyntheticSequenceChain ¶ added in v1.0.0
func (*Account) UpdatedChains ¶ added in v1.0.2
func (a *Account) UpdatedChains() ([]*protocol.BlockEntry, error)
UpdatedChains returns a block entry for every chain updated in the current database batch.
func (*Account) VerifyHash ¶ added in v1.0.0
type AccountAnchorChain ¶ added in v1.0.0
type AccountAnchorChain struct {
// contains filtered or unexported fields
}
func (*AccountAnchorChain) BPT ¶ added in v1.0.0
func (c *AccountAnchorChain) BPT() *Chain2
func (*AccountAnchorChain) Commit ¶ added in v1.0.0
func (c *AccountAnchorChain) Commit() error
func (*AccountAnchorChain) IsDirty ¶ added in v1.0.0
func (c *AccountAnchorChain) IsDirty() bool
func (*AccountAnchorChain) Root ¶ added in v1.0.0
func (c *AccountAnchorChain) Root() *Chain2
type AccountData ¶ added in v1.0.0
type AccountData struct {
// contains filtered or unexported fields
}
func (*AccountData) Commit ¶ added in v1.0.0
func (c *AccountData) Commit() error
func (*AccountData) IsDirty ¶ added in v1.0.0
func (c *AccountData) IsDirty() bool
func (*AccountData) Transaction ¶ added in v1.0.0
func (c *AccountData) Transaction(entryHash [32]byte) record.Value[[32]byte]
type Batch ¶
type Batch struct {
// contains filtered or unexported fields
}
func (*Batch) AccountByID
deprecated
func (*Batch) BptReceipt ¶ added in v0.5.1
BptReceipt builds a BPT receipt for the given key.
func (*Batch) BptRoot ¶ added in v1.0.0
BptRoot returns the root of the BPT. BptRoot panics if there are any uncommitted BPT changes.
func (*Batch) Commit ¶
Commit commits pending writes to the key-value store or the parent batch. Attempting to use the Batch after calling Commit or Discard will result in a panic.
func (*Batch) DeleteAccountState_TESTONLY ¶ added in v1.0.0
DeleteAccountState_TESTONLY is intended for testing purposes only. It deletes an account from the database.
func (*Batch) Discard ¶
func (b *Batch) Discard()
Discard discards pending writes. Attempting to use the Batch after calling Discard will result in a panic.
func (*Batch) GetMinorRootChainAnchor ¶ added in v0.5.1
func (*Batch) SaveAccounts ¶ added in v1.0.0
func (*Batch) SystemData ¶ added in v1.0.0
func (c *Batch) SystemData(partition string) *SystemData
func (*Batch) Transaction ¶
func (b *Batch) Transaction(id []byte) *Transaction
Transaction returns an Transaction for the given hash.
func (*Batch) Update ¶ added in v0.5.1
Update runs the function with a writable transaction and commits if the function succeeds.
func (*Batch) UpdatedAccounts ¶ added in v1.0.2
UpdatedAccounts returns every account updated in this database batch.
type BlockStateSynthTxnEntry ¶ added in v1.0.0
type BlockStateSynthTxnEntry struct { Account *url.URL `json:"account,omitempty" form:"account" query:"account" validate:"required"` Transaction []byte `json:"transaction,omitempty" form:"transaction" query:"transaction" validate:"required"` ChainEntry uint64 `json:"chainEntry,omitempty" form:"chainEntry" query:"chainEntry" validate:"required"` // contains filtered or unexported fields }
func (*BlockStateSynthTxnEntry) Compare ¶ added in v1.0.0
func (e *BlockStateSynthTxnEntry) Compare(f *BlockStateSynthTxnEntry) int
func (*BlockStateSynthTxnEntry) Copy ¶ added in v1.0.0
func (v *BlockStateSynthTxnEntry) Copy() *BlockStateSynthTxnEntry
func (*BlockStateSynthTxnEntry) CopyAsInterface ¶ added in v1.0.0
func (v *BlockStateSynthTxnEntry) CopyAsInterface() interface{}
func (*BlockStateSynthTxnEntry) Equal ¶ added in v1.0.0
func (v *BlockStateSynthTxnEntry) Equal(u *BlockStateSynthTxnEntry) bool
func (*BlockStateSynthTxnEntry) IsValid ¶ added in v1.0.0
func (v *BlockStateSynthTxnEntry) IsValid() error
func (*BlockStateSynthTxnEntry) MarshalBinary ¶ added in v1.0.0
func (v *BlockStateSynthTxnEntry) MarshalBinary() ([]byte, error)
func (*BlockStateSynthTxnEntry) MarshalJSON ¶ added in v1.0.0
func (v *BlockStateSynthTxnEntry) MarshalJSON() ([]byte, error)
func (*BlockStateSynthTxnEntry) UnmarshalBinary ¶ added in v1.0.0
func (v *BlockStateSynthTxnEntry) UnmarshalBinary(data []byte) error
func (*BlockStateSynthTxnEntry) UnmarshalBinaryFrom ¶ added in v1.0.0
func (v *BlockStateSynthTxnEntry) UnmarshalBinaryFrom(rd io.Reader) error
func (*BlockStateSynthTxnEntry) UnmarshalJSON ¶ added in v1.0.0
func (v *BlockStateSynthTxnEntry) UnmarshalJSON(data []byte) error
type Chain ¶
type Chain struct {
// contains filtered or unexported fields
}
Chain manages a Merkle tree (chain).
func (*Chain) AnchorAt ¶ added in v0.5.1
AnchorAt calculates the anchor of the chain at the given height.
func (*Chain) CurrentState ¶ added in v0.5.1
func (c *Chain) CurrentState() *MerkleState
CurrentState returns the current state of the chain.
func (*Chain) EntryAs ¶ added in v0.5.1
func (c *Chain) EntryAs(height int64, value encoding.BinaryUnmarshaler) error
EntryAs loads and unmarshals the entry in the chain at the given height.
type Chain2 ¶ added in v1.0.0
type Chain2 struct {
// contains filtered or unexported fields
}
Chain2 is a wrapper for Chain.
func (*Chain2) Get ¶ added in v1.0.0
Get converts the Chain2 to a Chain, updating the account's chains index and loading the chain head.
func (*Chain2) Index ¶ added in v1.0.0
Index returns the index chain of this chain. Index will panic if called on an index chain.
func (*Chain2) Inner ¶ added in v1.0.0
func (c *Chain2) Inner() *MerkleManager
type Database ¶
type Database struct {
// contains filtered or unexported fields
}
Database is an Accumulate database.
func New ¶
func New(store storage.KeyValueStore, logger log.Logger) *Database
New creates a new database using the given key-value store.
func OpenBadger ¶ added in v0.5.1
func OpenInMemory ¶ added in v0.5.1
type Hash ¶ added in v1.1.0
type Hash []byte
This Stateful Merkle Tree implementation handles 256 bit hashes
func (Hash) BinarySize ¶ added in v1.1.0
func (Hash) Combine ¶ added in v1.1.0
Combine Hash this hash (the left hash) with the given right hash to produce a new hash
func (Hash) Copy ¶ added in v1.1.0
Copy Make a copy of a Hash (so the caller cannot modify the original version)
func (Hash) MarshalBinary ¶ added in v1.1.0
func (*Hash) UnmarhsalBinary ¶ added in v1.1.0
type HashList ¶ added in v1.1.0
type HashList [][]byte
func (HashList) BinarySize ¶ added in v1.1.0
func (HashList) MarshalBinary ¶ added in v1.1.0
func (*HashList) UnmarhsalBinary ¶ added in v1.1.0
type MerkleManager ¶ added in v1.1.0
type MerkleManager struct {
// contains filtered or unexported fields
}
func (*MerkleManager) AddHash ¶ added in v1.1.0
func (m *MerkleManager) AddHash(hash Hash, unique bool) error
AddHash adds a Hash to the Chain controlled by the ChainManager. If unique is true, the hash will not be added if it is already in the chain.
func (*MerkleManager) BuildReceipt ¶ added in v1.1.0
func (m *MerkleManager) BuildReceipt(r *merkle.Receipt) error
BuildReceipt takes the values collected by GetReceipt and flushes out the data structures in the receipt to represent a fully populated version.
func (*MerkleManager) Commit ¶ added in v1.1.0
func (c *MerkleManager) Commit() error
func (*MerkleManager) Element ¶ added in v1.1.0
func (c *MerkleManager) Element(index uint64) record.Value[[]byte]
func (*MerkleManager) ElementIndex ¶ added in v1.1.0
func (c *MerkleManager) ElementIndex(hash []byte) record.Value[uint64]
func (*MerkleManager) Get ¶ added in v1.1.0
func (m *MerkleManager) Get(element int64) (Hash, error)
Get the nth leaf node
func (*MerkleManager) GetAnyState ¶ added in v1.1.0
func (m *MerkleManager) GetAnyState(element int64) (ms *MerkleState, err error)
GetAnyState We only store the state at MarkPoints. This function computes a missing state even if one isn't stored for a particular element.
func (*MerkleManager) GetElementIndex ¶ added in v1.1.0
func (m *MerkleManager) GetElementIndex(hash []byte) (int64, error)
GetElementIndex Get an Element of a Merkle Tree from the database
func (*MerkleManager) GetIntermediate ¶ added in v1.1.0
func (m *MerkleManager) GetIntermediate(element, height int64) (Left, Right Hash, err error)
GetIntermediate Return the last two hashes that were combined to create the local Merkle Root at the given index. The element provided must be odd, and the Pending List must be fully populated up to height specified.
func (*MerkleManager) GetRange ¶ added in v1.1.0
func (m *MerkleManager) GetRange(begin, end int64) ([][]byte, error)
GetRange returns the list of hashes with indexes indicated by range: (begin,end) begin must be before or equal to end. The hash with index begin upto but not including end are the hashes returned. Indexes are zero based, so the first hash in the MerkleState is at 0
func (*MerkleManager) GetState ¶ added in v1.1.0
func (m *MerkleManager) GetState(element int64) *MerkleState
GetState Query the database for the MerkleState for a given index, i.e. the state Note that not every element in the Merkle Tree has a stored state; states are stored at the frequency indicated by the Mark Power. We also store the state of the chain at the end of a block regardless, but this state overwrites the previous block state.
If no state exists in the database for the element, GetState returns nil
func (*MerkleManager) Head ¶ added in v1.1.0
func (c *MerkleManager) Head() record.Value[*MerkleState]
func (*MerkleManager) IsDirty ¶ added in v1.1.0
func (c *MerkleManager) IsDirty() bool
func (*MerkleManager) MarkFreq ¶ added in v1.1.0
func (c *MerkleManager) MarkFreq() int64
func (*MerkleManager) MarkMask ¶ added in v1.1.0
func (c *MerkleManager) MarkMask() int64
func (*MerkleManager) MarkPower ¶ added in v1.1.0
func (c *MerkleManager) MarkPower() int64
func (*MerkleManager) Name ¶ added in v1.1.0
func (c *MerkleManager) Name() string
func (*MerkleManager) States ¶ added in v1.1.0
func (c *MerkleManager) States(index uint64) record.Value[*MerkleState]
func (*MerkleManager) Type ¶ added in v1.1.0
func (c *MerkleManager) Type() merkle.ChainType
type MerkleState ¶ added in v1.1.0
MerkleState A Merkle Dag State is the state kept while building a Merkle Tree. Except where a Merkle Tree has a clean power of two number of elements as leaf nodes, there will be multiple Sub Merkle Trees that make up a dynamic Merkle Tree. The Merkle State is the list of the roots of these sub Merkle Trees, and the combination of these roots provides a Directed Acyclic Graph (DAG) to all the leaves.
Merkle State 1 2 3 4 5 6 7 8 9 10 11 12 13 ---> 13 1-2 3-4 5-6 7-8 0-10 11-12 ---> -- 1-2-3-4 5-6-7-8 0-10-11-12 ---> 0-10-11-12 1-2-3-4-5-6-7-8 ---> 1-2-3-4-5-6-7-8
Interestingly, the state of building such a Merkle Tree looks just like counting in binary. And the higher order bits set will correspond to where the binary roots must be kept in a Merkle state.
func (*MerkleState) AddToMerkleTree ¶ added in v1.1.0
func (m *MerkleState) AddToMerkleTree(hash_ []byte)
AddToMerkleTree Add a Hash to the merkle tree and incrementally build the MerkleState
func (*MerkleState) Copy ¶ added in v1.1.0
func (m *MerkleState) Copy() *MerkleState
Copy Make a completely independent copy of the Merkle State that removes all references to the structures in the given Merkle State. This means copying any entries in the Pending slice
func (*MerkleState) CopyAsInterface ¶ added in v1.1.0
func (m *MerkleState) CopyAsInterface() interface{}
func (*MerkleState) Equal ¶ added in v1.1.0
func (m *MerkleState) Equal(n *MerkleState) bool
Equal Compares one MerkleState to another, and returns true if they are the same
func (*MerkleState) GetIntermediate ¶ added in v1.1.0
func (m *MerkleState) GetIntermediate(hash Hash, height int64) (left, right Hash, err error)
GetIntermediate returns the last two hashes that were combined to create the local Merkle Root at the given index. The element Pending List must be fully populated up to height specified.
func (*MerkleState) GetMDRoot ¶ added in v1.1.0
func (m *MerkleState) GetMDRoot() (MDRoot Hash)
GetMDRoot Compute the Merkle Directed Acyclic Graph (Merkle DAG or MerkleState) for the MerkleState at this point We take any trailing hashes in MerkleState, hash them up and combine to create the Merkle Dag Root. Getting the closing ListMDRoot is non-destructive, which is useful for some use cases.
Returns a nil if the MerkleSate is empty.
func (*MerkleState) InitSha256 ¶ added in v1.1.0
func (m *MerkleState) InitSha256()
InitSha256 Set the hashing function of this Merkle State to Sha256 TODO: Actually update the library to be able to use various hash algorithms
func (*MerkleState) PrintMR ¶ added in v1.1.0
func (m *MerkleState) PrintMR() (mr string)
PrintMR For debugging purposes, it is nice to get a string that shows the nil and non nil entries in c.MerkleState Note that the "low order" entries are first in the string, so the binary is going from low order on the left to high order going right in the string rather than how binary is normally represented.
func (MerkleState) String ¶ added in v1.1.0
func (m MerkleState) String() string
String convert the MerkleState to a human readable string
func (*MerkleState) UnMarshal ¶ added in v1.1.0
func (m *MerkleState) UnMarshal(MSBytes []byte) (err error)
UnMarshal Take the state of an MSMarshal instance defined by MSBytes, and set all the values in this instance of MSMarshal to the state defined by MSBytes. It is assumed that the hash function has been set by the caller.
func (*MerkleState) UnmarshalBinary ¶ added in v1.1.0
func (m *MerkleState) UnmarshalBinary(data []byte) error
func (*MerkleState) UnmarshalBinaryFrom ¶ added in v1.1.0
func (m *MerkleState) UnmarshalBinaryFrom(rd io.Reader) error
type MerkleTestCase ¶ added in v1.1.0
type MerkleTestCase struct { Root YamlHexString Entries []YamlHexString Cascade []YamlHexString }
type ReceiptList ¶ added in v1.1.0
type ReceiptList struct { // MerkleState MerkleState at the beginning of the list. MerkleState *MerkleState `json:"merkleState,omitempty" form:"merkleState" query:"merkleState" validate:"required"` Elements [][]byte `json:"elements,omitempty" form:"elements" query:"elements" validate:"required"` Receipt *merkle.Receipt `json:"receipt,omitempty" form:"receipt" query:"receipt" validate:"required"` ContinuedReceipt *merkle.Receipt `json:"continuedReceipt,omitempty" form:"continuedReceipt" query:"continuedReceipt" validate:"required"` // contains filtered or unexported fields }
func GetReceiptList ¶ added in v1.1.0
func GetReceiptList(manager *MerkleManager, Start int64, End int64) (r *ReceiptList, err error)
GetReceiptList Given a merkle tree with a start point and an end point, create a ReceiptList for all the elements from the start hash to the end hash, inclusive.
func NewReceiptList ¶ added in v1.1.0
func NewReceiptList() *ReceiptList
NewReceiptList Return a new ReceiptList with at least a MerkleState initialized
func (*ReceiptList) Copy ¶ added in v1.1.0
func (v *ReceiptList) Copy() *ReceiptList
func (*ReceiptList) CopyAsInterface ¶ added in v1.1.0
func (v *ReceiptList) CopyAsInterface() interface{}
func (*ReceiptList) Equal ¶ added in v1.1.0
func (v *ReceiptList) Equal(u *ReceiptList) bool
func (*ReceiptList) Included ¶ added in v1.1.0
func (r *ReceiptList) Included(entry []byte) bool
Included Tests an entry for inclusion in the given ReceiptList Note that while a ReceiptList proves inclusion in a Merkle Tree, and the fact that the list of elements proceed in order up to and including the anchor point, the ReceiptList does not necessarily prove the indices of the elements in the Merkle Tree. This could be solved by salting Receipts with the index of the hash at the anchor point.
func (*ReceiptList) IsValid ¶ added in v1.1.0
func (v *ReceiptList) IsValid() error
func (*ReceiptList) MarshalBinary ¶ added in v1.1.0
func (v *ReceiptList) MarshalBinary() ([]byte, error)
func (*ReceiptList) MarshalJSON ¶ added in v1.1.0
func (v *ReceiptList) MarshalJSON() ([]byte, error)
func (*ReceiptList) UnmarshalBinary ¶ added in v1.1.0
func (v *ReceiptList) UnmarshalBinary(data []byte) error
func (*ReceiptList) UnmarshalBinaryFrom ¶ added in v1.1.0
func (v *ReceiptList) UnmarshalBinaryFrom(rd io.Reader) error
func (*ReceiptList) UnmarshalJSON ¶ added in v1.1.0
func (v *ReceiptList) UnmarshalJSON(data []byte) error
func (*ReceiptList) Validate ¶ added in v1.1.0
func (r *ReceiptList) Validate() bool
Validate Take a receipt and validate that the element hash progresses to the Merkle Dag Root hash (MDRoot) in the receipt
type SigOrTxn ¶ added in v0.6.0
type SigOrTxn struct { Transaction *protocol.Transaction `json:"transaction,omitempty" form:"transaction" query:"transaction" validate:"required"` Signature protocol.Signature `json:"signature,omitempty" form:"signature" query:"signature" validate:"required"` Txid *url.TxID `json:"txid,omitempty" form:"txid" query:"txid" validate:"required"` // contains filtered or unexported fields }
func (*SigOrTxn) CopyAsInterface ¶ added in v0.6.0
func (v *SigOrTxn) CopyAsInterface() interface{}
func (*SigOrTxn) MarshalBinary ¶ added in v0.6.0
func (*SigOrTxn) MarshalJSON ¶ added in v0.6.0
func (*SigOrTxn) UnmarshalBinary ¶ added in v0.6.0
func (*SigOrTxn) UnmarshalBinaryFrom ¶ added in v0.6.0
func (*SigOrTxn) UnmarshalJSON ¶ added in v0.6.0
type SigSetEntry ¶ added in v1.0.0
type SigSetEntry struct { Type protocol.SignatureType `json:"type,omitempty" form:"type" query:"type" validate:"required"` KeyEntryIndex uint64 `json:"keyEntryIndex,omitempty" form:"keyEntryIndex" query:"keyEntryIndex" validate:"required"` SignatureHash [32]byte `json:"signatureHash,omitempty" form:"signatureHash" query:"signatureHash" validate:"required"` ValidatorKeyHash *[32]byte `json:"validatorKeyHash,omitempty" form:"validatorKeyHash" query:"validatorKeyHash" validate:"required"` // contains filtered or unexported fields }
func (*SigSetEntry) Compare ¶ added in v1.0.0
func (s *SigSetEntry) Compare(t *SigSetEntry) int
func (*SigSetEntry) Copy ¶ added in v1.0.0
func (v *SigSetEntry) Copy() *SigSetEntry
func (*SigSetEntry) CopyAsInterface ¶ added in v1.0.0
func (v *SigSetEntry) CopyAsInterface() interface{}
func (*SigSetEntry) Equal ¶ added in v1.0.0
func (v *SigSetEntry) Equal(u *SigSetEntry) bool
func (*SigSetEntry) IsValid ¶ added in v1.0.0
func (v *SigSetEntry) IsValid() error
func (*SigSetEntry) MarshalBinary ¶ added in v1.0.0
func (v *SigSetEntry) MarshalBinary() ([]byte, error)
func (*SigSetEntry) MarshalJSON ¶ added in v1.0.0
func (v *SigSetEntry) MarshalJSON() ([]byte, error)
func (*SigSetEntry) UnmarshalBinary ¶ added in v1.0.0
func (v *SigSetEntry) UnmarshalBinary(data []byte) error
func (*SigSetEntry) UnmarshalBinaryFrom ¶ added in v1.0.0
func (v *SigSetEntry) UnmarshalBinaryFrom(rd io.Reader) error
func (*SigSetEntry) UnmarshalJSON ¶ added in v1.0.0
func (v *SigSetEntry) UnmarshalJSON(data []byte) error
type SignatureSet ¶ added in v0.5.1
type SignatureSet struct {
// contains filtered or unexported fields
}
func (*SignatureSet) Add ¶ added in v0.5.1
Add adds a signature to the signature set. Add does nothing if the signature set already includes the signer's public key. The entry hash must refer to a signature chain entry.
func (*SignatureSet) Count ¶ added in v0.5.1
func (s *SignatureSet) Count() int
func (*SignatureSet) Entries ¶ added in v1.0.0
func (s *SignatureSet) Entries() []SigSetEntry
func (*SignatureSet) Version ¶ added in v1.0.0
func (s *SignatureSet) Version() uint64
type SparseHashList ¶ added in v1.1.0
type SparseHashList [][]byte
func (SparseHashList) BinarySize ¶ added in v1.1.0
func (l SparseHashList) BinarySize(height int64) int
func (SparseHashList) Copy ¶ added in v1.1.0
func (l SparseHashList) Copy() SparseHashList
func (SparseHashList) MarshalBinary ¶ added in v1.1.0
func (l SparseHashList) MarshalBinary(height int64) ([]byte, error)
func (*SparseHashList) UnmarshalBinary ¶ added in v1.1.0
func (l *SparseHashList) UnmarshalBinary(height int64, data []byte) error
type SystemData ¶ added in v1.0.0
type SystemData struct {
// contains filtered or unexported fields
}
func (*SystemData) Commit ¶ added in v1.0.0
func (c *SystemData) Commit() error
func (*SystemData) IsDirty ¶ added in v1.0.0
func (c *SystemData) IsDirty() bool
func (*SystemData) SyntheticIndexIndex ¶ added in v1.0.0
func (c *SystemData) SyntheticIndexIndex(block uint64) record.Value[uint64]
type Transaction ¶
type Transaction struct {
// contains filtered or unexported fields
}
func (*Transaction) AddSignature ¶ added in v0.5.1
func (t *Transaction) AddSignature(keyEntryIndex uint64, newSignature protocol.Signature) (int, error)
AddSignature loads the appropriate signature set and adds the signature to it.
func (*Transaction) AddSyntheticTxns ¶
func (t *Transaction) AddSyntheticTxns(txids ...*url.TxID) error
AddSyntheticTxns is a convenience method that calls GetSyntheticTxns, adds the IDs, and calls PutSyntheticTxns.
func (*Transaction) AddSystemSignature ¶ added in v1.0.0
func (t *Transaction) AddSystemSignature(net *config.Describe, newSignature protocol.Signature) (int, error)
AddSystemSignature adds a system signature to the operator signature set. AddSystemSignature panics if the signature is not a system signature.
func (*Transaction) Chains ¶ added in v1.0.0
func (c *Transaction) Chains() record.Set[*TransactionChainEntry]
func (*Transaction) Commit ¶ added in v1.0.0
func (c *Transaction) Commit() error
func (*Transaction) GetState ¶
func (t *Transaction) GetState() (*SigOrTxn, error)
GetState loads the transaction state.
func (*Transaction) GetStatus ¶
func (t *Transaction) GetStatus() (*protocol.TransactionStatus, error)
GetStatus loads the transaction status.
func (*Transaction) GetSyntheticTxns ¶
func (t *Transaction) GetSyntheticTxns() (*protocol.TxIdSet, error)
GetSyntheticTxns loads the IDs of synthetic transactions produced by the transaction.
func (*Transaction) IsDirty ¶ added in v1.0.0
func (c *Transaction) IsDirty() bool
func (*Transaction) Produced ¶ added in v1.0.0
func (c *Transaction) Produced() record.Set[*url.TxID]
func (*Transaction) PutState ¶
func (t *Transaction) PutState(v *SigOrTxn) error
PutState stores the transaction state.
func (*Transaction) PutStatus ¶
func (t *Transaction) PutStatus(v *protocol.TransactionStatus) error
PutStatus stores the transaction status.
func (*Transaction) PutSyntheticTxns ¶ added in v0.5.1
func (t *Transaction) PutSyntheticTxns(v *protocol.TxIdSet) error
PutSyntheticTxns stores the IDs of synthetic transactions produced by the transaction.
func (*Transaction) ReadSignatures ¶ added in v0.5.1
func (t *Transaction) ReadSignatures(signer *url.URL) (*SignatureSet, error)
ReadSignatures returns a read-only signature set for the given signer.
func (*Transaction) ReadSignaturesForSigner ¶ added in v0.6.0
func (t *Transaction) ReadSignaturesForSigner(signer protocol.Signer2) (*SignatureSet, error)
SignaturesForSigner returns a read-only signature set for the given signer account.
func (*Transaction) RestoreSignatureSets ¶ added in v1.0.0
func (t *Transaction) RestoreSignatureSets(signer *url.URL, version uint64, entries []SigSetEntry) error
RestoreSignatureSets is specifically only to be used to restore a transaction's signature sets from a snapshot.
func (*Transaction) Signatures ¶ added in v0.5.1
func (t *Transaction) Signatures(signer *url.URL) (*SignatureSet, error)
Signatures returns a signature set for the given signer.
func (*Transaction) SignaturesForSigner ¶ added in v0.6.0
func (t *Transaction) SignaturesForSigner(signer protocol.Signer2) (*SignatureSet, error)
SignaturesForSigner returns a signature set for the given signer account.
func (*Transaction) Status ¶ added in v1.0.0
func (c *Transaction) Status() record.Value[*protocol.TransactionStatus]
type TransactionChainEntry ¶ added in v1.0.0
type TransactionChainEntry struct { Account *url.URL `json:"account,omitempty" form:"account" query:"account" validate:"required"` // Chain is the name of the chain. Chain string `json:"chain,omitempty" form:"chain" query:"chain" validate:"required"` // ChainIndex is the index of the entry in the chain's index chain. ChainIndex uint64 `json:"chainIndex,omitempty" form:"chainIndex" query:"chainIndex" validate:"required"` // AnchorIndex is the index of the entry in the anchor chain's index chain. AnchorIndex uint64 `json:"anchorIndex,omitempty" form:"anchorIndex" query:"anchorIndex" validate:"required"` // contains filtered or unexported fields }
func (*TransactionChainEntry) Compare ¶ added in v1.0.0
func (e *TransactionChainEntry) Compare(f *TransactionChainEntry) int
func (*TransactionChainEntry) Copy ¶ added in v1.0.0
func (v *TransactionChainEntry) Copy() *TransactionChainEntry
func (*TransactionChainEntry) CopyAsInterface ¶ added in v1.0.0
func (v *TransactionChainEntry) CopyAsInterface() interface{}
func (*TransactionChainEntry) Equal ¶ added in v1.0.0
func (v *TransactionChainEntry) Equal(u *TransactionChainEntry) bool
func (*TransactionChainEntry) IsValid ¶ added in v1.0.0
func (v *TransactionChainEntry) IsValid() error
func (*TransactionChainEntry) MarshalBinary ¶ added in v1.0.0
func (v *TransactionChainEntry) MarshalBinary() ([]byte, error)
func (*TransactionChainEntry) UnmarshalBinary ¶ added in v1.0.0
func (v *TransactionChainEntry) UnmarshalBinary(data []byte) error
func (*TransactionChainEntry) UnmarshalBinaryFrom ¶ added in v1.0.0
func (v *TransactionChainEntry) UnmarshalBinaryFrom(rd io.Reader) error
type YamlHexString ¶ added in v1.1.0
type YamlHexString []byte
func (*YamlHexString) UnmarshalYAML ¶ added in v1.1.0
func (s *YamlHexString) UnmarshalYAML(value *yaml.Node) error