reserver

package
v0.7.0 Latest Latest
Warning

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

Go to latest
Published: May 5, 2026 License: Apache-2.0 Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrAlreadyReserved = fmt.Errorf("address already reserved")

ErrAlreadyReserved is returned if the sender address has a pending transaction in a different subpool. For example, this error is returned in response to any input transaction of non-blob type when a blob transaction from this sender remains pending (and vice-versa).

Functions

This section is empty.

Types

type HandlerOpt

type HandlerOpt func(*ReservationHandle)

HandlerOpt is an option for creating a ReservationHandle.

func WithRefCounter

func WithRefCounter() HandlerOpt

type ReservationHandle

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

ReservationHandle is a named handle on ReservationTracker. It is held by sub-pools to make reservations for accounts it is tracking. The id is used to determine which sub-pool owns an address and disallows non-owners to hold or release addresses it doesn't own.

Additionally, with enableRefCount, the handler will track the refs to an address and will only release the address when refs==0

func (*ReservationHandle) Has

func (h *ReservationHandle) Has(address common.Address) bool

Has checks that address is already reserved by ANOTHER pool.

func (*ReservationHandle) Hold

func (h *ReservationHandle) Hold(addrs ...common.Address) error

Hold atomically reserves all addresses or none. Ensure addrs have NO duplicates. In most cases addrs is a single item.

func (*ReservationHandle) Release

func (h *ReservationHandle) Release(addrs ...common.Address) error

Release atomically releases all addresses or none. Ensure addrs have NO duplicates. In most cases addrs is a single item.

type ReservationTracker

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

ReservationTracker is a struct shared between different Subpools. It is used to reserve the account and ensure that one address cannot initiate transactions, authorizations, and other state-changing behaviors in different pools at the same time.

func NewReservationTracker

func NewReservationTracker() *ReservationTracker

NewReservationTracker initializes the account reservation tracker.

func (*ReservationTracker) NewHandle

func (r *ReservationTracker) NewHandle(id int, opts ...HandlerOpt) *ReservationHandle

NewHandle creates a named handle on the ReservationTracker. The handle identifies the subpool so ownership of reservations can be determined.

type Reserver

type Reserver interface {
	// Hold attempts to reserve the specified account address for the given pool.
	// Returns an error if the account is already reserved.
	Hold(addr ...common.Address) error

	// Release attempts to release the reservation for the specified account.
	// Returns an error if the address is not reserved or is reserved by another pool.
	Release(addr ...common.Address) error

	// Has returns a flag indicating if the address has been reserved by a pool
	// other than one with the current Reserver handle.
	Has(address common.Address) bool
}

Reserver is an interface for creating and releasing owned reservations in the ReservationTracker struct, which is shared between Subpools.

Jump to

Keyboard shortcuts

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