The New web3.js – Technology Preview 4
Pre-releasetp4 (2024-07-02)
This version of the @solana/web3.js
Technology Preview fixes a bug with the default RPC transport, adds a utility that you can use to get an estimate of a transaction message's compute unit cost, and introduces @solana/react
hooks for interacting with Wallet Standard wallets.
To install the fourth Technology Preview:
npm install --save @solana/web3.js@tp4
For an example of how to use the new @solana/react
package to interact with wallets in a React application, see the example application in examples/react-app
. We hope to see similar wallet-connection packages patterned off @solana/react
for other application frameworks soon.
Try a demo of Technology Preview 4 in your browser at CodeSandbox.
Changelog since Technology Preview 3
-
#2858
22a34aa
Thanks @steveluscher! - Transaction signers' methods now takeminContextSlot
as an option. This is important for signers that simulate transactions, like wallets. They might be interested in knowing the slot at which the transaction was prepared, lest they run simulation at too early a slot. -
#2852
cec9048
Thanks @lorisleiva! - ThesignAndSendTransactionMessageWithSigners
function now automatically asserts that the provided transaction message contains a single sending signer and fails otherwise. -
#2707
cb49bfa
Thanks @mcintyre94! - Allow creating keypairs and keys from ReadonlyUint8Array -
#2715
26dae19
Thanks @lorisleiva! - ConsolidatedgetNullableCodec
andgetOptionCodec
with theirZeroable
counterparts and added more configurationsNamely, the
prefix
option can now be set tonull
and thefixed
option was replaced with thenoneValue
option which can be set to"zeroes"
forZeroable
codecs or a custom byte array for custom representations of none values. This means thegetZeroableNullableCodec
andgetZeroableOptionCodec
functions were removed in favor of the new options.// Before. getZeroableNullableCodec(getU16Codec()); // After. getNullableCodec(getU16Codec(), { noneValue: 'zeroes', prefix: null });
Additionally, it is now possible to create nullable codecs that have no
prefix
nornoneValue
. In this case, the existence of the nullable item is indicated by the presence of any remaining bytes left to decode.const codec = getNullableCodec(getU16Codec(), { prefix: null }); codec.encode(42); // 0x2a00 codec.encode(null); // Encodes nothing. codec.decode(new Uint8Array([42, 0])); // 42 codec.decode(new Uint8Array([])); // null
Also note that it is now possible for custom
noneValue
byte arrays to be of any length — previously, it had to match the fixed-size of the nullable item.Here is a recap of all supported scenarios, using a
u16
codec as an example:encode(42)
/encode(null)
No noneValue
(default)noneValue: "zeroes"
Custom noneValue
(0xff
)u8
prefix (default)0x012a00
/0x00
0x012a00
/0x000000
0x012a00
/0x00ff
Custom prefix
(u16
)0x01002a00
/0x0000
0x01002a00
/0x00000000
0x01002a00
/0x0000ff
No prefix
0x2a00
/0x
0x2a00
/0x0000
0x2a00
/0xff
Reciprocal changes were made with
getOptionCodec
. -
#2785
4f19842
Thanks @steveluscher! - The development mode error message printer no longer fatals on Safari < 16.4. -
#2867
be36bab
Thanks @steveluscher! - TheinnerInstructions
property of JSON-RPC errors used snake case rather than camelCase forstackHeight
andprogramId
. This has been corrected. -
#2728
f1e9ac2
Thanks @joncinque! - Simulate with the maximum quantity of compute units (1.4M) instead ofu32::MAX
-
#2703
0908628
Thanks @steveluscher! - Created a utility function to estimate the compute unit consumption of a transaction message -
#2795
ce876d9
Thanks @steveluscher! - Added React hooks to which you can pass a Wallet StandardUiWalletAccount
and obtain aMessageModifyingSigner
,TransactionModifyingSigner
, orTransactionSendingSigner
for use in constructing, signing, and sending Solana transactions and messages -
#2772
8fe4551
Thanks @steveluscher! - Added a series of React hooks to which you can pass a Wallet StandardUiWalletAccount
to extract itssignMessage
,signTransaction
, andsignAndSendTransaction
features -
#2819
7ee47ae
Thanks @steveluscher! - Fixed a bug where coalesced RPC calls could end up aborted even though there were still interested consumers. This would happen if the consumer count fell to zero, then rose above zero again, in the same runloop. -
#2868
91fb1f3
Thanks @steveluscher! - ThesimulateTransaction
RPC method now accepts aninnerInstructions
param. Whentrue
, the simulation result will include an array of inner instructions, if any. -
#2866
73bd5a9
Thanks @steveluscher! - TheTransactionInstruction
RPC type now hasstackHeight
-
#2751
6340744
Thanks @mcintyre94! - Allow Rpc Request params to be any type, instead of requiring an array