From 52dcaca6716cd203cbbe04e4ef1a1bd3dfc7f34c Mon Sep 17 00:00:00 2001 From: Cjpotter10 Date: Fri, 9 Jan 2026 11:04:55 -0600 Subject: [PATCH 1/3] added one time simulation for each unique transaction that the daemon handles to better price each transaction --- reporter/client/broadcast_message.go | 6 ++-- reporter/client/client.go | 25 +++++++++-------- reporter/client/tx_handler.go | 42 +++++++++++++++++++++++++--- 3 files changed, 54 insertions(+), 19 deletions(-) diff --git a/reporter/client/broadcast_message.go b/reporter/client/broadcast_message.go index c54db6c..b3f6240 100644 --- a/reporter/client/broadcast_message.go +++ b/reporter/client/broadcast_message.go @@ -6,7 +6,7 @@ import ( "fmt" "time" - "github.com/tellor-io/layer-daemons/lib/metrics" + "github.com/tellor-io/layer/daemons/lib/metrics" "github.com/tellor-io/layer/utils" oracletypes "github.com/tellor-io/layer/x/oracle/types" @@ -143,7 +143,7 @@ func (c *Client) GenerateAndBroadcastSpotPriceReport(ctx context.Context, qd []b } func (c *Client) HandleBridgeDepositTxInChannel(ctx context.Context, data TxChannelInfo) { - resp, err := c.sendTx(ctx, 0, data.Msg) // 0 = no queryMeta tracking for bridge transactions + resp, err := c.sendTx(ctx, 0, true, data.Msg) // 0 = no queryMeta tracking for bridge transactions if err != nil { c.logger.Error("submitting deposit report transaction", "error", err, @@ -200,7 +200,7 @@ func (c *Client) BroadcastTxMsgToChain() { defer cancel() if !txInfo.isBridge { - _, err := c.sendTx(ctx, txInfo.QueryMetaId, txInfo.Msg) + _, err := c.sendTx(ctx, txInfo.QueryMetaId, false, txInfo.Msg) if err != nil { c.logger.Error(fmt.Sprintf("Error sending tx: %v", err)) } diff --git a/reporter/client/client.go b/reporter/client/client.go index 8edc775..3f96b95 100644 --- a/reporter/client/client.go +++ b/reporter/client/client.go @@ -11,13 +11,13 @@ import ( rpchttp "github.com/cometbft/cometbft/rpc/client/http" "github.com/spf13/viper" globalfeetypes "github.com/strangelove-ventures/globalfee/x/globalfee/types" - customquery "github.com/tellor-io/layer-daemons/custom_query" - "github.com/tellor-io/layer-daemons/flags" - pricefeedtypes "github.com/tellor-io/layer-daemons/pricefeed/client/types" - pricefeedservertypes "github.com/tellor-io/layer-daemons/server/types/pricefeed" - tokenbridgetypes "github.com/tellor-io/layer-daemons/server/types/token_bridge" - tokenbridgetipstypes "github.com/tellor-io/layer-daemons/server/types/token_bridge_tips" - daemontypes "github.com/tellor-io/layer-daemons/types" + customquery "github.com/tellor-io/layer/daemons/custom_query" + "github.com/tellor-io/layer/daemons/flags" + pricefeedtypes "github.com/tellor-io/layer/daemons/pricefeed/client/types" + pricefeedservertypes "github.com/tellor-io/layer/daemons/server/types/pricefeed" + tokenbridgetypes "github.com/tellor-io/layer/daemons/server/types/token_bridge" + tokenbridgetipstypes "github.com/tellor-io/layer/daemons/server/types/token_bridge_tips" + daemontypes "github.com/tellor-io/layer/daemons/types" oracletypes "github.com/tellor-io/layer/x/oracle/types" reportertypes "github.com/tellor-io/layer/x/reporter/types" @@ -31,7 +31,7 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" ) -const defaultGas = uint64(300000) +const defaultGas = uint64(240000) var ( commitedIds = make(map[uint64]bool) @@ -175,10 +175,11 @@ func (c *Client) Start( if !viper.IsSet("price-guard-update-on-blocked") { return fmt.Errorf("price-guard-enabled is true but price-guard-update-on-blocked is not set") } - } else - // If price guard is disabled, error if any other price guard flags are set - if viper.IsSet("price-guard-threshold") || viper.IsSet("price-guard-max-age") || viper.IsSet("price-guard-update-on-blocked") { - return fmt.Errorf("price-guard flags are set but price-guard-enabled is false") + } else { + // If price guard is disabled, error if any other price guard flags are set + if viper.IsSet("price-guard-threshold") || viper.IsSet("price-guard-max-age") || viper.IsSet("price-guard-update-on-blocked") { + return fmt.Errorf("price-guard flags are set but price-guard-enabled is false") + } } c.PriceGuard = NewPriceGuard(priceGuardThreshold, priceGuardMaxAge, priceGuardEnabled, updateOnBlocked, c.logger) diff --git a/reporter/client/tx_handler.go b/reporter/client/tx_handler.go index 80d7c12..eb8271b 100644 --- a/reporter/client/tx_handler.go +++ b/reporter/client/tx_handler.go @@ -4,12 +4,13 @@ import ( "context" "encoding/hex" "fmt" + "reflect" "strings" "time" cmttypes "github.com/cometbft/cometbft/rpc/core/types" globalfeetypes "github.com/strangelove-ventures/globalfee/x/globalfee/types" - "github.com/tellor-io/layer-daemons/lib/metrics" + "github.com/tellor-io/layer/daemons/lib/metrics" "cosmossdk.io/math" @@ -21,11 +22,14 @@ import ( "github.com/cosmos/cosmos-sdk/types/tx/signing" ) +var gasEstimateMap = make(map[reflect.Type]uint64) +var BRIDGE_REPORT_TYPE = reflect.TypeOf("bridge_deposit_report") + func newFactory(clientCtx client.Context) tx.Factory { return tx.Factory{}. WithChainID(clientCtx.ChainID). WithKeybase(clientCtx.Keyring). - WithGasAdjustment(1.1). + WithGasAdjustment(1.25). WithGas(defaultGas). WithSignMode(signing.SignMode_SIGN_MODE_DIRECT). WithAccountRetriever(clientCtx.AccountRetriever). @@ -120,7 +124,34 @@ func (c *Client) WaitForBlockHeight(ctx context.Context, h int64) error { } } -func (c *Client) sendTx(ctx context.Context, queryMetaId uint64, msg ...sdk.Msg) (*cmttypes.ResultTx, error) { +func (c *Client) EstimateGas(ctx context.Context, isBridge bool, txf tx.Factory, msg ...sdk.Msg) (uint64, error) { + if isBridge { + if gasEstimate, ok := gasEstimateMap[BRIDGE_REPORT_TYPE]; ok { + return gasEstimate, nil + } + } else { + msgType := reflect.TypeOf(msg[0]) + if gasEstimate, ok := gasEstimateMap[msgType]; ok { + return gasEstimate, nil + } + } + if isBridge { + txf = txf.WithGasAdjustment(1.75) + } + _, gasEstimate, err := tx.CalculateGas(c.cosmosCtx, txf, msg...) + if err != nil { + return 0, fmt.Errorf("error calculating gas: %w", err) + } + if isBridge { + gasEstimateMap[BRIDGE_REPORT_TYPE] = gasEstimate + } else { + msgType := reflect.TypeOf(msg[0]) + gasEstimateMap[msgType] = gasEstimate + } + return gasEstimate, nil +} + +func (c *Client) sendTx(ctx context.Context, queryMetaId uint64, isBridge bool, msg ...sdk.Msg) (*cmttypes.ResultTx, error) { telemetry.IncrCounter(1, "daemon_sending_txs", "called") // Track success status for defer cleanup @@ -153,7 +184,10 @@ func (c *Client) sendTx(ctx context.Context, queryMetaId uint64, msg ...sdk.Msg) if err != nil { return nil, fmt.Errorf("error preparing transaction factory: %w", err) } - + gasEstimate, err := c.EstimateGas(ctx, isBridge, txf, msg...) + if err == nil { + txf = txf.WithGas(gasEstimate) + } txn, err := txf.BuildUnsignedTx(msg...) if err != nil { return nil, fmt.Errorf("error building unsigned transaction: %w", err) From 2aaf8c008731e857b7085765078cecdc50d7edd5 Mon Sep 17 00:00:00 2001 From: Cjpotter10 Date: Tue, 20 Jan 2026 12:13:33 -0600 Subject: [PATCH 2/3] fixed import issues --- reporter/client/broadcast_message.go | 4 ++-- reporter/client/client.go | 14 +++++++------- reporter/client/tx_handler.go | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/reporter/client/broadcast_message.go b/reporter/client/broadcast_message.go index b3f6240..79d0d0b 100644 --- a/reporter/client/broadcast_message.go +++ b/reporter/client/broadcast_message.go @@ -6,8 +6,8 @@ import ( "fmt" "time" - "github.com/tellor-io/layer/daemons/lib/metrics" - "github.com/tellor-io/layer/utils" + "github.com/tellor-io/layer-daemons/lib/metrics" + "github.com/tellor-io/layer-daemons/utils" oracletypes "github.com/tellor-io/layer/x/oracle/types" "github.com/cosmos/cosmos-sdk/telemetry" diff --git a/reporter/client/client.go b/reporter/client/client.go index 3f96b95..c7e16d3 100644 --- a/reporter/client/client.go +++ b/reporter/client/client.go @@ -11,13 +11,13 @@ import ( rpchttp "github.com/cometbft/cometbft/rpc/client/http" "github.com/spf13/viper" globalfeetypes "github.com/strangelove-ventures/globalfee/x/globalfee/types" - customquery "github.com/tellor-io/layer/daemons/custom_query" - "github.com/tellor-io/layer/daemons/flags" - pricefeedtypes "github.com/tellor-io/layer/daemons/pricefeed/client/types" - pricefeedservertypes "github.com/tellor-io/layer/daemons/server/types/pricefeed" - tokenbridgetypes "github.com/tellor-io/layer/daemons/server/types/token_bridge" - tokenbridgetipstypes "github.com/tellor-io/layer/daemons/server/types/token_bridge_tips" - daemontypes "github.com/tellor-io/layer/daemons/types" + customquery "github.com/tellor-io/layer-daemons/custom_query" + "github.com/tellor-io/layer-daemons/flags" + pricefeedtypes "github.com/tellor-io/layer-daemons/pricefeed/client/types" + pricefeedservertypes "github.com/tellor-io/layer-daemons/server/types/pricefeed" + tokenbridgetypes "github.com/tellor-io/layer-daemons/server/types/token_bridge" + tokenbridgetipstypes "github.com/tellor-io/layer-daemons/server/types/token_bridge_tips" + daemontypes "github.com/tellor-io/layer-daemons/types" oracletypes "github.com/tellor-io/layer/x/oracle/types" reportertypes "github.com/tellor-io/layer/x/reporter/types" diff --git a/reporter/client/tx_handler.go b/reporter/client/tx_handler.go index eb8271b..8bdece8 100644 --- a/reporter/client/tx_handler.go +++ b/reporter/client/tx_handler.go @@ -10,7 +10,7 @@ import ( cmttypes "github.com/cometbft/cometbft/rpc/core/types" globalfeetypes "github.com/strangelove-ventures/globalfee/x/globalfee/types" - "github.com/tellor-io/layer/daemons/lib/metrics" + "github.com/tellor-io/layer-daemons/lib/metrics" "cosmossdk.io/math" From 2e328a83cb0654fc968727941741048c99b3c3cc Mon Sep 17 00:00:00 2001 From: Cjpotter10 Date: Tue, 20 Jan 2026 12:38:33 -0600 Subject: [PATCH 3/3] fixed missing function issue and some lint changes --- reporter/client/broadcast_message.go | 2 +- reporter/client/client.go | 7 ++----- reporter/client/tx_handler.go | 6 ++++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/reporter/client/broadcast_message.go b/reporter/client/broadcast_message.go index 79d0d0b..5aa9824 100644 --- a/reporter/client/broadcast_message.go +++ b/reporter/client/broadcast_message.go @@ -7,7 +7,7 @@ import ( "time" "github.com/tellor-io/layer-daemons/lib/metrics" - "github.com/tellor-io/layer-daemons/utils" + "github.com/tellor-io/layer/utils" oracletypes "github.com/tellor-io/layer/x/oracle/types" "github.com/cosmos/cosmos-sdk/telemetry" diff --git a/reporter/client/client.go b/reporter/client/client.go index c7e16d3..b537ffd 100644 --- a/reporter/client/client.go +++ b/reporter/client/client.go @@ -175,11 +175,8 @@ func (c *Client) Start( if !viper.IsSet("price-guard-update-on-blocked") { return fmt.Errorf("price-guard-enabled is true but price-guard-update-on-blocked is not set") } - } else { - // If price guard is disabled, error if any other price guard flags are set - if viper.IsSet("price-guard-threshold") || viper.IsSet("price-guard-max-age") || viper.IsSet("price-guard-update-on-blocked") { - return fmt.Errorf("price-guard flags are set but price-guard-enabled is false") - } + } else if !priceGuardEnabled && (viper.IsSet("price-guard-threshold") || viper.IsSet("price-guard-max-age") || viper.IsSet("price-guard-update-on-blocked")) { + return fmt.Errorf("price-guard flags are set but price-guard-enabled is false") } c.PriceGuard = NewPriceGuard(priceGuardThreshold, priceGuardMaxAge, priceGuardEnabled, updateOnBlocked, c.logger) diff --git a/reporter/client/tx_handler.go b/reporter/client/tx_handler.go index 8bdece8..af223b3 100644 --- a/reporter/client/tx_handler.go +++ b/reporter/client/tx_handler.go @@ -22,8 +22,10 @@ import ( "github.com/cosmos/cosmos-sdk/types/tx/signing" ) -var gasEstimateMap = make(map[reflect.Type]uint64) -var BRIDGE_REPORT_TYPE = reflect.TypeOf("bridge_deposit_report") +var ( + gasEstimateMap = make(map[reflect.Type]uint64) + BRIDGE_REPORT_TYPE = reflect.TypeOf("bridge_deposit_report") +) func newFactory(clientCtx client.Context) tx.Factory { return tx.Factory{}.