legacy
(see Send a legacy transaction) and v0
(transactions that can include Address Lookup Tables or LUTs).
The goal of v0
is to increase the maximum size of a transaction, and hence the number of accounts that can fit in a single atomic transaction. With LUTs, developers can now build transactions with a maximum of 256 accounts, as compared to the limit of 35 accounts in legacy transactions that do not utilize LUTs.
VersionedTransaction
class rather than the Transaction
class.
The following example shows how to build a simple transfer instruction. Once the transfer instruction is made, a MessageV0
formatted transaction message is constructed with the transfer instruction. Finally, a new VersionedTransaction
is created, parsing in the v0
compatible message.
signAndSendTransaction
method on the provider. The call will return a Promise for an object containing the signature
. This is the same way a legacy transaction is sent via the Phantom provider.
SendOptions
object as a second argument into signAndSendTransaction()
or as an options
parameter when using request
.
For a live demo of signing and sending a versioned transaction, refer to handleSignAndSendTransactionV0 in our sandbox.
@solana/web3.js
createLookupTable method, developers can construct the instruction needed to create a new LUT, as well as determine its address. Once we have the LUT instruction, we can construct a transaction, sign it, and send it to create a LUT on-chain. Address LUTs can be created with either a v0
transaction or a legacy
transaction. However, the Solana runtime can only retrieve and handle the additional addresses within a LUT while using v0
transactions.
The following is a code snippet that creates a LUT.
@solana/web3.js
library, you can create a new extend
instruction using the extendLookupTable method. Once the extend instruction is created, it can be sent in a transaction.
VersionedTransaction
.VersionedTransaction
using an Address LUT.
First, we need to fetch the account of the created Address LUT.
VersionedTransaction
earlier. This VersionedTransaction
can then be sent using the signAndSendTransaction()
provider function.