diff --git a/contracts/utils.go b/contracts/utils.go index 42643b4571..faf86b1c55 100644 --- a/contracts/utils.go +++ b/contracts/utils.go @@ -85,7 +85,8 @@ func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, m // Add tx signed to local tx pool. err = pool.AddLocal(txSigned) if err != nil { - log.Warn("Fail to add tx sign to local pool.", "error", err, "number", block.NumberU64(), "hash", block.Hash().Hex(), "from", account.Address, "nonce", nonce) + log.Error("Fail to add tx sign to local pool.", "error", err, "number", block.NumberU64(), "hash", block.Hash().Hex(), "from", account.Address, "nonce", nonce) + return err } // Create secret tx. @@ -114,6 +115,7 @@ func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, m err = pool.AddLocal(txSigned) if err != nil { log.Error("Fail to add tx secret to local pool.", "error", err, "number", block.NumberU64(), "hash", block.Hash().Hex(), "from", account.Address, "nonce", nonce) + return err } // Put randomize key into chainDb. @@ -125,6 +127,7 @@ func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, m randomizeKeyValue, err := chainDb.Get(randomizeKeyName) if err != nil { log.Error("Fail to get randomize key from state db.", "error", err) + return err } tx, err := BuildTxOpeningRandomize(nonce+1, common.HexToAddress(common.RandomizeSMC), randomizeKeyValue) @@ -141,6 +144,7 @@ func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, m err = pool.AddLocal(txSigned) if err != nil { log.Error("Fail to add tx opening to local pool.", "error", err, "number", block.NumberU64(), "hash", block.Hash().Hex(), "from", account.Address, "nonce", nonce) + return err } // Clear randomize key in state db. @@ -216,15 +220,18 @@ func GetRandomizeFromContract(client bind.ContractBackend, addrMasternode common randomize, err := randomizeContract.NewTomoRandomize(common.HexToAddress(common.RandomizeSMC), client) if err != nil { log.Error("Fail to get instance of randomize", "error", err) + return -1, err } opts := new(bind.CallOpts) secrets, err := randomize.GetSecret(opts, addrMasternode) if err != nil { log.Error("Fail get secrets from randomize", "error", err) + return -1, err } opening, err := randomize.GetOpening(opts, addrMasternode) if err != nil { log.Error("Fail get opening from randomize", "error", err) + return -1, err } return DecryptRandomizeFromSecretsAndOpening(secrets, opening) @@ -289,6 +296,7 @@ func DecryptRandomizeFromSecretsAndOpening(secrets [][32]byte, opening [32]byte) intNumber, err := strconv.Atoi(decryptSecret) if err != nil { log.Error("Can not convert string to integer", "error", err) + return -1, err } random = int64(intNumber) } diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 4a6f1f5583..cc83bd3d6c 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -865,15 +865,26 @@ func (s *PublicBlockChainAPI) rpcOutputBlock(b *types.Block, inclTx bool, fullTx client, err := s.b.GetIPCClient() if err != nil { log.Error("Fail to connect IPC client for block status", "error", err) + return nil, err } var signers []common.Address var filterSigners []common.Address finality := int32(0) if b.Number().Int64() > 0 { addrBlockSigner := common.HexToAddress(common.BlockSigners) - signers, err = contracts.GetSignersFromContract(addrBlockSigner, client, b.Hash()) - if err != nil { - log.Error("Fail to get signers from block signer SC.", "error", err) + retries := 3 + for { + signers, err = contracts.GetSignersFromContract(addrBlockSigner, client, b.Hash()) + if err != nil { + log.Error("Fail to get signers from block signer SC.", "error", err, "retries", retries) + if retries == 0 { + return nil, err + } + } else { + break + } + retries-- + time.Sleep(100 * time.Millisecond) } // Get block epoc latest. if s.b.ChainConfig().Posv != nil {