chain

package
v0.5.1 Latest Latest
Warning

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

Go to latest
Published: Apr 6, 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) Type

func (AcmeFaucet) Validate

type AddCredits

type AddCredits struct{}

func (AddCredits) Type

func (AddCredits) Validate

type AddValidator added in v0.5.1

type AddValidator struct{}

func (AddValidator) Type added in v0.5.1

func (AddValidator) Validate added in v0.5.1

type BurnTokens

type BurnTokens struct{}

func (BurnTokens) Type

func (BurnTokens) Validate

type ChainUpdate added in v0.5.1

type ChainUpdate struct {
	Account     *url.URL
	Name        string
	Type        protocol.ChainType
	Index       uint64
	SourceIndex uint64
	SourceBlock uint64
	Entry       []byte
}

ChainUpdate records an update to a chain of an account.

type ChainUpdates added in v0.5.1

type ChainUpdates struct {
	Entries []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 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) Type

func (CreateDataAccount) Validate

type CreateIdentity

type CreateIdentity struct{}

func (CreateIdentity) Type

func (CreateIdentity) Validate

type CreateKeyBook

type CreateKeyBook struct{}

func (CreateKeyBook) Type

func (CreateKeyBook) Validate

type CreateKeyPage

type CreateKeyPage struct{}

func (CreateKeyPage) Type

func (CreateKeyPage) Validate

type CreateToken

type CreateToken struct{}

func (CreateToken) Type

func (CreateToken) Validate

type CreateTokenAccount

type CreateTokenAccount struct{}

func (CreateTokenAccount) Type

func (CreateTokenAccount) Validate

type InternalSendTransactions

type InternalSendTransactions struct{}

func (InternalSendTransactions) Type

func (InternalSendTransactions) Validate

type InternalTransactionsSent

type InternalTransactionsSent struct{}

func (InternalTransactionsSent) Type

func (InternalTransactionsSent) Validate

type InternalTransactionsSigned

type InternalTransactionsSigned struct{}

func (InternalTransactionsSigned) Type

func (InternalTransactionsSigned) Validate

type IssueTokens

type IssueTokens struct{}

func (IssueTokens) Type

func (IssueTokens) Validate

type ProcessTransactionState added in v0.5.1

type ProcessTransactionState struct {
	ValidatorsUpdates []ValidatorUpdate
	ProducedTxns      []*protocol.Transaction
	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

type RemoveManager

type RemoveManager struct{}

func (RemoveManager) Type

func (RemoveManager) Validate

type RemoveValidator added in v0.5.1

type RemoveValidator struct{}

func (RemoveValidator) Type added in v0.5.1

func (RemoveValidator) Validate added in v0.5.1

type SendTokens

type SendTokens struct{}

func (SendTokens) Type

func (SendTokens) Validate

type StateManager

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

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

func NewStateManager

func NewStateManager(batch *database.Batch, nodeUrl, signerUrl *url.URL, signer protocol.SignerAccount, 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) 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) 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) 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) Type

func (SyntheticAnchor) Validate

type SyntheticBurnTokens

type SyntheticBurnTokens struct{}

func (SyntheticBurnTokens) Type

func (SyntheticBurnTokens) Validate

type SyntheticCreateChain

type SyntheticCreateChain struct{}

func (SyntheticCreateChain) Type

func (SyntheticCreateChain) Validate

type SyntheticDepositCredits

type SyntheticDepositCredits struct{}

func (SyntheticDepositCredits) Type

func (SyntheticDepositCredits) Validate

type SyntheticDepositTokens

type SyntheticDepositTokens struct{}

func (SyntheticDepositTokens) Type

func (SyntheticDepositTokens) Validate

type SyntheticMirror

type SyntheticMirror struct{}

func (SyntheticMirror) Type

func (SyntheticMirror) Validate

type SyntheticReceipt added in v0.5.1

type SyntheticReceipt struct{}

func (SyntheticReceipt) Type added in v0.5.1

func (SyntheticReceipt) Validate added in v0.5.1

type SyntheticWriteData

type SyntheticWriteData struct{}

func (SyntheticWriteData) Type

func (SyntheticWriteData) Validate

type UpdateKeyPage

type UpdateKeyPage struct{}

func (UpdateKeyPage) Type

func (UpdateKeyPage) Validate

type UpdateManager

type UpdateManager struct{}

func (UpdateManager) Type

func (UpdateManager) Validate

type UpdateValidatorKey added in v0.5.1

type UpdateValidatorKey struct{}

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) Type

func (WriteData) Validate

type WriteDataTo

type WriteDataTo struct{}

func (WriteDataTo) Type

func (WriteDataTo) Validate

Jump to

Keyboard shortcuts

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