messagepool

package
v1.1.2-rc2 Latest Latest
Warning

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

Go to latest
Published: Nov 4, 2021 License: Apache-2.0, MIT Imports: 48 Imported by: 1

Documentation

Index

Constants

View Source
const MaxBlocks = 15
View Source
const MaxMessageSize = 64 << 10 // 64KiB
View Source
const MinGasPremium = 100e3
View Source
const RbfDenom = 256

Variables

View Source
var (
	ReplaceByFeeRatioDefault  = 1.25
	MemPoolSizeLimitHiDefault = 30000
	MemPoolSizeLimitLoDefault = 20000
	PruneCooldownDefault      = time.Minute
	GasLimitOverestimation    = 1.25

	ConfigKey = datastore.NewKey("/mpool/config")
)
View Source
var (
	ErrMessageTooBig = errors.New("message too big")

	ErrMessageValueTooHigh = errors.New("cannot send more filecoin than will ever exist")

	ErrNonceTooLow = errors.New("message nonce too low")

	ErrGasFeeCapTooLow = errors.New("gas fee cap too low")

	ErrNotEnoughFunds = errors.New("not enough funds to execute transaction")

	ErrInvalidToAddr = errors.New("message had invalid to address")

	ErrSoftValidationFailure  = errors.New("validation failure")
	ErrRBFTooLowPremium       = errors.New("replace by fee has too low GasPremium")
	ErrTooManyPendingMessages = errors.New("too many pending messages for actor")
	ErrNonceGap               = errors.New("unfulfilled nonce gap")
)
View Source
var (
	HeadChangeCoalesceMinDelay      = 2 * time.Second
	HeadChangeCoalesceMaxDelay      = 6 * time.Second
	HeadChangeCoalesceMergeInterval = time.Second
)
View Source
var MaxActorPendingMessages = 1000
View Source
var MaxBlockMessages = 16000
View Source
var MaxNonceGap = uint64(4)
View Source
var MaxUntrustedActorPendingMessages = 10
View Source
var RepublishBatchDelay = 100 * time.Millisecond

Functions

func CapGasFee

func CapGasFee(mff DefaultMaxFeeFunc, msg *types.Message, sendSepc *types.MessageSendSpec)

func ComputeMinRBF

func ComputeMinRBF(curPrem abi.TokenAmount) abi.TokenAmount

Types

type DefaultMaxFeeFunc

type DefaultMaxFeeFunc func() (abi.TokenAmount, error)

type GasMeta added in v0.9.7

type GasMeta struct {
	Price big.Int
	Limit int64
}

type GasPriceCache added in v0.9.7

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

func NewGasPriceCache added in v0.9.7

func NewGasPriceCache() *GasPriceCache

func (*GasPriceCache) GetTSGasStats added in v0.9.7

func (g *GasPriceCache) GetTSGasStats(provider Provider, ts *types.TipSet) ([]GasMeta, error)

type MessagePool

type MessagePool struct {
	GetMaxFee  DefaultMaxFeeFunc
	PriceCache *GasPriceCache
	// contains filtered or unexported fields
}

func New

func New(api Provider,
	ds repo.Datastore,
	forkParams *config.ForkUpgradeConfig,
	mpoolCfg *config.MessagePoolConfig,
	netName string,
	gp gasPredictor,
	ap actorProvider,
	j journal.Journal,
) (*MessagePool, error)

func (*MessagePool) Add

func (*MessagePool) CheckMessages added in v0.9.7

func (mp *MessagePool) CheckMessages(ctx context.Context, protos []*apitypes.MessagePrototype) ([][]apitypes.MessageCheckStatus, error)

CheckMessages performs a set of logic checks for a list of messages, prior to submitting it to the mpool

func (*MessagePool) CheckPendingMessages added in v0.9.7

func (mp *MessagePool) CheckPendingMessages(ctx context.Context, from address.Address) ([][]apitypes.MessageCheckStatus, error)

CheckPendingMessages performs a set of logical sets for all messages pending from a given actor

func (*MessagePool) CheckReplaceMessages added in v0.9.7

func (mp *MessagePool) CheckReplaceMessages(ctx context.Context, replace []*types.Message) ([][]apitypes.MessageCheckStatus, error)

