# Debugging Multisig Txs 1. Ensure you have regen-ledger checked out at `v5.0.0` 2. Clone github.com/regen-network/cosmos-sdk into the parent directory of regen-ledger, and check out `v0.46.7-regen-2` Update regen-ledger's go.mod: ```diff --- a/go.mod +++ b/go.mod @@ -170,7 +170,7 @@ require ( replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 -replace github.com/cosmos/cosmos-sdk => github.com/regen-network/cosmos-sdk v0.46.7-regen-2 +replace github.com/cosmos/cosmos-sdk => ../cosmos-sdk // Fix upstream GHSA-h395-qcrw-5vmq vulnerability. // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 ``` Add the following PrintLn's in cosmos-sdk: ```diff --- a/client/tx/tx.go +++ b/client/tx/tx.go @@ -3,6 +3,7 @@ package tx import ( "bufio" "context" + b64 "encoding/base64" "encoding/json" "errors" "fmt" @@ -297,7 +298,12 @@ func Sign(txf Factory, name string, txBuilder client.TxBuilder, overwriteSig boo } // Generate the bytes to be signed. + fmt.Println("Signing transaction...") + fmt.Printf(" Sign Mode: %s\n", signMode.String()) + fmt.Printf(" Signer Data: %s\n", signerData) bytesToSign, err := txf.txConfig.SignModeHandler().GetSignBytes(signMode, signerData, txBuilder.GetTx()) + fmt.Printf(" Sign Bytes (str): %s\n", bytesToSign) + fmt.Printf(" Sign Bytes (base64): %s\n", b64.StdEncoding.EncodeToString(bytesToSign)) if err != nil { return err ``` ```diff --- a/x/auth/client/cli/tx_multisign.go +++ b/x/auth/client/cli/tx_multisign.go @@ -137,6 +137,9 @@ func makeMultiSignCmd() func(cmd *cobra.Command, args []string) (err error) { PubKey: sig.PubKey, } + fmt.Println("Verifying signature...") + fmt.Printf(" Sign Mode: %s\n", sig.Data.(*signingtypes.SingleSignatureData).SignMode.String()) + fmt.Printf(" Signer Data: %s\n", signingData) err = signing.VerifySignature(sig.PubKey, signingData, sig.Data , txCfg.SignModeHandler(), txBuilder.GetTx()) if err != nil { addr, _ := sdk.AccAddressFromHexUnsafe(sig.PubKey.Addre ss().String()) ``` ```diff --- a/x/auth/signing/verify.go +++ b/x/auth/signing/verify.go @@ -3,6 +3,7 @@ package signing import ( "fmt" + b64 "encoding/base64" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/crypto/types/multisig" sdk "github.com/cosmos/cosmos-sdk/types" @@ -15,6 +16,8 @@ func VerifySignature(pubKey cryptotypes.PubKey, signerData SignerData, sigData s switch data := sigData.(type) { case *signing.SingleSignatureData: signBytes, err := handler.GetSignBytes(data.SignMode, signerData, tx) + fmt.Printf("Sign Bytes (str): %s\n", signBytes) + fmt.Printf("Sign Bytes (base64): %s\n", b64.StdEncoding.EncodeToString(signBytes)) if err != nil { return err } ``` Verify that the contents of "Sign Mode", "Signer Data", and "Sign Bytes" in stdout are the same when the two commands are run: Transaction signing: ``` regen tx sign ... ``` Signature aggregation: ``` regen tx multisign ... ```