messagepool

package
v1.14.2 Latest Latest
Warning

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

Go to latest
Published: Dec 11, 2023 License: Apache-2.0, MIT Imports: 45 Imported by: 1

Documentation

Index

Constants

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

Variables

View Source
var (
	ReplaceByFeePercentageMinimum types.Percent = 110
	ReplaceByFeePercentageDefault types.Percent = 125
)
View Source
var (
	MemPoolSizeLimitHiDefault = 30000
	MemPoolSizeLimitLoDefault = 20000
	PruneCooldownDefault      = time.Minute
	GasLimitOverestimation    = 1.25

	ConfigKey = datastore.NewKey("/mpool/config")
)
View Source
var (
	MaxActorPendingMessages          = 1000
	MaxUntrustedActorPendingMessages = 10
)
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")
	ErrExistingNonce          = errors.New("message with nonce already exists")
)
View Source
var (
	HeadChangeCoalesceMinDelay      = 2 * time.Second
	HeadChangeCoalesceMaxDelay      = 6 * time.Second
	HeadChangeCoalesceMergeInterval = time.Second
)
View Source
var MaxNonceGap = uint64(4)
View Source
var RepublishBatchDelay = 100 * time.Millisecond
View Source
var RepublishInterval time.Duration

Functions

func CapGasFee

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

func ComputeMinRBF

func ComputeMinRBF(curPrem abi.TokenAmount) abi.TokenAmount

func ComputeRBF added in v1.10.2

func ComputeRBF(curPrem abi.TokenAmount, replaceByFeeRatio types.Percent) 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(ctx context.Context, 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(ctx context.Context,
	api Provider,
	sm *statemanger.Stmgr,
	ds repo.Datastore,
	networkParams *config.NetworkParamsConfig,
	mpoolCfg *config.MessagePoolConfig,
	netName string,
	j journal.Journal,
) (*MessagePool, error)

func (*MessagePool) Add

func (*MessagePool) CheckMessages added in v0.9.7

func (mp *MessagePool) CheckMessages(ctx context.Context, protos []*types.MessagePrototype) ([][]types.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) ([][]types.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) ([][]types.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) GasEstimateCallWithGas added in v1.10.0

func (mp *MessagePool) GasEstimateCallWithGas(
	ctx context.Context,
	msgIn *types.Message,
	currTS *types.TipSet,
) (*types.InvocResult, []types.ChainMsg, *types.TipSet, error)

GasEstimateCallWithGas invokes a message "msgIn" on the earliest available tipset with pending messages in the message pool. The function returns the result of the message invocation, the pending messages, the tipset used for the invocation, and an error if occurred. The returned information can be used to make subsequent calls to CallWithGas with the same parameters.

func (*MessagePool) GasEstimateFeeCap

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

func (*MessagePool) GasEstimateGasLimit

func (mp *MessagePool) GasEstimateGasLimit(ctx context.Context, msgIn *types.Message, 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(ctx 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(ctx context.Context, 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(ctx context.Context, 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.Message) *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) ([]*types.SignedMessage, error)

func (*MessagePool) SetConfig

func (mp *MessagePool) SetConfig(ctx context.Context, cfg *MpoolConfig) error

func (*MessagePool) Updates

func (mp *MessagePool) Updates(ctx context.Context) (<-chan types.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.Message

	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 MpoolConfig

type MpoolConfig struct {
	PriorityAddrs          []address.Address
	SizeLimitHigh          int
	SizeLimitLow           int
	ReplaceByFeeRatio      types.Percent
	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 Provider

type Provider interface {
	ChainHead(ctx context.Context) (*types.TipSet, error)
	ChainTipSet(context.Context, types.TipSetKey) (*types.TipSet, error)
	SubscribeHeadChanges(context.Context, func(rev, app []*types.TipSet) error) *types.TipSet
	PutMessage(context.Context, types.ChainMsg) (cid.Cid, error)
	PubSubPublish(context.Context, string, []byte) error
	GetActorBefore(address.Address, *types.TipSet) (*types.Actor, error)
	GetActorAfter(context.Context, address.Address, *types.TipSet) (*types.Actor, error)
	StateAccountKeyAtFinality(context.Context, address.Address, *types.TipSet) (address.Address, error)
	StateNetworkVersion(context.Context, abi.ChainEpoch) network.Version
	StateAccountKey(context.Context, address.Address, *types.TipSet) (address.Address, error)
	MessagesForBlock(context.Context, *types.BlockHeader) ([]*types.Message, []*types.SignedMessage, error)
	MessagesForTipset(context.Context, *types.TipSet) ([]types.ChainMsg, error)
	LoadTipSet(context.Context, 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