CheckReplaceMessages performs a set of logical checks for related messages while performing a replacement.

func (*MessagePool) Clear

func (mp *MessagePool) Clear(ctx context.Context, local bool)

func (*MessagePool) Close

func (mp *MessagePool) Close() error

func (*MessagePool) DeleteByAdress

func (mp *MessagePool) DeleteByAdress(address address.Address) error

func (*MessagePool) GasBatchEstimateMessageGas added in v0.9.7

func (mp *MessagePool) GasBatchEstimateMessageGas(ctx context.Context, estimateMessages []*types.EstimateMessage, fromNonce uint64, tsk types.TipSetKey) ([]*types.EstimateResult, error)

func (*MessagePool) GasEstimateFeeCap

func (mp *MessagePool) GasEstimateFeeCap(
	ctx context.Context,
	msg *types.UnsignedMessage,
	maxqueueblks int64,
	tsk types.TipSetKey,
) (big.Int, error)

func (*MessagePool) GasEstimateGasLimit

func (mp *MessagePool) GasEstimateGasLimit(ctx context.Context, msgIn *types.UnsignedMessage, tsk types.TipSetKey) (int64, error)

func (*MessagePool) GasEstimateGasPremium

func (mp *MessagePool) GasEstimateGasPremium(
	ctx context.Context,
	nblocksincl uint64,
	sender address.Address,
	gaslimit int64,
	_ types.TipSetKey,
	cache *GasPriceCache,
) (big.Int, error)

func (*MessagePool) GasEstimateMessageGas

func (mp *MessagePool) GasEstimateMessageGas(ctx context.Context, estimateMessage *types.EstimateMessage, _ types.TipSetKey) (*types.Message, error)

func (*MessagePool) GetActor added in v0.9.7

func (mp *MessagePool) GetActor(_ context.Context, addr address.Address, _ types.TipSetKey) (*types.Actor, error)

GetActor should not be used. It is only here to satisfy interface mess caused by lite node handling

func (*MessagePool) GetConfig

func (mp *MessagePool) GetConfig() *MpoolConfig

func (*MessagePool) GetNonce

func (mp *MessagePool) GetNonce(ctx context.Context, addr address.Address, _ types.TipSetKey) (uint64, error)

func (*MessagePool) HeadChange

func (mp *MessagePool) HeadChange(ctx context.Context, revert []*types.TipSet, apply []*types.TipSet) error

func (*MessagePool) MessagesForBlocks

func (mp *MessagePool) MessagesForBlocks(blks []*types.BlockHeader) ([]*types.SignedMessage, error)

func (*MessagePool) MultipleSelectMessages added in v0.9.4

func (mp *MessagePool) MultipleSelectMessages(ctx context.Context, ts *types.TipSet, tqs []float64) (msgss [][]*types.SignedMessage, err error)

select the message multiple times and try not to repeat it each time

func (*MessagePool) Pending

func (mp *MessagePool) Pending(ctx context.Context) ([]*types.SignedMessage, *types.TipSet)

func (*MessagePool) PendingFor

func (mp *MessagePool) PendingFor(ctx context.Context, a address.Address) ([]*types.SignedMessage, *types.TipSet)

func (*MessagePool) Prune

func (mp *MessagePool) Prune()

func (*MessagePool) PublishMsg added in v0.9.6

func (mp *MessagePool) PublishMsg(smsg *types.SignedMessage) error

func (*MessagePool) PublishMsgForWallet

func (mp *MessagePool) PublishMsgForWallet(ctx context.Context, addr address.Address) error

func (*MessagePool) Push

func (mp *MessagePool) Push(ctx context.Context, m *types.SignedMessage) (cid.Cid, error)

func (*MessagePool) PushUntrusted

func (mp *MessagePool) PushUntrusted(ctx context.Context, m *types.SignedMessage) (cid.Cid, error)

this method is provided for the gateway to push messages. differences from Push:

  • strict checks are enabled
  • extra strict add checks are used when adding the messages to the msgSet that means: no nonce gaps, at most 10 pending messages for the actor

func (*MessagePool) RecoverSig

