Skip to content
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

[fix] return signature for send and confirm factories #109

Closed
wants to merge 2 commits into from

Conversation

nickfrosty
Copy link
Contributor

Problem

The sendAndConfirmDurableNonceTransactionFactory and sendAndConfirmTransactionFactory factories return a Promise<void> while the underlying sendTransaction_INTERNAL_ONLY_DO_NOT_EXPORT returns a Promise<Signature>

Summary of Changes

Fix the return type of both factories to return the signature that they already have due to just confirming it.

sendTransaction_INTERNAL_ONLY_DO_NOT_EXPORT already imports the Signature type so this does not add a new dep

Copy link

changeset-bot bot commented Feb 11, 2025

🦋 Changeset detected

Latest commit: 5f9432b

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

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

@nickfrosty nickfrosty changed the title fix: return signature [fix] return signature for send and confirm factories Feb 11, 2025
Copy link

bundlemon bot commented Feb 11, 2025

BundleMon

Unchanged files (127)
Status Path Size Limits
@solana/web3.js production bundle
library/dist/index.production.min.js
33.84KB -
rpc-graphql/dist/index.browser.mjs
18.76KB -
rpc-graphql/dist/index.native.mjs
18.75KB -
rpc-graphql/dist/index.node.mjs
18.75KB -
errors/dist/index.node.mjs
14.22KB -
errors/dist/index.browser.mjs
14.2KB -
errors/dist/index.native.mjs
14.2KB -
transaction-messages/dist/index.browser.mjs
7.05KB -
transaction-messages/dist/index.native.mjs
7.05KB -
transaction-messages/dist/index.node.mjs
7.05KB -
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.92KB -
rpc-transformers/dist/index.native.mjs
2.92KB -
rpc-transformers/dist/index.node.mjs
2.92KB -
addresses/dist/index.browser.mjs
2.8KB -
addresses/dist/index.native.mjs
2.8KB -
addresses/dist/index.node.mjs
2.8KB -
library/dist/index.browser.mjs
2.67KB -
library/dist/index.native.mjs
2.67KB -
library/dist/index.node.mjs
2.67KB -
codecs-strings/dist/index.browser.mjs
2.53KB -
signers/dist/index.browser.mjs
2.53KB -
signers/dist/index.native.mjs
2.53KB -
signers/dist/index.node.mjs
2.53KB -
codecs-strings/dist/index.node.mjs
2.48KB -
codecs-strings/dist/index.native.mjs
2.46KB -
transaction-confirmation/dist/index.node.mjs
2.4KB -
transaction-confirmation/dist/index.native.mj
s
2.34KB -
transaction-confirmation/dist/index.browser.m
js
2.34KB -
sysvars/dist/index.browser.mjs
2.25KB -
sysvars/dist/index.native.mjs
2.25KB -
sysvars/dist/index.node.mjs
2.24KB -
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.04KB -
keys/dist/index.native.mjs
2.03KB -
keys/dist/index.node.mjs
2.03KB -
codecs-numbers/dist/index.native.mjs
2.01KB -
codecs-numbers/dist/index.browser.mjs
2.01KB -
codecs-numbers/dist/index.node.mjs
2.01KB -
transactions/dist/index.browser.mjs
1.99KB -
react/dist/index.native.mjs
1.99KB -
transactions/dist/index.native.mjs
1.99KB -
react/dist/index.browser.mjs
1.99KB -
react/dist/index.node.mjs
1.99KB -
transactions/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 -
rpc-transport-http/dist/index.node.mjs
1.75KB -
subscribable/dist/index.native.mjs
1.75KB -
subscribable/dist/index.browser.mjs
1.74KB -
rpc-types/dist/index.browser.mjs
1.6KB -
rpc-types/dist/index.native.mjs
1.6KB -
rpc-types/dist/index.node.mjs
1.6KB -
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-spec-types/dist/index.node.mjs
961B -
rpc-api/dist/index.node.mjs
960B -
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
771B -
instructions/dist/index.native.mjs
770B -
instructions/dist/index.node.mjs
768B -
assertions/dist/index.native.mjs
724B -
fast-stable-stringify/dist/index.browser.mjs
724B -
assertions/dist/index.node.mjs
723B -
fast-stable-stringify/dist/index.native.mjs
723B -
fast-stable-stringify/dist/index.node.mjs
722B -
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 +2B 0%

Final result: ✅

View report in BundleMon website ➡️


Current branch size history | Target branch size history

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.

We did this super on purpose to break the connection in people's minds between:

  • a transaction being confirmed
  • a signature for that transaction being available

You don't have to wait for a transaction to be confirmed to obtain the signature, because the signature is a function of the private key and the message. We encourage folks to obtain the signature early, as in the example here, so that they can make use of it in their app earlier.

log.info(
'[step 3] Sending transaction: https://explorer.solana.com/tx/%s?cluster=custom&customUrl=127.0.0.1:8899',
getSignatureFromTransaction(signedTransaction),
);

@nickfrosty
Copy link
Contributor Author

I know you don't have to, and that the signature is available as soon as it is signed. And that the examples are also showing how to get it.
But these functions also already have the value, why not just return it still

@steveluscher
Copy link
Collaborator

steveluscher commented Feb 12, 2025

Because it makes waiting for the signature ergonomic. We want to discourage waiting for signatures, and encourage computing signatures pre-send, because waiting for anything can make apps feel less responsive.

@nickfrosty
Copy link
Contributor Author

okay I guess just close the pr instead of requesting changes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants