v2.0.0-rc.2 (2024-10-31)
We expect this to be the final release candidate version before tagging version 2.0 of @solana/web3.js. Please submit any final bug reports before Thursday, November 7th by filing a GitHub Issue.
To install the Release Candidate:
npm install --save @solana/web3.js@rc- Try the runnable examples in the
examples/directory to get a feel for the API. - Use the example dApp at https://solana-labs.github.io/solana-web3.js/example/ – source available here – for an example of how to build transactions with the new web3.js for use with wallets.
- Install TypeScript clients for on-chain programs like System and Token, then build a useful application or backend service.
Changelog since Release Candidate rc.1
-
#3213
3fc388fThanks @mcintyre94! - Clean up SolanaRpcApi: no longer extend RpcApiMethods + remove export -
#3137
fd72c2eThanks @mcintyre94! - The build is now compatible with the Vercel Edge runtime and Cloudflare Workers through the addition ofedge-lightandworkerdto the package exports. -
#3251 Thanks @ryoid! -
isAddress()no longer throws despite that the input might be unparseable as a base-58 string. Now, it correctly, simply, returnsfalse. -
#3361
441fa3aThanks @steveluscher! - Fixed a bug where calls toisEd25519CurveSupported()might have resulted in uncaught rejections bubbling up through the app, in cases where Ed25519 is not supported -
#3134
38faba0Thanks @buffalojoec! - Change unix timestamp type to bigint with an unsafe label -
#3128
0158b31Thanks @lorisleiva! - Fix missing export in@solana/keyspackage. This means, thegetPublicKeyFromPrivateKeyfunction is now properly exported. -
#3407
10b08acThanks @lorisleiva! - UseRpcRequest,RpcResponseand their transformers in RPC Subscriptions packagesThis change makes the RPC and RPC Subscriptions architecture more consistent by using the same
RpcRequestandRpcResponsetypes and transformers as the basis for handling user requests (RPC calls or subscriptions) and returning responses to them.See the following PRs for more details:
-
#3453
bafefedThanks @mcintyre94! - Rename decodeTransactionMessage to decompileTransactionMessageFetchingLookupTables -
#3290
2368163Thanks @mcintyre94! - Throw an error if a transaction fails when being simulated to estimate CUs -
#3145
1c25dd4Thanks @lorisleiva! - RenameRpcResponsetype toRpcResponseDatato make room for a newRpcResponsetype -
#3213
3fc388fThanks @mcintyre94! - Clean up SolanaRpcApi: no longer extend RpcApiMethods + remove export -
#3454
1fde4b1Thanks @mcintyre94! - Correct type of replacementBlockhash in simulateTransaction -
#3456
0245265Thanks @lorisleiva! - RemoveUnsafeBeyond2Pow53Minus1type suffixes -
#3150
a705413Thanks @lorisleiva! - MakeRpcApiuse newRpcRequestTransformerandRpcResponseTransformer -
#3202
bf07a60Thanks @disco-infinex! - PerformanceSample return type field numNonVoteTransaction corrected to numNonVoteTransactions -
#3161
9dfca45Thanks @lorisleiva! - AddgetIntegerOverflowRequestTransformer,getBigIntDowncastRequestTransformerandgetTreeWalkerRequestTransformerhelpers -
#3134
38faba0Thanks @buffalojoec! - Change unix timestamp type to bigint with an unsafe label -
#3148
e1cb697Thanks @lorisleiva! - MakeRpcTransportreturn newRpcReponsetype instead of parsed JSON data -
#3201
02cefa7Thanks @lorisleiva! - Update the response type of thegetClusterNodesRPC method -
#3098
2f541b6Thanks @buffalojoec! - Update program accounts filters forprogramAccountsquery -
#3221
6b43588Thanks @lorisleiva! - Add newisJsonRpcPayloadhelper method -
c8e6e71Thanks @steveluscher! - We refactored the lower levels of the subscriptions API entirely.Previously, all layers of the subscriptions implementation, from the
WebSockettransport to the API that developers use, dealt inAsyncIterables. These are notoriously difficult to code in such a way that expresses all of the ways in which a subscription might be cancelled or error out. Very slight omissions of care could open memory leaks that would bring down the simplest of apps. The new subscriptions infra in Release Candidate 2 deals with event-based subscriptions all the way up to the highest level API, at which point the subscription is vended to the application as anAsyncIterable.This has eliminated several classes of memory leak and has made it easier to implement higher-level transports (like the autopinger and the subscription coalescer). Additionally, this update introduces a new channel pool implementation that opens new
WebSocketconnections when existing ones become ‘full.’ Lastly, performance in the new implementation has been improved through a new demultiplexing utility that can separatemessageevents into several channels based on arbitrary criteria, meaning you can apply transforms to the message right at the source, and vend subscriptions to downstream consumers that care only about one particular kind of message. -
#3449
17c373dThanks @lorisleiva! - AddtransformChannelInboundMessagesandtransformChannelOutboundMessageshelper functions to transform incoming and outgoing messages on a given channel. -
#3433
92655fdThanks @lorisleiva! - RenameexecuteSubscriptionPlantoexecuteinRpcSubscriptionsPlan -
#3455
500a991Thanks @lorisleiva! - Adds a channel creator function calledcreateDefaultSolanaRpcSubscriptionsChannelCreator. This function works similarly tocreateDefaultRpcSubscriptionsChannelCreatorbut with some Solana-specific defaults. For instance, it safely handlesBigIntvalues in JSON messages since Solana RPC servers accept and return integers larger thanNumber.MAX_SAFE_INTEGER. -
#3451
8f94a9eThanks @lorisleiva! - Add a `getRpcSubscriptionsChannelWithBigIntJSONSerialization` helper function that parses and stringifies JSON messages with support for `BigInt` values. Any integer value is parsed as a `BigInt` in order to safely handle numbers that exceed the JavaScript `Number.MAX_SAFE_INTEGER` value. -
#3406
4c7224dThanks @lorisleiva! - Replace subscriptionConfigurationHash with RpcRequest in RpcSubscriptionPlan -
#3163
29d5113Thanks @lorisleiva! - AddgetThrowSolanaErrorResponseTransformer,getResultResponseTransformer,getBigIntUpcastResponseTransformerandgetTreeWalkerResponseTransformerhelpers -
#3159
747b9abThanks @lorisleiva! - AddgetDefaultCommitmentRequestTransformerhelper -
#3184
28ca5d1Thanks @lorisleiva! - Remove temporary fix for Agave issue 479The fix is now deployed on mainnet-beta (See anza-xyz/agave#479 and anza-xyz/agave#483).
-
#3196
512853eThanks @lorisleiva! - Add newcreateHttpTransportForSolanaRpcfunction that creates a new HTTP transport specific to the Solana RPC API. This transport uses custom JSON parsing and stringifying strategies on both the request and response of Solana RPC API requests in order to prevents loss of precision for large integers. -
#3192
422f928Thanks @lorisleiva! - AddfromJsonandtoJsonoptions to the HTTP transport -
#3467
3834d82Thanks @lorisleiva! - RemoveU64andI64types in favour ofbigint -
#3456
0245265Thanks @lorisleiva! - RemoveUnsafeBeyond2Pow53Minus1type suffixes -
#3340
44c8772Thanks @steveluscher! - Enabled Brotli, gzip, and Deflate compression by default when running in Node.js, where compression headers are not added by the runtime like they are in browsers -
#3481
4decebbThanks @lorisleiva! - Remove thefeePayerSignerattribute of transaction messages in favour of the existingfeePayerattribute. This ensures fee payers are defined in a single place — whether they are using signers or not. -
#3482
d4965ecThanks @lorisleiva! - OverridefeePayersigner when the address matches the existing one. This is because users may want to provide a different wallet from the same address. -
#3301
8c2cb9fThanks @steveluscher! - Creates a package for working with subscribable data sources like event targets. From anEventTargetor object which conforms to theEventEmitterinterface you can now create a more ergonomicDataPublisher(object with anonmethod that vends an unsubscribe function) or an abortableAsyncIterable. -
#3353
696c72cThanks @steveluscher! - Fixed a bug that could result in the transaction confirmer claiming that the blockheight had been exceeded, when the fact of the matter was that the confirmation was aborted by anAbortSignal -
#3480
231a030Thanks @lorisleiva! - ChangefeePayertype of transaction messages fromAddressto{ address: Address }