Documentation ¶
Index ¶
- Constants
- type Accounts
- type Blocks
- type BroadcasterConfig
- type ChainReceipt
- type Client
- type ConfirmerConfig
- type Events
- type Fee
- type FeeEstimator
- type ForwarderManager
- type HeadTrackable
- type ID
- type KeyStore
- type NewTx
- type Opt
- type PriorAttempt
- type QueryerFunc
- type ReaperConfig
- type ReceiptPlus
- type ResenderConfig
- type Sequence
- type Transactions
- type TransmitCheckerSpec
- type TransmitCheckerType
- type Tx
- func (e *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetChecker() (TransmitCheckerSpec[ADDR], error)
- func (e *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetError() error
- func (e *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetID() string
- func (e *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetLogger(lgr logger.Logger) logger.Logger
- func (e *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetMeta() (*TxMeta[ADDR, TX_HASH], error)
- type TxAttempt
- func (a *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) Fee() FEE
- func (a *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetBroadcastBeforeBlockNum() *int64
- func (a *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetChainSpecificFeeLimit() uint32
- func (a *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetHash() TX_HASH
- func (a *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetTxType() int
- func (a *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) String() string
- type TxAttemptBuilder
- type TxAttemptState
- type TxHistoryReaper
- type TxMeta
- type TxState
- type TxStore
- type TxStrategy
- type TxmClient
- type TxmConfig
- type Unit
- type UnstartedTxQueuePruner
Constants ¶
const ( TxAttemptInProgress = TxAttemptState("in_progress") // TODO: Make name chain-agnostic (https://smartcontract-it.atlassian.net/browse/BCI-981) TxAttemptInsufficientEth = TxAttemptState("insufficient_eth") TxAttemptBroadcast = TxAttemptState("broadcast") )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Accounts ¶ added in v2.1.0
type Accounts[ADDR types.Hashable, SEQ Sequence] interface { BalanceAt(ctx context.Context, accountAddress ADDR, blockNumber *big.Int) (*big.Int, error) TokenBalance(ctx context.Context, accountAddress ADDR, tokenAddress ADDR) (*big.Int, error) SequenceAt(ctx context.Context, accountAddress ADDR, blockNumber *big.Int) (SEQ, error) }
type BroadcasterConfig ¶ added in v2.1.0
type BroadcasterConfig[FEE_UNIT Unit] interface { FallbackPollInterval() time.Duration MaxInFlightTransactions() uint32 // from gas.Config IsL2() bool MaxFeePrice() FEE_UNIT FeePriceDefault() FEE_UNIT }
FEE_UNIT - fee unit
type ChainReceipt ¶ added in v2.2.0
type Client ¶ added in v2.1.0
type Client[ CHAINID ID, SEQ Sequence, ADDR types.Hashable, BLOCK any, BLOCKHASH types.Hashable, TX any, TXHASH types.Hashable, TXRECEIPT any, EVENT any, EVENTOPS any, ] interface { // ChainID stored for quick access ConfiguredChainID() CHAINID // ChainID RPC call ChainID() (CHAINID, error) Accounts[ADDR, SEQ] Transactions[TX, TXHASH, TXRECEIPT] Events[EVENT, EVENTOPS] Blocks[BLOCK, BLOCKHASH] CallContext(ctx context.Context, result interface{}, method string, args ...interface{}) error }
A generic client interface for communication with the RPC node Every native chain must implement independently
type ConfirmerConfig ¶ added in v2.1.0
type ConfirmerConfig[FEE_UNIT Unit] interface { RPCDefaultBatchSize() uint32 UseForwarders() bool FeeBumpTxDepth() uint32 MaxInFlightTransactions() uint32 FeeLimitDefault() uint32 // from gas.Config FeeBumpThreshold() uint64 FinalityDepth() uint32 MaxFeePrice() FEE_UNIT FeeBumpPercent() uint16 // from pg.QConfig DatabaseDefaultQueryTimeout() time.Duration }
FEE_UNIT - fee unit
type FeeEstimator ¶
type FeeEstimator[H types.Head[BLOCK_HASH], F Fee, MAXPRICE any, BLOCK_HASH types.Hashable] interface { services.ServiceCtx HeadTrackable[H, BLOCK_HASH] GetFee(ctx context.Context, calldata []byte, feeLimit uint32, maxFeePrice MAXPRICE, opts ...Opt) (fee F, chainSpecificFeeLimit uint32, err error) BumpFee(ctx context.Context, originalFee F, feeLimit uint32, maxFeePrice MAXPRICE, attempts []PriorAttempt[F, BLOCK_HASH]) (bumpedFee F, chainSpecificFeeLimit uint32, err error) }
FeeEstimator provides a generic interface for fee estimation
type ForwarderManager ¶
type HeadTrackable ¶
type HeadTrackable[H commontypes.Head[BLOCK_HASH], BLOCK_HASH commontypes.Hashable] interface { OnNewLongestChain(ctx context.Context, head H) }
HeadTrackable is implemented by the core txm, to be able to receive head events from any chain. Chain implementations should notify head events to the core txm via this interface.
type ID ¶ added in v2.1.0
ID represents the base type, for any chain's ID. It should be convertible to a string, that can uniquely identify this chain
type KeyStore ¶ added in v2.1.0
type KeyStore[ ADDR types.Hashable, CHAIN_ID ID, SEQ Sequence, ] interface { CheckEnabled(address ADDR, chainID CHAIN_ID) error NextSequence(address ADDR, chainID CHAIN_ID, qopts ...pg.QOpt) (SEQ, error) EnabledAddressesForChain(chainId CHAIN_ID) ([]ADDR, error) IncrementNextSequence(address ADDR, chainID CHAIN_ID, currentSequence SEQ, qopts ...pg.QOpt) error SubscribeToKeyChanges() (ch chan struct{}, unsub func()) }
KeyStore encompasses the subset of keystore used by txmgr
type NewTx ¶ added in v2.1.0
type NewTx[ADDR types.Hashable, TX_HASH types.Hashable] struct { FromAddress ADDR ToAddress ADDR EncodedPayload []byte FeeLimit uint32 Meta *TxMeta[ADDR, TX_HASH] ForwarderAddress ADDR // Pipeline variables - if you aren't calling this from ethtx task within // the pipeline, you don't need these variables MinConfirmations clnull.Uint32 PipelineTaskRunID *uuid.UUID Strategy TxStrategy // Checker defines the check that should be run before a transaction is submitted on chain. Checker TransmitCheckerSpec[ADDR] }
type PriorAttempt ¶
type PriorAttempt[F Fee, TX_HASH types.Hashable] interface { Fee() F GetChainSpecificFeeLimit() uint32 GetBroadcastBeforeBlockNum() *int64 GetHash() TX_HASH GetTxType() int }
PriorAttempt provides a generic interface for reading tx data to be used in the fee esimators
type QueryerFunc ¶
type ReaperConfig ¶ added in v2.1.0
type ReaperConfig interface { TxReaperInterval() time.Duration TxReaperThreshold() time.Duration // gas config FinalityDepth() uint32 }
ReaperConfig is the config subset used by the reaper
type ReceiptPlus ¶
type ReceiptPlus[R any] struct { ID uuid.UUID `db:"pipeline_run_id"` Receipt R `db:"receipt"` FailOnRevert bool `db:"fail_on_revert"` }
R is the raw unparsed transaction receipt
type ResenderConfig ¶ added in v2.1.0
type Sequence ¶ added in v2.1.0
type Sequence interface { fmt.Stringer Int64() int64 // needed for numeric sequence confirmation - to be removed with confirmation logic generalization: https://smartcontract-it.atlassian.net/browse/BCI-860 }
Sequence represents the base type, for any chain's sequence object. It should be convertible to a string
type Transactions ¶ added in v2.1.0
type Transactions[TX any, TXHASH types.Hashable, TXRECEIPT any] interface { SendTransaction(ctx context.Context, tx *TX) error SimulateTransaction(ctx context.Context, tx *TX) error TransactionByHash(ctx context.Context, txHash TXHASH) (*TX, error) TransactionReceipt(ctx context.Context, txHash TXHASH) (*TXRECEIPT, error) }
type TransmitCheckerSpec ¶ added in v2.1.0
type TransmitCheckerSpec[ADDR types.Hashable] struct { // CheckerType is the type of check that should be performed. Empty indicates no check. CheckerType TransmitCheckerType `json:",omitempty"` // VRFCoordinatorAddress is the address of the VRF coordinator that should be used to perform // VRF transmit checks. This should be set iff CheckerType is TransmitCheckerTypeVRFV2. VRFCoordinatorAddress *ADDR `json:",omitempty"` // VRFRequestBlockNumber is the block number in which the provided VRF request has been made. // This should be set iff CheckerType is TransmitCheckerTypeVRFV2. VRFRequestBlockNumber *big.Int `json:",omitempty"` }
TransmitCheckerSpec defines the check that should be performed before a transaction is submitted on chain.
type TransmitCheckerType ¶ added in v2.1.0
type TransmitCheckerType string
TransmitCheckerType describes the type of check that should be performed before a transaction is executed on-chain.
type Tx ¶ added in v2.2.0
type Tx[ CHAIN_ID ID, ADDR types.Hashable, TX_HASH, BLOCK_HASH types.Hashable, R ChainReceipt[TX_HASH, BLOCK_HASH], SEQ Sequence, FEE Fee, ADD any, ] struct { ID int64 Sequence *SEQ FromAddress ADDR ToAddress ADDR EncodedPayload []byte Value big.Int // FeeLimit on the Tx is always the conceptual gas limit, which is not // necessarily the same as the on-chain encoded value (i.e. Optimism) FeeLimit uint32 Error null.String // BroadcastAt is updated every time an attempt for this eth_tx is re-sent // In almost all cases it will be within a second or so of the actual send time. BroadcastAt *time.Time // InitialBroadcastAt is recorded once, the first ever time this eth_tx is sent InitialBroadcastAt *time.Time CreatedAt time.Time State TxState TxAttempts []TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD] `json:"-"` // Marshalled TxMeta // Used for additional context around transactions which you want to log // at send time. Meta *datatypes.JSON Subject uuid.NullUUID ChainID CHAIN_ID PipelineTaskRunID uuid.NullUUID MinConfirmations clnull.Uint32 // AdditionalParameters is generic type that supports passing miscellaneous parameters // as a part of the TX struct that may be used inside chain-specific components // example: EVM + NullableEIP2930AccessList which only affects on DynamicFee transactions AdditionalParameters ADD // TransmitChecker defines the check that should be performed before a transaction is submitted on // chain. TransmitChecker *datatypes.JSON }
func (*Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetChecker ¶ added in v2.2.0
func (e *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetChecker() (TransmitCheckerSpec[ADDR], error)
GetChecker returns an Tx's transmit checker spec in struct form, unmarshalling it from JSON first.
func (*Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetID ¶ added in v2.2.0
GetID allows Tx to be used as jsonapi.MarshalIdentifier
type TxAttempt ¶ added in v2.2.0
type TxAttempt[ CHAIN_ID ID, ADDR types.Hashable, TX_HASH, BLOCK_HASH types.Hashable, R ChainReceipt[TX_HASH, BLOCK_HASH], SEQ Sequence, FEE Fee, ADD any, ] struct { ID int64 TxID int64 Tx Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD] TxFee FEE // ChainSpecificFeeLimit on the TxAttempt is always the same as the on-chain encoded value for fee limit ChainSpecificFeeLimit uint32 SignedRawTx []byte Hash TX_HASH CreatedAt time.Time BroadcastBeforeBlockNum *int64 State TxAttemptState Receipts []R `json:"-"` TxType int }
func (*TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) Fee ¶ added in v2.2.0
func (a *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) Fee() FEE
func (*TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetBroadcastBeforeBlockNum ¶ added in v2.2.0
func (*TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetChainSpecificFeeLimit ¶ added in v2.2.0
func (*TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetHash ¶ added in v2.2.0
func (a *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) GetHash() TX_HASH
type TxAttemptBuilder ¶
type TxAttemptBuilder[ CHAIN_ID ID, HEAD types.Head[BLOCK_HASH], ADDR types.Hashable, TX_HASH, BLOCK_HASH types.Hashable, R ChainReceipt[TX_HASH, BLOCK_HASH], SEQ Sequence, FEE Fee, ADD any, ] interface { // interfaces for running the underlying estimator services.ServiceCtx HeadTrackable[HEAD, BLOCK_HASH] // NewTxAttempt builds a transaction using the configured transaction type and fee estimator (new estimation) NewTxAttempt(ctx context.Context, tx Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], lggr logger.Logger, opts ...Opt) (attempt TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], fee FEE, feeLimit uint32, retryable bool, err error) // NewTxAttemptWithType builds a transaction using the configured fee estimator (new estimation) + passed in tx type NewTxAttemptWithType(ctx context.Context, tx Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], lggr logger.Logger, txType int, opts ...Opt) (attempt TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], fee FEE, feeLimit uint32, retryable bool, err error) // NewBumpTxAttempt builds a transaction using the configured fee estimator (bumping) + tx type from previous attempt // this should only be used after an initial attempt has been broadcast and the underlying gas estimator only needs to bump the fee NewBumpTxAttempt(ctx context.Context, tx Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], previousAttempt TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], priorAttempts []PriorAttempt[FEE, TX_HASH], lggr logger.Logger) (attempt TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], bumpedFee FEE, bumpedFeeLimit uint32, retryable bool, err error) // NewCustomTxAttempt builds a transaction using the passed in fee + tx type NewCustomTxAttempt(tx Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], fee FEE, gasLimit uint32, txType int, lggr logger.Logger) (attempt TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], retryable bool, err error) // NewEmptyTxAttempt is used in ForceRebroadcast to create a signed tx with zero value sent to the zero address NewEmptyTxAttempt(seq SEQ, feeLimit uint32, fee FEE, fromAddress ADDR) (attempt TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], err error) }
TxAttemptBuilder takes the base unsigned transaction + optional parameters (tx type, gas parameters) and returns a signed TxAttempt it is able to estimate fees and sign transactions
type TxAttemptState ¶
type TxAttemptState string
type TxHistoryReaper ¶ added in v2.2.0
type TxMeta ¶ added in v2.1.0
type TxMeta[ADDR types.Hashable, TX_HASH types.Hashable] struct { JobID *int32 `json:"JobID,omitempty"` // Pipeline fields FailOnRevert null.Bool `json:"FailOnRevert,omitempty"` // VRF-only fields RequestID *TX_HASH `json:"RequestID,omitempty"` RequestTxHash *TX_HASH `json:"RequestTxHash,omitempty"` // Batch variants of the above RequestIDs []TX_HASH `json:"RequestIDs,omitempty"` RequestTxHashes []TX_HASH `json:"RequestTxHashes,omitempty"` // Used for the VRFv2 - max link this tx will bill // should it get bumped MaxLink *string `json:"MaxLink,omitempty"` // Used for the VRFv2 - the subscription ID of the // requester of the VRF. SubID *uint64 `json:"SubId,omitempty"` // Used for keepers UpkeepID *string `json:"UpkeepID,omitempty"` // Used only for forwarded txs, tracks the original destination address. // When this is set, it indicates tx is forwarded through To address. FwdrDestAddress *ADDR `json:"ForwarderDestAddress,omitempty"` // MessageIDs is used by CCIP for tx to executed messages correlation in logs MessageIDs []string `json:"MessageIDs,omitempty"` // SeqNumbers is used by CCIP for tx to committed sequence numbers correlation in logs SeqNumbers []uint64 `json:"SeqNumbers,omitempty"` }
TxMeta contains fields of the transaction metadata Not all fields are guaranteed to be present
type TxStore ¶ added in v2.1.0
type TxStore[ ADDR types.Hashable, CHAIN_ID ID, TX_HASH types.Hashable, BLOCK_HASH types.Hashable, R ChainReceipt[TX_HASH, BLOCK_HASH], SEQ Sequence, FEE Fee, ADD any, ] interface { UnstartedTxQueuePruner TxHistoryReaper[CHAIN_ID] CheckEthTxQueueCapacity(fromAddress ADDR, maxQueuedTransactions uint64, chainID CHAIN_ID, qopts ...pg.QOpt) (err error) CountUnconfirmedTransactions(fromAddress ADDR, chainID CHAIN_ID, qopts ...pg.QOpt) (count uint32, err error) CountUnstartedTransactions(fromAddress ADDR, chainID CHAIN_ID, qopts ...pg.QOpt) (count uint32, err error) CreateEthTransaction(newTx NewTx[ADDR, TX_HASH], chainID CHAIN_ID, qopts ...pg.QOpt) (tx Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], err error) DeleteInProgressAttempt(ctx context.Context, attempt TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) error EthTransactions(offset, limit int) ([]Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], int, error) EthTransactionsWithAttempts(offset, limit int) ([]Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], int, error) EthTxAttempts(offset, limit int) ([]TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], int, error) FindEthReceiptsPendingConfirmation(ctx context.Context, blockNum int64, chainID CHAIN_ID) (receiptsPlus []ReceiptPlus[R], err error) FindEthTxAttempt(hash TX_HASH) (*TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], error) FindEthTxAttemptConfirmedByEthTxIDs(ids []int64) ([]TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], error) FindEthTxsRequiringGasBump(ctx context.Context, address ADDR, blockNum, gasBumpThreshold, depth int64, chainID CHAIN_ID) (etxs []*Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], err error) FindEthTxsRequiringResubmissionDueToInsufficientEth(address ADDR, chainID CHAIN_ID, qopts ...pg.QOpt) (etxs []*Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], err error) FindEtxAttemptsConfirmedMissingReceipt(chainID CHAIN_ID) (attempts []TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], err error) FindEthTxAttemptsByEthTxIDs(ids []int64) ([]TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], error) FindEthTxAttemptsRequiringReceiptFetch(chainID CHAIN_ID) (attempts []TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], err error) FindEthTxAttemptsRequiringResend(olderThan time.Time, maxInFlightTransactions uint32, chainID CHAIN_ID, address ADDR) (attempts []TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], err error) FindEthTxByHash(hash TX_HASH) (*Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], error) FindEthTxWithAttempts(etxID int64) (etx Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], err error) FindEthTxWithNonce(fromAddress ADDR, seq SEQ) (etx *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], err error) FindNextUnstartedTransactionFromAddress(etx *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], fromAddress ADDR, chainID CHAIN_ID, qopts ...pg.QOpt) error FindTransactionsConfirmedInBlockRange(highBlockNumber, lowBlockNumber int64, chainID CHAIN_ID) (etxs []*Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], err error) GetEthTxInProgress(fromAddress ADDR, qopts ...pg.QOpt) (etx *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], err error) GetInProgressEthTxAttempts(ctx context.Context, address ADDR, chainID CHAIN_ID) (attempts []TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], err error) HasInProgressTransaction(account ADDR, chainID CHAIN_ID, qopts ...pg.QOpt) (exists bool, err error) InsertEthTx(etx *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) error InsertEthTxAttempt(attempt *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) error LoadEthTxAttempts(etx *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], qopts ...pg.QOpt) error LoadEthTxesAttempts(etxs []*Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], qopts ...pg.QOpt) error MarkAllConfirmedMissingReceipt(chainID CHAIN_ID) (err error) MarkOldTxesMissingReceiptAsErrored(blockNum int64, finalityDepth uint32, chainID CHAIN_ID, qopts ...pg.QOpt) error PreloadEthTxes(attempts []TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], qopts ...pg.QOpt) error SaveConfirmedMissingReceiptAttempt(ctx context.Context, timeout time.Duration, attempt *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], broadcastAt time.Time) error SaveFetchedReceipts(receipts []R, chainID CHAIN_ID) (err error) SaveInProgressAttempt(attempt *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) error SaveInsufficientEthAttempt(timeout time.Duration, attempt *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], broadcastAt time.Time) error SaveReplacementInProgressAttempt(oldAttempt TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], replacementAttempt *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], qopts ...pg.QOpt) error SaveSentAttempt(timeout time.Duration, attempt *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], broadcastAt time.Time) error SetBroadcastBeforeBlockNum(blockNum int64, chainID CHAIN_ID) error UpdateBroadcastAts(now time.Time, etxIDs []int64) error UpdateEthKeyNextNonce(newNextNonce, currentNextNonce SEQ, address ADDR, chainID CHAIN_ID, qopts ...pg.QOpt) error UpdateEthTxAttemptInProgressToBroadcast(etx *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], attempt TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], NewAttemptState TxAttemptState, incrNextNonceCallback QueryerFunc, qopts ...pg.QOpt) error UpdateEthTxsUnconfirmed(ids []int64) error UpdateEthTxUnstartedToInProgress(etx *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], attempt *TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], qopts ...pg.QOpt) error UpdateEthTxFatalError(etx *Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], qopts ...pg.QOpt) error UpdateEthTxForRebroadcast(etx Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], etxAttempt TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD]) error Close() Abandon(id CHAIN_ID, addr ADDR) error }
type TxStrategy ¶
type TxStrategy interface { // Subject will be saved txes.subject if not null Subject() uuid.NullUUID // PruneQueue is called after tx insertion // It accepts the service responsible for deleting // unstarted txs and deletion options PruneQueue(pruneService UnstartedTxQueuePruner, qopt pg.QOpt) (n int64, err error) }
TxStrategy controls how txes are queued and sent
type TxmClient ¶ added in v2.2.0
type TxmClient[ CHAIN_ID ID, ADDR types.Hashable, TX_HASH types.Hashable, BLOCK_HASH types.Hashable, R ChainReceipt[TX_HASH, BLOCK_HASH], SEQ Sequence, FEE Fee, ADD any, ] interface { ConfiguredChainID() CHAIN_ID BatchSendTransactions( ctx context.Context, store TxStore[ADDR, CHAIN_ID, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], attempts []TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], bathSize int, lggr logger.Logger, ) ([]clienttypes.SendTxReturnCode, []error, error) SendTransactionReturnCode( ctx context.Context, tx Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], attempt TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], lggr logger.Logger, ) (clienttypes.SendTxReturnCode, error) PendingNonceAt(ctx context.Context, addr ADDR) (SEQ, error) SequenceAt(ctx context.Context, addr ADDR, blockNum *big.Int) (SEQ, error) BatchGetReceipts( ctx context.Context, attempts []TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], ) (txReceipt []R, txErr []error, err error) SendEmptyTransaction( ctx context.Context, newTxAttempt func(seq SEQ, feeLimit uint32, fee FEE, fromAddress ADDR) (attempt TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], err error), seq SEQ, gasLimit uint32, fee FEE, fromAddress ADDR, ) (txhash string, err error) CallContract( ctx context.Context, attempt TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE, ADD], blockNumber *big.Int, ) (rpcErr fmt.Stringer, extractErr error) }
type TxmConfig ¶ added in v2.1.0
type TxmConfig[FEE_UNIT Unit] interface { BroadcasterConfig[FEE_UNIT] ConfirmerConfig[FEE_UNIT] ResenderConfig ReaperConfig SequenceAutoSync() bool UseForwarders() bool MaxQueuedTransactions() uint64 }
FEE_UNIT - fee unit