Skip to content

Commit

Permalink
encapsulate SubmitDelegatedFallbackDirect func (#2244)
Browse files Browse the repository at this point in the history
* encapsulate SubmitDelegatedFallbackDirect func

* fix getting new nonce in delegated and direct funcs

* dont get new nonce in the last iteration
  • Loading branch information
Intizar-T authored Aug 28, 2024
1 parent 52f309f commit ce5ebf0
Showing 1 changed file with 51 additions and 28 deletions.
79 changes: 51 additions & 28 deletions node/pkg/chain/helper/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -243,47 +243,69 @@ func (t *ChainHelper) PublicAddressString() (string, error) {
}

func (t *ChainHelper) SubmitDelegatedFallbackDirect(ctx context.Context, contractAddress string, functionString string, maxRetrial int, args ...interface{}) error {
if t.delegatorUrl != "" {
err, tryDirect := t.submitDelegated(ctx, contractAddress, functionString, maxRetrial, args...)
if !tryDirect {
return err
}
}

return t.submitDirect(ctx, contractAddress, functionString, maxRetrial, args...)
}

func (t *ChainHelper) submitDelegated(ctx context.Context, contractAddress string, functionString string, maxRetrial int, args ...interface{}) (error, bool) {
var err error
var tx *types.Transaction

clientIndex := 0

nonce, err := noncemanager.GetAndIncrementNonce(t.wallet)
if err != nil {
return err
return err, false
}

if t.delegatorUrl != "" {
for i := 0; i < maxRetrial; i++ {
tx, err = utils.MakeFeeDelegatedTx(ctx, t.clients[clientIndex], contractAddress, t.wallet, functionString, t.chainID, nonce, args...)
if err != nil {
if utils.ShouldRetryWithSwitchedJsonRPC(err) {
clientIndex = (clientIndex + 1) % len(t.clients)
}
continue
for i := 0; i < maxRetrial; i++ {
tx, err = utils.MakeFeeDelegatedTx(ctx, t.clients[clientIndex], contractAddress, t.wallet, functionString, t.chainID, nonce, args...)
if err != nil {
if utils.ShouldRetryWithSwitchedJsonRPC(err) {
clientIndex = (clientIndex + 1) % len(t.clients)
}
continue
}

tx, err = t.GetSignedFromDelegator(tx)
if err != nil {
break // if delegator signing fails, try direct transaction
}
tx, err = t.GetSignedFromDelegator(tx)
if err != nil {
return nil, true // if delegator signing fails, try direct transaction
}

err = utils.SubmitRawTx(ctx, t.clients[clientIndex], tx)
if err != nil {
if utils.ShouldRetryWithSwitchedJsonRPC(err) {
clientIndex = (clientIndex + 1) % len(t.clients)
} else if errors.Is(err, errorSentinel.ErrChainTransactionFail) {
return err // if transaction fails, the data will probably be too old to retry
} else if utils.IsNonceError(err) || err == context.DeadlineExceeded {
nonce, err = noncemanager.GetAndIncrementNonce(t.wallet)
if err != nil {
return err
}
err = utils.SubmitRawTx(ctx, t.clients[clientIndex], tx)
if err != nil {
if utils.ShouldRetryWithSwitchedJsonRPC(err) {
clientIndex = (clientIndex + 1) % len(t.clients)
} else if errors.Is(err, errorSentinel.ErrChainTransactionFail) {
return err, false // if transaction fails, the data will probably be too old to retry
} else if i == maxRetrial-1 {
return err, true // dont get new nonce if it's the last iteration, instead try direct transaction
} else if utils.IsNonceError(err) || err == context.DeadlineExceeded {
nonce, err = noncemanager.GetAndIncrementNonce(t.wallet)
if err != nil {
return err, false
}
continue
}
return nil
continue
}
return nil, false
}
return err, true
}

func (t *ChainHelper) submitDirect(ctx context.Context, contractAddress string, functionString string, maxRetrial int, args ...interface{}) error {
var err error
var tx *types.Transaction
clientIndex := 0

nonce, err := noncemanager.GetAndIncrementNonce(t.wallet)
if err != nil {
return err
}

for i := 0; i < maxRetrial; i++ {
Expand All @@ -301,6 +323,8 @@ func (t *ChainHelper) SubmitDelegatedFallbackDirect(ctx context.Context, contrac
clientIndex = (clientIndex + 1) % len(t.clients)
} else if errors.Is(err, errorSentinel.ErrChainTransactionFail) {
return err // if transaction fails, the data will probably be too old to retry
} else if i == maxRetrial-1 {
return err // dont get new nonce if it's the last iteration
} else if utils.IsNonceError(err) || err == context.DeadlineExceeded {
nonce, err = noncemanager.GetAndIncrementNonce(t.wallet)
if err != nil {
Expand All @@ -311,7 +335,6 @@ func (t *ChainHelper) SubmitDelegatedFallbackDirect(ctx context.Context, contrac
}
return nil
}

return err
}

Expand Down

0 comments on commit ce5ebf0

Please sign in to comment.