-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(testapp): implement real address generation and tx signing #334
base: main
Are you sure you want to change the base?
Conversation
WalkthroughThe changes in Changes
Sequence DiagramsequenceDiagram
participant Test as Test Framework
participant Helper as ToSignedTx
participant KeyGen as Key Generator
participant Tx as Transaction
Test->>KeyGen: Generate Private Key
KeyGen-->>Test: Private Key
Test->>Helper: Call ToSignedTx(msg, privateKey)
Helper->>Tx: Create Transaction
Helper->>Tx: Sign Transaction
Tx-->>Helper: Signed Transaction
Helper-->>Test: Return Signed Transaction Bytes
Poem
✨ Finishing Touches
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (1)
testapp/helpers.go (1)
57-61
: Consider whether ephemeral keys are desired for every transaction.This function generates a new private key on each invocation, resulting in different addresses per transaction. This can complicate certain tests if you need to verify multiple transactions under the same account or track account state changes across transactions. If that's intentional, it's fine. Otherwise, consider factoring the key generation out into a shared setup method.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
testapp/helpers.go
(2 hunks)
🔇 Additional comments (1)
testapp/helpers.go (1)
12-16
: Imports look good, but confirm pinned versions in go.mod.These newly introduced imports for
cryptotypes
,secp256k1
, andsigningtypes
appear correct for transaction signing in the Cosmos SDK. Just ensure yourgo.mod
or dependency manager pins the exact versions of these libraries for reproducible builds and security updates.
func ToSignedTx(t *testing.T, msg proto.Message, privKey cryptotypes.PrivKey) []byte { | ||
msgAny, err := codectypes.NewAnyWithValue(msg) | ||
require.NoError(t, err) | ||
|
||
// Create signed transaction | ||
tx := &sdktx.Tx{ | ||
Body: &sdktx.TxBody{ | ||
Messages: []*codectypes.Any{msgAny}, | ||
Memo: "", | ||
}, | ||
AuthInfo: &sdktx.AuthInfo{ | ||
Fee: &sdktx.Fee{}, | ||
Fee: &sdktx.Fee{ | ||
Amount: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(1000))), | ||
GasLimit: 200000, | ||
}, | ||
SignerInfos: []*sdktx.SignerInfo{ | ||
{ | ||
PublicKey: codectypes.UnsafePackAny(privKey.PubKey()), | ||
ModeInfo: &sdktx.ModeInfo{ | ||
Sum: &sdktx.ModeInfo_Single_{ | ||
Single: &sdktx.ModeInfo_Single{ | ||
Mode: signingtypes.SignMode_SIGN_MODE_DIRECT, | ||
}, | ||
}, | ||
}, | ||
Sequence: 0, | ||
}, | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ensure the transaction is actually signed.
Although the function name is ToSignedTx
, the code merely sets up the signing metadata (SignerInfo
) without attaching a cryptographic signature (tx.Signatures
). If you truly need a fully signed transaction, apply a signature from privKey.Sign
and attach it to tx.Signatures
. For instance:
txBytes, err := tx.Marshal()
require.NoError(t, err)
- return txBytes
+ // Example naive approach to finalize the signature:
+ signBz, err := tx.Body.Marshal()
+ require.NoError(t, err)
+ sig, err := privKey.Sign(signBz)
+ require.NoError(t, err)
+ tx.Signatures = [][]byte{sig}
+
+ finalTxBz, err := tx.Marshal()
+ require.NoError(t, err)
+ return finalTxBz
Ideally, consider using the Cosmos SDK's TxBuilder
pattern (via clientCtx.TxConfig
) for authentic signing, which handles chainID, account number, and sequence properly. Verify that you truly need just the signing metadata or a fully signed, broadcast-ready transaction.
Committable suggestion skipped: line range outside the PR's diff.
Summary by CodeRabbit
New Features
Refactor