chain

package
v0.6.0-rc2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 25, 2022 License: MIT Imports: 18 Imported by: 0

README

Chain Validator Design

Chain validators are organized by transaction type. The executor handles mundane tasks that are common to all chain validators, such as authentication and authorization.

In general, every transaction requires an origin record. Thus, the executor validates and loads the origin before delegating to the chain validator. However, certain transaction types, specifically synthetic transactions that create records, may not need an extant origin. The executor has a specific clause for these special cases.

Chain Validator Implementation

Chain validators must satisfy the TxExecutor interface:

type TxExecutor interface {
	Type() protocol.TransactionType
	Validate(*StateManager, *protocol.Envelope) error
}

All state manipulation (mutating and loading) must go through the state manager. There are three methods that can be used to modify records and/or create synthetic transactions:

  • Implementing a user transaction executor
    • Update(record) - Update one or more existing records. Cannot be used to create records.
    • Create(record) - Create one or more new records. Produces a synthetic chain create transaction.
    • Submit(url, body) - Submit a synthetic transaction.
  • Implementing a synthetic transaction executor
    • Update(record) - Create or update one or more existing records.
    • Create(record) - Cannot be used by synthetic transactions.
    • Submit(url, body) - Cannot be used by synthetic transactions.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddDirectoryEntry

func AddDirectoryEntry(getIndex func(*url.URL, ...interface{}) Value, directory *url.URL, u ...*url.URL) error

func CreateSynthReceipt added in v0.5.1

func CreateSynthReceipt(transaction *protocol.Transaction, status *protocol.TransactionStatus) (*url.URL, *protocol.SyntheticReceipt)

CreateSynthReceipt creates a receipt used to return the status of synthetic transactions to its sender

func NeedsReceipt added in v0.5.1

func NeedsReceipt(txt protocol.TransactionType) bool

NeedsReceipt selects which synth txs need / don't a receipt

Types

type AcmeFaucet

type AcmeFaucet struct{}

func (AcmeFaucet) Execute added in v0.6.0

func (AcmeFaucet) Type

func (AcmeFaucet) Validate

type AddCredits

type AddCredits struct{}

func (AddCredits) Execute added in v0.6.0

func (AddCredits) Type

func (AddCredits) Validate

type AddValidator added in v0.5.1

type AddValidator struct{}

func (AddValidator) Execute added in v0.6.0

func (AddValidator) Type added in v0.5.1

func (AddValidator) Validate added in v0.5.1

type BurnTokens

type BurnTokens struct{}

func (BurnTokens) Execute added in v0.6.0

func (BurnTokens) Type

func (BurnTokens) Validate

type ChainUpdates added in v0.5.1

type ChainUpdates struct {
	Entries []indexing.ChainUpdate
	// contains filtered or unexported fields
}

func (*ChainUpdates) AddChainEntry added in v0.5.1

func (c *ChainUpdates) AddChainEntry(batch *database.Batch, account *url.URL, name string, typ protocol.ChainType, entry []byte, sourceIndex, sourceBlock uint64) error

AddChainEntry adds an entry to a chain and records the chain update in the block state.

func (*ChainUpdates) DidAddChainEntry added in v0.5.1

func (c *ChainUpdates) DidAddChainEntry(batch *database.Batch, u *url.URL, name string, typ protocol.ChainType, entry []byte, index, sourceIndex, sourceBlock uint64) error

DidAddChainEntry records a chain update in the block state.

func (*ChainUpdates) DidUpdateChain added in v0.5.1

func (c *ChainUpdates) DidUpdateChain(update indexing.ChainUpdate)

DidUpdateChain records a chain update.

func (*ChainUpdates) Merge added in v0.5.1

func (c *ChainUpdates) Merge(d *ChainUpdates)

type CreateDataAccount

type CreateDataAccount struct{}

func (CreateDataAccount) Execute added in v0.6.0

func (CreateDataAccount) Type

func (CreateDataAccount) Validate

type CreateIdentity

type CreateIdentity struct{}

func (CreateIdentity) Execute added in v0.6.0

func (CreateIdentity) Type

func (CreateIdentity) Validate

type CreateKeyBook

type CreateKeyBook struct{}

func (CreateKeyBook) Execute added in v0.6.0

func (CreateKeyBook) Type

func (CreateKeyBook) Validate

type CreateKeyPage

type CreateKeyPage struct{}

func (CreateKeyPage) Execute added in v0.6.0

func (CreateKeyPage) Type

func (CreateKeyPage) Validate

type CreateToken

type CreateToken struct{}

func (CreateToken) Execute added in v0.6.0

func (CreateToken) Type

func (CreateToken) Validate

type CreateTokenAccount

type CreateTokenAccount struct{}

func (CreateTokenAccount) Execute added in v0.6.0

func (CreateTokenAccount) Type

func (CreateTokenAccount) Validate

type Delivery added in v0.6.0

type Delivery struct {
	Signatures  []protocol.Signature
	Transaction *protocol.Transaction
	Remote      []*protocol.ForwardedSignature
	State       ProcessTransactionState
	// contains filtered or unexported fields
}

func NormalizeEnvelope added in v0.6.0

func NormalizeEnvelope(envelope *protocol.Envelope) ([]*Delivery, error)

NormalizeEnvelope normalizes the envelope into one or more deliveries.

func (*Delivery) IsForwarded added in v0.6.0

func (d *Delivery) IsForwarded() bool

IsForwarded returns true if the transaction was delivered within a SyntheticForwardedTransaction.

func (*Delivery) LoadTransaction added in v0.6.0

func (d *Delivery) LoadTransaction(batch *database.Batch) error

LoadTransaction attempts to load the transaction from the database.

func (*Delivery) NewForwarded added in v0.6.0

func (d *Delivery) NewForwarded(fwd *protocol.SyntheticForwardTransaction) *Delivery

func (*Delivery) NewSyntheticReceipt added in v0.6.0

func (d *Delivery) NewSyntheticReceipt(hash [32]byte, source *url.URL, receipt *protocol.Receipt) *Delivery

func (*Delivery) VerifySignatures added in v0.6.0

func (d *Delivery) VerifySignatures() bool

VerifySignatures verifies each signature.

type InternalSendTransactions

type InternalSendTransactions struct{}

func (InternalSendTransactions) Execute

func (InternalSendTransactions) Type

func (InternalSendTransactions) Validate

type InternalTransactionsSent

type InternalTransactionsSent struct{}

func (InternalTransactionsSent) Execute

func (InternalTransactionsSent) Type

func (InternalTransactionsSent) Validate

type InternalTransactionsSigned

type InternalTransactionsSigned struct{}

func (InternalTransactionsSigned) Execute

func (InternalTransactionsSigned) Type

func (InternalTransactionsSigned) Validate

type IssueTokens

type IssueTokens struct{}

func (IssueTokens) Execute added in v0.6.0

func (IssueTokens) Type

func (IssueTokens) Validate

type ProcessTransactionState added in v0.5.1

type ProcessTransactionState struct {
	ValidatorsUpdates      []ValidatorUpdate
	ProducedTxns           []*protocol.Transaction
	AdditionalTransactions []*Delivery
	ChainUpdates           ChainUpdates
}

func (*ProcessTransactionState) DidProduceTxn added in v0.5.1

func (s *ProcessTransactionState) DidProduceTxn(url *url.URL, body protocol.TransactionBody)

DidProduceTxn records a produced transaction.

func (*ProcessTransactionState) Merge added in v0.5.1

func (*ProcessTransactionState) ProcessAdditionalTransaction added in v0.6.0

func (s *ProcessTransactionState) ProcessAdditionalTransaction(txn *Delivery)

type RemoveValidator added in v0.5.1

type RemoveValidator struct{}

func (RemoveValidator) Execute added in v0.6.0

func (RemoveValidator) Type added in v0.5.1

func (RemoveValidator) Validate added in v0.5.1

type SendTokens

type SendTokens struct{}

func (SendTokens) Execute added in v0.6.0

func (SendTokens) Type

func (SendTokens) Validate

type StateManager

