Documentation ¶
Index ¶
- Constants
- type Accounts
- type Blocks
- type BroadcasterConfig
- type BroadcasterListenerConfig
- type ChainReceipt
- type Client
- type ConfirmerConfig
- type ConfirmerDatabaseConfig
- type Events
- type Fee
- type FeeEstimator
- type ForwarderManager
- 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 { MaxInFlightTransactions() uint32 // from gas.Config IsL2() bool MaxFeePrice() FEE_UNIT FeePriceDefault() FEE_UNIT }
FEE_UNIT - fee unit
type BroadcasterListenerConfig ¶ added in v2.3.0
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 }
FEE_UNIT - fee unit
type ConfirmerDatabaseConfig ¶ added in v2.3.0
type FeeEstimator ¶
type FeeEstimator[H types.Head[BLOCK_HASH], F Fee, MAXPRICE any, BLOCK_HASH types.Hashable] interface { services.ServiceCtx types.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 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 types.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