Skip to content

Commit 3f32bd0

Browse files
refactor: integrated base Observer structure into existing EVM/BTC observers (#2359)
* save local new files to remote * initiated base observer * move base to chains folder * moved logger to base package * added base signer and logger * added changelog entry * integrated base signer into evm/bitcoin; integrated base observer into evm * integrated base observer to evm and bitcoin chain * added changelog entry * cherry pick base Signer structure integration * updated PR number in changelog * updated PR number in changelog * cherry picked the integration of base Observer * moved pure RPC methods to rpc package * moved Mutex to base Observer struct * type check on cached block, header * update changelog PR number and added unit test for Stop() method * replace magic numbers with constants * updated method name in logging * Move sqlite-mem db to testutils * Add base signer's Lock & Unlock --------- Co-authored-by: Dmitry <[email protected]>
1 parent 852897f commit 3f32bd0

30 files changed

+1946
-1358
lines changed

changelog.md

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
* [2340](https://github.com/zeta-chain/node/pull/2340) - add ValidateInbound method for cctx orchestrator
5353
* [2344](https://github.com/zeta-chain/node/pull/2344) - group common data of EVM/Bitcoin signer and observer using base structs
5454
* [2357](https://github.com/zeta-chain/node/pull/2357) - integrate base Signer structure into EVM/Bitcoin Signer
55+
* [2359](https://github.com/zeta-chain/node/pull/2359) - integrate base Observer structure into EVM/Bitcoin Observer
5556
* [2375](https://github.com/zeta-chain/node/pull/2375) - improve & speedup code formatting
5657

5758
### Tests

cmd/zetaclientd/debug.go

+2-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"fmt"
66
"strconv"
77
"strings"
8-
"sync"
98

109
"github.com/btcsuite/btcd/rpcclient"
1110
sdk "github.com/cosmos/cosmos-sdk/types"
@@ -86,9 +85,7 @@ func DebugCmd() *cobra.Command {
8685

8786
// get ballot identifier according to the chain type
8887
if chains.IsEVMChain(chain.ChainId) {
89-
evmObserver := evmobserver.Observer{
90-
Mu: &sync.Mutex{},
91-
}
88+
evmObserver := evmobserver.Observer{}
9289
evmObserver.WithZetacoreClient(client)
9390
var ethRPC *ethrpc.EthRPC
9491
var client *ethclient.Client
@@ -164,9 +161,7 @@ func DebugCmd() *cobra.Command {
164161
}
165162
fmt.Println("CoinType : ", coinType)
166163
} else if chains.IsBitcoinChain(chain.ChainId) {
167-
btcObserver := btcobserver.Observer{
168-
Mu: &sync.Mutex{},
169-
}
164+
btcObserver := btcobserver.Observer{}
170165
btcObserver.WithZetacoreClient(client)
171166
btcObserver.WithChain(*chains.GetChainFromChainID(chainID))
172167
connCfg := &rpcclient.ConnConfig{

cmd/zetaclientd/utils.go

+53-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package main
22

33
import (
4+
"fmt"
5+
46
sdk "github.com/cosmos/cosmos-sdk/types"
57
ethcommon "github.com/ethereum/go-ethereum/common"
8+
"github.com/ethereum/go-ethereum/ethclient"
69

710
"github.com/zeta-chain/zetacore/zetaclient/authz"
811
"github.com/zeta-chain/zetacore/zetaclient/chains/base"
912
btcobserver "github.com/zeta-chain/zetacore/zetaclient/chains/bitcoin/observer"
13+
btcrpc "github.com/zeta-chain/zetacore/zetaclient/chains/bitcoin/rpc"
1014
btcsigner "github.com/zeta-chain/zetacore/zetaclient/chains/bitcoin/signer"
1115
evmobserver "github.com/zeta-chain/zetacore/zetaclient/chains/evm/observer"
1216
evmsigner "github.com/zeta-chain/zetacore/zetaclient/chains/evm/signer"
@@ -116,32 +120,75 @@ func CreateChainObserverMap(
116120
logger base.Logger,
117121
ts *metrics.TelemetryServer,
118122
) (map[int64]interfaces.ChainObserver, error) {
123+
zetacoreContext := appContext.ZetacoreContext()
119124
observerMap := make(map[int64]interfaces.ChainObserver)
120125
// EVM observers
121126
for _, evmConfig := range appContext.Config().GetAllEVMConfigs() {
122127
if evmConfig.Chain.IsZetaChain() {
123128
continue
124129
}
125-
_, found := appContext.ZetacoreContext().GetEVMChainParams(evmConfig.Chain.ChainId)
130+
chainParams, found := zetacoreContext.GetEVMChainParams(evmConfig.Chain.ChainId)
126131
if !found {
127132
logger.Std.Error().Msgf("ChainParam not found for chain %s", evmConfig.Chain.String())
128133
continue
129134
}
130-
co, err := evmobserver.NewObserver(appContext, zetacoreClient, tss, dbpath, logger, evmConfig, ts)
135+
136+
// create EVM client
137+
evmClient, err := ethclient.Dial(evmConfig.Endpoint)
138+
if err != nil {
139+
logger.Std.Error().Err(err).Msgf("error dailing endpoint %s", evmConfig.Endpoint)
140+
continue
141+
}
142+
143+
// create EVM chain observer
144+
observer, err := evmobserver.NewObserver(
145+
evmConfig,
146+
evmClient,
147+
*chainParams,
148+
zetacoreContext,
149+
zetacoreClient,
150+
tss,
151+
dbpath,
152+
logger,
153+
ts,
154+
)
131155
if err != nil {
132156
logger.Std.Error().Err(err).Msgf("NewObserver error for evm chain %s", evmConfig.Chain.String())
133157
continue
134158
}
135-
observerMap[evmConfig.Chain.ChainId] = co
159+
observerMap[evmConfig.Chain.ChainId] = observer
136160
}
161+
137162
// BTC observer
163+
_, chainParams, found := zetacoreContext.GetBTCChainParams()
164+
if !found {
165+
return nil, fmt.Errorf("bitcoin chains params not found")
166+
}
167+
168+
// create BTC chain observer
138169
btcChain, btcConfig, enabled := appContext.GetBTCChainAndConfig()
139170
if enabled {
140-
co, err := btcobserver.NewObserver(appContext, btcChain, zetacoreClient, tss, dbpath, logger, btcConfig, ts)
171+
btcClient, err := btcrpc.NewRPCClient(btcConfig)
141172
if err != nil {
142-
logger.Std.Error().Err(err).Msgf("NewObserver error for bitcoin chain %s", btcChain.String())
173+
logger.Std.Error().Err(err).Msgf("error creating rpc client for bitcoin chain %s", btcChain.String())
143174
} else {
144-
observerMap[btcChain.ChainId] = co
175+
// create BTC chain observer
176+
observer, err := btcobserver.NewObserver(
177+
btcChain,
178+
btcClient,
179+
*chainParams,
180+
zetacoreContext,
181+
zetacoreClient,
182+
tss,
183+
dbpath,
184+
logger,
185+
ts,
186+
)
187+
if err != nil {
188+
logger.Std.Error().Err(err).Msgf("NewObserver error for bitcoin chain %s", btcChain.String())
189+
} else {
190+
observerMap[btcChain.ChainId] = observer
191+
}
145192
}
146193
}
147194

testutil/sample/crypto.go

+6
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"strconv"
88
"testing"
99

10+
"github.com/btcsuite/btcd/chaincfg/chainhash"
1011
"github.com/cometbft/cometbft/crypto/secp256k1"
1112
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
1213
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
@@ -60,6 +61,11 @@ func Hash() ethcommon.Hash {
6061
return EthAddress().Hash()
6162
}
6263

64+
// BtcHash returns a sample btc hash
65+
func BtcHash() chainhash.Hash {
66+
return chainhash.Hash(Hash())
67+
}
68+
6369
// PubKey returns a sample account PubKey
6470
func PubKey(r *rand.Rand) cryptotypes.PubKey {
6571
seed := []byte(strconv.Itoa(r.Int()))

0 commit comments

Comments
 (0)