type StateManager struct {
	Origin    protocol.Account
	OriginUrl *url.URL

	Signator    protocol.Signer
	SignatorUrl *url.URL
	// contains filtered or unexported fields
}

func LoadStateManager added in v0.6.0

func LoadStateManager(batch *database.Batch, nodeUrl *url.URL, principal protocol.Account, transaction *protocol.Transaction, status *protocol.TransactionStatus, logger log.Logger) (*StateManager, error)

func NewStateManager

func NewStateManager(batch *database.Batch, nodeUrl, signerUrl *url.URL, signer protocol.Signer, principal protocol.Account, transaction *protocol.Transaction, logger log.Logger) *StateManager

NewStateManager creates a new state manager and loads the transaction's origin. If the origin is not found, NewStateManager returns a valid state manager along with a not-found error.

func (*StateManager) AddAuthority added in v0.6.0

func (m *StateManager) AddAuthority(account protocol.FullAccount, u *url.URL) error

func (*StateManager) AddChainEntry

func (m *StateManager) AddChainEntry(u *url.URL, name string, typ protocol.ChainType, entry []byte, sourceIndex, sourceBlock uint64) error

func (*StateManager) AddDirectoryEntry

func (c *StateManager) AddDirectoryEntry(directory *url.URL, u ...*url.URL) error

func (*StateManager) AddSyntheticTxn added in v0.5.1

func (m *StateManager) AddSyntheticTxn(txid []byte, synth [32]byte)

func (*StateManager) AddValidator

func (m *StateManager) AddValidator(pubKey ed25519.PubKey)

func (*StateManager) Commit

func (m *StateManager) Commit() (*ProcessTransactionState, error)

commit writes pending records to the database.

func (*StateManager) Create

func (m *StateManager) Create(record ...protocol.Account)

Create queues a record for a synthetic chain create transaction. Will panic if called by a synthetic transaction. Will panic if the record is a transaction.

func (*StateManager) DisableValidator added in v0.5.1

func (m *StateManager) DisableValidator(pubKey ed25519.PubKey)

func (*StateManager) Discard added in v0.5.1

func (m *StateManager) Discard()

func (*StateManager) GetHeight

func (c *StateManager) GetHeight(u *url.URL) (uint64, error)

GetHeight loads the height of the chain

func (*StateManager) InheritAuth added in v0.6.0

func (m *StateManager) InheritAuth(account protocol.FullAccount) error

func (*StateManager) LoadTxn

func (c *StateManager) LoadTxn(txid [32]byte) (*protocol.Transaction, error)

LoadTxn loads and unmarshals a saved transaction

func (*StateManager) LoadUrl

func (c *StateManager) LoadUrl(account *url.URL) (protocol.Account, error)

LoadUrl loads a chain by URL and unmarshals it.

func (*StateManager) LoadUrlAs

func (c *StateManager) LoadUrlAs(account *url.URL, target interface{}) error

LoadUrlAs loads a chain by URL and unmarshals it as a specific type.

func (*StateManager) ReadChain

func (c *StateManager) ReadChain(u *url.URL, name string) (*database.Chain, error)

ReadChain loads an account's chain by URL and name.

func (*StateManager) RecordIndex

func (c *StateManager) RecordIndex(u *url.URL, key ...interface{}) *writeIndex

func (*StateManager) SetAuth added in v0.6.0

func (m *StateManager) SetAuth(account protocol.FullAccount, mainKeyBook, managerKeyBook *url.URL) error

func (*StateManager) SignTransaction

func (m *StateManager) SignTransaction(txid []byte, signatures ...protocol.Signature)

func (*StateManager) Submit

func (m *StateManager) Submit(url *url.URL, body protocol.TransactionBody)

Submit queues a synthetic transaction for submission.

func (*StateManager) TxnIndex

func (c *StateManager) TxnIndex(id []byte, key ...interface{}) *writeIndex

func (*StateManager) Update

func (m *StateManager) Update(record ...protocol.Account)

Update queues a record for storage in the database. The queued update will fail if the record does not already exist, unless it is created by a synthetic transaction, or the record is a transaction.

func (*StateManager) UpdateData

