Skip to main content

V2 Improvements

v1v2
Merkle tree typeConcurrentBatched
State tree depth26 (~67M leaves)32 (~4B leaves)
Address tree depth2640
Address tree accountsSeparate tree + queueSingle batch tree

Update imports

// v1
import {
    deriveAddress,
    deriveAddressSeed,
    defaultTestStateTreeAccounts,
    PackedAccounts,
} from "@lightprotocol/stateless.js";
// v2
import {
    deriveAddressV2,
    deriveAddressSeedV2,
    batchAddressTree,
    PackedAccounts,
    featureFlags,
    VERSION,
} from "@lightprotocol/stateless.js";

Enable v2 mode

Set the feature flag before making any calls:
import { featureFlags, VERSION } from "@lightprotocol/stateless.js";

(featureFlags as any).version = VERSION.V2;

Update address derivation

The seed and address derivation functions have different signatures in v2:
// v1 - Program ID passed to seed derivation
const seed = deriveAddressSeed(
    [counterSeed, signer.publicKey.toBytes()],
    new PublicKey(program.idl.address)
);
const address = deriveAddress(seed, addressTree);
// v2 - Program ID passed to address derivation
const seed = deriveAddressSeedV2([counterSeed, signer.publicKey.toBytes()]);
const address = deriveAddressV2(
    seed,
    addressTree,
    new PublicKey(program.idl.address)
);

Update address tree references

Use batchAddressTree instead of defaultTestStateTreeAccounts().addressTree:
// v1
const addressTree = defaultTestStateTreeAccounts().addressTree;
const addressQueue = defaultTestStateTreeAccounts().addressQueue;

// In proof request
{
    tree: addressTree,
    queue: addressQueue,
    address: bn(address.toBytes()),
}
// v2 - queue equals tree for batch trees
const addressTree = new PublicKey(batchAddressTree);

// In proof request
{
    tree: addressTree,
    queue: addressTree,
    address: bn(address.toBytes()),
}

Update PackedAccounts

Use the v2 variant when building remaining accounts:
// v1
const remainingAccounts = PackedAccounts.newWithSystemAccounts(systemAccountConfig);
// v2
const remainingAccounts = PackedAccounts.newWithSystemAccountsV2(systemAccountConfig);

View Program Examples

Program examples