Skip to content

Commit d20bbac

Browse files
Merge branch 'main' into merbe-main-to-base-2025
2 parents 873b8dd + bc7cc1e commit d20bbac

32 files changed

+796
-364
lines changed

CHANGELOG.md

+12
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,24 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
3737

3838
## Unreleased
3939

40+
### Bug Fixes
41+
42+
* [#307](https://github.com/babylonlabs-io/finality-provider/pull/307) fix: increment fp_total_failed_votes
43+
4044
### Improvements
4145

4246
* [#251](https://github.com/babylonlabs-io/finality-provider/pull/251) Add nlreturn lint
4347
* [#252](https://github.com/babylonlabs-io/finality-provider/pull/252) Remove interceptors and use context
4448
* [#266](https://github.com/babylonlabs-io/finality-provider/pull/266) Change default config
4549
* [#262](https://github.com/babylonlabs-io/finality-provider/pull/262) Add new command to export pop
50+
* [#284](https://github.com/babylonlabs-io/finality-provider/pull/284) Add new command to delete pop
51+
* [#277](https://github.com/babylonlabs-io/finality-provider/pull/277) Poll many blocks in poller
52+
* [#291](https://github.com/babylonlabs-io/finality-provider/pull/291) chore: remove skip height
53+
* [#294](https://github.com/babylonlabs-io/finality-provider/pull/294) chore: Improve fpd start
54+
* [#297](https://github.com/babylonlabs-io/finality-provider/pull/297) Add new command to validate pop
55+
* [#302](https://github.com/babylonlabs-io/finality-provider/pull/302) Update pop commands to write to a file
56+
* [#301](https://github.com/babylonlabs-io/finality-provider/pull/301) chore: check tx index enabled
57+
* [#308](https://github.com/babylonlabs-io/finality-provider/issues/308) chore: bump babylon to v1.0.0-rc.4
4658

4759
## v0.14.3
4860

clientcontroller/api/interface.go

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import (
1212
const babylonConsumerChainType = "babylon"
1313

1414
type ClientController interface {
15+
// Start - starts the client controller
16+
Start() error
1517
// RegisterFinalityProvider registers a finality provider to the consumer chain
1618
// it returns tx hash and error. The address of the finality provider will be
1719
// the signer of the msg.

clientcontroller/babylon/babylon.go

+36-6
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"strings"
77
"time"
88

9+
"github.com/babylonlabs-io/babylon/client/babylonclient"
10+
911
"github.com/babylonlabs-io/finality-provider/finality-provider/proto"
1012

1113
sdkErr "cosmossdk.io/errors"
@@ -25,7 +27,6 @@ import (
2527
sdk "github.com/cosmos/cosmos-sdk/types"
2628
sdkquery "github.com/cosmos/cosmos-sdk/types/query"
2729
sttypes "github.com/cosmos/cosmos-sdk/x/staking/types"
28-
"github.com/cosmos/relayer/v2/relayer/provider"
2930
"go.uber.org/zap"
3031
protobuf "google.golang.org/protobuf/proto"
3132

@@ -47,6 +48,7 @@ type BabylonController struct {
4748
}
4849

4950
func NewBabylonController(
51+
bbnClient *bbnclient.Client,
5052
cfg *fpcfg.BBNConfig,
5153
btcParams *chaincfg.Params,
5254
logger *zap.Logger,
@@ -68,13 +70,32 @@ func NewBabylonController(
6870
}
6971

7072
return &BabylonController{
71-
bc,
73+
bbnClient,
7274
cfg,
7375
btcParams,
7476
logger,
7577
}, nil
7678
}
7779

80+
func (bc *BabylonController) Start() error {
81+
// makes sure that the key in config really exists and is a valid bech32 addr
82+
// to allow using mustGetTxSigner
83+
if _, err := bc.bbnClient.GetAddr(); err != nil {
84+
return fmt.Errorf("failed to get addr: %w", err)
85+
}
86+
87+
enabled, err := bc.NodeTxIndexEnabled()
88+
if err != nil {
89+
return err
90+
}
91+
92+
if !enabled {
93+
return fmt.Errorf("tx indexing in the babylon node must be enabled")
94+
}
95+
96+
return nil
97+
}
98+
7899
func (bc *BabylonController) MustGetTxSigner() string {
79100
signer := bc.GetKeyAddress()
80101
prefix := bc.cfg.AccountPrefix
@@ -101,11 +122,11 @@ func (bc *BabylonController) GetKeyAddress() sdk.AccAddress {
101122
return addr
102123
}
103124

104-
func (bc *BabylonController) reliablySendMsg(msg sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*provider.RelayerTxResponse, error) {
125+
func (bc *BabylonController) reliablySendMsg(msg sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*babylonclient.RelayerTxResponse, error) {
105126
return bc.reliablySendMsgs([]sdk.Msg{msg}, expectedErrs, unrecoverableErrs)
106127
}
107128

108-
func (bc *BabylonController) reliablySendMsgs(msgs []sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*provider.RelayerTxResponse, error) {
129+
func (bc *BabylonController) reliablySendMsgs(msgs []sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*babylonclient.RelayerTxResponse, error) {
109130
return bc.bbnClient.ReliablySendMsgs(
110131
context.Background(),
111132
msgs,
@@ -413,6 +434,15 @@ func (bc *BabylonController) QueryBestBlock() (*types.BlockInfo, error) {
413434
return blocks[0], nil
414435
}
415436

437+
func (bc *BabylonController) NodeTxIndexEnabled() (bool, error) {
438+
res, err := bc.bbnClient.GetStatus()
439+
if err != nil {
440+
return false, fmt.Errorf("failed to query node status: %w", err)
441+
}
442+
443+
return res.TxIndexEnabled(), nil
444+
}
445+
416446
func (bc *BabylonController) queryCometBestBlock() (*types.BlockInfo, error) {
417447
ctx, cancel := getContextWithCancel(bc.cfg.Timeout)
418448
// this will return 20 items at max in the descending order (highest first)
@@ -492,7 +522,7 @@ func (bc *BabylonController) CreateBTCDelegation(
492522
return &types.TxResponse{TxHash: res.TxHash}, nil
493523
}
494524

495-
func (bc *BabylonController) InsertBtcBlockHeaders(headers []bbntypes.BTCHeaderBytes) (*provider.RelayerTxResponse, error) {
525+
func (bc *BabylonController) InsertBtcBlockHeaders(headers []bbntypes.BTCHeaderBytes) (*babylonclient.RelayerTxResponse, error) {
496526
msg := &btclctypes.MsgInsertHeaders{
497527
Signer: bc.MustGetTxSigner(),
498528
Headers: headers,
@@ -729,7 +759,7 @@ func (bc *BabylonController) SubmitCovenantSigs(
729759
return &types.TxResponse{TxHash: res.TxHash}, nil
730760
}
731761

732-
func (bc *BabylonController) InsertSpvProofs(submitter string, proofs []*btcctypes.BTCSpvProof) (*provider.RelayerTxResponse, error) {
762+
func (bc *BabylonController) InsertSpvProofs(submitter string, proofs []*btcctypes.BTCSpvProof) (*babylonclient.RelayerTxResponse, error) {
733763
msg := &btcctypes.MsgInsertBTCSpvProof{
734764
Submitter: submitter,
735765
Proofs: proofs,

clientcontroller/babylon/consumer.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"strings"
77

88
sdkErr "cosmossdk.io/errors"
9+
"github.com/babylonlabs-io/babylon/client/babylonclient"
910
bbnclient "github.com/babylonlabs-io/babylon/client/client"
1011
bbntypes "github.com/babylonlabs-io/babylon/types"
1112
btcstakingtypes "github.com/babylonlabs-io/babylon/x/btcstaking/types"
@@ -16,7 +17,6 @@ import (
1617
cmtcrypto "github.com/cometbft/cometbft/proto/tendermint/crypto"
1718
sdk "github.com/cosmos/cosmos-sdk/types"
1819
sdkquery "github.com/cosmos/cosmos-sdk/types/query"
19-
"github.com/cosmos/relayer/v2/relayer/provider"
2020
"go.uber.org/zap"
2121

2222
"github.com/babylonlabs-io/finality-provider/clientcontroller/api"
@@ -89,11 +89,11 @@ func (bc *BabylonConsumerController) GetKeyAddress() sdk.AccAddress {
8989
return addr
9090
}
9191

92-
func (bc *BabylonConsumerController) reliablySendMsg(msg sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*provider.RelayerTxResponse, error) {
92+
func (bc *BabylonConsumerController) reliablySendMsg(msg sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*babylonclient.RelayerTxResponse, error) {
9393
return bc.reliablySendMsgs([]sdk.Msg{msg}, expectedErrs, unrecoverableErrs)
9494
}
9595

96-
func (bc *BabylonConsumerController) reliablySendMsgs(msgs []sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*provider.RelayerTxResponse, error) {
96+
func (bc *BabylonConsumerController) reliablySendMsgs(msgs []sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*babylonclient.RelayerTxResponse, error) {
9797
return bc.bbnClient.ReliablySendMsgs(
9898
context.Background(),
9999
msgs,

clientcontroller/cosmwasm/consumer.go

+12-5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
sdkErr "cosmossdk.io/errors"
1111
wasmdparams "github.com/CosmWasm/wasmd/app/params"
1212
wasmdtypes "github.com/CosmWasm/wasmd/x/wasm/types"
13+
"github.com/babylonlabs-io/babylon/client/babylonclient"
1314
bbntypes "github.com/babylonlabs-io/babylon/types"
1415
"github.com/babylonlabs-io/finality-provider/clientcontroller/api"
1516
cwcclient "github.com/babylonlabs-io/finality-provider/cosmwasmclient/client"
@@ -21,7 +22,6 @@ import (
2122
coretypes "github.com/cometbft/cometbft/rpc/core/types"
2223
sdk "github.com/cosmos/cosmos-sdk/types"
2324
sdkquerytypes "github.com/cosmos/cosmos-sdk/types/query"
24-
"github.com/cosmos/relayer/v2/relayer/provider"
2525
"go.uber.org/zap"
2626
)
2727

@@ -62,17 +62,24 @@ func NewCosmwasmConsumerController(
6262
}, nil
6363
}
6464

65-
func (wc *CosmwasmConsumerController) reliablySendMsg(msg sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*provider.RelayerTxResponse, error) {
65+
func (wc *CosmwasmConsumerController) reliablySendMsg(msg sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*babylonclient.RelayerTxResponse, error) {
6666
return wc.reliablySendMsgs([]sdk.Msg{msg}, expectedErrs, unrecoverableErrs)
6767
}
6868

69-
func (wc *CosmwasmConsumerController) reliablySendMsgs(msgs []sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*provider.RelayerTxResponse, error) {
70-
return wc.cwClient.ReliablySendMsgs(
69+
func (wc *CosmwasmConsumerController) reliablySendMsgs(msgs []sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*babylonclient.RelayerTxResponse, error) {
70+
resp, err := wc.cwClient.ReliablySendMsgs(
7171
context.Background(),
7272
msgs,
7373
expectedErrs,
7474
unrecoverableErrs,
7575
)
76+
if err != nil {
77+
return nil, err
78+
}
79+
80+
bbnResp := fptypes.NewBabylonTxResponse(resp)
81+
82+
return bbnResp, nil
7683
}
7784

7885
// CommitPubRandList commits a list of Schnorr public randomness via a MsgCommitPubRand to Babylon
@@ -548,7 +555,7 @@ func (wc *CosmwasmConsumerController) Close() error {
548555
return wc.cwClient.Stop()
549556
}
550557

551-
func (wc *CosmwasmConsumerController) ExecuteContract(msgBytes []byte) (*provider.RelayerTxResponse, error) {
558+
func (wc *CosmwasmConsumerController) ExecuteContract(msgBytes []byte) (*babylonclient.RelayerTxResponse, error) {
552559
execMsg := &wasmdtypes.MsgExecuteContract{
553560
Sender: wc.cwClient.MustGetAddr(),
554561
Contract: wc.cfg.BtcStakingContractAddress,

clientcontroller/factory.go

+11-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package clientcontroller
33
import (
44
"fmt"
55

6+
bbnclient "github.com/babylonlabs-io/babylon/client/client"
67
"github.com/babylonlabs-io/finality-provider/clientcontroller/api"
78
"github.com/babylonlabs-io/finality-provider/clientcontroller/babylon"
89
"github.com/babylonlabs-io/finality-provider/clientcontroller/cosmwasm"
@@ -18,9 +19,16 @@ const (
1819
WasmConsumerChainType = "wasm"
1920
)
2021

21-
// NewClientController TODO: this is always going to be babylon so rename accordingly
22-
func NewClientController(config *fpcfg.Config, logger *zap.Logger) (api.ClientController, error) {
23-
cc, err := babylon.NewBabylonController(config.BabylonConfig, &config.BTCNetParams, logger)
22+
func NewBabylonController(config *fpcfg.Config, logger *zap.Logger) (api.ClientController, error) {
23+
bbnConfig := fpcfg.BBNConfigToBabylonConfig(config.BabylonConfig)
24+
bbnClient, err := bbnclient.New(
25+
&bbnConfig,
26+
logger,
27+
)
28+
if err != nil {
29+
return nil, fmt.Errorf("failed to create Babylon rpc client: %w", err)
30+
}
31+
cc, err := babylon.NewBabylonController(bbnClient, config.BabylonConfig, &config.BTCNetParams, logger)
2432
if err != nil {
2533
return nil, fmt.Errorf("failed to create Babylon rpc client: %w", err)
2634
}

clientcontroller/opstackl2/consumer.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"math"
99
"math/big"
1010

11+
"github.com/babylonlabs-io/babylon/client/babylonclient"
1112
bbnclient "github.com/babylonlabs-io/babylon/client/client"
1213
btcstakingtypes "github.com/babylonlabs-io/babylon/x/btcstaking/types"
1314
sdkquerytypes "github.com/cosmos/cosmos-sdk/types/query"
@@ -27,7 +28,6 @@ import (
2728
"github.com/btcsuite/btcd/btcec/v2/schnorr"
2829
cmtcrypto "github.com/cometbft/cometbft/proto/tendermint/crypto"
2930
sdk "github.com/cosmos/cosmos-sdk/types"
30-
"github.com/cosmos/relayer/v2/relayer/provider"
3131
"github.com/ethereum/go-ethereum/common/hexutil"
3232
ethtypes "github.com/ethereum/go-ethereum/core/types"
3333
"github.com/ethereum/go-ethereum/ethclient"
@@ -122,17 +122,22 @@ func NewCwClient(cwConfig *cwconfig.CosmwasmConfig, logger *zap.Logger) (*cwclie
122122
return cwClient, nil
123123
}
124124

125-
func (cc *OPStackL2ConsumerController) ReliablySendMsg(msg sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*provider.RelayerTxResponse, error) {
125+
func (cc *OPStackL2ConsumerController) ReliablySendMsg(msg sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*babylonclient.RelayerTxResponse, error) {
126126
return cc.reliablySendMsgs([]sdk.Msg{msg}, expectedErrs, unrecoverableErrs)
127127
}
128128

129-
func (cc *OPStackL2ConsumerController) reliablySendMsgs(msgs []sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*provider.RelayerTxResponse, error) {
130-
return cc.CwClient.ReliablySendMsgs(
129+
func (cc *OPStackL2ConsumerController) reliablySendMsgs(msgs []sdk.Msg, expectedErrs []*sdkErr.Error, unrecoverableErrs []*sdkErr.Error) (*babylonclient.RelayerTxResponse, error) {
130+
resp, err := cc.CwClient.ReliablySendMsgs(
131131
context.Background(),
132132
msgs,
133133
expectedErrs,
134134
unrecoverableErrs,
135135
)
136+
if err != nil {
137+
return nil, err
138+
}
139+
140+
return types.NewBabylonTxResponse(resp), nil
136141
}
137142

138143
// CommitPubRandList commits a list of Schnorr public randomness to Babylon CosmWasm contract

docs/finality-provider-operation.md

+6-1
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,8 @@ your finality provider's details:
580580
"status": "REGISTERED"
581581
}
582582
"tx_hash": "C08377CF289DF0DC5FA462E6409ADCB65A3492C22A112C58EA449F4DC544A3B1"
583-
}
583+
}
584+
Your finality provider is successfully created. Please restart your fpd.
584585
```
585586

586587
The response includes:
@@ -623,6 +624,10 @@ by running:
623624
fpd start --eots-pk <hex-string-of-eots-public-key>
624625
```
625626

627+
If `--eots-pk` is not specified, the command will start the finality provider
628+
if it is the only one stored in the database. If multiple finality providers
629+
are in the database, specifying `--eots-pk` is required.
630+
626631
### 5.2. Editing your finality provider
627632

628633
If you need to edit your finality provider's information, you can use the

0 commit comments

Comments
 (0)