Skip to content

Add createBaseTransactionPlanner function#648

Merged
lorisleiva merged 1 commit intomainfrom
06-16-add_createbasetransactionplanner_function
Jul 15, 2025
Merged

Add createBaseTransactionPlanner function#648
lorisleiva merged 1 commit intomainfrom
06-16-add_createbasetransactionplanner_function

Conversation

@lorisleiva
Copy link
Copy Markdown
Member

@lorisleiva lorisleiva commented Jul 9, 2025

This PR provides a base implementation for the TransactionPlanner type that tries to pack transactions in the most optimal way possible.

This function accepts a createTransactionMessage callback that dictates how each new transaction message should be created before filling them with instructions. Here's an example:

const planner = createBaseTransactionPlanner({
  createTransactionMessage: () =>
    pipe(
      createTransactionMessage({ version: 0 }),
      (message) => setTransactionMessageFeePayerSigner(payer, message),
      (message) => setTransactionMessageComputeUnitPrice(cuPrice, message),
      // ...
    ),
});

const transactionPlan = await planner(instructionPlan);

An optional onTransactionMessageUpdated callback can also be provided and will be executed any time something changes in a transaction message being planned (for instance, when new instructions are being added to the message). This allows users to hook logic into the planning process.

Note, the function is called createBaseTransactionPlanner because I was initially planning on having a high-level createDefaultTransactionPlanner that is all battery included but I'm thinking this interface is already good enough to be used as a high-level. So maybe I should rename this to createTransactionPlanner? Wdyt?

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Jul 9, 2025

🦋 Changeset detected

Latest commit: 40ec271

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

This PR includes changesets to release 41 packages
Name Type
@solana/instruction-plans Minor
@solana/errors 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/compat Minor
@solana/instructions Minor
@solana/keys Minor
@solana/kit Minor
@solana/options Minor
@solana/programs Minor
@solana/react Minor
@solana/rpc-api Minor
@solana/rpc-spec Minor
@solana/rpc-subscriptions-channel-websocket Minor
@solana/rpc-subscriptions-spec Minor
@solana/rpc-subscriptions Minor
@solana/rpc-transformers Minor
@solana/rpc-transport-http Minor
@solana/rpc-types Minor
@solana/rpc Minor
@solana/signers Minor
@solana/subscribable Minor
@solana/sysvars Minor
@solana/transaction-confirmation Minor
@solana/transaction-messages Minor
@solana/transactions Minor
@solana/rpc-graphql Minor
@solana/rpc-parsed-types Minor
@solana/rpc-subscriptions-api Minor
@solana/codecs Minor
@solana/fast-stable-stringify Minor
@solana/functional Minor
@solana/nominal-types Minor
@solana/promises Minor
@solana/rpc-spec-types 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

@bundlemon
Copy link
Copy Markdown

bundlemon bot commented Jul 9, 2025

BundleMon

Files updated (4)
Status Path Size Limits
errors/dist/index.native.mjs
15.14KB (+138B +0.9%) -
errors/dist/index.browser.mjs
15.14KB (+137B +0.89%) -
errors/dist/index.node.mjs
15.16KB (+137B +0.89%) -
@solana/kit production bundle
kit/dist/index.production.min.js
34.64KB (+42B +0.12%) -
Unchanged files (126)
Status Path Size Limits
rpc-graphql/dist/index.browser.mjs
18.82KB -
rpc-graphql/dist/index.native.mjs
18.82KB -
rpc-graphql/dist/index.node.mjs
18.82KB -
transaction-messages/dist/index.browser.mjs
7.37KB -
transaction-messages/dist/index.native.mjs
7.36KB -
transaction-messages/dist/index.node.mjs
7.36KB -
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 -
addresses/dist/index.browser.mjs
2.93KB -
rpc-transformers/dist/index.browser.mjs
2.93KB -
rpc-transformers/dist/index.native.mjs
2.93KB -
addresses/dist/index.native.mjs
2.93KB -
addresses/dist/index.node.mjs
2.93KB -
rpc-transformers/dist/index.node.mjs
2.93KB -
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 -
kit/dist/index.browser.mjs
2.53KB -
kit/dist/index.native.mjs
2.53KB -
kit/dist/index.node.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.39KB -
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 -
transactions/dist/index.browser.mjs
2.3KB -
transactions/dist/index.native.mjs
2.3KB -
transactions/dist/index.node.mjs
2.29KB -
rpc-subscriptions-spec/dist/index.node.mjs
2.18KB -
rpc-subscriptions-spec/dist/index.native.mjs
2.13KB -
rpc-subscriptions-spec/dist/index.browser.mjs
2.13KB -
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 -
instruction-plans/dist/index.browser.mjs
1.18KB -
instruction-plans/dist/index.native.mjs
1.18KB -
instruction-plans/dist/index.node.mjs
1.18KB -
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
852B -
rpc-spec/dist/index.native.mjs
851B -
rpc-spec/dist/index.node.mjs
850B -
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
230B -
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 -
ws-impl/dist/index.browser.mjs
113B -
crypto-impl/dist/index.node.mjs
111B -
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 +454B +0.13%

