Skip to content

Add SendableTransaction type #482

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

Open
wants to merge 1 commit into
base: 05-06-make_fullysignedtransaction_composable
Choose a base branch
from

Conversation

lorisleiva
Copy link
Member

@lorisleiva lorisleiva commented May 8, 2025

Since we now have more than one condition for a transaction to be sendable — i.e. FullySignedTransaction and TransactionWithinSizeLimit — this PR introduces a new umbrella type called SendableTransaction that contains all the type "flags" required for a transaction be sent to the network.

Copy link

changeset-bot bot commented May 8, 2025

🦋 Changeset detected

Latest commit: ec1907d

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

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

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 8, 2025

BundleMon

Files updated (7)
Status Path Size Limits
transactions/dist/index.native.mjs
2.31KB (+41B +1.77%) -
transactions/dist/index.node.mjs
2.3KB (+40B +1.72%) -
transactions/dist/index.browser.mjs
2.31KB (+39B +1.68%) -
@solana/kit production bundle
kit/dist/index.production.min.js
34.42KB (+29B +0.08%) -
rpc-spec/dist/index.native.mjs
829B (-22B -2.59%) -
rpc-spec/dist/index.node.mjs
828B (-22B -2.59%) -
rpc-spec/dist/index.browser.mjs
829B (-23B -2.7%) -
Unchanged files (120)
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 -
errors/dist/index.node.mjs
14.54KB -
errors/dist/index.browser.mjs
14.52KB -
errors/dist/index.native.mjs
14.52KB -
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.62KB -
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-types/dist/index.browser.mjs
1.53KB -
rpc-types/dist/index.native.mjs
1.53KB -
rpc-types/dist/index.node.mjs
1.53KB -
rpc-subscriptions-channel-websocket/dist/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 -
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 +85B +0.02%

Final result: ✅

View report in BundleMon website ➡️


Current branch size history | Target branch size history

@lorisleiva lorisleiva marked this pull request as ready for review May 8, 2025 16:29
Copy link
Contributor

github-actions bot commented May 8, 2025

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

@lorisleiva lorisleiva force-pushed the 05-08-add_sendabletransaction_type branch from 56e29d2 to 9c23a11 Compare May 8, 2025 16:39
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.

Absolutely not important, but I wonder if we can do better than ‘sendable,’ mostly because everything is sendable. I can send whatever junk I want to the network. Whether it's *****able by the network or not is the question this name tries to answer.

  • Processable?
  • Landable?
  • Executable?
  • Acceptable?
  • Ingestible?
  • Admissible?
  • Comittable?

@lorisleiva lorisleiva force-pushed the 05-07-refactor_fullysignedtransaction_helpers branch from b433163 to aee8ba5 Compare May 8, 2025 21:40
@lorisleiva lorisleiva force-pushed the 05-08-add_sendabletransaction_type branch from 9c23a11 to 5431523 Compare May 8, 2025 21:40
@lorisleiva lorisleiva force-pushed the 05-07-refactor_fullysignedtransaction_helpers branch from aee8ba5 to 8049329 Compare May 8, 2025 21:53
@lorisleiva lorisleiva force-pushed the 05-08-add_sendabletransaction_type branch from 5431523 to 2725d93 Compare May 8, 2025 21:53
@lorisleiva
Copy link
Member Author

lorisleiva commented May 12, 2025

@steveluscher I thought about this for a while and perhaps something like Processable is more accurate. I do still think Sendable is appropriate though because it is a set of requirement you must comply with before passing that transaction to our "send" helpers (sendAndConfirmFactory, sendWithoutConfirmingFactory, etc.). Much like the CompilableTransactionMessage provide type safety for the compileTransaction function. I quite like the reciprocity that Sendable provide in terms of naming convention. But I'm not against going with a name that convey the requirements more appropriately even if that makes us lose a bit of name symmetry.

