block

package
v1.2.11 Latest Latest
Warning

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

Go to latest
Published: Dec 6, 2023 License: MIT Imports: 32 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Block

type Block struct {
	BlockMeta
	State BlockState
	Batch *database.Batch
}

type BlockAnchorState

type BlockAnchorState struct {
	ShouldOpenMajorBlock bool
	OpenMajorBlockTime   time.Time
}

BlockAnchorState is used to construc the anchor for the block.

type BlockMeta

type BlockMeta = execute.BlockParams

BlockMeta is metadata about a block.

type BlockState

type BlockState struct {
	OpenedMajorBlock   bool
	MakeMajorBlock     uint64
	MakeMajorBlockTime time.Time
	Delivered          uint64
	Signed             uint64
	ProducedTxns       []*protocol.Transaction
	ChainUpdates       chain.ChainUpdates
	ReceivedAnchors    []*chain.ReceivedAnchor

	Anchor *BlockAnchorState
}

BlockState tracks various metrics of a block of transactions as they are executed.

func (*BlockState) Empty

func (s *BlockState) Empty() bool

Empty returns true if nothing happened during the block.

func (*BlockState) MergeSignature

func (s *BlockState) MergeSignature(r *ProcessSignatureState)

func (*BlockState) MergeTransaction

func (s *BlockState) MergeTransaction(r *chain.ProcessTransactionState)

type BlockTimerType

type BlockTimerType uint64
const BlockTimerTypeBeginBlock BlockTimerType = 2

BlockTimerTypeBeginBlock .

const BlockTimerTypeCheckTx BlockTimerType = 3

BlockTimerTypeCheckTx .

const BlockTimerTypeCommit BlockTimerType = 6

BlockTimerTypeCommit .

const BlockTimerTypeDeliverTx BlockTimerType = 4

BlockTimerTypeDeliverTx .

const BlockTimerTypeEndBlock BlockTimerType = 5

BlockTimerTypeEndBlock .

const BlockTimerTypeExecuteEnvelope BlockTimerType = 0

BlockTimerTypeExecuteEnvelope .

const BlockTimerTypeNetworkAccountUpdates BlockTimerType = 8

BlockTimerTypeNetworkAccountUpdates .

const BlockTimerTypeProcessRemoteSignatures BlockTimerType = 9

BlockTimerTypeProcessRemoteSignatures .

const BlockTimerTypeProcessSignature BlockTimerType = 1

BlockTimerTypeProcessSignature .

const BlockTimerTypeProcessTransaction BlockTimerType = 10

BlockTimerTypeProcessTransaction .

const BlockTimerTypeSigning BlockTimerType = 7

BlockTimerTypeSigning .

const BlockTimerTypeTransactionOffset BlockTimerType = 240

BlockTimerTypeTransactionOffset .

func BlockTimerTypeByName

func BlockTimerTypeByName(name string) (BlockTimerType, bool)

BlockTimerTypeByName returns the named Block Timer Type.

func (BlockTimerType) GetEnumValue

func (v BlockTimerType) GetEnumValue() uint64

GetEnumValue returns the value of the Block Timer Type

func (BlockTimerType) MarshalJSON

func (v BlockTimerType) MarshalJSON() ([]byte, error)

MarshalJSON marshals the Block Timer Type to JSON as a string.

func (*BlockTimerType) SetEnumValue

func (v *BlockTimerType) SetEnumValue(id uint64) bool

SetEnumValue sets the value. SetEnumValue returns false if the value is invalid.

func (BlockTimerType) String

func (v BlockTimerType) String() string

String returns the name of the Block Timer Type.

func (*BlockTimerType) UnmarshalJSON

func (v *BlockTimerType) UnmarshalJSON(data []byte) error

UnmarshalJSON unmarshals the Block Timer Type from JSON as a string.

type Dispatcher

type Dispatcher = execute.Dispatcher

type Executor

type Executor struct {
	ExecutorOptions
	BlockTimers TimerSet

	CheckTxBatch *database.Batch
	// contains filtered or unexported fields
}

func NewGenesisExecutor

func NewGenesisExecutor(db *database.Database, logger log.Logger, network *config.Describe, globals *core.GlobalValues, router routing.Router) (*Executor, error)

NewGenesisExecutor creates a transaction executor that can be used to set up the genesis state.

func NewNodeExecutor

func NewNodeExecutor(opts ExecutorOptions) (*Executor, error)

NewNodeExecutor creates a new Executor for a node.

func (*Executor) ActiveGlobals

func (m *Executor) ActiveGlobals() *core.GlobalValues

func (*Executor) AuthorityIsSatisfied

func (x *Executor) AuthorityIsSatisfied(batch *database.Batch, transaction *protocol.Transaction, status *protocol.TransactionStatus, authUrl *url.URL) (bool, error)

