Skip to content

Commit 54f0e7f

Browse files
authored
chore: migrate all programs from v1 to v2 state trees (#24)
- Update light-sdk and light-sdk-types to use v2 feature flag - Change imports from v1 to v2 modules (address, cpi) - Use ADDRESS_TREE_V2 constant from light_sdk_types - Update address params to use into_new_address_params_assigned_packed - Migrate TypeScript tests to use deriveAddressV2, deriveAddressSeedV2 - Use batchAddressTree and feature flags in TS tests - Fix pinocchio CpiAccounts API (try_new_with_config -> new_with_config) Programs migrated: - basic-operations/native: create, update, close, burn, reinit - basic-operations/anchor: create, update, close, burn, reinit - counter: native, anchor, pinocchio - account-comparison, create-and-update, read-only
1 parent 37adc6b commit 54f0e7f

57 files changed

Lines changed: 321 additions & 319 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

account-comparison/programs/account-comparison/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ idl-build = ["anchor-lang/idl-build"]
2020
[dependencies]
2121
anchor-lang = "0.31.1"
2222
light-hasher = { version = "5.0.0", features = ["solana"] }
23-
light-sdk = { version = "0.17.1", features = ["anchor"] }
24-
light-sdk-types = { version = "0.17.1", features = ["anchor"] }
23+
light-sdk = { version = "0.17", features = ["anchor", "v2"] }
24+
light-sdk-types = { version = "0.17.1", features = ["anchor", "v2"] }
2525

2626
[dev-dependencies]
2727
light-client = "0.17.2"

account-comparison/programs/account-comparison/src/lib.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
use anchor_lang::prelude::*;
44
use light_sdk::{
55
account::LightAccount,
6-
address::v1::derive_address,
7-
constants::ADDRESS_TREE_V1,
8-
cpi::{v1::CpiAccounts, CpiSigner},
6+
address::v2::derive_address,
7+
cpi::{v2::CpiAccounts, CpiSigner},
98
derive_light_cpi_signer,
109
instruction::{account_meta::CompressedAccountMeta, PackedAddressTreeInfo, ValidityProof},
1110
LightDiscriminator, LightHasher,
1211
};
12+
use light_sdk_types::ADDRESS_TREE_V2;
1313

1414
#[error_code]
1515
pub enum CustomError {
@@ -25,7 +25,7 @@ const CPI_SIGNER: CpiSigner =
2525
#[program]
2626
pub mod account_comparison {
2727
use light_sdk::cpi::{
28-
v1::LightSystemProgramCpi, InvokeLightSystemProgram, LightCpiInstruction,
28+
v2::LightSystemProgramCpi, InvokeLightSystemProgram, LightCpiInstruction,
2929
};
3030
use light_sdk::error::LightSdkError;
3131

@@ -63,7 +63,7 @@ pub mod account_comparison {
6363
.get_tree_pubkey(&light_cpi_accounts)
6464
.map_err(|err| ProgramError::from(LightSdkError::from(err)))?;
6565

66-
if address_tree_pubkey.to_bytes() != ADDRESS_TREE_V1 {
66+
if address_tree_pubkey.to_bytes() != ADDRESS_TREE_V2 {
6767
msg!("Invalid address tree");
6868
return Err(ProgramError::InvalidAccountData.into());
6969
}
@@ -89,7 +89,8 @@ pub mod account_comparison {
8989
compressed_account.name = name;
9090
compressed_account.data = [1u8; 128];
9191

92-
let new_address_params = address_tree_info.into_new_address_params_packed(address_seed);
92+
let new_address_params =
93+
address_tree_info.into_new_address_params_assigned_packed(address_seed, Some(0));
9394

9495
LightSystemProgramCpi::new_cpi(CPI_SIGNER, proof)
9596
.with_light_account(compressed_account)?

account-comparison/programs/account-comparison/tests/test_compressed_account.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use light_program_test::{
55
program_test::LightProgramTest, AddressWithTree, Indexer, ProgramTestConfig, Rpc, RpcError,
66
};
77
use light_sdk::{
8-
address::v1::derive_address,
8+
address::v2::derive_address,
99
instruction::{account_meta::CompressedAccountMeta, PackedAccounts, SystemAccountMetaConfig},
1010
};
1111
use solana_sdk::{
@@ -24,7 +24,7 @@ async fn test_create_compressed_account() {
2424
let mut rpc = LightProgramTest::new(config).await.unwrap();
2525
let user = rpc.get_payer().insecure_clone();
2626

27-
let address_tree_info = rpc.get_address_tree_v1();
27+
let address_tree_info = rpc.get_address_tree_v2();
2828

2929
let (address, _) = derive_address(
3030
&[b"account", user.pubkey().as_ref()],
@@ -82,7 +82,7 @@ where
8282
{
8383
let mut remaining_accounts = PackedAccounts::default();
8484
let config = SystemAccountMetaConfig::new(account_comparison::ID);
85-
remaining_accounts.add_system_accounts(config)?;
85+
remaining_accounts.add_system_accounts_v2(config)?;
8686

8787
let rpc_result = rpc
8888
.get_validity_proof(
@@ -141,7 +141,7 @@ where
141141
{
142142
let mut remaining_accounts = PackedAccounts::default();
143143
let config = SystemAccountMetaConfig::new(account_comparison::ID);
144-
remaining_accounts.add_system_accounts(config)?;
144+
remaining_accounts.add_system_accounts_v2(config)?;
145145

146146
let hash = compressed_account.hash;
147147

basic-operations/anchor/burn/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
},
88
"dependencies": {
99
"@coral-xyz/anchor": "0.31.1",
10-
"@lightprotocol/stateless.js": "0.22.1-alpha.1",
10+
"@lightprotocol/stateless.js": "0.22.1-alpha.7",
1111
"dotenv": "^16.5.0"
1212
},
1313
"devDependencies": {

basic-operations/anchor/burn/programs/burn/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ idl-build = ["anchor-lang/idl-build", "light-sdk/idl-build"]
1919

2020
[dependencies]
2121
anchor-lang = "0.31.1"
22-
light-sdk = { version = "0.17.1", features = ["anchor"] }
23-
light-sdk-types = { version = "0.17.1", features = ["anchor"] }
22+
light-sdk = { version = "0.17", features = ["anchor", "v2"] }
23+
light-sdk-types = { version = "0.17.1", features = ["anchor", "v2"] }
2424

2525
[target.'cfg(not(target_os = "solana"))'.dependencies]
2626
solana-sdk = "2.2"

basic-operations/anchor/burn/programs/burn/src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
use anchor_lang::{prelude::*, AnchorDeserialize, AnchorSerialize};
55
use light_sdk::{
66
account::LightAccount,
7-
address::v1::derive_address,
8-
constants::ADDRESS_TREE_V1,
9-
cpi::{v1::CpiAccounts, CpiSigner},
7+
address::v2::derive_address,
8+
cpi::{v2::CpiAccounts, CpiSigner},
109
derive_light_cpi_signer,
1110
instruction::{account_meta::CompressedAccountMetaBurn, PackedAddressTreeInfo, ValidityProof},
1211
LightDiscriminator,
1312
};
13+
use light_sdk_types::ADDRESS_TREE_V2;
1414

1515
declare_id!("BJhPWQnD31mdo6739Mac1gLuSsbbwTmpgjHsW6shf6WA");
1616

@@ -22,7 +22,7 @@ pub mod burn {
2222

2323
use super::*;
2424
use light_sdk::cpi::{
25-
v1::LightSystemProgramCpi, InvokeLightSystemProgram, LightCpiInstruction,
25+
v2::LightSystemProgramCpi, InvokeLightSystemProgram, LightCpiInstruction,
2626
};
2727

2828
/// Setup: Creates a compressed account
@@ -43,7 +43,7 @@ pub mod burn {
4343
.get_tree_pubkey(&light_cpi_accounts)
4444
.map_err(|_| ErrorCode::AccountNotEnoughKeys)?;
4545

46-
if address_tree_pubkey.to_bytes() != ADDRESS_TREE_V1 {
46+
if address_tree_pubkey.to_bytes() != ADDRESS_TREE_V2 {
4747
msg!("Invalid address tree");
4848
return Err(ProgramError::InvalidAccountData.into());
4949
}
@@ -70,7 +70,7 @@ pub mod burn {
7070

7171
LightSystemProgramCpi::new_cpi(LIGHT_CPI_SIGNER, proof)
7272
.with_light_account(my_compressed_account)?
73-
.with_new_addresses(&[address_tree_info.into_new_address_params_packed(address_seed)])
73+
.with_new_addresses(&[address_tree_info.into_new_address_params_assigned_packed(address_seed, Some(0))])
7474
.invoke(light_cpi_accounts)?;
7575

7676
Ok(())

basic-operations/anchor/burn/programs/burn/tests/test.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ use light_client::indexer::CompressedAccount;
55
use light_program_test::{
66
program_test::LightProgramTest, Indexer, ProgramTestConfig, Rpc, RpcError,
77
};
8-
use light_sdk::instruction::{
9-
account_meta::CompressedAccountMetaBurn, PackedAccounts, SystemAccountMetaConfig,
8+
use light_sdk::{
9+
address::v2::derive_address,
10+
instruction::{account_meta::CompressedAccountMetaBurn, PackedAccounts, SystemAccountMetaConfig},
1011
};
1112
use burn::MyCompressedAccount;
1213
use solana_sdk::{
@@ -23,8 +24,8 @@ async fn test_burn() {
2324
let payer = rpc.get_payer().insecure_clone();
2425

2526
// Create account first
26-
let address_tree_info = rpc.get_address_tree_v1();
27-
let (address, _) = light_sdk::address::v1::derive_address(
27+
let address_tree_info = rpc.get_address_tree_v2();
28+
let (address, _) = derive_address(
2829
&[b"message", payer.pubkey().as_ref()],
2930
&address_tree_info.tree,
3031
&burn::ID,
@@ -68,7 +69,7 @@ async fn burn_compressed_account(
6869
let mut remaining_accounts = PackedAccounts::default();
6970

7071
let config = SystemAccountMetaConfig::new(burn::ID);
71-
remaining_accounts.add_system_accounts(config)?;
72+
remaining_accounts.add_system_accounts_v2(config)?;
7273
let hash = compressed_account.hash;
7374

7475
let rpc_result = rpc
@@ -116,9 +117,9 @@ async fn create_compressed_account(
116117
) -> Result<Signature, RpcError> {
117118
let config = SystemAccountMetaConfig::new(burn::ID);
118119
let mut remaining_accounts = PackedAccounts::default();
119-
remaining_accounts.add_system_accounts(config)?;
120+
remaining_accounts.add_system_accounts_v2(config)?;
120121

121-
let address_tree_info = rpc.get_address_tree_v1();
122+
let address_tree_info = rpc.get_address_tree_v2();
122123

123124
let rpc_result = rpc
124125
.get_validity_proof(

basic-operations/anchor/burn/tests/burn.ts

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,22 @@ import {
77
CompressedAccountWithMerkleContext,
88
confirmTx,
99
createRpc,
10-
defaultStaticAccountsStruct,
1110
defaultTestStateTreeAccounts,
12-
deriveAddress,
13-
deriveAddressSeed,
14-
LightSystemProgram,
11+
deriveAddressV2,
12+
deriveAddressSeedV2,
13+
batchAddressTree,
1514
PackedAccounts,
1615
Rpc,
1716
sleep,
1817
SystemAccountMetaConfig,
18+
featureFlags,
19+
VERSION,
1920
} from "@lightprotocol/stateless.js";
2021
import * as assert from "assert";
2122

23+
// Force V2 mode
24+
(featureFlags as any).version = VERSION.V2;
25+
2226
const path = require("path");
2327
const os = require("os");
2428
require("dotenv").config();
@@ -45,21 +49,20 @@ describe("test-anchor-burn", () => {
4549
await sleep(2000);
4650

4751
const outputStateTree = defaultTestStateTreeAccounts().merkleTree;
48-
const addressTree = defaultTestStateTreeAccounts().addressTree;
49-
const addressQueue = defaultTestStateTreeAccounts().addressQueue;
52+
const addressTree = new web3.PublicKey(batchAddressTree);
5053

5154
const messageSeed = new TextEncoder().encode("message");
52-
const seed = deriveAddressSeed(
53-
[messageSeed, signer.publicKey.toBytes()],
55+
const seed = deriveAddressSeedV2([messageSeed, signer.publicKey.toBytes()]);
56+
const address = deriveAddressV2(
57+
seed,
58+
addressTree,
5459
new web3.PublicKey(burnProgram.idl.address),
5560
);
56-
const address = deriveAddress(seed, addressTree);
5761

5862
// Step 1: Create compressed account with initial message
5963
const createTxId = await createCompressedAccount(
6064
rpc,
6165
addressTree,
62-
addressQueue,
6366
address,
6467
burnProgram,
6568
outputStateTree,
@@ -110,7 +113,6 @@ describe("test-anchor-burn", () => {
110113
async function createCompressedAccount(
111114
rpc: Rpc,
112115
addressTree: anchor.web3.PublicKey,
113-
addressQueue: anchor.web3.PublicKey,
114116
address: anchor.web3.PublicKey,
115117
program: anchor.Program<Burn>,
116118
outputStateTree: anchor.web3.PublicKey,
@@ -122,18 +124,18 @@ async function createCompressedAccount(
122124
[
123125
{
124126
tree: addressTree,
125-
queue: addressQueue,
127+
queue: addressTree,
126128
address: bn(address.toBytes()),
127129
},
128130
],
129131
);
130132
const systemAccountConfig = new SystemAccountMetaConfig(program.programId);
131133
let remainingAccounts = new PackedAccounts();
132-
remainingAccounts.addSystemAccounts(systemAccountConfig);
134+
remainingAccounts.addSystemAccountsV2(systemAccountConfig);
133135

134136
const addressMerkleTreePubkeyIndex =
135137
remainingAccounts.insertOrGet(addressTree);
136-
const addressQueuePubkeyIndex = remainingAccounts.insertOrGet(addressQueue);
138+
const addressQueuePubkeyIndex = addressMerkleTreePubkeyIndex;
137139
const packedAddressTreeInfo = {
138140
rootIndex: proofRpcResult.rootIndices[0],
139141
addressMerkleTreePubkeyIndex,
@@ -185,7 +187,7 @@ async function burnCompressedAccount(
185187

186188
const systemAccountConfig = new SystemAccountMetaConfig(program.programId);
187189
let remainingAccounts = new PackedAccounts();
188-
remainingAccounts.addSystemAccounts(systemAccountConfig);
190+
remainingAccounts.addSystemAccountsV2(systemAccountConfig);
189191

190192
const merkleTreePubkeyIndex = remainingAccounts.insertOrGet(
191193
compressedAccount.treeInfo.tree,
@@ -227,4 +229,4 @@ async function burnCompressedAccount(
227229
const sig = await rpc.sendTransaction(tx, [signer]);
228230
await confirmTx(rpc, sig);
229231
return sig;
230-
}
232+
}

basic-operations/anchor/close/programs/close/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ idl-build = ["anchor-lang/idl-build", "light-sdk/idl-build"]
1919

2020
[dependencies]
2121
anchor-lang = "0.31.1"
22-
light-sdk = { version = "0.17.1", features = ["anchor"] }
23-
light-sdk-types = { version = "0.17.1", features = ["anchor"] }
22+
light-sdk = { version = "0.17", features = ["anchor", "v2"] }
23+
light-sdk-types = { version = "0.17.1", features = ["anchor", "v2"] }
2424

2525
[target.'cfg(not(target_os = "solana"))'.dependencies]
2626
solana-sdk = "2.2"

basic-operations/anchor/close/programs/close/src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
use anchor_lang::{prelude::*, AnchorDeserialize, AnchorSerialize};
55
use light_sdk::{
66
account::LightAccount,
7-
address::v1::derive_address,
8-
constants::ADDRESS_TREE_V1,
9-
cpi::{v1::CpiAccounts, CpiSigner},
7+
address::v2::derive_address,
8+
cpi::{v2::CpiAccounts, CpiSigner},
109
derive_light_cpi_signer,
1110
instruction::{account_meta::CompressedAccountMeta, PackedAddressTreeInfo, ValidityProof},
1211
LightDiscriminator,
1312
};
13+
use light_sdk_types::ADDRESS_TREE_V2;
1414

1515
declare_id!("DzQ3za3DVCpXkXhmZVSrNchwbbSsJXmi9MBc8v5tvZuQ");
1616

@@ -22,7 +22,7 @@ pub mod close {
2222

2323
use super::*;
2424
use light_sdk::cpi::{
25-
v1::LightSystemProgramCpi, InvokeLightSystemProgram, LightCpiInstruction,
25+
v2::LightSystemProgramCpi, InvokeLightSystemProgram, LightCpiInstruction,
2626
};
2727

2828
/// Setup: Create a compressed account
@@ -43,7 +43,7 @@ pub mod close {
4343
.get_tree_pubkey(&light_cpi_accounts)
4444
.map_err(|_| ErrorCode::AccountNotEnoughKeys)?;
4545

46-
if address_tree_pubkey.to_bytes() != ADDRESS_TREE_V1 {
46+
if address_tree_pubkey.to_bytes() != ADDRESS_TREE_V2 {
4747
msg!("Invalid address tree");
4848
return Err(ProgramError::InvalidAccountData.into());
4949
}
@@ -70,7 +70,7 @@ pub mod close {
7070

7171
LightSystemProgramCpi::new_cpi(LIGHT_CPI_SIGNER, proof)
7272
.with_light_account(my_compressed_account)?
73-
.with_new_addresses(&[address_tree_info.into_new_address_params_packed(address_seed)])
73+
.with_new_addresses(&[address_tree_info.into_new_address_params_assigned_packed(address_seed, Some(0))])
7474
.invoke(light_cpi_accounts)?;
7575

7676
Ok(())

0 commit comments

Comments
 (0)