Releases: solana-labs/solana-web3.js
v1.91.8
The New web3.js – Technology Preview 3
tp3 (2024-04-25)
The next version of the @solana/web3.js
Technology Preview brings a major change to how signed transactions are represented, in response to user feedback.
To install the third Technology Preview:
npm install --save @solana/web3.js@tp3
Most notably, all *Transaction*()
helpers have been renamed to *TransactionMessage*()
to reflect what is actually being built when you build a transaction: the transaction message.
Before
const tx = pipe(
createTransaction({ version: 0 }),
tx => addTransactionFeePayer(payerAddress, tx),
/* ... */
);
After
const txMessage = pipe(
createTransactionMessage({ version: 0 }),
m => addTransactionMessageFeePayer(payerAddress, m),
/* ... */
);
We've introduced a new type to represent signed and partially signed messages. This type encapsulates the bytes of a transaction message – however they were serialized – and the ordered map of signer addresses to signatures. Reducing a transaction message to just those two things after the first signature is applied will make it harder for a subsequent signer to invalidate the existing signatures by _re_serializing the transaction message in such a way that the bytes or the order of signer addresses changes.
Try a demo of Technology Preview 3 in your browser at CodeSandbox.
Changelog since Technology Preview 2
-
#2434
31916ae
Thanks @lorisleiva! - RenamedmapCodec
totransformCodec
-
#2411
2e5af9f
Thanks @lorisleiva! - RenamedfixCodec
tofixCodecSize
-
#2352
125fc15
Thanks @steveluscher! -SubtleCrypto
assertion methods that can make their assertions synchronously are now synchronous, for performance. -
#2329
478443f
Thanks @luu-alex! -createKeyPairFromBytes()
now validates that the public key imported is the one that would be derived from the private key imported -
#2383
ce1be3f
Thanks @lorisleiva! -getScalarEnumCodec
is now calledgetEnumCodec
-
#2382
7e86583
Thanks @lorisleiva! -getDataEnumCodec
is now calledgetDiscriminatedUnionCodec
-
#2397
a548de2
Thanks @lorisleiva! - Added a newaddCodecSizePrefix
primitiveconst codec = addCodecSizePrefix(getBase58Codec(), getU32Codec()); codec.encode("hello world"); // 0x0b00000068656c6c6f20776f726c64 // | └-- Our encoded base-58 string. // └-- Our encoded u32 size prefix.
-
#2419
89f399d
Thanks @lorisleiva! - Added newaddCodecSentinel
primitiveThe
addCodecSentinel
function provides a new way of delimiting the size of a codec. It allows us to add a sentinel to the end of the encoded data and to read until that sentinel is found when decoding. It accepts any codec and aUint8Array
sentinel responsible for delimiting the encoded data.const codec = addCodecSentinel(getUtf8Codec(), new Uint8Array([255, 255])); codec.encode("hello"); // 0x68656c6c6fffff // | └-- Our sentinel. // └-- Our encoded string.
-
#2400
ebb03cd
Thanks @lorisleiva! - Added newcontainsBytes
andgetConstantCodec
helpersThe
containsBytes
helper checks if aUint8Array
contains anotherUint8Array
at a given offset.containsBytes(new Uint8Array([1, 2, 3, 4]), new Uint8Array([2, 3]), 1); // true containsBytes(new Uint8Array([1, 2, 3, 4]), new Uint8Array([2, 3]), 2); // false
The
getConstantCodec
function accepts anyUint8Array
and returns aCodec<void>
. When encoding, it will set the providedUint8Array
as-is. When decoding, it will assert that the next bytes contain the providedUint8Array
and move the offset forward.const codec = getConstantCodec(new Uint8Array([1, 2, 3])); codec.encode(undefined); // 0x010203 codec.decode(new Uint8Array([1, 2, 3])); // undefined codec.decode(new Uint8Array([1, 2, 4])); // Throws an error.
-
#2344
deb7b80
Thanks @lorisleiva! - ImprovegetTupleCodec
type inferences and performanceThe tuple codec now infers its encoded/decoded type from the provided codec array and uses the new
DrainOuterGeneric
helper to reduce the number of TypeScript instantiations. -
#2322
6dcf548
Thanks @lorisleiva! - UseDrainOuterGeneric
helper on codec type mappingsThis significantly reduces the number of TypeScript instantiations on object mappings,
which increases TypeScript performance and prevents "Type instantiation is excessively deep and possibly infinite" errors. -
#2381
49a764c
Thanks [@lorisleiva](ht...
v1.91.7
v1.91.6
v1.91.5
v1.91.4
v1.91.3
v1.91.2
The New web3.js – Technology Preview 2
tp2 (2024-03-19)
The first Technology Preview of @solana/web3.js
2.0 was released at the Breakpoint conference in November 2023. Based on your feedback, we want to get a second version of it into your hands now with some changes, bug fixes, and new features.
To install the second Technology Preview:
npm install --save @solana/web3.js@tp2
Most notably, this release integrates with the new JavaScript client generator for on-chain programs. Instruction creators and account decoders can now be autogenerated for any program, including your own! Read more here, and check out the growing list of autogenerated core programs here.
Try a demo of Technology Preview 2 in your browser at https://sola.na/web3tp2demo.
Changelog since Technology Preview 1
- Renamed
Base58EncodedAddress
toAddress
(#1814) 63683a4bc - Renamed
Ed25519Signature
andTransactionSignature
toSignatureBytes
andSignature
(#1815) 205c09268 - Fixed return type of
getSignaturesForAddress
(#1821) 36c7263bd signTransaction
now asserts that the transaction is fully signed; addedpartiallySignTransaction
that does not (#1820) 7d54c2dad- The
@solana/webcrypto-ed25519-polyfill
now sets thecrypto
global in Node 17a54d24a - Added
assertIsBlockhashLifetimeTransaction
that asserts transaction has a blockhash lifetime (#1908) ae94ca38d - Added a
createPrivateKeyFromBytes
helper (#1913) 85b7dfe13 - Added
@solana/accounts
; types and helper methods for representing, fetching and decoding Solana accounts (#1855) e1ca3966e - Export the TransactionError type (#1964) 4c009bf5b
- Export all RPC method XApi types from
@solana/rpc-core
(#1965) ed98b3d9c - Added a generic
createJsonRpcApi
function for custom APIs 1e2106f21 - Added a generic
createJsonRpcSubscriptionsApi
function for custom APIs ae3f1f087 - RPC commitment now defaults to
confirmed
when not explicitly specified cb7702ca5 - Added
ClusterUrl
types and handlers (#2084) 61f7ba0 - RPC transports can now be cluster-specific, ie.
RpcDevnet<TRpcMethods>
&RpcSubscriptionsDevnet<TRpcMethods>
(#2053) e58bb22, (#2056) cbf8f38 - RPC APIs can now be cluster-specific, ie.
SolanaRpcMethodsDevnet
(#2054) 5175d8a - Added cluster-level RPC support for
@solana/web3.js
(#2055) 5a6335d, (#2058) 0e03ca9 - Added
@solana/signers
; an abstraction layer over signing messages and transactions in Solana (#1710) 7c29a1e - Updated codec such that only one instance of
Uint8Array
is created when encoding data. This allowsEncoders
to set data at different offsets and therefore enables non-linear serialization (#1865) 7800e3b - Added
FixedSize*
andVariableSize*
type variants forCodecs
,Encoders
andDecoders
(#1883) 5e58d5c - Repaired some inaccurate RPC method signatures (#2137) bb65ba9
- Renamed transaction/airdrop sender factories with the ‘Factory’ suffix (#2130) 2d1d49c
- All code now throws coded exceptions defined in
@solana/errors
which can be refined usingisSolanaError()
and decoded in production usingnpx @solana/errors decode
(#2160) 3524f2c, (#2161) 94944b, (#2213) 8541c2e, (#2220) c9b2705, (#2207) 75a18e3, (#2224) 613053d, (#2226) 94fee67, (#2228) 483c674, (#2235) 803b2d8, (#2236) cf9c20c, (#2242) 9084fdd, (#2245) e374ac6, (#2186) 546263e, (#2187) bea19d2, (#2188) 2e0ae95, (#2189) 7712fc3, (#2190) 7d67615, (#2191) 0ba8f21, (#2192) 91a360d, (#2202) a71a2db, (#2286) 52a5d3d, and more - You can now supply a custom Undici dispatcher for use with the
fetch
API when creating an RPC transport in Node (#2178) a2fc5a3 - Added functions to assert a value is an
IInstructionWithAccounts
and IInstructionWithData` (#2212) 07c30c1 - Added a function to assert an instruction is for a given program (#2234) fb655dd
- You can now create an RPC using only a URL (#2238) cd0b6c6, (#2239) fc11993
- You can now resize codec with the
resizeCodec
helper (#2293) 606de63 - You can now skip bytes while writing byte buffers using the
offsetCodec
helper (#2294) 09d8cc8 - You can now now pad the beginning or end of byte buffers using the
padLeftCodec
andpadRightCodec
helpers (#2314) f9509c7 - Added a new
@solana/sysvars
package for fetching, decoding, and building transactions with sysvar accounts (#2041)