Unverified Commit c3fe2dcf authored by vipwzw's avatar vipwzw Committed by GitHub

Merge pull request #1119 from zhengjunhe/make_eth_call_stable_1213

提高eth client调用的稳定性
parents a081b76b ebdb158f
......@@ -466,7 +466,9 @@ latter:
case <-timer.C:
ethRelayer.procNewHeight(ctx, &continueFailCount)
case err := <-ethRelayer.bridgeBankSub.Err():
panic("bridgeBankSub" + err.Error())
relayerLog.Error("proc", "bridgeBankSub err", err.Error())
ethRelayer.subscribeEvent()
ethRelayer.filterLogEvents()
case vLog := <-ethRelayer.bridgeBankLog:
ethRelayer.storeBridgeBankLogs(vLog, true)
case chain33Msg := <-ethRelayer.chain33MsgChan:
......@@ -582,13 +584,23 @@ func (ethRelayer *Relayer4Ethereum) procNewHeight(ctx context.Context, continueF
head, err := ethRelayer.clientSpec.HeaderByNumber(ctx, nil)
if nil != err {
*continueFailCount++
if *continueFailCount >= (12 * 5) {
panic(err.Error())
if *continueFailCount >= 5 {
ethRelayer.clientSpec, err = ethtxs.SetupWebsocketEthClient(ethRelayer.providerHttp)
if err != nil {
relayerLog.Error("SetupWebsocketEthClient", "err", err)
return
}
}
//retry
head, err = ethRelayer.clientSpec.HeaderByNumber(ctx, nil)
if err != nil {
relayerLog.Error("Failed to get ethereum height", "provider", ethRelayer.provider,
"continueFailCount", continueFailCount)
"continueFailCount", continueFailCount, "err", err.Error())
return
}
}
ethRelayer.updateTxStatus()
*continueFailCount = 0
currentHeight := head.Number.Uint64()
......@@ -706,6 +718,7 @@ func (ethRelayer *Relayer4Ethereum) procBridgeBankLogs(vLog types.Log) {
}
}
//因为订阅事件的功能只会推送在订阅生效的高度之后的事件,之前订阅停止~当前订阅生效高度的这一段只能通过FilterLogs来获取事件信息,否则就会遗漏
func (ethRelayer *Relayer4Ethereum) filterLogEvents() {
deployHeight, _ := ethtxs.GetDeployHeight(ethRelayer.clientSpec, ethRelayer.x2EthDeployInfo.BridgeRegistry.Address, ethRelayer.x2EthDeployInfo.BridgeRegistry.Address)
height4BridgeBankLogAt := int64(ethRelayer.getHeight4BridgeBankLogAt())
......@@ -744,6 +757,7 @@ func (ethRelayer *Relayer4Ethereum) filterLogEvents() {
}
}
//因为订阅事件的功能只会推送在订阅生效的高度之后的事件,之前订阅停止~当前订阅生效高度的这一段只能通过FilterLogs来获取事件信息,否则就会遗漏
func (ethRelayer *Relayer4Ethereum) filterLogEventsProc(logchan chan<- types.Log, done chan<- int, title string, curHeight, heightLogProcAt int64, contractAddr common.Address, eventSig map[string]bool) {
relayerLog.Info(title, "eventSig", eventSig, "heightLogProcAt", heightLogProcAt, "curHeight", curHeight)
......@@ -811,6 +825,7 @@ func (ethRelayer *Relayer4Ethereum) subscribeEvent() {
targetAddress := ethRelayer.bridgeBankAddr
// We need the target address in bytes[] for the query
//因为订阅事件的功能只会推送在订阅生效的高度之后的事件,所以FromBlock只需要填写1就可以了
query := ethereum.FilterQuery{
Addresses: []common.Address{targetAddress},
FromBlock: big.NewInt(int64(1)),
......
......@@ -23,6 +23,5 @@ func prefixMessage(message common.Hash, key *ecdsa.PrivateKey) ([]byte, []byte)
if err != nil {
panic(err)
}
return sig, prefixed
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment