8000 Use `TransactionMessageWithinSizeLimit` in helper functions by lorisleiva · Pull Request #468 · anza-xyz/kit · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Use TransactionMessageWithinSizeLimit in helper functions #468

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

Conversation

lorisleiva
Copy link
Member
@lorisleiva lorisleiva commented May 6, 2025

This PR adds, removes or forwards the TransactionMessageWithinSizeLimit and TransactionWithinSizeLimit types in all helpers that may affect the size of a transaction.

Namely it does the following:

  • Moves the TransactionMessageWithinSizeLimit type to @solana/transaction-messages so it can be used within transaction message helpers (not we cannot move the other helper functions since they rely on compiling the transaction to get its size).
  • Adds a ExcludeTransactionMessageWithinSizeLimit type helper to remove the size limit type safety from a message.
  • Removes the size limit type safety when appending or prepending instruction.
  • Removes the size limit type safety when setting a durable nonce lifetime if and only if the current lifetime of the message isn't already using a durable nonce constraint.
  • Adds size limit type safety to the createTransactionMessage return type since it always returns empty messages.
  • Adds a SetTransactionWithinSizeLimitFromTransactionMessage type helper that forwards the size limit type safety from a message to a transaction, if any.
  • Adds a SetTransactionLifetimeFromCompilableTransactionMessage type helper that forwards the lifetime constraint from a message to a transaction, if any.
  • Adds a TransactionFromCompilableTransactionMessage type helper that creates a Transaction type with all the appropriate flags based on the provided message. This helper is then used in the following helpers to significantly simplify their function signatures (they now only require one):
    • compileTransaction
    • signTransactionMessageWithSigners
    • partiallySignTransactionMessageWithSigners
  • Adds type tests for all of this.

Copy link
changeset-bot bot commented May 6, 2025

🦋 Changeset detected

Latest commit: 6a72451

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 40 packages
Name Type
@solana/transaction-messages Minor
@solana/transactions Minor
@solana/signers Minor
@solana/kit Minor
@solana/programs Minor
@solana/rpc-api Minor
@solana/rpc-subscriptions-api Minor
@solana/transaction-confirmation Minor
@solana/compat Minor
@solana/react Minor
@solana/rpc-graphql Minor
@solana/rpc Minor
@solana/sysvars Minor
@solana/rpc-subscriptions Minor
@solana/accounts Minor
@solana/addresses Minor
@solana/assertions Minor
@solana/codecs-core Minor
@solana/codecs-data-structures Minor
@solana/codecs-numbers Minor
@solana/codecs-strings Minor
@solana/codecs Minor
@solana/errors Minor
@solana/fast-stable-stringify Minor
@solana/functional Minor
@solana/instructions Minor
@solana/keys Minor
@solana/nominal-types Minor
@solana/options Minor
@solana/promises Minor
@solana/rpc-parsed-types Minor
@solana/rpc-spec-types Minor
@solana/rpc-spec Minor
@solana/rpc-subscriptions-channel-websocket Minor
@solana/rpc-subscriptions-spec Minor
@solana/rpc-transformers Minor
@solana/rpc-transport-http Minor
@solana/rpc-types Minor
@solana/subscribable Minor
@solana/webcrypto-ed25519-polyfill Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
bundlemon bot commented May 6, 2025

BundleMon

Files updated (10)
Status Path Size Limits
transactions/dist/index.native.mjs
2.21KB (+232B +11.41%) -
transactions/dist/index.browser.mjs
2.21KB (+231B +11.35%) -
transactions/dist/index.node.mjs
2.21KB (+231B +11.36%) -
@solana/kit production bundle
kit/dist/index.production.min.js
34.34KB (+159B +0.45%) -
errors/dist/index.browser.mjs
14.52KB (+58B +0.39%) -
errors/dist/index.native.mjs
14.52KB (+58B +0.39%) -
errors/dist/index.node.mjs
14.54KB (+58B +0.39%) -
rpc-types/dist/index.browser.mjs
1.53KB (-68B -4.15%) -
rpc-types/dist/index.native.mjs
1.53KB (-69B -4.22%) -
rpc-types/dist/index.node.mjs
1.53KB (-69B -4.22%) -
Unchanged files (117)
Status Path Size Limits
rpc-graphql/dist/index.browser.mjs
18.78KB -
rpc-graphql/dist/index.native.mjs
18.78KB -
rpc-graphql/dist/index.node.mjs
18.78KB -
transaction-messages/dist/index.browser.mjs
7.24KB -
transaction-messages/dist/index.native.mjs
7.24KB -
transaction-messages/dist/index.node.mjs
7.24KB -
codecs-data-structures/dist/index.native.mjs
4.77KB -
codecs-data-structures/dist/index.browser.mjs
4.77KB -
codecs-data-structures/dist/index.node.mjs
4.77KB -
webcrypto-ed25519-polyfill/dist/index.node.mj
s
3.57KB -
webcrypto-ed25519-polyfill/dist/index.browser
.mjs
3.56KB -
webcrypto-ed25519-polyfill/dist/index.native.
mjs
3.54KB -
rpc-subscriptions/dist/index.browser.mjs
3.38KB -
rpc-subscriptions/dist/index.node.mjs
3.34KB -
rpc-subscriptions/dist/index.native.mjs
3.31KB -
codecs-core/dist/index.browser.mjs
3.3KB -
codecs-core/dist/index.native.mjs
3.3KB -
codecs-core/dist/index.node.mjs
3.3KB -
rpc-transformers/dist/index.browser.mjs
2.93KB -
rpc-transformers/dist/index.native.mjs
2.93KB -
rpc-transformers/dist/index.node.mjs
2.93KB -
addresses/dist/index.browser.mjs
2.86KB -
addresses/dist/index.native.mjs
2.86KB -
addresses/dist/index.node.mjs
2.86KB -
kit/dist/index.browser.mjs
2.71KB -
kit/dist/index.native.mjs
2.71KB -
kit/dist/index.node.mjs
2.71KB -
signers/dist/index.browser.mjs
2.63KB -
signers/dist/index.native.mjs
2.63KB -
signers/dist/index.node.mjs
2.63KB -
codecs-strings/dist/index.browser.mjs
2.53KB -
codecs-strings/dist/index.node.mjs
2.48KB -
codecs-strings/dist/index.native.mjs
2.45KB -
transaction-confirmation/dist/index.node.mjs
2.4KB -
sysvars/dist/index.browser.mjs
2.35KB -
sysvars/dist/index.native.mjs
2.34KB -
transaction-confirmation/dist/index.native.mj
s
2.34KB -
sysvars/dist/index.node.mjs
2.34KB -
transaction-confirmation/dist/index.browser.m
js
2.34KB -
rpc-subscriptions-spec/dist/index.node.mjs
2.13KB -
rpc-subscriptions-spec/dist/index.native.mjs
2.08KB -
rpc-subscriptions-spec/dist/index.browser.mjs
2.08KB -
keys/dist/index.browser.mjs
2.02KB -
keys/dist/index.native.mjs
2.02KB -
keys/dist/index.node.mjs
2.02KB -
codecs-numbers/dist/index.native.mjs
2.01KB -
codecs-numbers/dist/index.browser.mjs
2.01KB -
codecs-numbers/dist/index.node.mjs
2.01KB -
react/dist/index.native.mjs
1.99KB -
react/dist/index.browser.mjs
1.99KB -
react/dist/index.node.mjs
1.99KB -
rpc/dist/index.node.mjs
1.95KB -
rpc-transport-http/dist/index.browser.mjs
1.91KB -
rpc-transport-http/dist/index.native.mjs
1.91KB -
rpc/dist/index.native.mjs
1.8KB -
subscribable/dist/index.node.mjs
1.8KB -
rpc/dist/index.browser.mjs
1.8KB -
subscribable/dist/index.native.mjs
1.75KB -
subscribable/dist/index.browser.mjs
1.74KB -
rpc-transport-http/dist/index.node.mjs
1.73KB -
rpc-subscriptions-channel-websocket/di 8000 st/inde
x.node.mjs
1.33KB -
rpc-subscriptions-channel-websocket/dist/inde
x.native.mjs
1.27KB -
rpc-subscriptions-channel-websocket/dist/inde
x.browser.mjs
1.26KB -
options/dist/index.browser.mjs
1.18KB -
options/dist/index.native.mjs
1.18KB -
options/dist/index.node.mjs
1.17KB -
accounts/dist/index.browser.mjs
1.13KB -
accounts/dist/index.native.mjs
1.12KB -
accounts/dist/index.node.mjs
1.12KB -
compat/dist/index.browser.mjs
971B -
compat/dist/index.native.mjs
970B -
compat/dist/index.node.mjs
968B -
rpc-spec-types/dist/index.browser.mjs
964B -
rpc-api/dist/index.browser.mjs
963B -
rpc-api/dist/index.native.mjs
962B -
rpc-spec-types/dist/index.native.mjs
962B -
rpc-api/dist/index.node.mjs
961B -
rpc-spec-types/dist/index.node.mjs
961B -
rpc-subscriptions-api/dist/index.native.mjs
870B -
rpc-subscriptions-api/dist/index.node.mjs
869B -
rpc-subscriptions-api/dist/index.browser.mjs
868B -
rpc-spec/dist/index.browser.mjs
829B -
rpc-spec/dist/index.native.mjs
829B -
rpc-spec/dist/index.node.mjs
828B -
promises/dist/index.browser.mjs
799B -
promises/dist/index.native.mjs
798B -
promises/dist/index.node.mjs
797B -
assertions/dist/index.browser.mjs
783B -
instructions/dist/index.browser.mjs
769B -
instructions/dist/index.native.mjs
768B -
instructions/dist/index.node.mjs
767B -
fast-stable-stringify/dist/index.browser.mjs
726B -
fast-stable-stringify/dist/index.native.mjs
725B -
assertions/dist/index.native.mjs
724B -
fast-stable-stringify/dist/index.node.mjs
724B -
assertions/dist/index.node.mjs
723B -
programs/dist/index.browser.mjs
329B -
programs/dist/index.native.mjs
327B -
programs/dist/index.node.mjs
325B -
event-target-impl/dist/index.node.mjs
233B -
functional/dist/index.browser.mjs
154B -
functional/dist/index.native.mjs
152B -
text-encoding-impl/dist/index.native.mjs
152B -
functional/dist/index.node.mjs
151B -
codecs/dist/index.browser.mjs
137B -
codecs/dist/index.native.mjs
136B -
codecs/dist/index.node.mjs
134B -
event-target-impl/dist/index.browser.mjs
133B -
ws-impl/dist/index.node.mjs
131B -
text-encoding-impl/dist/index.browser.mjs
122B -
text-encoding-impl/dist/index.node.mjs
119B -
crypto-impl/dist/index.node.mjs
114B -
ws-impl/dist/index.browser.mjs
113B -
crypto-impl/dist/index.browser.mjs
109B -
rpc-parsed-types/dist/index.browser.mjs
66B -
rpc-parsed-types/dist/index.native.mjs
65B -
rpc-parsed-types/dist/index.node.mjs
63B -

