Documentation ¶
Index ¶
- Variables
- type BlockInfo
- type Config
- type MainQueueTransaction
- type PendingCheckTransaction
- type RecheckableTransactionStore
- type RepublishableTransactionSource
- type RuntimeHostProvisioner
- type TransactionMeta
- type TransactionPool
- type TransactionPublisher
- type TxQueueMeta
- type UsableTransactionSource
Constants ¶
This section is empty.
Variables ¶
var ( ErrReplacementTxPriorityTooLow = errors.New("txpool: replacement tx priority too low") ErrQueueFull = errors.New("txpool: schedule queue is full") )
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 MainQueueTransaction ¶ added in v0.2202.0
type MainQueueTransaction struct { TxQueueMeta // contains filtered or unexported fields }
MainQueueTransaction is a transaction and its metadata in the main queue.
func (*MainQueueTransaction) Priority ¶ added in v0.2202.0
func (tx *MainQueueTransaction) Priority() uint64
Priority returns the transaction priority.
func (*MainQueueTransaction) Sender ¶ added in v0.2202.0
func (tx *MainQueueTransaction) Sender() string
Sender returns the transaction sender.
func (*MainQueueTransaction) SenderSeq ¶ added in v0.2202.0
func (tx *MainQueueTransaction) SenderSeq() uint64
SenderSeq returns the per-sender sequence number.
func (*MainQueueTransaction) String ¶ added in v0.2202.0
func (tx *MainQueueTransaction) String() string
String returns a string representation of a transaction.
type PendingCheckTransaction ¶ added in v0.2202.0
type PendingCheckTransaction struct { *TxQueueMeta // contains filtered or unexported fields }
PendingCheckTransaction is a transaction pending checks.
type RecheckableTransactionStore ¶ added in v0.2202.0
type RecheckableTransactionStore interface { // TakeAll removes all txs and returns them. TakeAll() []*TxQueueMeta // OfferChecked adds a tx that is checked. OfferChecked(tx *TxQueueMeta, meta *protocol.CheckTxMetadata) error }
RecheckableTransactionStore provides methods for rechecking.
type RepublishableTransactionSource ¶ added in v0.2202.0
type RepublishableTransactionSource interface { // GetTxsToPublish gets txs that this queue wants to publish. GetTxsToPublish() []*TxQueueMeta }
RepublishableTransactionSource is a place to get txs that we want to push.
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 }
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{} // SubmitTx 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() // HandleTxsUsed indicates that given transaction hashes are processed in a block. Queues that // can remove those transactions will do so. HandleTxsUsed(txs []hash.Hash) // GetSchedulingSuggestion returns a list of transactions to schedule. This begins a // scheduling session, which suppresses transaction rechecking and republishing. Subsequently // call GetSchedulingExtra for more transactions, followed by FinishScheduling. GetSchedulingSuggestion(countHint uint32) []*TxQueueMeta // GetSchedulingExtra returns transactions to schedule. // // 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 the following transactions will be returned. GetSchedulingExtra(offset *hash.Hash, limit uint32) []*TxQueueMeta // FinishScheduling finishes a scheduling session, which resumes transaction rechecking and // republishing. FinishScheduling() // 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 accordingly. GetKnownBatch(batch []hash.Hash) ([]*TxQueueMeta, map[hash.Hash]int) // ProcessBlock updates the last known runtime block information. ProcessBlock(bi *BlockInfo) error // ProcessIncomingMessages loads transactions from incoming messages into the pool. ProcessIncomingMessages(inMsgs []*message.IncomingMessage) error // WakeupScheduler explicitly notifies subscribers that they should attempt scheduling. WakeupScheduler() // 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 []*PendingCheckTransaction) // PendingCheckSize returns the number of transactions currently pending to be checked. PendingCheckSize() int }
TransactionPool is an interface for managing a pool of transactions.
func New ¶
func New( runtimeID common.Namespace, cfg *Config, host RuntimeHostProvisioner, history history.History, 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.
type TxQueueMeta ¶ added in v0.2202.0
type TxQueueMeta struct {
// contains filtered or unexported fields
}
TxQueueMeta stores some queuing-related metadata alongside a raw transaction.
func (*TxQueueMeta) FirstSeen ¶ added in v0.2202.0
func (t *TxQueueMeta) FirstSeen() time.Time
FirstSeen returns the time the transaction was first seen.
func (*TxQueueMeta) Hash ¶ added in v0.2202.0
func (t *TxQueueMeta) Hash() hash.Hash
Hash returns the hash of the transaction binary data.
func (*TxQueueMeta) Raw ¶ added in v0.2202.0
func (t *TxQueueMeta) Raw() []byte
Raw returns the raw transaction data.
func (*TxQueueMeta) Size ¶ added in v0.2202.0
func (t *TxQueueMeta) Size() int
Size returns the size (in bytes) of the raw transaction data.
type UsableTransactionSource ¶ added in v0.2202.0
type UsableTransactionSource interface { // GetSchedulingSuggestion returns some number of txs to give to the scheduler as part of the initial // batch. GetSchedulingSuggestion(countHint uint32) []*TxQueueMeta // GetTxByHash returns the specific tx, if it is in this queue. The bool is like `value, ok := txMap[key]`. Used // for resolving a batch from hashes and serving txSync. GetTxByHash(h hash.Hash) *TxQueueMeta // HandleTxsUsed is a callback to indicate that the scheduler is done with a set of txs, by hash. For most // implementations, remove it from internal storage. HandleTxsUsed(hashes []hash.Hash) }
UsableTransactionSource is a place to retrieve txs that are "good enough." "Good enough" variously means CheckTx'd, came from roothash incoming message, or came from our own node.