Final result: ✅

View report in BundleMon website ➡️


Current branch size history | Target branch size history

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Jul 9, 2025

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

@lorisleiva lorisleiva force-pushed the 06-16-add_createbasetransactionplanner_function branch 6 times, most recently from 2217537 to b3aaf4d Compare July 10, 2025 15:25
@lorisleiva lorisleiva marked this pull request as ready for review July 10, 2025 15:57
Copy link
Copy Markdown
Contributor

@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.

Added via Giphy

What a marvel of test engineering. Made me not want to bother reading the actual code.

I did anyway.

@lorisleiva lorisleiva force-pushed the 06-16-add_transactionplanexecutor_type branch from 666d041 to c97b76d Compare July 11, 2025 09:25
@lorisleiva lorisleiva force-pushed the 06-16-add_createbasetransactionplanner_function branch from b3aaf4d to c4e9a22 Compare July 11, 2025 09:25
@lorisleiva lorisleiva force-pushed the 06-16-add_transactionplanexecutor_type branch from c97b76d to 31763e7 Compare July 11, 2025 09:43
@lorisleiva lorisleiva force-pushed the 06-16-add_createbasetransactionplanner_function branch 2 times, most recently from 5320c6b to 02639b5 Compare July 11, 2025 09:45
@lorisleiva lorisleiva force-pushed the 06-16-add_transactionplanexecutor_type branch 2 times, most recently from 8e37fcc to 9679edb Compare July 11, 2025 16:20
@lorisleiva lorisleiva force-pushed the 06-16-add_createbasetransactionplanner_function branch 2 times, most recently from 847e786 to 7e5441a Compare July 11, 2025 16:30
@lorisleiva lorisleiva force-pushed the 06-16-add_createbasetransactionplanner_function branch from 9c56c4d to 4ed14ff Compare July 11, 2025 16:47
@lorisleiva
Copy link
Copy Markdown
Member Author

Note, the function is called createBaseTransactionPlanner because I was initially planning on having a high-level createDefaultTransactionPlanner that is all battery included but I'm thinking this interface is already good enough to be used as a high-level. So maybe I should rename this to createTransactionPlanner? Wdyt?

@steveluscher In case you missed that.

@lorisleiva lorisleiva force-pushed the 06-16-add_createbasetransactionplanner_function branch 2 times, most recently from 1814f01 to 3e55418 Compare July 11, 2025 16:57
@lorisleiva lorisleiva requested a review from steveluscher July 11, 2025 16:57
Copy link
Copy Markdown
Contributor

@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.

Added via Giphy

Nice. You probably really want some tests that exercise that cancellation stuff, but other than that this looks amazing.

Totally fine with renaming it to createTransactionPlanner, also.

@lorisleiva lorisleiva force-pushed the 06-16-add_transactionplanexecutor_type branch from 9679edb to b6a8886 Compare July 14, 2025 12:55
@lorisleiva lorisleiva force-pushed the 06-16-add_createbasetransactionplanner_function branch from 3e55418 to 3d5e8be Compare July 14, 2025 12:55
@lorisleiva lorisleiva force-pushed the 06-16-add_transactionplanexecutor_type branch from b6a8886 to 1069be1 Compare July 14, 2025 13:50
@lorisleiva lorisleiva force-pushed the 06-16-add_createbasetransactionplanner_function branch 2 times, most recently from 6dab98f to e399949 Compare July 14, 2025 13:54
@lorisleiva lorisleiva force-pushed the 06-16-add_transactionplanexecutor_type branch from 1069be1 to c092699 Compare July 14, 2025 13:54
@lorisleiva lorisleiva force-pushed the 06-16-add_createbasetransactionplanner_function branch 2 times, most recently from 74d0248 to 533a408 Compare July 14, 2025 14:20
Copy link
Copy Markdown
Member Author

lorisleiva commented Jul 15, 2025

Merge activity

  • Jul 15, 11:09 AM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Jul 15, 11:36 AM UTC: Graphite rebased this pull request as part of a merge.
  • Jul 15, 11:38 AM UTC: @lorisleiva merged this pull request with Graphite.

@lorisleiva lorisleiva changed the base branch from 06-16-add_transactionplanexecutor_type to graphite-base/648 July 15, 2025 11:31
@lorisleiva lorisleiva changed the base branch from graphite-base/648 to main July 15, 2025 11:34
@lorisleiva lorisleiva force-pushed the 06-16-add_createbasetransactionplanner_function branch from 533a408 to 40ec271 Compare July 15, 2025 11:35
@lorisleiva lorisleiva merged commit 01f159a into main Jul 15, 2025
13 checks passed
@lorisleiva lorisleiva deleted the 06-16-add_createbasetransactionplanner_function branch July 15, 2025 11:38
@github-actions
Copy link
Copy Markdown
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 Jul 30, 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