Total files change +788B +0.22%

Final result: ✅

View report in BundleMon website ➡️


Current branch size history | Target branch size history

@lorisleiva lorisleiva changed the base branch from 05-06-make_fullysignedtransaction_composable to graphite-base/468 May 6, 2025 12:58
@lorisleiva lorisleiva force-pushed the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch from dd2f2ca to 55b2177 Compare May 6, 2025 12:58
@lorisleiva lorisleiva force-pushed the graphite-base/468 branch from 87e27cf to af5d54a Compare May 6, 2025 12:58
@lorisleiva lorisleiva changed the base branch from graphite-base/468 to 05-06-fix_signers_typetest_filenames May 6, 2025 12:58
@lorisleiva lorisleiva mentioned this pull request May 6, 2025
@lorisleiva lorisleiva force-pushed the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch from 55b2177 to e92d632 Compare May 7, 2025 12:06
@lorisleiva lorisleiva force-pushed the 05-06-fix_signers_typetest_filenames branch from af5d54a to 51d3791 Compare May 7, 2025 12:06
@lorisleiva lorisleiva force-pushed the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch from e92d632 to d0b31b2 Compare May 7, 2025 12:10
Copy link
Contributor
github-actions bot commented May 7, 2025

Documentation Preview: https://kit-docs-h48nru5ks-anza-tech.vercel.app

@lorisleiva lorisleiva marked this pull request as ready for review May 7, 2025 12:20
@lorisleiva lorisleiva changed the base branch from 05-06-fix_signers_typetest_filenames to graphite-base/468 May 8, 2025 15:02
@lorisleiva lorisleiva force-pushed the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch from d0b31b2 to 0128277 Compare May 8, 2025 15:02
@lorisleiva lorisleiva changed the base branch from graphite-base/468 to 05-06-make_fullysignedtransaction_composable May 8, 2025 15:03
@lorisleiva lorisleiva force-pushed the 05-06-make_fullysignedtransaction_composable branch from 13ffe0b to e09c9e5 Compare May 8, 2025 15:15
@lorisleiva lorisleiva force-pushed the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch from 0128277 to c1b833d Compare May 8, 2025 15:15
@lorisleiva lorisleiva force-pushed the 05-06-make_fullysignedtransaction_composable branch from e09c9e5 to 924e539 Compare May 8, 2025 15:43
@lorisleiva lorisleiva force-pushed the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch from d2c1252 to a9d2409 Compare May 8, 2025 15:53
Copy link
Collaborator
@steveluscher steveluscher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was a great read. Just think hard about what that ‘within size’ marker should be to set us up well for the future.