func (*Executor) BeginBlock

func (x *Executor) BeginBlock(block *Block) error

BeginBlock implements ./Chain

func (*Executor) EnableTimers

func (m *Executor) EnableTimers()

func (*Executor) EndBlock

func (m *Executor) EndBlock(block *Block) error

EndBlock implements ./Chain

func (*Executor) ExecuteEnvelope

func (x *Executor) ExecuteEnvelope(block *Block, delivery *chain.Delivery) (*protocol.TransactionStatus, error)

func (*Executor) Genesis

func (m *Executor) Genesis(block *Block, exec chain.TransactionExecutor) error

func (*Executor) GetAccountAuthoritySet

func (x *Executor) GetAccountAuthoritySet(batch *database.Batch, account protocol.Account) (*protocol.AccountAuth, error)

func (*Executor) Init added in v1.2.0

func (m *Executor) Init(db database.Beginner) error

func (*Executor) InitChainValidators

func (x *Executor) InitChainValidators(initVal []*execute.ValidatorUpdate) (additional []*execute.ValidatorUpdate, err error)

func (*Executor) LoadStateRoot

func (m *Executor) LoadStateRoot(batch *database.Batch) ([]byte, error)

func (*Executor) ProcessRemoteSignatures

func (x *Executor) ProcessRemoteSignatures(block *Block, delivery *chain.Delivery) error

func (*Executor) ProcessSignature

func (x *Executor) ProcessSignature(batch *database.Batch, delivery *chain.Delivery, signature protocol.Signature) (*ProcessSignatureState, error)

func (*Executor) ProcessTransaction

func (x *Executor) ProcessTransaction(batch *database.Batch, delivery *chain.Delivery) (*protocol.TransactionStatus, *chain.ProcessTransactionState, error)

ProcessTransaction processes a transaction. It will not return an error if the transaction fails - in that case the status code will be non zero. It only returns an error in cases like a database failure.

func (*Executor) ProduceSynthetic

func (x *Executor) ProduceSynthetic(batch *database.Batch, from *protocol.Transaction, produced []*protocol.Transaction) error

func (*Executor) SetExecutor_TESTONLY

func (x *Executor) SetExecutor_TESTONLY(y chain.TransactionExecutor)

func (*Executor) SignerIsAuthorized

func (x *Executor) SignerIsAuthorized(batch *database.Batch, transaction *protocol.Transaction, signer protocol.Signer, checkAuthz bool) error

SignerIsAuthorized verifies that the signer is allowed to sign the transaction

func (*Executor) SignerIsSatisfied

func (x *Executor) SignerIsSatisfied(batch *database.Batch, transaction *protocol.Transaction, status *protocol.TransactionStatus, signer protocol.Signer) (bool, error)

func (*Executor) StoreBlockTimers

func (m *Executor) StoreBlockTimers(ds *logging.DataSet)

func (*Executor) TransactionIsReady

func (x *Executor) TransactionIsReady(batch *database.Batch, delivery *chain.Delivery, status *protocol.TransactionStatus, principal protocol.Account) (bool, error)

func (*Executor) ValidateEnvelope

func (x *Executor) ValidateEnvelope(batch *database.Batch, delivery *chain.Delivery) (protocol.TransactionResult, error)

ValidateEnvelope verifies that the envelope is valid. It checks the basics, like the envelope has signatures and a hash and/or a transaction. It validates signatures, ensuring they match the transaction hash, reference a signator, etc. And more.

ValidateEnvelope should not modify anything. Right now it updates signer timestamps and credits, but that will be moved to ProcessSignature.

func (*Executor) ValidateSignature

func (x *Executor) ValidateSignature(batch *database.Batch, delivery *chain.Delivery, status *protocol.TransactionStatus, signature protocol.Signature) error

type ExecutorOptions

type ExecutorOptions = execute.Options

type Globals

type Globals struct {
	Active, Pending core.GlobalValues
}

type ProcessSignatureState

type ProcessSignatureState struct {
}

func (*ProcessSignatureState) Merge

type TimerRecord

type TimerRecord struct {
	// contains filtered or unexported fields
}

type TimerSet

type TimerSet struct {
	// contains filtered or unexported fields
}

func (*TimerSet) Initialize

func (t *TimerSet) Initialize(executors *map[protocol.TransactionType]chain.TransactionExecutor)

func (*TimerSet) Reset

func (t *TimerSet) Reset()

func (*TimerSet) Start

func (t *TimerSet) Start(record any) *TimerRecord

func (*TimerSet) Stop

func (t *TimerSet) Stop(r *TimerRecord)

func (*TimerSet) Store

func (t *TimerSet) Store(ds *logging.DataSet)

Jump to

Keyboard shortcuts

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