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
// 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.