Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions helper/call.go
Original file line number Diff line number Diff line change
Expand Up @@ -1104,7 +1104,7 @@ func (c *ContractCaller) GetTronHeaderInfo(headerID uint64, contractAddress stri
}

// Call
data, err := c.TronChainRPC.TriggerConstantContract(contractAddress, btsPack)
data, err := c.TronChainRPC.TriggerConstantContractWithRetry(contractAddress, btsPack)
if err != nil {
return root, 0, 0, 0, types.HeimdallAddress{}, err
}
Expand Down Expand Up @@ -1134,7 +1134,7 @@ func (c *ContractCaller) GetSyncedCheckpointId(contractAddress string, rootChain
}

// Call
data, err := c.TronChainRPC.TriggerConstantContract(contractAddress, btsPack)
data, err := c.TronChainRPC.TriggerConstantContractWithRetry(contractAddress, btsPack)
if err != nil {
return 0, err
}
Expand Down
30 changes: 26 additions & 4 deletions tron/tronclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ package tron
import (
"context"
"fmt"
"github.com/ethereum/go-ethereum/log"
"math/big"
"os"
"strings"
"time"

"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
Expand Down Expand Up @@ -36,9 +38,7 @@ func NewClient(url string) *Client {
}
}

//
// private abi methods
//
func getABI(data string) (abi.ABI, error) {
return abi.JSON(strings.NewReader(data))
}
Expand Down Expand Up @@ -81,6 +81,28 @@ func (tc *Client) TriggerConstantContract(contractAddress string, data []byte) (
return response.ConstantResult[0], nil
}

func (tc *Client) TriggerConstantContractWithRetry(contractAddress string, data []byte) ([]byte, error) {
const maxRetries = 5

var response []byte
var err error

for attempt := 1; attempt <= maxRetries; attempt++ {
response, err = tc.TriggerConstantContract(contractAddress, data)

if err == nil && response != nil {
log.Info("Successfully trigger tron constant contract", "attempt", attempt)
break
}
log.Error("Failed to trigger tron constant contract",
"err", err, "attempt", attempt, "maxRetries", maxRetries)
if attempt < maxRetries {
delay := attempt
time.Sleep(time.Duration(delay) * time.Second)
}
}
return response, err
}
func (tc *Client) GetNowBlock(ctx context.Context) (int64, error) {
block, err := tc.client.GetNowBlock2(ctx, &pb.EmptyMessage{})
if err != nil {
Expand All @@ -100,7 +122,7 @@ func (tc *Client) CurrentHeaderBlock(contractAddress string, childBlockInterval
}

// Call
data, err := tc.TriggerConstantContract(contractAddress, btsPack)
data, err := tc.TriggerConstantContractWithRetry(contractAddress, btsPack)
if err != nil {
return 0, err
}
Expand All @@ -125,7 +147,7 @@ func (tc *Client) GetLastChildBlock(contractAddress string) (uint64, error) {
if err != nil {
return 0, err
}
data, err := tc.TriggerConstantContract(contractAddress, btsPack)
data, err := tc.TriggerConstantContractWithRetry(contractAddress, btsPack)
if err != nil {
return 0, err
}
Expand Down
Loading