Skip to content

Commit

Permalink
add ComputeUnitLimitDefault to config + config cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
aalu1418 committed Sep 25, 2024
1 parent 48a3bb8 commit 3745640
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 57 deletions.
2 changes: 1 addition & 1 deletion pkg/monitoring/types/txdetails.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ func ParseTx(tx *solanaGo.Transaction, programAddr solanaGo.PublicKey) (TxDetail
}

// find compute budget program instruction
if tx.Message.AccountKeys[instruction.ProgramIDIndex] == solanaGo.MustPublicKeyFromBase58(fees.ComputeBudgetProgram) {
if tx.Message.AccountKeys[instruction.ProgramIDIndex] == fees.ComputeBudgetProgram {
// parsing compute unit price
var err error
txDetails.ComputeUnitPrice, err = fees.ParseComputeUnitPrice(instruction.Data)
Expand Down
100 changes: 44 additions & 56 deletions pkg/solana/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,26 @@ import (
)

// Global solana defaults.
var defaultConfigSet = configSet{
BalancePollPeriod: 5 * time.Second, // poll period for balance monitoring
ConfirmPollPeriod: 500 * time.Millisecond, // polling for tx confirmation
OCR2CachePollPeriod: time.Second, // cache polling rate
OCR2CacheTTL: time.Minute, // stale cache deadline
TxTimeout: time.Minute, // timeout for send tx method in client
TxRetryTimeout: 10 * time.Second, // duration for tx rebroadcasting to RPC node
TxConfirmTimeout: 30 * time.Second, // duration before discarding tx as unconfirmed
SkipPreflight: true, // to enable or disable preflight checks
Commitment: rpc.CommitmentConfirmed,
MaxRetries: new(uint), // max number of retries (default = *new(uint) = 0). when config.MaxRetries < 0, interpreted as MaxRetries = nil and rpc node will do a reasonable number of retries
var defaultConfigSet = Chain{
BalancePollPeriod: config.MustNewDuration(5 * time.Second), // poll period for balance monitoring
ConfirmPollPeriod: config.MustNewDuration(500 * time.Millisecond), // polling for tx confirmation
OCR2CachePollPeriod: config.MustNewDuration(time.Second), // cache polling rate
OCR2CacheTTL: config.MustNewDuration(time.Minute), // stale cache deadline
TxTimeout: config.MustNewDuration(time.Minute), // timeout for send tx method in client
TxRetryTimeout: config.MustNewDuration(10 * time.Second), // duration for tx rebroadcasting to RPC node
TxConfirmTimeout: config.MustNewDuration(30 * time.Second), // duration before discarding tx as unconfirmed
SkipPreflight: ptr(true), // to enable or disable preflight checks
Commitment: ptr(string(rpc.CommitmentConfirmed)),
MaxRetries: ptr(int64(0)), // max number of retries (default = 0). when config.MaxRetries < 0), interpreted as MaxRetries = nil and rpc node will do a reasonable number of retries

// fee estimator
FeeEstimatorMode: "fixed",
ComputeUnitPriceMax: 1_000,
ComputeUnitPriceMin: 0,
ComputeUnitPriceDefault: 0,
FeeBumpPeriod: 3 * time.Second, // set to 0 to disable fee bumping
BlockHistoryPollPeriod: 5 * time.Second,
FeeEstimatorMode: ptr("fixed"),
ComputeUnitPriceMax: ptr(uint64(1_000)),
ComputeUnitPriceMin: ptr(uint64(0)),
ComputeUnitPriceDefault: ptr(uint64(0)),
FeeBumpPeriod: config.MustNewDuration(3 * time.Second), // set to 0 to disable fee bumping
BlockHistoryPollPeriod: config.MustNewDuration(5 * time.Second),
ComputeUnitLimitDefault: ptr(uint32(200_000)),
}

//go:generate mockery --name Config --output ./mocks/ --case=underscore --filename config.go
Expand All @@ -51,27 +52,7 @@ type Config interface {
ComputeUnitPriceDefault() uint64
FeeBumpPeriod() time.Duration
BlockHistoryPollPeriod() time.Duration
}

// opt: remove
type configSet struct {
BalancePollPeriod time.Duration
ConfirmPollPeriod time.Duration
OCR2CachePollPeriod time.Duration
OCR2CacheTTL time.Duration
TxTimeout time.Duration
TxRetryTimeout time.Duration
TxConfirmTimeout time.Duration
SkipPreflight bool
Commitment rpc.CommitmentType
MaxRetries *uint

FeeEstimatorMode string
ComputeUnitPriceMax uint64
ComputeUnitPriceMin uint64
ComputeUnitPriceDefault uint64
FeeBumpPeriod time.Duration
BlockHistoryPollPeriod time.Duration
ComputeUnitLimitDefault() uint32
}

type Chain struct {
Expand All @@ -91,57 +72,60 @@ type Chain struct {
ComputeUnitPriceDefault *uint64
FeeBumpPeriod *config.Duration
BlockHistoryPollPeriod *config.Duration
ComputeUnitLimitDefault *uint32
}

func (c *Chain) SetDefaults() {
if c.BalancePollPeriod == nil {
c.BalancePollPeriod = config.MustNewDuration(defaultConfigSet.BalancePollPeriod)
c.BalancePollPeriod = defaultConfigSet.BalancePollPeriod
}
if c.ConfirmPollPeriod == nil {
c.ConfirmPollPeriod = config.MustNewDuration(defaultConfigSet.ConfirmPollPeriod)
c.ConfirmPollPeriod = defaultConfigSet.ConfirmPollPeriod
}
if c.OCR2CachePollPeriod == nil {
c.OCR2CachePollPeriod = config.MustNewDuration(defaultConfigSet.OCR2CachePollPeriod)
c.OCR2CachePollPeriod = defaultConfigSet.OCR2CachePollPeriod
}
if c.OCR2CacheTTL == nil {
c.OCR2CacheTTL = config.MustNewDuration(defaultConfigSet.OCR2CacheTTL)
c.OCR2CacheTTL = defaultConfigSet.OCR2CacheTTL
}
if c.TxTimeout == nil {
c.TxTimeout = config.MustNewDuration(defaultConfigSet.TxTimeout)
c.TxTimeout = defaultConfigSet.TxTimeout
}
if c.TxRetryTimeout == nil {
c.TxRetryTimeout = config.MustNewDuration(defaultConfigSet.TxRetryTimeout)
c.TxRetryTimeout = defaultConfigSet.TxRetryTimeout
}
if c.TxConfirmTimeout == nil {
c.TxConfirmTimeout = config.MustNewDuration(defaultConfigSet.TxConfirmTimeout)
c.TxConfirmTimeout = defaultConfigSet.TxConfirmTimeout
}
if c.SkipPreflight == nil {
c.SkipPreflight = &defaultConfigSet.SkipPreflight
c.SkipPreflight = defaultConfigSet.SkipPreflight
}
if c.Commitment == nil {
c.Commitment = (*string)(&defaultConfigSet.Commitment)
c.Commitment = defaultConfigSet.Commitment
}
if c.MaxRetries == nil && defaultConfigSet.MaxRetries != nil {
i := int64(*defaultConfigSet.MaxRetries)
c.MaxRetries = &i
if c.MaxRetries == nil {
c.MaxRetries = defaultConfigSet.MaxRetries
}
if c.FeeEstimatorMode == nil {
c.FeeEstimatorMode = &defaultConfigSet.FeeEstimatorMode
c.FeeEstimatorMode = defaultConfigSet.FeeEstimatorMode
}
if c.ComputeUnitPriceMax == nil {
c.ComputeUnitPriceMax = &defaultConfigSet.ComputeUnitPriceMax
c.ComputeUnitPriceMax = defaultConfigSet.ComputeUnitPriceMax
}
if c.ComputeUnitPriceMin == nil {
c.ComputeUnitPriceMin = &defaultConfigSet.ComputeUnitPriceMin
c.ComputeUnitPriceMin = defaultConfigSet.ComputeUnitPriceMin
}
if c.ComputeUnitPriceDefault == nil {
c.ComputeUnitPriceDefault = &defaultConfigSet.ComputeUnitPriceDefault
c.ComputeUnitPriceDefault = defaultConfigSet.ComputeUnitPriceDefault
}
if c.FeeBumpPeriod == nil {
c.FeeBumpPeriod = config.MustNewDuration(defaultConfigSet.FeeBumpPeriod)
c.FeeBumpPeriod = defaultConfigSet.FeeBumpPeriod
}
if c.BlockHistoryPollPeriod == nil {
c.BlockHistoryPollPeriod = config.MustNewDuration(defaultConfigSet.BlockHistoryPollPeriod)
c.BlockHistoryPollPeriod = defaultConfigSet.BlockHistoryPollPeriod
}
if c.ComputeUnitLimitDefault == nil {
c.ComputeUnitLimitDefault = defaultConfigSet.ComputeUnitLimitDefault
}
}

Expand All @@ -162,3 +146,7 @@ func (n *Node) ValidateConfig() (err error) {
}
return
}

func ptr[T any](t T) *T {
return &t
}
18 changes: 18 additions & 0 deletions pkg/solana/config/mocks/config.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions pkg/solana/config/toml.go
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,10 @@ func (c *TOMLConfig) BlockHistoryPollPeriod() time.Duration {
return c.Chain.BlockHistoryPollPeriod.Duration()
}

func (c *TOMLConfig) ComputeUnitLimitDefault() uint32 {
return *c.Chain.ComputeUnitLimitDefault
}

func (c *TOMLConfig) ListNodes() Nodes {
return c.Nodes
}
Expand Down

0 comments on commit 3745640

Please sign in to comment.