mempool

package
v0.4.0 Latest Latest
Warning

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

Go to latest
Published: May 31, 2021 License: MIT Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MempoolChannel = byte(0x30)

	// UnknownPeerID is the peer ID to use when running CheckTx when there is
	// no peer (e.g. RPC)
	UnknownPeerID uint16 = 0
)
View Source
const TxKeySize = sha256.Size

TxKeySize is the size of the transaction key index

Variables

View Source
var (
	// ErrTxInCache is returned to the client if we saw tx earlier
	ErrTxInCache = errors.New("tx already exists in cache")
)

Functions

func IsPreCheckError

func IsPreCheckError(err error) bool

IsPreCheckError returns true if err is due to pre check failure.

func TxKey

func TxKey(tx types.Tx) [TxKeySize]byte

TxKey is the fixed length array hash used as the key in maps.

Types

type CListMempoolOption

type CListMempoolOption func(*Mempool)

CListMempoolOption sets an optional parameter on the mempool.

func WithMetrics

func WithMetrics(metrics *tmmempl.Metrics) CListMempoolOption

WithMetrics sets the metrics.

func WithNotify

func WithNotify(f NotifyFunc) CListMempoolOption

WithNotify sets a notification for the mempool. This is ran after a tx has been accepted by the mempool.

func WithPostCheck

func WithPostCheck(f tmmempl.PostCheckFunc) CListMempoolOption

WithPostCheck sets a filter for the mempool to reject a tx if f(tx) returns false. This is ran after CheckTx. Only applies to the first created block. After that, Update overwrites the existing value.

func WithPreCheck

func WithPreCheck(f tmmempl.PreCheckFunc) CListMempoolOption

WithPreCheck sets a filter for the mempool to reject a tx if f(tx) returns false. This is ran before CheckTx. Only applies to the first created block. After that, Update overwrites the existing value.

type ErrMempoolIsFull

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

ErrMempoolIsFull means Tendermint & an application can't handle that much load

func (ErrMempoolIsFull) Error

func (e ErrMempoolIsFull) Error() string

type ErrPreCheck

type ErrPreCheck struct {
	Reason error
}

ErrPreCheck is returned when tx is too big

func (ErrPreCheck) Error

func (e ErrPreCheck) Error() string

type ErrTxTooLarge

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

ErrTxTooLarge means the tx is too big to be sent in a message to other peers

func (ErrTxTooLarge) Error

func (e ErrTxTooLarge) Error() string

type Mempool

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

Mempool is an ordered in-memory pool for transactions before they are proposed in a consensus round. Transaction validity is checked using the CheckTx abci message before the transaction is added to the pool. The mempool uses a concurrent list structure for storing transactions that can be efficiently accessed by multiple concurrent readers.

func New

func New(
	config *cfg.MempoolConfig,
	proxyAppConn proxy.AppConnMempool,
	height int64,
	options ...CListMempoolOption,
) *Mempool

NewCListMempool returns a new mempool with the given configuration and connection to an application.

func (*Mempool) CheckTx

func (mem *Mempool) CheckTx(tx types.Tx, cb func(*abci.Response), txInfo tmmempl.TxInfo) error

It blocks if we're waiting on Update() or Reap(). cb: A callback from the CheckTx command.

It gets called from another goroutine.

CONTRACT: Either cb will get called, or err returned.

Safe for concurrent use by multiple goroutines.

func (*Mempool) CloseWAL

func (mem *Mempool) CloseWAL()

func (*Mempool) EnableTxsAvailable

func (mem *Mempool) EnableTxsAvailable()

NOTE: not thread safe - should only be called once, on startup

func (*Mempool) Flush

func (mem *Mempool) Flush()

XXX: Unsafe! Calling Flush may leave mempool in inconsistent state.

func (*Mempool) FlushAppConn

func (mem *Mempool) FlushAppConn() error

Lock() must be help by the caller during execution.

func (*Mempool) InitWAL

func (mem *Mempool) InitWAL() error

func (*Mempool) Lock

func (mem *Mempool) Lock()

Safe for concurrent use by multiple goroutines.

func (*Mempool) ReapMaxBytesMaxGas