Added via Giphy

* A type guard that checks if a transaction message is within the size limit
* when compiled into a transaction.
*/
export type TransactionMessageWithinSizeLimit = { readonly __within_size_limit: unique symbol };
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider how you're going to implement this. I'll throw out some thoughts but ultimately leave it up to you.

NominalType<'withinSizeLimit', true>;  // Either present or not

NominalType<'relationshipToSizeLimit', 'under' | 'meets' | 'over'>;  // Useful? I don't know.

NominalType<'size', 'within_1232'>;  // Imagine a world where the size limit gets increased. Do we need to be able to distinguish between limits at different versions of the cluster?

Copy link
Member Author
@lorisleiva lorisleiva May 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm thinking:

NominalType<'transactionSize', 'withinLimit'>

As it follows a similar convention to the existing:

NominalType<'transactionSignedness', 'fullySigned'>

I don't think there is any point in using values such as within_1232 since we are planning on fixing cluster differences at build time.

@lorisleiva lorisleiva force-pushed the 05-06-make_fullysignedtransaction_composable branch from c787e76 to 33bcc16 Compare May 8, 2025 21:40 8000
@lorisleiva lorisleiva force-pushed the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch from a9d2409 to 1ff66ef Compare May 8, 2025 21:40
@lorisleiva lorisleiva force-pushed the 05-06-make_fullysignedtransaction_composable branch from 33bcc16 to 9065d3a Compare May 8, 2025 21:52
@lorisleiva lorisleiva force-pushed the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch from 1ff66ef to d55aa07 Compare May 8, 2025 21:52
@lorisleiva lorisleiva force-pushed the 05-06-make_fullysignedtransaction_composable branch from 9065d3a to f995600 Compare May 12, 2025 10:04
@lorisleiva lorisleiva force-pushed the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch 2 times, most recently from 6ec858e to f780cb8 Compare May 12, 2025 10:17
@lorisleiva lorisleiva force-pushed the 05-06-make_fullysignedtransaction_composable branch from f995600 to 8d02b50 Compare May 12, 2025 10:17
@lorisleiva lorisleiva force-pushed the 05-06-make_fullysignedtransaction_composable branch from 8d02b50 to c471402 Compare May 14, 2025 08:31
@lorisleiva lorisleiva force-pushed the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch from f780cb8 to 2311a56 Compare May 14, 2025 08:31
@lorisleiva lorisleiva changed the base branch from 05-06-make_fullysignedtransaction_composable to graphite-base/468 May 14, 2025 08:57
@lorisleiva lorisleiva force-pushed the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch from 2311a56 to d205506 Compare May 14, 2025 08:57
@lorisleiva lorisleiva force-pushed the graphite-base/468 branch from c471402 to 3dc8904 Compare May 14, 2025 08:57
@lorisleiva lorisleiva changed the base branch from graphite-base/468 to 05-02-improve_type_safety_when_adding_instructions May 14, 2025 08:57
@lorisleiva lorisleiva force-pushed the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch from d205506 to 61c1f71 Compare May 14, 2025 09:01
@lorisleiva lorisleiva force-pushed the 05-02-improve_type_safety_when_adding_instructions branch from 3dc8904 to 4165595 Compare May 14, 2025 09:01
Copy link
Member Author
lorisleiva commented May 14, 2025

Merge activity

  • May 14, 5:56 AM EDT: A user started a stack merge that includes this pull request via Graphite.
  • May 14, 6:24 AM EDT: Graphite rebased this pull request as part of a merge.
  • May 14, 6:26 AM EDT: @lorisleiva merged this pull request with Graphite.

@lorisleiva lorisleiva changed the base branch from 05-02-improve_type_safety_when_adding_instructions to graphite-base/468 May 14, 2025 10:19
@lorisleiva lorisleiva changed the base branch from graphite-base/468 to main May 14, 2025 10:22
@lorisleiva lorisleiva force-pushed the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch from 61c1f71 to 6a72451 Compare May 14, 2025 10:23
@lorisleiva lorisleiva merged commit 6ccbf01 into main May 14, 2025
7 checks passed
@lorisleiva lorisleiva deleted the 05-06-use_transactionmessagewithinsizelimit_in_helper_functions branch May 14, 2025 10:26
@github-actions github-actions bot mentioned this pull request May 14, 2025
Copy link
Contributor

Because there has been no activity on this PR for 14 days since it was merged, it has been automatically locked. Please open a new issue if it requires a follow up.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators May 29, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants
0