Skip to content

The New web3.js – Technology Preview 4

Pre-release
Pre-release
Compare
Choose a tag to compare
@steveluscher steveluscher released this 02 Jul 21:17
· 454 commits to master since this release
798651e

tp4 (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 take minContextSlot 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! - The signAndSendTransactionMessageWithSigners 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! - Consolidated getNullableCodec and getOptionCodec with their Zeroable counterparts and added more configurations

    Namely, the prefix option can now be set to null and the fixed option was replaced with the noneValue option which can be set to "zeroes" for Zeroable codecs or a custom byte array for custom representations of none values. This means the getZeroableNullableCodec and getZeroableOptionCodec 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 nor noneValue. 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! - The innerInstructions property of JSON-RPC errors used snake case rather than camelCase for stackHeight and programId. This has been corrected.

  • #2728 f1e9ac2 Thanks @joncinque! - Simulate with the maximum quantity of compute units (1.4M) instead of u32::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 Standard UiWalletAccount and obtain a MessageModifyingSigner, TransactionModifyingSigner, or TransactionSendingSigner 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 Standard UiWalletAccount to extract its signMessage, signTransaction, and signAndSendTransaction 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! - The simulateTransaction RPC method now accepts an innerInstructions param. When true, the simulation result will include an array of inner instructions, if any.

  • #2866 73bd5a9 Thanks @steveluscher! - The TransactionInstruction RPC type now has stackHeight

  • #2751 6340744 Thanks @mcintyre94! - Allow Rpc Request params to be any type, instead of requiring an array