func (mem *Mempool) ReapMaxBytesMaxGas(maxBytes, maxGas int64) types.Txs

Safe for concurrent use by multiple goroutines.

func (*Mempool) ReapMaxTxs

func (mem *Mempool) ReapMaxTxs(max int) types.Txs

Safe for concurrent use by multiple goroutines.

func (*Mempool) RemoveTxByKey

func (mem *Mempool) RemoveTxByKey(txKey [TxKeySize]byte, removeFromCache bool)

RemoveTxByKey removes a transaction from the mempool by its TxKey index.

func (*Mempool) SetLogger

func (mem *Mempool) SetLogger(l log.Logger)

SetLogger sets the Logger.

func (*Mempool) Size

func (mem *Mempool) Size() int

Safe for concurrent use by multiple goroutines.

func (*Mempool) TxsAvailable

func (mem *Mempool) TxsAvailable() <-chan struct{}

Safe for concurrent use by multiple goroutines.

func (*Mempool) TxsBytes

func (mem *Mempool) TxsBytes() int64

Safe for concurrent use by multiple goroutines.

func (*Mempool) TxsFront

func (mem *Mempool) TxsFront() *clist.CElement

TxsFront returns the first transaction in the ordered list for peer goroutines to call .NextWait() on. FIXME: leaking implementation details!

Safe for concurrent use by multiple goroutines.

func (*Mempool) TxsWaitChan

func (mem *Mempool) TxsWaitChan() <-chan struct{}

TxsWaitChan returns a channel to wait on transactions. It will be closed once the mempool is not empty (ie. the internal `mem.txs` has at least one element)

Safe for concurrent use by multiple goroutines.

func (*Mempool) Unlock

func (mem *Mempool) Unlock()

Safe for concurrent use by multiple goroutines.

func (*Mempool) Update

func (mem *Mempool) Update(
	height int64,
	txs types.Txs,
	deliverTxResponses []*abci.ResponseDeliverTx,
	preCheck tmmempl.PreCheckFunc,
	postCheck tmmempl.PostCheckFunc,
) error

Lock() must be help by the caller during execution.

type NotifyFunc

type NotifyFunc func(tx types.Tx)

type PeerState

type PeerState interface {
	GetHeight() int64
}

PeerState describes the state of a peer.

type Reactor

type Reactor struct {
	p2p.BaseReactor
	// contains filtered or unexported fields
}

Reactor handles mempool tx broadcasting amongst peers. It maintains a map from peer ID to counter, to prevent gossiping txs to the peers you received it from.

func NewReactor

func NewReactor(config *cfg.MempoolConfig, mempool *Mempool) *Reactor

NewReactor returns a new Reactor with the given config and mempool.

func (*Reactor) AddPeer

func (memR *Reactor) AddPeer(peer p2p.Peer)

AddPeer implements Reactor. It starts a broadcast routine ensuring all txs are forwarded to the given peer.

func (*Reactor) GetChannels

func (memR *Reactor) GetChannels() []*p2p.ChannelDescriptor

GetChannels implements Reactor by returning the list of channels for this reactor.

func (*Reactor) InitPeer

func (memR *Reactor) InitPeer(peer p2p.Peer) p2p.Peer

InitPeer implements Reactor by creating a state for the peer.

func (*Reactor) OnStart

func (memR *Reactor) OnStart() error

OnStart implements p2p.BaseReactor.

func (*Reactor) Receive

func (memR *Reactor) Receive(chID byte, src p2p.Peer, msgBytes []byte)

Receive implements Reactor. It adds any received transactions to the mempool.

func (*Reactor) RemovePeer

func (memR *Reactor) RemovePeer(peer p2p.Peer, reason interface{})

RemovePeer implements Reactor.

func (*Reactor) SetLogger

func (memR *Reactor) SetLogger(l log.Logger)

SetLogger sets the Logger on the reactor and the underlying mempool.

type TxsMessage

type TxsMessage struct {
	Txs []types.Tx
}

TxsMessage is a Message containing transactions.

func (*TxsMessage) String

func (m *TxsMessage) String() string

String returns a string representation of the TxsMessage.

Jump to

Keyboard shortcuts

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