diff --git a/bsc/header.go b/bsc/header.go index 18e4a419b..75d1ade1b 100644 --- a/bsc/header.go +++ b/bsc/header.go @@ -6,10 +6,9 @@ import ( "io" "math/big" + "github.com/cosmos/cosmos-sdk/bsc/rlp" "github.com/tendermint/tendermint/crypto/secp256k1" "golang.org/x/crypto/sha3" - - "github.com/cosmos/cosmos-sdk/bsc/rlp" ) type Header struct { @@ -162,12 +161,12 @@ func (h *Header) GetSignature() ([]byte, error) { return signature, nil } -func (h *Header) ExtractSignerFromHeader() (signer Address, err error) { +func (h *Header) ExtractSignerFromHeader(chainID *big.Int) (signer Address, err error) { signature, err := h.GetSignature() if err != nil { return } - pubKey, err := secp256k1.RecoverPubkey(SealHash(h).Bytes(), signature) + pubKey, err := secp256k1.RecoverPubkey(SealHash(h, chainID).Bytes(), signature) if err != nil { return } @@ -185,15 +184,21 @@ func Keccak256(data ...[]byte) []byte { } // SealHash returns the hash of a block prior to it being sealed. -func SealHash(header *Header) (hash Hash) { +func SealHash(header *Header, chainID *big.Int) (hash Hash) { hasher := sha3.NewLegacyKeccak256() - encodeSigHeader(hasher, header) + encodeSigHeader(hasher, header, chainID) hasher.Sum(hash[:0]) return hash } -func encodeSigHeader(w io.Writer, header *Header) { - err := rlp.Encode(w, []interface{}{ +func encodeSigHeader(w io.Writer, header *Header, chainId *big.Int) { + var err error + var content = make([]interface{}, 0, 16) + + if chainId != nil { + content = append(content, chainId) + } + content = append(content, []interface{}{ header.ParentHash, header.UncleHash, header.Coinbase, @@ -209,7 +214,9 @@ func encodeSigHeader(w io.Writer, header *Header) { header.Extra[:len(header.Extra)-65], // this will panic if extra is too short, should check before calling encodeSigHeader header.MixDigest, header.Nonce, - }) + }...) + err = rlp.Encode(w, content) + if err != nil { panic("can't encode: " + err.Error()) } diff --git a/bsc/header_test.go b/bsc/header_test.go index bb867ab69..eb042e5ed 100644 --- a/bsc/header_test.go +++ b/bsc/header_test.go @@ -2,40 +2,40 @@ package bsc import ( "encoding/hex" + "math/big" "testing" "github.com/stretchr/testify/require" ) func TestHeader_UnmarshalJSON(t *testing.T) { + chainID := big.NewInt(56) h := &Header{} - jsonStr := `{"difficulty":"0x2", - "extraData":"0xd98301090a846765746889676f312e31322e3137856c696e75780000000000005b28385ac3a02a84c391c5d90b3aa0a62365136d80892c5e6158797b394f436c70c697f8d44d6dcfa49d4871897d2ff132356496f066d0adf28ddb3b7099ff5d00", - "gasLimit":"0x2625a00", - "gasUsed":"0xd752e8", - "hash":"0x14c62182b7138b45c400afccbebda3c68a78ca7a6100d3e1fe9e1e8e71ef2b66", - "logsBloom":"0x984e3983604a6120412617213b05004281984c60680c0cd0070200181d240016810500880001002b00055a0470461c09201145010c4e0729408998810a8800400a280247010848590804014800800454317020c88041a40248321010229290e68000011a808068002a56e2c41087114422a9841921a24ea709000430069010315e2c120124080610200cc18c137a0021206170070de90887502148600090002a50440040800905028a640401210c004089c20c4000e44054100cd00907642b4040900a920126454158b64181002d10014e80820508201c0480492880008c84102b0614804474840400413818940819042084c0042a002040498000c201309400", - "miner":"0xfffffffffffffffffffffffffffffffffffffffe", - "mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce":"0x0000000000000000", - "number":"0x1b4", - "parentHash":"0xbfbb0f930378e623c27c1b6888694abd63926581697cf70a268a7455497e1011", - "receiptsRoot":"0x32a9e85c5b51c5b99ce76dac6d1a75dd603bd7406b36d62cf8e74475c2be7462", - "sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "size":"0xd73c", - "stateRoot":"0xa20ff6190c7d8a7993a50a3d60bdeca460c19128ba363413f5bff57670ddccb1", - "timestamp":"0x5e79a878", - "totalDifficulty":"0x365", - "transactionsRoot":"0x8f192c648a6d9035adbf72a55cab5652e3c0d7549c378be45bd3d5248d4b3ac5" - }` + jsonStr := `{"parentHash":"0xa9c482b74a276389681eabff076b19bef53cae9b5e44f02224e70e3bfc4e9142", + "sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "miner":"0x72b61c6014342d914470ec7ac2975be345796c2b", + "stateRoot":"0xacd5bca0bc33ed07cb35a635fa674e4ce06211ba201500564dd14dcdaf53e5a9", + "transactionsRoot":"0xcb374b870584bd587dec2e82af38924a5c0d5765913568434c50448856f97a2c", + "receiptsRoot":"0x6f2dc6ade8cf9422d62abd8e8386f20576a6b1f31cc00aa83dba140d183cff16", + "logsBloom":"0xfcfef2ce9d78d29fcbfefbff9dfdf3afb23eff54be7efe7ffdb47abcffdff35fff7bf5de80e257fc836eb97fab43eef33dc7b7ffdfb7fcebfb3df6efff7fecfef473d6fe31dcbcebf7ffeff957b6fbbc6d1efb7ebfddbd3bddfeffded78df79ef3ff9ffd4fd67fcfdfdfff3fecdeddefddadf6ef802b5feaf6f4debffbd7ff9b1fcffff73ceb76fddcfd5f73ffff61bed4be7fb59fe77baebb746f4bcefbdebb76df77fdfb8b73bd2ffcf763b33ff7a6cfeefd7e36f6ed275ffa7fff7fbb996ff33bfbdfe76f23bfecf1ffcfceff3fefbd57b5f5dbfd7fde75cffff77ffffa7feefdf7ddef66f7db77fffd47efa6e5bf55f7fef3ebfbbdf3b1fe77f93ffacedf", + "difficulty":"0x2", + "number":"0x161d4e8", + "gasLimit":"0x7355c0c", + "gasUsed":"0x2134d60", + "timestamp":"0x6378bdd7", + "extraData":"0xd883010111846765746888676f312e31392e32856c696e757800000040fc9c67c61ee4a053e5ec524393cb2608e7a1b0de9a91f880095cd7bfc009b8e0ab5de96c2085a484239f38ca437bc805d2df9b88ea2a9a2a1ce9f5ab6005ae3464b17601", + "mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce":"0x0000000000000000", + "baseFeePerGas":null, + "hash":"0x8b6eeece6cedbb23038e7e5c2ce647fbdffa04972247d60a7564e81897e8bc30"}` err := h.UnmarshalJSON([]byte(jsonStr)) require.NoError(t, err) signature, err := h.GetSignature() require.NoError(t, err) - require.Equal(t, "5b28385ac3a02a84c391c5d90b3aa0a62365136d80892c5e6158797b394f436c70c697f8d44d6dcfa49d4871897d2ff132356496f066d0adf28ddb3b7099ff5d00", hex.EncodeToString(signature)) + require.Equal(t, "c61ee4a053e5ec524393cb2608e7a1b0de9a91f880095cd7bfc009b8e0ab5de96c2085a484239f38ca437bc805d2df9b88ea2a9a2a1ce9f5ab6005ae3464b17601", hex.EncodeToString(signature)) - signer, err := h.ExtractSignerFromHeader() + signer, err := h.ExtractSignerFromHeader(chainID) require.NoError(t, err) - require.Equal(t, "0xB12fA6F899a16C156B67dBcb124d3733E72A164E", signer.String()) + require.Equal(t, "0x72b61c6014342d914470eC7aC2975bE345796c2b", signer.String()) } diff --git a/go.mod b/go.mod index fd7d5985a..f2f2f8930 100644 --- a/go.mod +++ b/go.mod @@ -60,7 +60,7 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/zondax/hid v0.9.0 // indirect golang.org/x/net v0.0.0-20191021144547-ec77196f6094 // indirect - golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 // indirect + golang.org/x/sys v0.2.0 // indirect golang.org/x/text v0.3.2 // indirect google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb // indirect google.golang.org/grpc v1.23.0 // indirect diff --git a/go.sum b/go.sum index b739d7ad2..9a7da2f11 100644 --- a/go.sum +++ b/go.sum @@ -273,6 +273,8 @@ golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= diff --git a/types/upgrade.go b/types/upgrade.go index 8d625a64d..a21c7c8a6 100644 --- a/types/upgrade.go +++ b/types/upgrade.go @@ -16,6 +16,7 @@ const ( BEP128 = "BEP128" //https://github.com/bnb-chain/BEPs/pull/128 BEP153 = "BEP153" //https://github.com/bnb-chain/BEPs/pull/153 BEP173 = "BEP173" //https://github.com/bnb-chain/BEPs/pull/173 + FixDoubleSignChainId = "FixDoubleSignChainId" ) var MainNetConfig = UpgradeConfig{ diff --git a/x/slashing/handler.go b/x/slashing/handler.go index e6a6f821c..a4026b72e 100644 --- a/x/slashing/handler.go +++ b/x/slashing/handler.go @@ -1,9 +1,32 @@ package slashing import ( + "fmt" + "math/big" + "strings" + sdk "github.com/cosmos/cosmos-sdk/types" ) +var ( + SideChainIdBsc = big.NewInt(56) + SideChainIdChapel = big.NewInt(97) + SideChainIdRialto = big.NewInt(714) +) + +func SideChainIdFromText(str string) (*big.Int, error) { + switch strings.ToLower(str) { + case "bsc": + return SideChainIdBsc, nil + case "chapel": + return SideChainIdChapel, nil + case "rialto": + return SideChainIdRialto, nil + default: + return nil, fmt.Errorf("Provided sidechain name is not supported.") + } +} + func NewHandler(k Keeper) sdk.Handler { return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { // NOTE msg already has validate basic run diff --git a/x/slashing/handler_sidechain.go b/x/slashing/handler_sidechain.go index a30d09a32..ce37203ee 100644 --- a/x/slashing/handler_sidechain.go +++ b/x/slashing/handler_sidechain.go @@ -5,6 +5,7 @@ import ( "fmt" "time" + "github.com/cosmos/cosmos-sdk/bsc" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/fees" ) @@ -16,13 +17,28 @@ func handleMsgBscSubmitEvidence(ctx sdk.Context, msg MsgBscSubmitEvidence, k Kee return ErrInvalidSideChainId(DefaultCodespace).Result() } + chainID, err := SideChainIdFromText(sideChainId) + if err != nil { + return ErrInvalidEvidence(DefaultCodespace, err.Error()).Result() + } + header := ctx.BlockHeader() - sideConsAddr, err := msg.Headers[0].ExtractSignerFromHeader() + + var sideConsAddr bsc.Address + var sideConsAddr2 bsc.Address + var err2 error + + if sdk.IsUpgrade(sdk.FixDoubleSignChainId) { + sideConsAddr, err = msg.Headers[0].ExtractSignerFromHeader(chainID) + sideConsAddr2, err2 = msg.Headers[1].ExtractSignerFromHeader(chainID) + } else { + sideConsAddr, err = msg.Headers[0].ExtractSignerFromHeader(nil) + sideConsAddr2, err2 = msg.Headers[1].ExtractSignerFromHeader(nil) + } if err != nil { return ErrInvalidEvidence(DefaultCodespace, fmt.Sprintf("Failed to extract signer from block header, %s", err.Error())).Result() } - sideConsAddr2, err := msg.Headers[1].ExtractSignerFromHeader() - if err != nil { + if err2 != nil { return ErrInvalidEvidence(DefaultCodespace, fmt.Sprintf("Failed to extract signer from block header, %s", err.Error())).Result() } if bytes.Compare(sideConsAddr.Bytes(), sideConsAddr2.Bytes()) != 0 { diff --git a/x/slashing/handler_sidechain_test.go b/x/slashing/handler_sidechain_test.go index 463539305..8a23ea0ba 100644 --- a/x/slashing/handler_sidechain_test.go +++ b/x/slashing/handler_sidechain_test.go @@ -28,7 +28,7 @@ func TestSideChainSlashDoubleSign(t *testing.T) { ctx = ctx.WithBlockHeight(100) bondAmount := int64(10000e8) mValAddr := addrs[0] - mSideConsAddr, err := sdk.HexDecode("0x625448c3f21AB4636bBCef84Baaf8D6cCdE13c3F") + mSideConsAddr, err := sdk.HexDecode("0xed24ff64903c07B5bD57C898CE0967D407aFCB0d") require.Nil(t, err) mSideFeeAddr := createSideAddr(20) msgCreateVal := newTestMsgCreateSideValidator(mValAddr, mSideConsAddr, mSideFeeAddr, bondAmount) @@ -50,7 +50,7 @@ func TestSideChainSlashDoubleSign(t *testing.T) { ctx = ctx.WithBlockHeight(300) headers := make([]bsc.Header, 0) - headersJson := `[{"parentHash":"0x6116de25352c93149542e950162c7305f207bbc17b0eb725136b78c80aed79cc","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe7cb9d2fd449f7bd11126bff55266e7b74936f2f230e21d44d75c04b7780dfeb","transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x20000","number":"0x1","gasLimit":"0x47e7c4","gasUsed":"0x0","timestamp":"0x5ea6a002","extraData":"0x0000000000000000000000000000000000000000000000000000000000000000bb4a77b57c2a82de97b557442883ee19d481a415fc76d3833de83ba37f2d8674375f85fd96affd603244e3448a2b101c40511aa18ce8c1edf4e940dec648ac1300","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","hash":"0x1532065752393ff2f6e7ef9b64f80d6e10efe42a4d9bdd8149fcbac6f86b365b"},{"parentHash":"0x6116de25352c93149542e950162c7305f207bbc17b0eb725136b78c80aed79cc","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe7cb9d2fd449f7bd11126bff55266e7b74936f2f230e21d44d75c04b7780dfeb","transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x20000","number":"0x1","gasLimit":"0x47e7c4","gasUsed":"0x64","timestamp":"0x5ea6a002","extraData":"0x000000000000000000000000000000000000000000000000000000000000000055a9a47820e18c025d0b98a722c3fb83d28e4547e0090cbe5cc17683b7f25d5e18c6e359631ec10d9c08ceaafc9e9847de3de18694d073af9515638eee73c58e00","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","hash":"0x811a42453f826f05e9d85998551636f59eb740d5b03fe2416700058a4f31ca1e"}]` + headersJson := `[{"parentHash":"0x6116de25352c93149542e950162c7305f207bbc17b0eb725136b78c80aed79cc","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe7cb9d2fd449f7bd11126bff55266e7b74936f2f230e21d44d75c04b7780dfeb","transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x20000","number":"0x1","gasLimit":"0x47e7c4","gasUsed":"0x0","timestamp":"0x5ea6a002","extraData":"0x0000000000000000000000000000000000000000000000000000000000000000fc3e4bbcd4936a8e1fd9fc45461d071ca571ca80fbed85e0cc52e007ed557aff0a6ea1875b4e13171d301037036b3a26af3c7c2b317487323fd7557df717856b00","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","hash":"0x1532065752393ff2f6e7ef9b64f80d6e10efe42a4d9bdd8149fcbac6f86b365b"},{"parentHash":"0x6116de25352c93149542e950162c7305f207bbc17b0eb725136b78c80aed79cc","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe7cb9d2fd449f7bd11126bff55266e7b74936f2f230e21d44d75c04b7780dfeb","transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x20000","number":"0x1","gasLimit":"0x47e7c4","gasUsed":"0x64","timestamp":"0x5ea6a002","extraData":"0x00000000000000000000000000000000000000000000000000000000000000003a849df14e9cc1502f218431c449f239a51fddb1fd408ca37e61834adf921f0c21fd269c86acf7f0b40aa7ce691bbd7f446d8234a4a6b19a98c77614da9a5fcb01","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","hash":"0x811a42453f826f05e9d85998551636f59eb740d5b03fe2416700058a4f31ca1e"}]` err = json.Unmarshal([]byte(headersJson), &headers) require.Nil(t, err) @@ -87,7 +87,7 @@ func TestSideChainSlashDoubleSign(t *testing.T) { expectedAfterSubmitterBalance := submitterBalance + realSubmitterReward // send submit evidence tx ctx = ctx.WithBlockHeight(350).WithBlockTime(time.Now()) - headersJson = `[{"parentHash":"0x9dc70cfc956472119b82b6bbc1e6be139a68d03e99a4dcec1ccd0d9b4fd9c822","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x0988fe1673073b5e1c5f052e5a9a30ec871f90768041a7bfed5ee03f6304b138","transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x20000","number":"0x2","gasLimit":"0x47e7c4","gasUsed":"0x0","timestamp":"0x5eb8fc64","extraData":"0x0000000000000000000000000000000000000000000000000000000000000000e0c6926949e84f0adc499a615795e78114f994a6bb8e2861a24ed2d875e78a2971a87054001132fec64dfce5bbed65af5802d416ccfcb981856f8aa9e7edaa4d01","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","hash":"0x132a6caa72f3e5e98b086c5bcf2d7fe95ac612152114caca3e95bc8ec8e068a0"},{"parentHash":"0x9dc70cfc956472119b82b6bbc1e6be139a68d03e99a4dcec1ccd0d9b4fd9c822","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x0988fe1673073b5e1c5f052e5a9a30ec871f90768041a7bfed5ee03f6304b138","transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x20000","number":"0x2","gasLimit":"0x47e7c4","gasUsed":"0x64","timestamp":"0x5eb8fc64","extraData":"0x0000000000000000000000000000000000000000000000000000000000000000afb8c1b842fcbdd306415fb6efdd34bcfa2f03f68add76ef3a651e0c975a3b176d3f37b8819537cba69e79ac91926e8f43753c49daa113a6c42268b64f01f8f901","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","hash":"0x9c4f11247e697a75ba633f87112895d537156265bf52b6e85e43e551b4d1cb78"}]` + headersJson = `[{"parentHash":"0x9dc70cfc956472119b82b6bbc1e6be139a68d03e99a4dcec1ccd0d9b4fd9c822","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x0988fe1673073b5e1c5f052e5a9a30ec871f90768041a7bfed5ee03f6304b138","transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x20000","number":"0x2","gasLimit":"0x47e7c4","gasUsed":"0x0","timestamp":"0x5eb8fc64","extraData":"0x00000000000000000000000000000000000000000000000000000000000000001d5b50270c673b96065304de53acb9617ef235be1ab6a7c16d7a660c2b13a8c22f513f4f8f43f427d64cbe57e23cd73f86e1efc79cabc1a89392a9e1c267f57d00","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","hash":"0x132a6caa72f3e5e98b086c5bcf2d7fe95ac612152114caca3e95bc8ec8e068a0"},{"parentHash":"0x9dc70cfc956472119b82b6bbc1e6be139a68d03e99a4dcec1ccd0d9b4fd9c822","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0x0988fe1673073b5e1c5f052e5a9a30ec871f90768041a7bfed5ee03f6304b138","transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x20000","number":"0x2","gasLimit":"0x47e7c4","gasUsed":"0x64","timestamp":"0x5eb8fc64","extraData":"0x000000000000000000000000000000000000000000000000000000000000000065f3ddb3c4d6a42f220ead9cb60eebaef4f31f198dbfc18f3b226b84dde4f9232dca010aff3c8a647fe9e51a3f59b6e46fee461d456e69fafd33362faec0813601","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","hash":"0x9c4f11247e697a75ba633f87112895d537156265bf52b6e85e43e551b4d1cb78"}]` err = json.Unmarshal([]byte(headersJson), &headers) require.Nil(t, err) msgSubmitEvidence = NewMsgBscSubmitEvidence(submitter, headers) @@ -133,7 +133,7 @@ func TestSideChainSlashDoubleSignUBD(t *testing.T) { ctx = ctx.WithBlockHeight(100) bondAmount := int64(10000e8) mValAddr := addrs[0] - mSideConsAddr, err := sdk.HexDecode("0x625448c3f21AB4636bBCef84Baaf8D6cCdE13c3F") + mSideConsAddr, err := sdk.HexDecode("0xed24ff64903c07B5bD57C898CE0967D407aFCB0d") require.Nil(t, err) mSideFeeAddr := createSideAddr(20) msgCreateVal := newTestMsgCreateSideValidator(mValAddr, mSideConsAddr, mSideFeeAddr, bondAmount) @@ -156,7 +156,7 @@ func TestSideChainSlashDoubleSignUBD(t *testing.T) { ctx = ctx.WithBlockHeight(201) headers := make([]bsc.Header, 0) - headersJson := `[{"parentHash":"0x6116de25352c93149542e950162c7305f207bbc17b0eb725136b78c80aed79cc","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe7cb9d2fd449f7bd11126bff55266e7b74936f2f230e21d44d75c04b7780dfeb","transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x20000","number":"0x1","gasLimit":"0x47e7c4","gasUsed":"0x0","timestamp":"0x5ea6a002","extraData":"0x0000000000000000000000000000000000000000000000000000000000000000bb4a77b57c2a82de97b557442883ee19d481a415fc76d3833de83ba37f2d8674375f85fd96affd603244e3448a2b101c40511aa18ce8c1edf4e940dec648ac1300","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","hash":"0x1532065752393ff2f6e7ef9b64f80d6e10efe42a4d9bdd8149fcbac6f86b365b"},{"parentHash":"0x6116de25352c93149542e950162c7305f207bbc17b0eb725136b78c80aed79cc","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe7cb9d2fd449f7bd11126bff55266e7b74936f2f230e21d44d75c04b7780dfeb","transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x20000","number":"0x1","gasLimit":"0x47e7c4","gasUsed":"0x64","timestamp":"0x5ea6a002","extraData":"0x000000000000000000000000000000000000000000000000000000000000000055a9a47820e18c025d0b98a722c3fb83d28e4547e0090cbe5cc17683b7f25d5e18c6e359631ec10d9c08ceaafc9e9847de3de18694d073af9515638eee73c58e00","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","hash":"0x811a42453f826f05e9d85998551636f59eb740d5b03fe2416700058a4f31ca1e"}]` + headersJson := `[{"parentHash":"0x6116de25352c93149542e950162c7305f207bbc17b0eb725136b78c80aed79cc","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe7cb9d2fd449f7bd11126bff55266e7b74936f2f230e21d44d75c04b7780dfeb","transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x20000","number":"0x1","gasLimit":"0x47e7c4","gasUsed":"0x0","timestamp":"0x5ea6a002","extraData":"0x0000000000000000000000000000000000000000000000000000000000000000fc3e4bbcd4936a8e1fd9fc45461d071ca571ca80fbed85e0cc52e007ed557aff0a6ea1875b4e13171d301037036b3a26af3c7c2b317487323fd7557df717856b00","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","hash":"0x1532065752393ff2f6e7ef9b64f80d6e10efe42a4d9bdd8149fcbac6f86b365b"},{"parentHash":"0x6116de25352c93149542e950162c7305f207bbc17b0eb725136b78c80aed79cc","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","miner":"0x0000000000000000000000000000000000000000","stateRoot":"0xe7cb9d2fd449f7bd11126bff55266e7b74936f2f230e21d44d75c04b7780dfeb","transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","difficulty":"0x20000","number":"0x1","gasLimit":"0x47e7c4","gasUsed":"0x64","timestamp":"0x5ea6a002","extraData":"0x00000000000000000000000000000000000000000000000000000000000000003a849df14e9cc1502f218431c449f239a51fddb1fd408ca37e61834adf921f0c21fd269c86acf7f0b40aa7ce691bbd7f446d8234a4a6b19a98c77614da9a5fcb01","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","hash":"0x811a42453f826f05e9d85998551636f59eb740d5b03fe2416700058a4f31ca1e"}]` err = json.Unmarshal([]byte(headersJson), &headers) require.Nil(t, err)