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: ...@@ -466,7 +466,9 @@ latter:
case <-timer.C: case <-timer.C:
ethRelayer.procNewHeight(ctx, &continueFailCount) ethRelayer.procNewHeight(ctx, &continueFailCount)
case err := <-ethRelayer.bridgeBankSub.Err(): case err := <-ethRelayer.bridgeBankSub.Err():
panic("bridgeBankSub" + err.Error()) relayerLog.Error("proc", "bridgeBankSub err", err.Error())
ethRelayer.subscribeEvent()
ethRelayer.filterLogEvents()
case vLog := <-ethRelayer.bridgeBankLog: case vLog := <-ethRelayer.bridgeBankLog:
ethRelayer.storeBridgeBankLogs(vLog, true) ethRelayer.storeBridgeBankLogs(vLog, true)
case chain33Msg := <-ethRelayer.chain33MsgChan: case chain33Msg := <-ethRelayer.chain33MsgChan:
...@@ -582,12 +584,22 @@ func (ethRelayer *Relayer4Ethereum) procNewHeight(ctx context.Context, continueF ...@@ -582,12 +584,22 @@ func (ethRelayer *Relayer4Ethereum) procNewHeight(ctx context.Context, continueF
head, err := ethRelayer.clientSpec.HeaderByNumber(ctx, nil) head, err := ethRelayer.clientSpec.HeaderByNumber(ctx, nil)
if nil != err { if nil != err {
*continueFailCount++ *continueFailCount++
if *continueFailCount >= (12 * 5) { if *continueFailCount >= 5 {
panic(err.Error()) ethRelayer.clientSpec, err = ethtxs.SetupWebsocketEthClient(ethRelayer.providerHttp)
if err != nil {
relayerLog.Error("SetupWebsocketEthClient", "err", err)
return
}
} }
relayerLog.Error("Failed to get ethereum height", "provider", ethRelayer.provider, //retry
"continueFailCount", continueFailCount) head, err = ethRelayer.clientSpec.HeaderByNumber(ctx, nil)
return if err != nil {
relayerLog.Error("Failed to get ethereum height", "provider", ethRelayer.provider,
"continueFailCount", continueFailCount, "err", err.Error())
return
}
} }
ethRelayer.updateTxStatus() ethRelayer.updateTxStatus()
*continueFailCount = 0 *continueFailCount = 0
...@@ -706,6 +718,7 @@ func (ethRelayer *Relayer4Ethereum) procBridgeBankLogs(vLog types.Log) { ...@@ -706,6 +718,7 @@ func (ethRelayer *Relayer4Ethereum) procBridgeBankLogs(vLog types.Log) {
} }
} }
//因为订阅事件的功能只会推送在订阅生效的高度之后的事件,之前订阅停止~当前订阅生效高度的这一段只能通过FilterLogs来获取事件信息,否则就会遗漏
func (ethRelayer *Relayer4Ethereum) filterLogEvents() { func (ethRelayer *Relayer4Ethereum) filterLogEvents() {
deployHeight, _ := ethtxs.GetDeployHeight(ethRelayer.clientSpec, ethRelayer.x2EthDeployInfo.BridgeRegistry.Address, ethRelayer.x2EthDeployInfo.BridgeRegistry.Address) deployHeight, _ := ethtxs.GetDeployHeight(ethRelayer.clientSpec, ethRelayer.x2EthDeployInfo.BridgeRegistry.Address, ethRelayer.x2EthDeployInfo.BridgeRegistry.Address)
height4BridgeBankLogAt := int64(ethRelayer.getHeight4BridgeBankLogAt()) height4BridgeBankLogAt := int64(ethRelayer.getHeight4BridgeBankLogAt())
...@@ -744,6 +757,7 @@ func (ethRelayer *Relayer4Ethereum) filterLogEvents() { ...@@ -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) { 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) relayerLog.Info(title, "eventSig", eventSig, "heightLogProcAt", heightLogProcAt, "curHeight", curHeight)
...@@ -811,6 +825,7 @@ func (ethRelayer *Relayer4Ethereum) subscribeEvent() { ...@@ -811,6 +825,7 @@ func (ethRelayer *Relayer4Ethereum) subscribeEvent() {
targetAddress := ethRelayer.bridgeBankAddr targetAddress := ethRelayer.bridgeBankAddr
// We need the target address in bytes[] for the query // We need the target address in bytes[] for the query
//因为订阅事件的功能只会推送在订阅生效的高度之后的事件,所以FromBlock只需要填写1就可以了
query := ethereum.FilterQuery{ query := ethereum.FilterQuery{
Addresses: []common.Address{targetAddress}, Addresses: []common.Address{targetAddress},
FromBlock: big.NewInt(int64(1)), FromBlock: big.NewInt(int64(1)),
......
...@@ -23,6 +23,5 @@ func prefixMessage(message common.Hash, key *ecdsa.PrivateKey) ([]byte, []byte) ...@@ -23,6 +23,5 @@ func prefixMessage(message common.Hash, key *ecdsa.PrivateKey) ([]byte, []byte)
if err != nil { if err != nil {
panic(err) panic(err)
} }
return sig, prefixed 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