-
Notifications
You must be signed in to change notification settings - Fork 40
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add upgrade to insert BTC headers Should be merged after #16
- Loading branch information
1 parent
f6ca3ec
commit 1e03cca
Showing
36 changed files
with
722 additions
and
113 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,10 +13,8 @@ jobs: | |
uses: babylonlabs-io/.github/.github/workflows/[email protected] | ||
with: | ||
run-unit-tests: true | ||
run-integration-tests: true | ||
run-integration-tests: false | ||
run-lint: true | ||
integration-tests-command: | | ||
sudo make test-e2e | ||
|
||
docker_pipeline: | ||
uses: babylonlabs-io/.github/.github/workflows/[email protected] | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# Signet Launch | ||
|
||
This folder contains a software upgrade for testing purposes. | ||
DO NOT USE IN PRODUCTION! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
package signetlaunch | ||
|
||
const NewBtcHeadersStr = `{ | ||
"btc_headers": [ | ||
{ | ||
"header": "00000020f61eee3b63a380a477a063af32b2bbc97c9ff9f01f2c4225e973988108000000f575c83235984e7dc4afc1f30944c170462e84437ab6f2d52e16878a79e4678bd1914d5fae77031eccf40700" | ||
}, | ||
{ | ||
"header": "00000020533b53ded9bff4adc94101d32400a144c54edc5ed492a3b26c63b2d686000000b38fef50592017cfafbcab88eb3d9cf50b2c801711cad8299495d26df5e54812e7914d5fae77031ecfdd0b00" | ||
}, | ||
{ | ||
"header": "000000202960f3752f0bfa8858a3e333294aedc7808025e868c9dc03e71d88bb320000007765fcd3d5b4966beb338bba2675dc2cf2ad28d4ad1d83bdb6f286e7e27ac1f807924d5fae77031e81d60b00" | ||
}, | ||
{ | ||
"header": "00000020b06443a13ae1d3d50faef5ecad38c6818194dc46abca3e972e2aacdae800000069a5829097e80fee00ac49a56ea9f82d741a6af84d32b3bc455cf31871e2a8ac27924d5fae77031e9c910500" | ||
}, | ||
{ | ||
"header": "000000207ed403758a4f228a1939418a155e2ebd4ae6b26e5ffd0ae433123f7694010000542e80b609c5bc58af5bdf492e26d4f60cd43a3966c2e063c50444c29b3757a636924d5fae77031ee8601d00" | ||
}, | ||
{ | ||
"header": "000000205bea0a88d1422c3df08d766ad72df95084d0700e6f873b75dd4e986c7703000002b57516d33ed60c2bdd9f93d6d5614083324c837e68e5ba6e04287a7285633585924d5fae77031ed1719600" | ||
}, | ||
{ | ||
"header": "00000020daf3b60d374b19476461f97540498dcfa2eb7016238ec6b1d022f82fb60100007a7ae65b53cb988c2ec92d2384996713821d5645ffe61c9acea60da75cd5edfa1a944d5fae77031e9dbb0500" | ||
}, | ||
{ | ||
"header": "00000020457cc5f3c2e1a5655bc20e20e48d33e1b7ea68786c614032b5c518f0b6000000541f36942d82c6e7248275ff15c8933487fbe1819c67a9ecc0f4b70bb7e6cf672a944d5fae77031e8f398600" | ||
}, | ||
{ | ||
"header": "00000020a2eb61eb4f3831baa3a3363e1b42db4462663f756f07423e81ed30322102000077224de7dea0f8d0ec22b1d2e2e255f0a987b96fe7200e1a2e6373f48a2f5b7894954d5fae77031e36867e00" | ||
}, | ||
{ | ||
"header": "00000020a868e8514be5e46dabd6a122132f423f36a43b716a40c394e2a8d063e1010000f4c6c717e99d800c699c25a2006a75a0c5c09f432a936f385e6fce139cdbd1a5e9964d5fae77031e7d026e00" | ||
}, | ||
{ | ||
"header": "000000205b969d72d19a47f39703c89a0cdb9eada8c4db934064f30e31f89a8e41010000949eef89068ffc76bf4dca6762e26581d410d0df40edf147d4ffdc6dea404a1512984d5fae77031ee67c1200" | ||
}, | ||
{ | ||
"header": "000000209410d824b5c57e762922a4035d300bd1d24db4e57b130ff7762ae5df4c030000532299955b2dc6bd7c13c267d3c0990fefdf7aec3bcbab5b2c85d0d36316f93644984d5fae77031ecdea1600" | ||
}, | ||
{ | ||
"header": "0000002009f649453a4079cb1d1beb138ea915d2355788bd4689785ecf7a265d3700000010bd26b43a88350e614736674431e62cc7c77dc577d07edd80620a02339d5fab82984d5fae77031efe682400" | ||
}, | ||
{ | ||
"header": "0000002035b9ff9157a6e7b5b9ee3807b8246ab687d2ee340f5b0f86cd0e2798aa00000028ef48260b3c0d45bbe5321335b05dde8fcb130e063202457884585298b8a5dde4984d5fae77031ec0a08600" | ||
}, | ||
{ | ||
"header": "0000002086102ffb6fd14131a08faa1e87680d5470954ba9638f15b56b7345de500100009f423c63aa6d39330082b58808013a85af5a7f338a7a3587f0a85b587665e6174e9a4d5fae77031e79353a00" | ||
} | ||
] | ||
}` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
// This code is only for testing purposes. | ||
// DO NOT USE IN PRODUCTION! | ||
|
||
package signetlaunch | ||
|
||
import ( | ||
"bytes" | ||
"context" | ||
"errors" | ||
"fmt" | ||
|
||
store "cosmossdk.io/store/types" | ||
upgradetypes "cosmossdk.io/x/upgrade/types" | ||
"github.com/btcsuite/btcd/chaincfg" | ||
sdk "github.com/cosmos/cosmos-sdk/types" | ||
"github.com/cosmos/cosmos-sdk/types/module" | ||
|
||
"github.com/babylonlabs-io/babylon/app/keepers" | ||
appparams "github.com/babylonlabs-io/babylon/app/params" | ||
"github.com/babylonlabs-io/babylon/app/upgrades" | ||
bbn "github.com/babylonlabs-io/babylon/types" | ||
btclightkeeper "github.com/babylonlabs-io/babylon/x/btclightclient/keeper" | ||
btclighttypes "github.com/babylonlabs-io/babylon/x/btclightclient/types" | ||
) | ||
|
||
var Upgrade = upgrades.Upgrade{ | ||
UpgradeName: "signet-launch", | ||
CreateUpgradeHandler: CreateUpgradeHandler, | ||
StoreUpgrades: store.StoreUpgrades{}, | ||
} | ||
|
||
// CreateUpgradeHandler upgrade handler for launch. | ||
func CreateUpgradeHandler( | ||
mm *module.Manager, | ||
cfg module.Configurator, | ||
app upgrades.BaseAppParamManager, | ||
keepers *keepers.AppKeepers, | ||
) upgradetypes.UpgradeHandler { | ||
return func(context context.Context, _plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { | ||
ctx := sdk.UnwrapSDKContext(context) | ||
|
||
migrations, err := mm.RunMigrations(ctx, cfg, fromVM) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
if err := propLaunch(ctx, &keepers.BTCLightClientKeeper); err != nil { | ||
panic(err) | ||
} | ||
|
||
return migrations, nil | ||
} | ||
} | ||
|
||
// propLaunch runs the proposal of launch that is meant to insert new BTC Headers. | ||
func propLaunch( | ||
ctx sdk.Context, | ||
btcLigthK *btclightkeeper.Keeper, | ||
) error { | ||
newHeaders, err := LoadBTCHeadersFromData() | ||
if err != nil { | ||
return err | ||
} | ||
|
||
return insertBtcHeaders(ctx, btcLigthK, newHeaders) | ||
} | ||
|
||
// LoadBTCHeadersFromData returns the BTC headers load from the json string with the headers inside of it. | ||
func LoadBTCHeadersFromData() ([]*btclighttypes.BTCHeaderInfo, error) { | ||
cdc := appparams.DefaultEncodingConfig().Codec | ||
buff := bytes.NewBufferString(NewBtcHeadersStr) | ||
|
||
var gs btclighttypes.GenesisState | ||
err := cdc.UnmarshalJSON(buff.Bytes(), &gs) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
return gs.BtcHeaders, nil | ||
} | ||
|
||
func insertBtcHeaders( | ||
ctx sdk.Context, | ||
k *btclightkeeper.Keeper, | ||
btcHeaders []*btclighttypes.BTCHeaderInfo, | ||
) error { | ||
if len(btcHeaders) == 0 { | ||
return errors.New("no headers to insert") | ||
} | ||
|
||
headersBytes := make([]bbn.BTCHeaderBytes, len(btcHeaders)) | ||
for i, btcHeader := range btcHeaders { | ||
h := btcHeader | ||
headersBytes[i] = *h.Header | ||
} | ||
|
||
if err := k.InsertHeaders(ctx, headersBytes); err != nil { | ||
return err | ||
} | ||
|
||
allBlocks := k.GetMainChainFromWithLimit(ctx, 0, 1) | ||
isRetarget := btclighttypes.IsRetargetBlock(allBlocks[0], &chaincfg.SigNetParams) | ||
if !isRetarget { | ||
return fmt.Errorf("first header be a difficulty adjustment block") | ||
} | ||
return nil | ||
} |
Oops, something went wrong.