return err properly, apply retry at GetSignersFromContract

This commit is contained in:
Tuna 2018-12-29 16:14:27 +07:00
parent 8dada6b6ec
commit b0200cd90f
2 changed files with 23 additions and 4 deletions

View file

@ -85,7 +85,8 @@ func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, m
// Add tx signed to local tx pool. // Add tx signed to local tx pool.
err = pool.AddLocal(txSigned) err = pool.AddLocal(txSigned)
if err != nil { 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. // Create secret tx.
@ -114,6 +115,7 @@ func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, m
err = pool.AddLocal(txSigned) err = pool.AddLocal(txSigned)
if err != nil { 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) 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. // Put randomize key into chainDb.
@ -125,6 +127,7 @@ func CreateTransactionSign(chainConfig *params.ChainConfig, pool *core.TxPool, m
randomizeKeyValue, err := chainDb.Get(randomizeKeyName) randomizeKeyValue, err := chainDb.Get(randomizeKeyName)
if err != nil { if err != nil {
log.Error("Fail to get randomize key from state db.", "error", err) log.Error("Fail to get randomize key from state db.", "error", err)
return err
} }
tx, err := BuildTxOpeningRandomize(nonce+1, common.HexToAddress(common.RandomizeSMC), randomizeKeyValue) 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) err = pool.AddLocal(txSigned)
if err != nil { 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) 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. // 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) randomize, err := randomizeContract.NewTomoRandomize(common.HexToAddress(common.RandomizeSMC), client)
if err != nil { if err != nil {
log.Error("Fail to get instance of randomize", "error", err) log.Error("Fail to get instance of randomize", "error", err)
return -1, err
} }
opts := new(bind.CallOpts) opts := new(bind.CallOpts)
secrets, err := randomize.GetSecret(opts, addrMasternode) secrets, err := randomize.GetSecret(opts, addrMasternode)
if err != nil { if err != nil {
log.Error("Fail get secrets from randomize", "error", err) log.Error("Fail get secrets from randomize", "error", err)
return -1, err
} }
opening, err := randomize.GetOpening(opts, addrMasternode) opening, err := randomize.GetOpening(opts, addrMasternode)
if err != nil { if err != nil {
log.Error("Fail get opening from randomize", "error", err) log.Error("Fail get opening from randomize", "error", err)
return -1, err
} }
return DecryptRandomizeFromSecretsAndOpening(secrets, opening) return DecryptRandomizeFromSecretsAndOpening(secrets, opening)
@ -289,6 +296,7 @@ func DecryptRandomizeFromSecretsAndOpening(secrets [][32]byte, opening [32]byte)
intNumber, err := strconv.Atoi(decryptSecret) intNumber, err := strconv.Atoi(decryptSecret)
if err != nil { if err != nil {
log.Error("Can not convert string to integer", "error", err) log.Error("Can not convert string to integer", "error", err)
return -1, err
} }
random = int64(intNumber) random = int64(intNumber)
} }

View file

@ -865,15 +865,26 @@ func (s *PublicBlockChainAPI) rpcOutputBlock(b *types.Block, inclTx bool, fullTx
client, err := s.b.GetIPCClient() client, err := s.b.GetIPCClient()
if err != nil { if err != nil {
log.Error("Fail to connect IPC client for block status", "error", err) log.Error("Fail to connect IPC client for block status", "error", err)
return nil, err
} }
var signers []common.Address var signers []common.Address
var filterSigners []common.Address var filterSigners []common.Address
finality := int32(0) finality := int32(0)
if b.Number().Int64() > 0 { if b.Number().Int64() > 0 {
addrBlockSigner := common.HexToAddress(common.BlockSigners) addrBlockSigner := common.HexToAddress(common.BlockSigners)
signers, err = contracts.GetSignersFromContract(addrBlockSigner, client, b.Hash()) retries := 3
if err != nil { for {
log.Error("Fail to get signers from block signer SC.", "error", err) 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. // Get block epoc latest.
if s.b.ChainConfig().Posv != nil { if s.b.ChainConfig().Posv != nil {