diff --git a/app/app.go b/app/app.go index ff2985d9..3de6aa1c 100644 --- a/app/app.go +++ b/app/app.go @@ -156,7 +156,6 @@ import ( // this line is used by starport scaffolding # stargate/app/moduleImport btccodec "github.com/sideprotocol/side/bitcoin/crypto/codec" - bitcoinkeys "github.com/sideprotocol/side/bitcoin/keys" ) const ( @@ -339,7 +338,7 @@ func New( SigningOptions: signing.Options{ AddressCodec: btcbridgecodec.NewBech32Codec( sdk.GetConfig().GetBech32AccountAddrPrefix(), - bitcoinkeys.Network.Bech32HRPSegwit, + bitcoin.Network.Bech32HRPSegwit, ), ValidatorAddressCodec: address.Bech32Codec{ Bech32Prefix: sdk.GetConfig().GetBech32ValidatorAddrPrefix(), @@ -445,7 +444,7 @@ func New( maccPerms, btcbridgecodec.NewBech32Codec( sdk.GetConfig().GetBech32AccountAddrPrefix(), - bitcoinkeys.Network.Bech32HRPSegwit, + bitcoin.Network.Bech32HRPSegwit, ), sdk.GetConfig().GetBech32AccountAddrPrefix(), authtypes.NewModuleAddress(govtypes.ModuleName).String(), @@ -1142,7 +1141,7 @@ func (app *App) AutoCliOpts() autocli.AppOptions { ModuleOptions: runtimeservices.ExtractAutoCLIOptions(app.ModuleManager.Modules), AddressCodec: btcbridgecodec.NewBech32Codec( sdk.GetConfig().GetBech32AccountAddrPrefix(), - bitcoinkeys.Network.Bech32HRPSegwit, + bitcoin.Network.Bech32HRPSegwit, ), ValidatorAddressCodec: authcodec.NewBech32Codec(sdk.GetConfig().GetBech32ValidatorAddrPrefix()), ConsensusAddressCodec: authcodec.NewBech32Codec(sdk.GetConfig().GetBech32ConsensusAddrPrefix()), diff --git a/app/config.go b/app/config.go index 8d562771..683c3310 100644 --- a/app/config.go +++ b/app/config.go @@ -4,7 +4,7 @@ import ( "github.com/cosmos/btcutil/bech32" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/sideprotocol/side/bitcoin/keys" + "github.com/sideprotocol/side/bitcoin" ) func init() { @@ -23,6 +23,6 @@ func init() { // config.SetBtcChainCfg(&chaincfg.TestNet3Params) config.Seal() - bech32.BITCOIN_HRP = keys.Network.Bech32HRPSegwit + bech32.BITCOIN_HRP = bitcoin.Network.Bech32HRPSegwit bech32.SIDE_HRP = AccountAddressPrefix } diff --git a/bitcoin/address_test.go b/bitcoin/address_test.go index 88bc8c1d..88bad920 100644 --- a/bitcoin/address_test.go +++ b/bitcoin/address_test.go @@ -5,9 +5,9 @@ import ( "testing" "github.com/btcsuite/btcd/btcutil" - "github.com/btcsuite/btcd/btcutil/bech32" "github.com/btcsuite/btcd/chaincfg" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/sideprotocol/side/bitcoin" "github.com/sideprotocol/side/bitcoin/keys/segwit" "github.com/sideprotocol/side/bitcoin/keys/taproot" "github.com/stretchr/testify/assert" @@ -37,7 +37,7 @@ func TestAddressEncodeDecode(t *testing.T) { } else if strings.HasPrefix(a, "bc1q") { assert.Equal(t, 33, len(addr.Bytes()), a) } else { - assert.Equal(t, 53, len(addr.Bytes()), a) + assert.Equal(t, 32, len(addr.Bytes()), a) } text_addr := addr.String() @@ -52,6 +52,7 @@ func TestGenKeys(t *testing.T) { conf := sdk.GetConfig() conf.SetBech32PrefixForAccount("side", "side") conf.Seal() + bitcoin.Network = &chaincfg.MainNetParams // hash := btcutil.Hash160([]byte{0, 3, 3, 3, 3, 3}) hash := make([]byte, 32, 32) @@ -59,35 +60,52 @@ func TestGenKeys(t *testing.T) { // sh, err := btcutil.NewAddressScriptHashFromHash(hash, &chaincfg.MainNetParams) // assert.NoError(t, err) - std, err := btcutil.NewAddressTaproot(hash, &chaincfg.MainNetParams) + std, err := btcutil.NewAddressTaproot(hash, bitcoin.Network) assert.NoError(t, err) assert.Equal(t, 32, len(std.AddressSegWit.ScriptAddress())) // println(std.ScriptAddress()) - text := std.AddressSegWit.EncodeAddress() - _, bte, err := bech32.Decode(text) - assert.NoError(t, err) - assert.Equal(t, 53, len(bte), text) - a_str := sdk.MustAccAddressFromBech32(text) - assert.Equal(t, 53, len(a_str.Bytes()), text) - assert.Equal(t, bte, a_str.Bytes()) - - addrs := []sdk.Address{sdk.AccAddress(taproot.GenPrivKey().PubKey().Address()), sdk.AccAddress(segwit.GenPrivKey().PubKey().Address())} - - for _, a := range addrs { - assert.Equal(t, true, strings.HasPrefix(a.String(), "bc"), a.String()) - if strings.HasPrefix(a.String(), "bc1p") { - assert.Equal(t, 53, len(a.Bytes()), a.String()) - a2, err := sdk.AccAddressFromBech32(a.String()) - assert.NoError(t, err) - assert.Equal(t, 53, len(a2.Bytes())) - } else { - assert.Equal(t, 33, len(a.Bytes()), a.String()) - } - // a2, err := sdk.AccAddressFromBech32(a.String()) - // assert.Equal(t, 53, len(a2.Bytes())) - // assert.NoError(t, err, a.String()) - // assert.Equal(t, a.Bytes(), a2.Bytes(), a.String()) - } + // text := std.AddressSegWit.EncodeAddress() + // _, bte, err := bech32.Decode(text) + // assert.NoError(t, err) + // assert.Equal(t, 53, len(bte), text) + // a_str := sdk.MustAccAddressFromBech32(text) + // assert.Equal(t, 53, len(a_str.Bytes()), text) + // assert.Equal(t, bte, a_str.Bytes()) + + // btcutil.DecodeAddress() + // println("taproot:", len(taproot.GenPrivKey().PubKey().Address())) + a := segwit.GenPrivKey().PubKey().Address() + t.Log("segwit:", len(a), sdk.AccAddress(a).String()) + + // aa, _ := btcutil.NewAddressWitnessPubKeyHash(a.Bytes(), keys.Network) + // t.Log("aa", aa.EncodeAddress()) + + b := taproot.GenPrivKey().PubKey().Address() + t.Log("taproot:", len(b), sdk.AccAddress(b).String()) + bb, _ := btcutil.NewAddressTaproot(b.Bytes(), bitcoin.Network) + t.Log("bb", bb.EncodeAddress()) + + // println("bech32:", text) + assert.Equal(t, sdk.AccAddress(b).String(), bb.EncodeAddress(), "bech32 address should be equal") + + // addrs := []sdk.Address{sdk.AccAddress(taproot.GenPrivKey().PubKey().Address()), sdk.AccAddress(segwit.GenPrivKey().PubKey().Address())} + + // for _, a := range addrs { + // println(len(a.Bytes()), a.String()) + // assert.Equal(t, true, strings.HasPrefix(a.String(), "bc"), a.String()) + // if strings.HasPrefix(a.String(), "bc1p") { + // assert.Equal(t, 32, len(a.Bytes()), a.String()) + // a2, err := sdk.AccAddressFromBech32(a.String()) + // assert.NoError(t, err) + // assert.Equal(t, 32, len(a2.Bytes())) + // } else { + // assert.Equal(t, 33, len(a.Bytes()), a.String()) + // } + // // a2, err := sdk.AccAddressFromBech32(a.String()) + // // assert.Equal(t, 53, len(a2.Bytes())) + // // assert.NoError(t, err, a.String()) + // // assert.Equal(t, a.Bytes(), a2.Bytes(), a.String()) + // } } func TestValAddressEncodeDecode(t *testing.T) { @@ -100,19 +118,25 @@ func TestValAddressEncodeDecode(t *testing.T) { vals := []string{ // "sidevaloper1qqwpwrc0qs0pvrc6rvrsxrc2p583vqstpgdqxxsmzgp3y9gfpvqp7srxm9c", // error case // "sidevaloper1qqgsc9gfrqfsyrgtp5wpjqgkqct3cqq4rq8pj9cspcgszzqtzv2ssmdxyv7", - "sidevaloper1pfakusycd3aful428aqm6ljclu36vk6rzxqvu72g9e7jzaukswgnqd7xhsc", - "sidevaloper1p8990duvf0d23jelthdl2qgwfrrylny5zul0awymk7j45cjtm52eqqq7yxc", - "sidevaloper1qfwqngtkrmlytqkqsd54k9t4htufp0hw9sndewh", + "sidevaloper1qq9qjpswp5t3j9c8pq93xrc7zsysqpq6r5dqvpczpqz3yzqfrqwsc0aalqh", + "sidevaloper1l90rhzz8tka095tpvhjgzamvsvxyqhu34e9335l9npy2zx83lmcq9y82l7", + "sidevaloper1qqy3sqqmpv83xqcfry8qvyqazvqp6qqgru23y9q2q52swxggqg8sya58uzu", + "sidevaloper1qq0pkzghzcvsz8qwzcqq6xs6rv8qwxctzyzqq8shzy9qu8qhrcgsq8gftvt", + "sidevaloper1qqr3wzgzqvpqxycjzyr3kzcequxskxqxzydsjqgeqygq2xqxqgtpuaaajmf", + "sidevaloper1yezttrzdh00zmtzzfau9vuy360hxkjnl3gfxw2jzfqz67d8t8myq79pv5g", } for _, a := range vals { addr, err := sdk.ValAddressFromBech32(a) assert.NoError(t, err, "invalid address "+a) + t.Log("addr", addr.String()) if strings.HasPrefix(a, "sidevaloper1p") { - assert.Equal(t, 53, len(addr)) - } else { assert.Equal(t, 33, len(addr)) + } else if strings.HasPrefix(a, "sidevaloper1q") { + assert.Equal(t, 33, len(addr)) + } else { + assert.Equal(t, 32, len(addr)) } text_addr := addr.String() diff --git a/bitcoin/bech32/bech32.go b/bitcoin/bech32/bech32.go deleted file mode 100644 index 5a47f6c8..00000000 --- a/bitcoin/bech32/bech32.go +++ /dev/null @@ -1,119 +0,0 @@ -package bech32 - -import ( - "fmt" - "strings" - - "github.com/btcsuite/btcd/btcutil" - "github.com/btcsuite/btcd/btcutil/bech32" - - "github.com/sideprotocol/side/bitcoin/keys" -) - -// ConvertAndEncode converts from a base256 encoded byte string to base32 encoded byte string and then to bech32. -func ConvertAndEncode(hrp string, data []byte) (string, error) { - - // use length of hrp to determine if it is an account address - // check if address is a taproot/sigwit address - if len(hrp) < 6 { - if len(data) == 32 { // taproot - return encodeSegWitAddress(keys.Network.Bech32HRPSegwit, 1, data) - } - // segwit address - bitcoinBech32, err := bech32.Encode(keys.Network.Bech32HRPSegwit, data) - if IsBitCoinAddr(bitcoinBech32) == "segwit" && err == nil { - return bitcoinBech32, err - } - } - - // other cosmos addresses - converted, err := bech32.ConvertBits(data, 8, 5, true) - if err != nil { - return "", fmt.Errorf("encoding bech32 failed: %w", err) - } - return bech32.Encode(hrp, converted) -} - -// DecodeAndConvert decodes a bech32 encoded string and converts to base256 encoded bytes. -func DecodeAndConvert(bech string) (string, []byte, error) { - - addrType := IsBitCoinAddr(bech) - - if addrType == "taproot" { - addr, err := btcutil.DecodeAddress(bech, keys.Network) - if err != nil { - return "", nil, fmt.Errorf("decoding taproot bech32 failed: %w", err) - } - return keys.Network.Bech32HRPSegwit, addr.ScriptAddress(), nil - } else if addrType == "segwit" { - hrp, data, err := bech32.Decode(bech) - if err != nil { - return "", nil, fmt.Errorf("decoding segwit bech32 failed: %w", err) - } - return hrp, data, nil - } - - hrp, data, err := bech32.Decode(bech) - if err != nil { - return "", nil, fmt.Errorf("decoding bech32 failed: %w", err) - } - - converted, err := bech32.ConvertBits(data, 5, 8, false) - if err != nil { - return "", nil, fmt.Errorf("decoding bech32 failed: %w", err) - } - return hrp, converted, nil - -} - -func IsBitCoinAddr(bech string) string { - if strings.HasPrefix(bech, keys.Network.Bech32HRPSegwit+"1q") && len(bech) == 42 { - return "segwit" - } else if strings.HasPrefix(bech, keys.Network.Bech32HRPSegwit+"1p") && len(bech) == 62 { - return "taproot" - } - return "cosmos" -} - -func encodeSegWitAddress(hrp string, witnessVersion byte, witnessProgram []byte) (string, error) { - // Group the address bytes into 5 bit groups, as this is what is used to - // encode each character in the address string. - converted, err := bech32.ConvertBits(witnessProgram, 8, 5, true) - if err != nil { - return "", err - } - - // Concatenate the witness version and program, and encode the resulting - // bytes using bech32 encoding. - combined := make([]byte, len(converted)+1) - combined[0] = witnessVersion - copy(combined[1:], converted) - - var bech string - switch witnessVersion { - case 0: - bech, err = bech32.Encode(hrp, combined) - - case 1: - bech, err = bech32.EncodeM(hrp, combined) - - default: - return "", fmt.Errorf("unsupported witness version %d", - witnessVersion) - } - if err != nil { - return "", err - } - - // Check validity by decoding the created address. - // version, program, err := decodeSegWitAddress(bech) - // if err != nil { - // return "", fmt.Errorf("invalid segwit address: %v", err) - // } - - // if version != witnessVersion || !bytes.Equal(program, witnessProgram) { - // return "", fmt.Errorf("invalid segwit address") - // } - - return bech, nil -} diff --git a/bitcoin/config.go b/bitcoin/config.go index dbca8dc8..91094be6 100644 --- a/bitcoin/config.go +++ b/bitcoin/config.go @@ -2,6 +2,7 @@ package bitcoin import ( storetypes "cosmossdk.io/store/types" + "github.com/btcsuite/btcd/chaincfg" "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/keyring" "github.com/cosmos/cosmos-sdk/types/tx/signing" @@ -12,6 +13,7 @@ import ( ) var ( + Network = &chaincfg.TestNet3Params KeyringOption = func(options *keyring.Options) { options.SupportedAlgos = keyring.SigningAlgoList{hd.Secp256k1, SegWit, Taproot} options.SupportedAlgosLedger = keyring.SigningAlgoList{hd.Secp256k1} diff --git a/bitcoin/keys/chaincfg.go b/bitcoin/keys/chaincfg.go deleted file mode 100644 index e505c36b..00000000 --- a/bitcoin/keys/chaincfg.go +++ /dev/null @@ -1,7 +0,0 @@ -package keys - -import "github.com/btcsuite/btcd/chaincfg" - -var ( - Network = &chaincfg.TestNet3Params -) diff --git a/bitcoin/keys/segwit/segwit.go b/bitcoin/keys/segwit/segwit.go index aa0583cc..4179fc26 100644 --- a/bitcoin/keys/segwit/segwit.go +++ b/bitcoin/keys/segwit/segwit.go @@ -10,7 +10,7 @@ import ( secp256k1 "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/btcutil" - "github.com/sideprotocol/side/bitcoin/keys" + "github.com/btcsuite/btcd/btcutil/bech32" "github.com/cometbft/cometbft/crypto" @@ -18,7 +18,6 @@ import ( //nolint: staticcheck - "github.com/cosmos/btcutil/bech32" "github.com/cosmos/cosmos-sdk/codec" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/types/errors" @@ -164,28 +163,19 @@ func (pubKey *PubKey) Address() crypto.Address { witnessProg := btcutil.Hash160(pubKey.Bytes()) - bech32Address, err := btcutil.NewAddressWitnessPubKeyHash(witnessProg, keys.Network) + converted, err := bech32.ConvertBits(witnessProg, 8, 5, true) if err != nil { - panic(err) + panic(err) // Handle this as needed } - _, bz, err1 := bech32.Decode(bech32Address.String(), 1023) - if err1 != nil { - panic(err1) - } - return crypto.Address(bz) - // converted, err := bech32.ConvertBits(witnessProgram, 8, 5, true) - // if err != nil { - // panic(err) - // } + // Concatenate the witness version and program, and encode the resulting + // bytes using bech32 encoding. + combined := make([]byte, len(converted)+1) + combined[0] = 0x0 + copy(combined[1:], converted) - // // Concatenate the witness version and program, and encode the resulting - // // bytes using bech32 encoding. - // combined := make([]byte, len(converted)+1) - // combined[0] = 0x0 - // copy(combined[1:], converted) + return crypto.Address(combined) - // return crypto.Address(combined) } // Bytes returns the pubkey byte format. diff --git a/bitcoin/keys/segwit/segwit_test.go b/bitcoin/keys/segwit/segwit_test.go index 58108439..3e3b0ea5 100644 --- a/bitcoin/keys/segwit/segwit_test.go +++ b/bitcoin/keys/segwit/segwit_test.go @@ -46,6 +46,12 @@ func TestNumbers(t *testing.T) { func TestSegwit(t *testing.T) { mnemonic := "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" seed := bip39.NewSeed(mnemonic, "") + expected_address := "bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu" + + SIDE_HRP := "bc" + sdk.GetConfig().SetBech32PrefixForAccount(SIDE_HRP, SIDE_HRP) + sdk.GetConfig().Seal() + bech32.SIDE_HRP = SIDE_HRP masterKey, chParams := hd.ComputeMastersFromSeed(seed) derivedPrivKey, err := hd.DerivePrivateKeyForPath(masterKey, chParams, "m/84'/0'/0'/0/0") @@ -62,9 +68,14 @@ func TestSegwit(t *testing.T) { verify := pubKey.VerifySignature([]byte("1234"), sig) assert.True(t, verify, "Verify should be true") + assert.Equal(t, 33, len(pubKey.Address().Bytes()), "Address length should be 33 bytes") bech32Address, err := bech32.Encode("bc", pubKey.Address().Bytes()) // bech32Address, err := segwit.BitCoinAddr(pubKey.Bytes()) assert.NoError(t, err) + + // bech32Address = sdk.AccAddress(pubKey.Address()).String() + + require.Equal(t, expected_address, bech32Address, "Address should be equal to expected address") t.Logf("Generated SegWit Address: %s", bech32Address) // Check if the Bech32 encoded address has the correct prefix and structure. assert.True(t, strings.HasPrefix(bech32Address, "bc1q"), "Address should start with 'bc1q'") @@ -82,8 +93,7 @@ func TestSegwit(t *testing.T) { //hrp, bz, err := bech32.Decode("bc1qc2zm9xeje96yh6st7wmy60mmsteemsm3tfr2tn", 1000) assert.NoError(t, err) println(hrp, bz) - sdk.GetConfig().SetBech32PrefixForAccount("bc", "bc") - sdk.GetConfig().Seal() + acc, err := sdk.AccAddressFromBech32(bech32Address) require.NoError(t, err) t.Logf("Generated SegWit Address: %s", acc) diff --git a/bitcoin/keys/taproot/taproot.go b/bitcoin/keys/taproot/taproot.go index 0606af5c..99bcc70e 100644 --- a/bitcoin/keys/taproot/taproot.go +++ b/bitcoin/keys/taproot/taproot.go @@ -152,7 +152,7 @@ var ( // PubKeySize is comprised of 32 bytes for one field element // (the x-coordinate), plus one byte for the parity of the y-coordinate. -const PubKeySize = 32 +const PubKeySize = 33 // Address returns a Bitcoin style addresses: RIPEMD160(SHA256(pubkey)) func (pubKey *PubKey) Address() crypto.Address { @@ -167,19 +167,7 @@ func (pubKey *PubKey) Address() crypto.Address { tp := txscript.ComputeTaprootKeyNoScript(pk) witnessProg := schnorr.SerializePubKey(tp) - return crypto.Address(witnessProg) - // converted, err := bech32.ConvertBits(witnessProg, 8, 5, true) - // if err != nil { - // panic(err) - // } - - // // Concatenate the witness version and program, and encode the resulting - // // bytes using bech32 encoding. - // combined := make([]byte, len(converted)+1) - // combined[0] = 0x1 - // copy(combined[1:], converted) - // return crypto.Address(combined) } diff --git a/bitcoin/keys/taproot/taproot_test.go b/bitcoin/keys/taproot/taproot_test.go index c36c994d..b9a89413 100644 --- a/bitcoin/keys/taproot/taproot_test.go +++ b/bitcoin/keys/taproot/taproot_test.go @@ -1,17 +1,13 @@ package taproot_test import ( - "encoding/hex" "testing" - secp256k1 "github.com/btcsuite/btcd/btcec/v2" - "github.com/btcsuite/btcd/btcec/v2/schnorr" - "github.com/btcsuite/btcd/btcutil" - "github.com/btcsuite/btcd/chaincfg" - "github.com/btcsuite/btcd/txscript" + "github.com/cosmos/btcutil/bech32" "github.com/cosmos/cosmos-sdk/crypto/hd" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/go-bip39" - "github.com/stretchr/testify/assert" + "github.com/sideprotocol/side/bitcoin/keys/taproot" "github.com/stretchr/testify/require" ) @@ -24,32 +20,33 @@ func TestTaproot(t *testing.T) { // t.Log(hrp, data) t.Log("expectedAddress:", expectedAddress) - sec, chainCode := hd.ComputeMastersFromSeed(seed) - keyBytes, err := hd.DerivePrivateKeyForPath(sec, chainCode, "m/86'/0'/0'/0/0") + SIDE_HRP := "bc" + sdk.GetConfig().SetBech32PrefixForAccount(SIDE_HRP, SIDE_HRP) + sdk.GetConfig().Seal() + bech32.SIDE_HRP = SIDE_HRP - require.NoError(t, err, "DerivePrivateKeyForPath should not fail") - t.Logf("pr: %v", hex.EncodeToString(keyBytes)) + sec, chainCode := hd.ComputeMastersFromSeed(seed) + derivedPrivKey, err := hd.DerivePrivateKeyForPath(sec, chainCode, "m/86'/0'/0'/0/0") + require.NoError(t, err, "Private key derivation should not fail") - _, pubKey := secp256k1.PrivKeyFromBytes(keyBytes) - t.Logf("pk: %v", hex.EncodeToString(pubKey.SerializeCompressed())) + priv := taproot.PrivKey{Key: derivedPrivKey} + pubkey := priv.PubKey() - tp := txscript.ComputeTaprootKeyNoScript(pubKey) - assert.NotNil(t, tp, "Taproot key should not be nil") - t.Logf("pk: %v", hex.EncodeToString(tp.SerializeCompressed())) + msg := []byte("1234") - // comp := tp.SerializeCompressed() - witnessProg := schnorr.SerializePubKey(tp) - require.Equal(t, 32, len(witnessProg), "Witness program should be 32 bytes") - tpaddress, err := btcutil.NewAddressTaproot(witnessProg, &chaincfg.MainNetParams) - assert.NoError(t, err, "NewAddressTaproot should not fail") - tpaddressStr := tpaddress.EncodeAddress() - t.Log("tpaddressStr:", tpaddressStr) - require.Equal(t, expectedAddress, tpaddressStr, "Address should match") + sig, err := priv.Sign(msg) + require.NoError(t, err, "Sign should not fail") + v := pubkey.VerifySignature(msg, sig) + require.True(t, v, "Signature should be valid") - // verify := pubKey.VerifySignature([]byte("1234"), sig) - // assert.True(t, verify, "Verify should be true") + // bech32Address, err := bech32.Encode("bc", pubkey.Address().Bytes()) + // bech32Address, err := segwit.BitCoinAddr(pubKey.Bytes()) - // bech32Address, err := bech32.Encode("bc", pubKey.Address().Bytes()) + require.Equal(t, 32, len(pubkey.Address()), "Address should be 32 bytes") + // require.Equal(t, expectedAddress, sdk.AccAddress(pubkey.Address()).String(), "Public key should be 33 bytes") + bech32Address, err := bech32.Encode("bc", pubkey.Address()) + require.NoError(t, err, "Bech32 encoding should not fail") + require.Equal(t, expectedAddress, bech32Address, "Bech32 address should match") // // bech32Address, err := segwit.BitCoinAddr(pubKey.Bytes()) // assert.NoError(t, err) // t.Logf("Generated SegWit Address: %s", bech32Address) @@ -65,15 +62,6 @@ func TestTaproot(t *testing.T) { // println(hrp, version, data) // t.Log(hrp) - // hrp, bz, err := bech32.Decode(bech32Address, 1000) - // //hrp, bz, err := bech32.Decode("bc1qc2zm9xeje96yh6st7wmy60mmsteemsm3tfr2tn", 1000) - // assert.NoError(t, err) - // println(hrp, bz) - // sdk.GetConfig().SetBech32PrefixForAccount("bc", "bc") - // sdk.GetConfig().Seal() - // acc, err := sdk.AccAddressFromBech32(bech32Address) - // require.NoError(t, err) - // t.Logf("Generated SegWit Address: %s", acc) // // addr := []byte{123, 95, 226, 43, 84, 70, 247, 198, 46, 162, 123, 139, 215, 28, 239, 148, 224, 63, 61, 242} // // _, err = sdkbech32.ConvertAndEncode("bc", addr) diff --git a/go.mod b/go.mod index cd8dacaf..47898ae4 100644 --- a/go.mod +++ b/go.mod @@ -274,7 +274,7 @@ require ( ) replace ( - github.com/cosmos/btcutil => github.com/sideprotocol/btcutil v0.1.1 + github.com/cosmos/btcutil => github.com/sideprotocol/btcutil v0.1.2 // github.com/cosmos/btcutil => ../btcutil // Fix upstream GHSA-h395-qcrw-5vmq and GHSA-3vp4-m3rf-835h vulnerabilities. github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.1 diff --git a/go.sum b/go.sum index 7561dfb5..de021fe6 100644 --- a/go.sum +++ b/go.sum @@ -1098,8 +1098,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/shamaton/msgpack/v2 v2.2.0 h1:IP1m01pHwCrMa6ZccP9B3bqxEMKMSmMVAVKk54g3L/Y= github.com/shamaton/msgpack/v2 v2.2.0/go.mod h1:6khjYnkx73f7VQU7wjcFS9DFjs+59naVWJv1TB7qdOI= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sideprotocol/btcutil v0.1.1 h1:MQ/Ijo1JOspg8xZO7KH1fFyWZ3eFXM1VPx4kfXV9jVE= -github.com/sideprotocol/btcutil v0.1.1/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= +github.com/sideprotocol/btcutil v0.1.2 h1:k1xM12p9607/OSUIP73gwkl7Shs+J7ggNOU/lVvnyPE= +github.com/sideprotocol/btcutil v0.1.2/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= diff --git a/x/lending/types/lending.go b/x/lending/types/lending.go index ba2d301b..c084446a 100644 --- a/x/lending/types/lending.go +++ b/x/lending/types/lending.go @@ -10,7 +10,6 @@ import ( errorsmod "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/sideprotocol/side/bitcoin/crypto/adaptor" )