@lorisleiva lorisleiva force-pushed the 05-07-refactor_fullysignedtransaction_helpers branch from 8049329 to f0467c6 Compare May 12, 2025 10:04
@lorisleiva lorisleiva force-pushed the 05-08-add_sendabletransaction_type branch from 2725d93 to 6e3e968 Compare May 12, 2025 10:04
@lorisleiva lorisleiva force-pushed the 05-07-refactor_fullysignedtransaction_helpers branch from f0467c6 to f5461ca Compare May 12, 2025 10:17
@lorisleiva lorisleiva force-pushed the 05-08-add_sendabletransaction_type branch from 6e3e968 to 33b6f6b Compare May 12, 2025 10:17
@lorisleiva lorisleiva force-pushed the 05-08-add_sendabletransaction_type branch from 33b6f6b to b1d71bd Compare May 14, 2025 08:31
@lorisleiva lorisleiva force-pushed the 05-07-refactor_fullysignedtransaction_helpers branch from f5461ca to 811b8db Compare May 14, 2025 08:31
@lorisleiva lorisleiva changed the base branch from 05-07-refactor_fullysignedtransaction_helpers to graphite-base/482 May 14, 2025 08:57
@lorisleiva lorisleiva force-pushed the graphite-base/482 branch from 811b8db to b9ae938 Compare May 14, 2025 08:57
@lorisleiva lorisleiva force-pushed the 05-08-add_sendabletransaction_type branch from b1d71bd to 8a5802f Compare May 14, 2025 08:57
@lorisleiva lorisleiva changed the base branch from graphite-base/482 to 05-06-make_fullysignedtransaction_composable May 14, 2025 08:58
@lorisleiva lorisleiva force-pushed the 05-06-make_fullysignedtransaction_composable branch from b9ae938 to d6e404c Compare May 14, 2025 09:01
@lorisleiva lorisleiva force-pushed the 05-08-add_sendabletransaction_type branch 2 times, most recently from 57cfad3 to a8f2ba0 Compare May 14, 2025 09:30
@lorisleiva lorisleiva force-pushed the 05-06-make_fullysignedtransaction_composable branch 2 times, most recently from 18f6e43 to f796886 Compare May 14, 2025 09:39
@lorisleiva lorisleiva force-pushed the 05-08-add_sendabletransaction_type branch from a8f2ba0 to 356d914 Compare May 14, 2025 09:39
@lorisleiva lorisleiva force-pushed the 05-06-make_fullysignedtransaction_composable branch 2 times, most recently from 8c3b97e to 8042266 Compare May 14, 2025 10:35
@lorisleiva lorisleiva force-pushed the 05-08-add_sendabletransaction_type branch from 356d914 to 0f9c310 Compare May 14, 2025 10:35
@lorisleiva lorisleiva force-pushed the 05-08-add_sendabletransaction_type branch from 0f9c310 to ec1907d Compare May 14, 2025 11:34
@github-actions github-actions bot added the stale label May 29, 2025
@github-actions github-actions bot closed this Jun 6, 2025
@lorisleiva lorisleiva reopened this Jun 6, 2025
@github-actions github-actions bot removed the stale label Jun 9, 2025
@lorisleiva lorisleiva added the do-not-close Add this tag to exempt an issue/PR from being closed by the stalebot label Jun 9, 2025
Copy link
Member

@mcintyre94 mcintyre94 left a comment

Choose a reason for hiding this comment

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

Looks good!

This type represents a transaction that has all the required conditions to be sent to the network. Namely:

- It must be fully signed (ie. conform to `FullySignedTransaction`)
- It must be within size limit (ie. conform to `TransactionWithSizeLimit`)
Copy link
Member

Choose a reason for hiding this comment

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

Should TransactionWithSizeLimit have a section in the readme too?

TransactionWithinSizeLimit satisfies SendableTransaction;
}

// It does not satify Transaction alone.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
// It does not satify Transaction alone.
// It is not satisfied by Transaction alone.

I think this is a clearer way to word the relationship here

null as unknown as Transaction satisfies SendableTransaction;
}

// It does not satify Transaction with missing required conditions.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
// It does not satify Transaction with missing required conditions.
// It is not satisfied by Transaction with missing required conditions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
do-not-close Add this tag to exempt an issue/PR from being closed by the stalebot
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants