Version: v0.0.0-...-0ce3ae6 Latest Latest

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

Go to latest
Published: Dec 27, 2018 License: Apache-2.0 Imports: 23 Imported by: 0




View Source
const (
	MempoolChannel = byte(0x30)


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

	// ErrMempoolIsFull means Demars-DMC & an application can't handle that much load
	ErrMempoolIsFull = errors.New("Mempool is full")


func RegisterMempoolMessages

func RegisterMempoolMessages(cdc *amino.Codec)

func TxID

func TxID(tx []byte) string

TxID is the hex encoded hash of the bytes as a types.Tx.


type Mempool

type Mempool struct {
	BCReactor *bc.BlockchainReactor
	// 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 NewMempool

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

NewMempool 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)) (err error, bucketID string)

CheckTx executes a new transaction against the application to determine its validity and whether it should be added to the mempool. 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.

func (*Mempool) CloseWAL

func (mem *Mempool) CloseWAL() bool

CloseWAL closes and discards the underlying WAL file. Any further writes will not be relayed to disk.

func (*Mempool) EnableTxsAvailable

func (mem *Mempool) EnableTxsAvailable()

EnableTxsAvailable initializes the TxsAvailable channel, ensuring it will trigger once every height when transactions are available. NOTE: not thread safe - should only be called once, on startup

func (*Mempool) Flush

func (mem *Mempool) Flush()

Flush removes all transactions from the mempool and cache

func (*Mempool) FlushAppConn

func (mem *Mempool) FlushAppConn() error

Flushes the mempool connection to ensure async resCb calls are done e.g. from CheckTx.

func (*Mempool) InitWAL

func (mem *Mempool) InitWAL()

func (*Mempool) Lock

func (mem *Mempool) Lock()

Lock locks the mempool. The consensus must be able to hold lock to safely update.

func (*Mempool) Reap

func (mem *Mempool) Reap(maxTxs int) types.Txs

Reap returns a list of transactions currently in the mempool. If maxTxs is -1, there is no cap on the number of returned transactions.

func (*Mempool) SetLogger

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

SetLogger sets the Logger.

func (*Mempool) Size

func (mem *Mempool) Size() int

Size returns the number of transactions in the mempool.

func (*Mempool) TxsAvailable

func (mem *Mempool) TxsAvailable() <-chan int64

TxsAvailable returns a channel which fires once for every height, and only when transactions are available in the mempool. NOTE: the returned channel may be nil if EnableTxsAvailable was not called.

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.

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)

func (*Mempool) Unlock

func (mem *Mempool) Unlock()

Unlock unlocks the mempool.

func (*Mempool) Update

func (mem *Mempool) Update(height int64, txBuckets types.TxBuckets) error

Update informs the mempool that the given txs were committed and can be discarded. NOTE: this should be called *after* block is committed by consensus. NOTE: unsafe; Lock/Unlock must be managed by caller

type MempoolMessage

type MempoolMessage interface{}

MempoolMessage is a message sent or received by the MempoolReactor.

func DecodeMessage

func DecodeMessage(bz []byte) (msg MempoolMessage, err error)

DecodeMessage decodes a byte-array into a MempoolMessage.

type MempoolOption

type MempoolOption func(*Mempool)

MempoolOption sets an optional parameter on the Mempool.

func WithMetrics

func WithMetrics(metrics *Metrics) MempoolOption

WithMetrics sets the metrics.

type MempoolReactor

type MempoolReactor struct {

	Mempool        *Mempool
	UnprocessedTxs []types.Tx
	// contains filtered or unexported fields

MempoolReactor handles mempool tx broadcasting amongst peers.

func NewMempoolReactor

func NewMempoolReactor(config *cfg.MempoolConfig, mempool *Mempool) *MempoolReactor

NewMempoolReactor returns a new MempoolReactor with the given config and mempool.

func (*MempoolReactor) AddPeer

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

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

func (*MempoolReactor) BroadcastTx

func (memR *MempoolReactor) BroadcastTx(tx types.Tx, cb func(*abci.Response)) (error, string)

BroadcastTx is an alias for Mempool.CheckTx. Broadcasting itself happens in peer routines.

func (*MempoolReactor) GetChannels

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

GetChannels implements Reactor. It returns the list of channels for this reactor.

func (*MempoolReactor) OnStart

func (memR *MempoolReactor) OnStart() error

OnStart implements p2p.BaseReactor.

func (*MempoolReactor) Receive

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

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

func (*MempoolReactor) RemovePeer

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

RemovePeer implements Reactor.

func (*MempoolReactor) SetLogger

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

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

type Metrics

type Metrics struct {
	// Size of the mempool.
	Size metrics.Gauge

Metrics contains metrics exposed by this package. see MetricsProvider for descriptions.

func NopMetrics

func NopMetrics() *Metrics

NopMetrics returns no-op Metrics.

func PrometheusMetrics

func PrometheusMetrics() *Metrics

PrometheusMetrics returns Metrics build using Prometheus client library.

type PeerState

type PeerState interface {
	GetHeight() int64

PeerState describes the state of a peer.

type TxMessage

type TxMessage struct {
	Tx types.Tx

TxMessage is a MempoolMessage containing a transaction.

func (*TxMessage) String

func (m *TxMessage) String() string

String returns a string representation of the TxMessage.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
t or T : Toggle theme light dark auto
y or Y : Canonical URL