Solana’s v1 transaction format guarantees greater than 3 times as a lot room per transaction, however RPC shoppers, indexers, relayers and payment sponsors that aren’t prepared for it may well fail in two very other ways: some programs cease, whereas others preserve operating with the unsuitable useful resource limits.
Solana’s dwell improve web page nonetheless lists v1 as not activated on mainnet as of Sept. 4. Testnet is lively and devnet is dwell in epoch 1140. A Solana changelog revealed Aug. 28 stated v1 transactions have been “coming quickly,” leaving infrastructure operators a pre-activation window to replace.
V1 raises the utmost payload from 1,232 bytes to 4,096 bytes, a couple of 3.3-fold improve. Legacy and v0 transactions preserve their present limits and conduct, so customers and functions that proceed utilizing these codecs don’t must migrate.
RPC customers should move the integer maxSupportedTransactionVersion: 1 when utilizing getTransaction, getBlock or blockSubscribe. With out that opt-in, a v1 getTransaction request returns error -32015, one v1 transaction makes getBlock fail for the whole block, and blockSubscribe emits block: null and stops advancing on the first affected slot.
The parameter solely tells the RPC service the very best format the consumer can decode. It doesn’t request v1 information or change how legacy and v0 transactions are returned.
Different failures are quieter. V1 strikes compute-unit limits, loaded-account information limits and precedence charges right into a transactionConfig object as an alternative of ComputeBudget directions. An indexer that retains scanning these directions will report a zero compute price range for each v1 transaction with out elevating an error.
Geyser and gRPC customers face a associated lure. The protobuf’s versioned flag is true for each v0 and v1. A stale client can due to this fact label v1 as v0 and protect an empty price range. The repair is to regenerate the protobuf stubs and examine for Message.config, subject 7, earlier than studying the flag.
Relayers, paymasters and different server signers should change their coverage checks too. A sponsor that enforces a payment cap by scanning ComputeBudget directions not has a binding cap as a result of these directions could seem in v1 however execute as no-ops. Servers should determine the 0x81 v1 prefix and implement the payment and useful resource limits in transactionConfig. That is an application-control failure, not a consensus flaw or proof that funds are routinely in danger.
Onchain applications face a more durable constraint: Solana says no present sysvar or syscall exposes the v1 message configuration. Packages that gate conduct on introspected ComputeBudget directions should cease counting on that examine when v1 goes dwell.
Who must improve for Solana v1
The minimal reader-capable releases embrace @solana/equipment 8.0.0, @solana/web3.js 3.0.0-rc.3, Rust solana-* 4.2.x, Python solders 0.29.0 and solana-go 1.23.0. The 1.x web3.js line can learn v1 from 1.99.0-beta.0 however can not construct, signal or ship it.
Yellowstone customers want at the very least yellowstone-grpc-proto 12.6.0, geyser plugin 15.1.1, gRPC consumer 12.0.0 or @triton-one/yellowstone-grpc 6.0.0, relying on their stack.
Creating v1 transactions is optionally available. Groups that decide in should set compute-unit and loaded-account information limits explicitly as a result of each default to zero, take away no-op ComputeBudget directions, cease utilizing deal with lookup tables and use base64 for payloads bigger than 1,232 bytes. The fast deadline shouldn’t be a common pockets migration. It’s a compatibility take a look at for each service which will learn, index or sponsor any individual else’s v1 transaction.