func (mp *MessagePool) RecoverSig(msg *types.UnsignedMessage) *types.SignedMessage

func (*MessagePool) Remove

func (mp *MessagePool) Remove(ctx context.Context, from address.Address, nonce uint64, applied bool)

func (*MessagePool) SelectMessages

func (mp *MessagePool) SelectMessages(ctx context.Context, ts *types.TipSet, tq float64) (msgs []*types.SignedMessage, err error)

func (*MessagePool) SetConfig

func (mp *MessagePool) SetConfig(cfg *MpoolConfig) error

func (*MessagePool) Updates

func (mp *MessagePool) Updates(ctx context.Context) (<-chan MpoolUpdate, error)

func (*MessagePool) VerifyMsgSig

func (mp *MessagePool) VerifyMsgSig(m *types.SignedMessage) error

type MessagePoolEvt

type MessagePoolEvt struct {
	Action   string
	Messages []MessagePoolEvtMessage
	Error    error `json:",omitempty"`
}

MessagePoolEvt is the journal entry for message pool events.

type MessagePoolEvtMessage

type MessagePoolEvtMessage struct {
	types.UnsignedMessage

	CID cid.Cid
}

type MessageSigner added in v1.1.0

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

MessageSigner keeps track of nonces per address, and increments the nonce when signing a message

func NewMessageSigner added in v1.1.0

func NewMessageSigner(wallet wallet.WalletIntersection, mpool MpoolNonceAPI, ds datastore.Batching) *MessageSigner

func (*MessageSigner) SignMessage added in v1.1.0

func (ms *MessageSigner) SignMessage(ctx context.Context, msg *types.Message, cb func(*types.SignedMessage) error) (*types.SignedMessage, error)

SignMessage increments the nonce for the message From address, and signs the message

type MpoolChange

type MpoolChange int
const (
	MpoolAdd MpoolChange = iota
	MpoolRemove
)

type MpoolConfig

type MpoolConfig struct {
	PriorityAddrs          []address.Address
	SizeLimitHigh          int
	SizeLimitLow           int
	ReplaceByFeeRatio      float64
	PruneCooldown          time.Duration
	GasLimitOverestimation float64
}

func DefaultConfig

func DefaultConfig() *MpoolConfig

func (*MpoolConfig) Clone

func (mc *MpoolConfig) Clone() *MpoolConfig

type MpoolLocker

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

func NewMpoolLocker

func NewMpoolLocker() *MpoolLocker

func (*MpoolLocker) TakeLock

func (ml *MpoolLocker) TakeLock(ctx context.Context, a address.Address) (func(), error)

type MpoolNonceAPI added in v1.1.0

type MpoolNonceAPI interface {
	GetNonce(context.Context, address.Address, types.TipSetKey) (uint64, error)
	GetActor(context.Context, address.Address, types.TipSetKey) (*types.Actor, error)
}

type MpoolUpdate

type MpoolUpdate struct {
	Type    MpoolChange
	Message *types.SignedMessage
}

type Provider

type Provider interface {
	ChainHead() (*types.TipSet, error)
	ChainTipSet(types.TipSetKey) (*types.TipSet, error)
	SubscribeHeadChanges(func(rev, app []*types.TipSet) error) *types.TipSet
	PutMessage(m types.ChainMsg) (cid.Cid, error)
	PubSubPublish(string, []byte) error
	GetActorAfter(address.Address, *types.TipSet) (*types.Actor, error)
	StateAccountKeyAtFinality(context.Context, address.Address, *types.TipSet) (address.Address, error)
	StateAccountKey(context.Context, address.Address, *types.TipSet) (address.Address, error)
	MessagesForBlock(block2 *types.BlockHeader) ([]*types.UnsignedMessage, []*types.SignedMessage, error)
	MessagesForTipset(*types.TipSet) ([]types.ChainMsg, error)
	LoadTipSet(tsk types.TipSetKey) (*types.TipSet, error)
	ChainComputeBaseFee(ctx context.Context, ts *types.TipSet) (tbig.Int, error)
	IsLite() bool
}

func NewProviderLite added in v0.9.7

func NewProviderLite(sm *chain.Store, ps *pubsub.PubSub, noncer MpoolNonceAPI) Provider

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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