Skip to content

Commit

Permalink
encapsulate SubmitDelegatedFallbackDirect func
Browse files Browse the repository at this point in the history
  • Loading branch information
Intizar-T committed Aug 28, 2024
1 parent 055b603 commit b2c8740
Showing 1 changed file with 44 additions and 30 deletions.
74 changes: 44 additions & 30 deletions node/pkg/chain/helper/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -243,48 +243,63 @@ func (t *ChainHelper) PublicAddressString() (string, error) {
}

func (t *ChainHelper) SubmitDelegatedFallbackDirect(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
}

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
}
err, tryDirect := t.submitDelegated(ctx, contractAddress, functionString, maxRetrial, nonce, args...)
if !tryDirect {
return err
}
}

tx, err = t.GetSignedFromDelegator(tx)
if err != nil {
break // if delegator signing fails, try direct transaction
return t.submitDirect(ctx, contractAddress, functionString, maxRetrial, nonce, args...)
}

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

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 {
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 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, nonce uint64, args ...interface{}) error {
var err error
var tx *types.Transaction
clientIndex := 0

for i := 0; i < maxRetrial; i++ {
tx, err = utils.MakeDirectTx(ctx, t.clients[clientIndex], contractAddress, t.wallet, functionString, t.chainID, nonce, args...)
Expand All @@ -311,7 +326,6 @@ func (t *ChainHelper) SubmitDelegatedFallbackDirect(ctx context.Context, contrac
}
return nil
}

return err
}

Expand Down

0 comments on commit b2c8740

Please sign in to comment.