Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BlockInfo ¶
type BlockInfo struct { // RuntimeBlock is the runtime block. RuntimeBlock *block.Block // ConsensusBlock is the consensus light block the runtime block belongs to. ConsensusBlock *consensus.LightBlock // Epoch is the epoch the runtime block belongs to. Epoch beacon.EpochTime // ActiveDescriptor is the runtime descriptor active for the runtime block. ActiveDescriptor *registry.Runtime }
BlockInfo contains information related to the given runtime block.
type Config ¶
type Config struct { MaxPoolSize uint64 MaxCheckTxBatchSize uint64 MaxLastSeenCacheSize uint64 RepublishInterval time.Duration // RecheckInterval is the interval (in rounds) when any pending transactions are subject to a // recheck and any non-passing transactions are removed. RecheckInterval uint64 }
Config is the transaction pool configuration.
type RuntimeHostProvisioner ¶
type RuntimeHostProvisioner interface { // WaitHostedRuntime waits for the hosted runtime to be provisioned and returns it. WaitHostedRuntime(ctx context.Context) (host.RichRuntime, error) }
RuntimeHostProvisioner is a runtime host provisioner.
type TransactionMeta ¶
type TransactionMeta struct { // Local is a flag indicating that the transaction was obtained from a local client. Local bool // Discard is a flag indicating that the transaction should be discarded after checks. Discard bool // Recheck is a flag indicating that this transaction is already in the scheduler pool and is // being subject to recheck. Recheck bool }
TransactionMeta contains the per-transaction metadata.
type TransactionPool ¶
type TransactionPool interface { // Start starts the service. Start() error // Stop halts the service. Stop() // Quit returns a channel that will be closed when the service terminates. Quit() <-chan struct{} // Submit adds the transaction into the transaction pool, first performing checks on it by // invoking the runtime. This method waits for the checks to complete. SubmitTx(ctx context.Context, tx []byte, meta *TransactionMeta) (*protocol.CheckTxResult, error) // SubmitTxNoWait adds the transaction into the transaction pool and returns immediately. SubmitTxNoWait(ctx context.Context, tx []byte, meta *TransactionMeta) error // SubmitProposedBatch adds the given (possibly new) transaction batch into the current // proposal queue. SubmitProposedBatch(batch [][]byte) // PromoteProposedBatch promotes the specified transactions that are already in the transaction // pool into the current proposal queue. PromoteProposedBatch(batch []hash.Hash) // ClearProposedBatch clears the proposal queue. ClearProposedBatch() // RemoveTxBatch removes a transaction batch from the transaction pool. RemoveTxBatch(txs []hash.Hash) // GetScheduledBatch returns a batch of transactions ready for scheduling. GetScheduledBatch(force bool) []*transaction.CheckedTransaction // GetPrioritizedBatch returns a batch of transactions ordered by priority but without taking // any weight limits into account. // // Offset specifies the transaction hash that should serve as an offset when returning // transactions from the pool. Transactions will be skipped until the given hash is encountered // and only following transactions will be returned. GetPrioritizedBatch(offset *hash.Hash, limit uint32) []*transaction.CheckedTransaction // GetKnownBatch gets a set of known transactions from the transaction pool. // // For any missing transactions nil will be returned in their place and the map of missing // transactions will be populated accoordingly. GetKnownBatch(batch []hash.Hash) ([]*transaction.CheckedTransaction, map[hash.Hash]int) // ProcessBlock updates the last known runtime block information. ProcessBlock(bi *BlockInfo) error // UpdateWeightLimits updates the per-batch weight limits. UpdateWeightLimits(limits map[transaction.Weight]uint64) error // WakeupScheduler explicitly notifies subscribers that they should attempt scheduling. WakeupScheduler() // Clear clears the transaction pool. Clear() // WatchScheduler subscribes to notifications about when to attempt scheduling. The emitted // boolean flag indicates whether the batch flush timeout expired. WatchScheduler() (pubsub.ClosableSubscription, <-chan bool) // WatchCheckedTransactions subscribes to notifications about new transactions being available // in the transaction pool for scheduling. WatchCheckedTransactions() (pubsub.ClosableSubscription, <-chan []*transaction.CheckedTransaction) // PendingCheckSize returns the number of transactions currently pending to be checked. PendingCheckSize() uint64 // PendingScheduleSize returns the number of transactions currently pending to be scheduled. PendingScheduleSize() uint64 }
TransactionPool is an interface for managing a pool of transactions.
func New ¶
func New( runtimeID common.Namespace, cfg *Config, host RuntimeHostProvisioner, txPublisher TransactionPublisher, ) (TransactionPool, error)
New creates a new transaction pool instance.
type TransactionPublisher ¶
type TransactionPublisher interface { // PublishTx publishes a transaction to remote peers. PublishTx(ctx context.Context, tx []byte) error // GetMinRepublishInterval returns the minimum republish interval that needs to be respected by // the caller. If PublishTx is called for the same transaction more quickly, the transaction // may be dropped and not published. GetMinRepublishInterval() time.Duration }
TransactionPublisher is an interface representing a mechanism for publishing transactions.
Click to show internal directories.
Click to hide internal directories.