func (m *StateManager) UpdateData(record protocol.Account, entryHash []byte, dataEntry *protocol.DataEntry)

UpdateData will cache a data associated with a DataAccount chain. the cache data will not be stored directly in the state but can be used upstream for storing a chain in the state database.

func (*StateManager) UpdateSignator

func (m *StateManager) UpdateSignator(record protocol.Account) error

func (*StateManager) UpdateStatus added in v0.5.1

func (m *StateManager) UpdateStatus(txid []byte, status *protocol.TransactionStatus)

type SyntheticAnchor

type SyntheticAnchor struct {
	Network *config.Network
}

func (SyntheticAnchor) Execute added in v0.6.0

func (SyntheticAnchor) Type

func (SyntheticAnchor) Validate

type SyntheticBurnTokens

type SyntheticBurnTokens struct{}

func (SyntheticBurnTokens) Execute added in v0.6.0

func (SyntheticBurnTokens) Type

func (SyntheticBurnTokens) Validate

type SyntheticCreateChain

type SyntheticCreateChain struct{}

func (SyntheticCreateChain) Execute

func (SyntheticCreateChain) Type

func (SyntheticCreateChain) Validate

type SyntheticDepositCredits

type SyntheticDepositCredits struct{}

func (SyntheticDepositCredits) Execute added in v0.6.0

func (SyntheticDepositCredits) Type

func (SyntheticDepositCredits) Validate

type SyntheticDepositTokens

type SyntheticDepositTokens struct{}

func (SyntheticDepositTokens) Execute added in v0.6.0

func (SyntheticDepositTokens) Type

func (SyntheticDepositTokens) Validate

type SyntheticForwardTransaction added in v0.6.0

type SyntheticForwardTransaction struct{}

func (SyntheticForwardTransaction) Execute added in v0.6.0

func (SyntheticForwardTransaction) Type added in v0.6.0

func (SyntheticForwardTransaction) Validate added in v0.6.0

type SyntheticMirror

type SyntheticMirror struct{}

func (SyntheticMirror) Execute added in v0.6.0

func (SyntheticMirror) Type

func (SyntheticMirror) Validate

type SyntheticReceipt added in v0.5.1

type SyntheticReceipt struct{}

func (SyntheticReceipt) Execute

func (SyntheticReceipt) Type added in v0.5.1

func (SyntheticReceipt) Validate added in v0.5.1

type SyntheticWriteData

type SyntheticWriteData struct{}

func (SyntheticWriteData) Execute added in v0.6.0

func (SyntheticWriteData) Type

func (SyntheticWriteData) Validate

type UpdateAccountAuth added in v0.6.0

type UpdateAccountAuth struct{}

func (UpdateAccountAuth) Execute added in v0.6.0

func (UpdateAccountAuth) Type added in v0.6.0

func (UpdateAccountAuth) Validate added in v0.6.0

type UpdateKey added in v0.6.0

type UpdateKey struct{}

func (UpdateKey) Execute added in v0.6.0

func (UpdateKey) Type added in v0.6.0

func (UpdateKey) Validate added in v0.6.0

type UpdateKeyPage

type UpdateKeyPage struct{}

func (UpdateKeyPage) Execute added in v0.6.0

func (UpdateKeyPage) Type

func (UpdateKeyPage) Validate

type UpdateValidatorKey added in v0.5.1

type UpdateValidatorKey struct{}

func (UpdateValidatorKey) Execute added in v0.6.0

func (UpdateValidatorKey) Type added in v0.5.1

func (UpdateValidatorKey) Validate added in v0.5.1

type ValidatorUpdate added in v0.5.1

type ValidatorUpdate struct {
	PubKey  ed25519.PubKey
	Enabled bool
}

type Value

type Value interface {
	Get() ([]byte, error)
	Put([]byte) error
}

type WriteData

type WriteData struct{}

func (WriteData) Execute added in v0.6.0

func (WriteData) Type

func (WriteData) Validate

type WriteDataTo

type WriteDataTo struct{}

func (WriteDataTo) Execute added in v0.6.0

func (WriteDataTo) Type

func (WriteDataTo) Validate

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL