Skip to content

chore: add c-token wrappers for example-compressed-claim #1763

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

SwenSchaeferjohann
Copy link
Contributor

#1603, but rebased to the latest main

use solana_program::account_info::AccountInfo;

/// CPI Accounts for decompressing compressed token accounts.
pub struct CompressedTokenDecompressCpiAccounts<'a> {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The way to pass accounts here is quite different from how we do it light-sdk see docs.rs.

We also need helpers to create accounts in the client.
For the client it probably makes sense to use the same pattern of PackedAccounts here.
It might make sense to extend PackedAccounts see github.
This is a ts implementation of PackedAccounts.

@SwenSchaeferjohann SwenSchaeferjohann force-pushed the swen/sdk-anchorless branch 3 times, most recently from beda872 to 8671a46 Compare June 3, 2025 23:25
@SwenSchaeferjohann SwenSchaeferjohann force-pushed the swen/sdk-anchorless branch 3 times, most recently from 52437b6 to 4b1128d Compare June 17, 2025 19:04
Copy link
Contributor

coderabbitai bot commented Jun 17, 2025

Important

Review skipped

Auto reviews are limited to specific labels.

🏷️ Labels to auto review (1)
  • ai-review

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

SwenSchaeferjohann and others added 3 commits June 17, 2025 15:36
wip

fix build.sh

fix install.sh

add deprecated getCachedActiveStateTreeInfo for backward compatibility

update changelog

wip

wip

fix using our cli fork reliably

fix

wip

released js pkgs

wip

chore: adapt cli

chore: bump cli version and constant to 0.27.0

verbose

wip

released 0.26.0

wip

fix install.sh for ci
* feat: add next_nullifier_index

* chore: regenerated accounts

* fix: tests

refactor: nullifiers in BatchPublicTransactionEvent (#1606)

* refactor: nullifiers in BatchPublicTransactionEvent

* fix: e2e test

fix: precision in js rpc client (#1588)

* fix precision in js rpc client when  coercing tokenData responses

* fix lint

* fix toCamelCase for nested objects + BN conversion for BiggNumbers

* exclude winston from rollup

* simplify stringification

* add for u64::max

* rename coercer

* fix lint

* release to npm

* bump, rm winston

* bump

* switch toCamelCas

* add tests for safe-conversion

* rm comments

* rm logger

feat: add selection helpers and idempotent variants (#1600)

* fix precision in js rpc client when  coercing tokenData responses

fix lint

fix toCamelCase for nested objects + BN conversion for BiggNumbers

exclude winston from rollup

simplify stringification

add for u64::max

rename coercer

fix lint

release to npm

bump, rm winston

bump

switch toCamelCas

add tests for safe-conversion

rm comments

add selection helpers, idempotent, meaningfful error messages. add tests

add tests to ci

fmt

bump CHANGELOG.md

* rm logger

* better error messages

* bump to 0.20.5

* add docstring

* bump CHANGELOG.md

* bump and update expected error message in tests

chore: rename token selectors in js (#1612)

* rename

* bump

Update verify.rs (#1605)

fix: parse event from transaction (#1614)

* wip

* cleanup and refactor into event dir

* fix: ci

* chore: add photon test data generation for 4 cpi events

fix: proof by index by fixing get_num_inserted_elements() (#1611)

* wip

* cleanup and refactor into event dir

* fix: ci

* chore: add photon test data generation for 4 cpi events

* fix: proof by index by fixing get_num_inserted_elements()

* fix: run program ci tests on program libs changes

* remove legacy comment

* fix: system test

* fix: sytem test

fix: add registered program ownership check

fix: add signer check for batched address tree

fix: migrate state output queue signer check

build(deps): bump tabled from 0.17.0 to 0.18.0 (#1607)

Bumps [tabled](https://github.com/zhiburt/tabled) from 0.17.0 to 0.18.0.
- [Changelog](https://github.com/zhiburt/tabled/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zhiburt/tabled/commits)

---
updated-dependencies:
- dependency-name: tabled
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps-dev): bump nx from 20.3.0 to 20.4.6 (#1610)

Bumps [nx](https://github.com/nrwl/nx/tree/HEAD/packages/nx) from 20.3.0 to 20.4.6.
- [Release notes](https://github.com/nrwl/nx/releases)
- [Commits](https://github.com/nrwl/nx/commits/20.4.6/packages/nx)

---
updated-dependencies:
- dependency-name: nx
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps-dev): bump eslint from 9.19.0 to 9.21.0 (#1609)

Bumps [eslint](https://github.com/eslint/eslint) from 9.19.0 to 9.21.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.19.0...v9.21.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump zerocopy from 0.8.14 to 0.8.20 (#1608)

Bumps [zerocopy](https://github.com/google/zerocopy) from 0.8.14 to 0.8.20.
- [Release notes](https://github.com/google/zerocopy/releases)
- [Changelog](https://github.com/google/zerocopy/blob/main/CHANGELOG.md)
- [Commits](https://github.com/google/zerocopy/compare/v0.8.14...v0.8.20)

---
updated-dependencies:
- dependency-name: zerocopy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump pnpm/action-setup from 4.0.0 to 4.1.0 (#1565)

Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/pnpm/action-setup/releases)
- [Commits](https://github.com/pnpm/action-setup/compare/v4.0.0...v4.1.0)

---
updated-dependencies:
- dependency-name: pnpm/action-setup
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps-dev): bump husky from 9.1.5 to 9.1.7 (#1574)

Bumps [husky](https://github.com/typicode/husky) from 9.1.5 to 9.1.7.
- [Release notes](https://github.com/typicode/husky/releases)
- [Commits](https://github.com/typicode/husky/compare/v9.1.5...v9.1.7)

---
updated-dependencies:
- dependency-name: husky
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

test: e2e forester (#1615)

build(deps-dev): bump chai from 5.1.2 to 5.2.0 (#1620)

Bumps [chai](https://github.com/chaijs/chai) from 5.1.2 to 5.2.0.
- [Release notes](https://github.com/chaijs/chai/releases)
- [Changelog](https://github.com/chaijs/chai/blob/main/History.md)
- [Commits](https://github.com/chaijs/chai/compare/v5.1.2...v5.2.0)

---
updated-dependencies:
- dependency-name: chai
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps-dev): bump @types/react-dom from 19.0.3 to 19.0.4 (#1623)

Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 19.0.3 to 19.0.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

---
updated-dependencies:
- dependency-name: "@types/react-dom"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

fix: install rust 1.83 via install.sh (#1628)

build(deps-dev): bump ts-mocha from 10.0.0 to 11.1.0 (#1621)

Bumps [ts-mocha](https://github.com/piotrwitek/ts-mocha) from 10.0.0 to 11.1.0.
- [Release notes](https://github.com/piotrwitek/ts-mocha/releases)
- [Commits](https://github.com/piotrwitek/ts-mocha/compare/v10.0.0...v11.1.0)

---
updated-dependencies:
- dependency-name: ts-mocha
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump thiserror from 2.0.11 to 2.0.12 (#1622)

Bumps [thiserror](https://github.com/dtolnay/thiserror) from 2.0.11 to 2.0.12.
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](https://github.com/dtolnay/thiserror/compare/2.0.11...2.0.12)

---
updated-dependencies:
- dependency-name: thiserror
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump log from 0.4.25 to 0.4.26 (#1624)

Bumps [log](https://github.com/rust-lang/log) from 0.4.25 to 0.4.26.
- [Release notes](https://github.com/rust-lang/log/releases)
- [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/log/compare/0.4.25...0.4.26)

---
updated-dependencies:
- dependency-name: log
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump syn from 2.0.96 to 2.0.99 (#1625)

Bumps [syn](https://github.com/dtolnay/syn) from 2.0.96 to 2.0.99.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/2.0.96...2.0.99)

---
updated-dependencies:
- dependency-name: syn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

refactor: forester(send_transaction): add timeout checks (#1631)

feat: add testnet init xtask command (#1632)

* feat: add testnet init xtask command

* fix tests

* fix lint

* fix: registry program test

perf: indexed array remove next index (#1629)

* created separate indexed array crate, updated MockBatchedAddressForester, created indexed tree in test mt

* refactor: remove next_index from non-inclusion circuit

* chore: debugged tests: batched merkle tree, light-prover-client, added new reference indexed array and Merkle tree

* stash, empty_address_queue_test v1 wip

* more fixes, e2e tests work

* fix: e2e, registry tests

* fix: concurrent tree tests

* chore: clean up light-indexed-array

* cleanup and regenerate batched address tree account

* chore: updated proving keys download url

* Update GitHub Actions to use 8vCPU runner for prover tests

* remove warnings

* Update prover/server/prover/proving_keys_utils.go

* chore: add comma for ,input

Co-authored-by: Sergey Timoshin <sergeytimoshin@proton.me>

* chore: remove leftover

* remove unwrap

* remove legacy tests

---------

Co-authored-by: Sergey Timoshin <sergeytimoshin@proton.me>

chore: update photon api (#1634)

* chore: update photon api

* fix: context

* fix: install script

* Update sdk-libs/client/src/indexer/photon_indexer.rs

* chore: trigger forester ci on program and photon api changes

* switch to warp-vms for forester ci workflow

* add retry logic for `get_validity_proof_v2`

---------

Co-authored-by: Sergey Timoshin <sergeytimoshin@proton.me>

feat: optimize forester by parallelizing zkp proof generation for batch append and nullify (#1633)

* wip

* parallel batch proof gen

* Remove debug logs

* remove unnecessary init_logger calls from tests

* cleanup

* cleanup

* Add delays to stabilize async indexer batch tests

* test_indexer: get_queue_elements with 0 offset

* fix

* Group transactions into chunks for batch processing.

* Remove sleep delay in transaction processing.

* Refactor chunking logic with a constant for chunk size.

* add batch_ixs_per_tx configuration for transaction batching

Replaces the fixed CHUNK_SIZE with a configurable batch_ixs_per_tx parameter, allowing dynamic control over instructions per transaction.

* Change batch_ixs_per_tx to 1 in test configurations

* format

* switch to warp-ubuntu-latest-x64-4x for forester ci workflow

chore: fix and rename sdk test to anchor sdk test (#1645)

* chore: fix and rename sdk test to anchor sdk test

* fix: pnpm lockfile

* chore: renamed anchor-sdk-test -> sdk-anchor-test

* fix: pnpm lock

* remove warnings

* cleanup sdk-anchor-test

fix: allow export for batch* circuits (#1653)

fix: hashing be for batched trees for TokenData and CompressedAccount… (#1652)

* fix: hashing be for batched trees for TokenData and CompressedAccount amount

* refactor: indexed element hashing to use 32 byte inputs

* test: add more tests CompressedAccount hash

* test: randomized legacy, hash vs z hash test

* test: token data legacy random test

* test: circuit account hash and token data hash equivalence

refactor: LightHasher and AsByteVec -> ToByteArray (#1650)

refactor: hasher and ToByteArray -> ToByteArray

refactor: hash_to_bn254_field_size_be return Option<[u8;32]> -> [u8;32]

rename: Truncate -> HashToFieldSize

refactor: move bigint -> light-hasher, hash to field size return Result

refactor: data hasher into file, add macros to implement data hasher and to bytes for arrays

refactor: rename bytes.rs -> to_byte_array.rs

refactor: replace light_merkle_tree_metadata::TreeType with light_compressed_account::TreeType (#1655)

refactor: add queue_pubkey & tree_type to MerkleTreeSequenceNumber (#1660)

* refactor: add queue_pubkey & tree_type to MerkleTreeSequenceNumber

* format

* fix: update photon to sergey/merkle-tree-seq-plus

* update program layout in typescript bindings, fix tests

* cleanup

* fix test

* fix: update photon dependency to latest commit

refactor: light-sdk, Light Account and LightAccountInfo (#1662)

* refactor: sdk verify

* refactor: LightAccount, LightAccountInfo and tests

* fixed: sdk test

feat: Formal Verification for updated circuits (#1644)

* bump lean version

* update circuits with input hashing

* checkpoint on rangetrees

* no indices

* remove next index

* progress on address tree

* extract all circuits

* checkpoint

* bring back some tests

* catch-up old mains

* batch append circuit

* add proofs for BatchUpdate

* soundness and completeness for address append

* clean up sorries

* state main props for address append

* fix change

* fix tags

* correct tree depths

refactor: light-sdk file structure (#1663)

fix: rent exemption check (#1668)

* fix: relax rent exemption check from strict equal to greater than

* remove dead code

* Update program-libs/account-checks/src/checks.rs

Co-authored-by: ananas-block <58553958+ananas-block@users.noreply.github.com>

---------

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

fix: queue type usage in from account info (#1669)

* fix: use queue type consistently in from_account_info

* chore: fix lint

chore: unify queue and tree types (#1670)

* fix: use queue type consistently in from_account_info

* chore: fix lint

* chore: unify queue and tree type constants in light-compressed-account

chore: add metadata length and current index checks to vec and cyclic vec from_bytes_at (#1671)

chore: feature gate try_into_array, to_vec behind std feature, make std non default (#1672)

chore: light-batched-merkle-tree feature gate test-utils test-only (#1673)

* chore: light-batched-merkle-tree feature gate test-utils test-only

chore: update github workflow to test with test-only feature

* fix: account compression program test imports

refactor: system program anchor -> pinocchio (#1664)

* feat: created anchor system program

feat: account checks with pinoccio and anchor
feat: program_check, signer_check, pda_check

* fix: cli, replace light_system_program with light_system_program_pinocchio

* fix: rust tests

feat: batch address updates support (#1651)

* feat: batch address updates support

* refactor: remove debug prints and improve PhotonIndexer initialization

* add light-concurrent-merkle-tree dep to sdk-libs/program-test

* refactor: reduce batch size for transaction configuration in e2e forester test

chore: bump groth16 solana v0.1.0 (#1680)

feat: feat: add queue_index to NewAddress and implement handling logic (#1683)

feat: extend PackedAccounts with pre and system accounts (#1679)

* feat: extend PackedAccounts with pre and system accounts

* Update sdk-libs/sdk/src/instruction/pack_accounts.rs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* format

* feat: return offsets from packed accounts

* Update sdk-libs/sdk/Cargo.toml

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

refactor: light hasher, add fuzzing (#1684)

* chore: remove flatten attribute, rename truncate code -> hash_to_field_size_code

refactor: into hasher dir

refactor: field processor

refactor: input validation

remove reconstructed struct

refactor: add context struct

refactor: move context struct into field_processor

format

feat: add basic fuzzing

move tests

refined fuzzing strategy

implemented review feedback

removed to_bytes_arrays

fix LightHasher unit tests

cleanup

fix: tests

* test: add Pubkey and borsh #[hash] tests, add debug print to DataHasher::hash

* Update program-libs/hasher/src/hash_to_field_size.rs

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

* Update program-libs/hasher/src/errors.rs

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

---------

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

refactor: discriminator sdk macro, light-hasher remove Discriminator, light-account-checks remove constant from Discriminator (#1685)

refactor: sdk use compressed account info from light-compressed-account (#1686)

* refactor: sdk use compressed account info from light-compressed-account

* chore: resolve merge conflict

refactore: rename tree and queue types with v1, v2 suffixes (#1687)

refactor: MerkleContext nullifier_queue_pubkey -> queue_pubkey (#1688)

refactor: counter example (#1690)

* fixed counter test program

* feat: counter program added close instruction

* add to ci tests, format

* refactor: rename CBorshAccount -> LightAccount

feat: cli: update commands for checking compressed SOL and token balances (#1694)

* feat: cli: update commands for checking compressed SOL and token balances

* fix: update token balance command to handle multiple accounts

feat: assign addresses (#1695)

* feat: assign addresses to compressed accounts

* feat: make tx hash optional

* chore: bump photon commit hash

perf: extend registered program pda account (#1698)

* perf: replaced signer derivation check with comparison

* feat: add resize instruction with tests

* regenerated accounts

chore: rename instruction data traits (#1699)

fix: add account is zeroed check to init cpi context account (#1700)

* fix: add account is zeroed check to init cpi context account

refactor: improve epoch_manager error handling and logging (#1697)

1. Increases log verbosity for key operations in `process_queue` (finding slots, waiting, sending txs) by changing several `trace!` calls to `info!`.
2. Modifies error handling within the main loop:
- Errors encountered during the rollover check (`check_for_epoch_rollover`) are now logged as errors but no longer cause the `process_queue` function to return immediately.
- Failures during `send_batched_transactions` are also logged as errors, but the function now continues processing the epoch instead of returning the error. This makes the forester more resilient to transient transaction send issues.
3. Removes a redundant `TODO` comment.

test: add new instruction integration test (#1703)

* test: add rnd test for zero copy ix data & traits, restore cpi tests, add account checks unit tests

add tests for invoke_cpi_with_account_info

bump anchor to 0.31.0, and solana versions to 2.2.1

chore: added tests, refactored cpi context validation

* update ci setup and build

* fix setup and build

* chore: bump RPC methods to solana v2 (#1704)

---------

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

refactor: instruction data field is_decompress -> is_compress

refactor: use check_data_is_zeroed set_discriminator

test: restore verify signer test

test: restore cpi context unit tests

fix: typos in filenames

chore: remove obsolete combine logic and tests

refactor: use account_info_init instead of manually setting the discriminator

feat: add xtask to create serialized protocol config update instruction

feat: address v2 test with multiple addresses, add async yields (#1719)

* feat: address v2 test with multiple addresses, add async yields

* enhance address creation logic to support multiple addresses
* add `tokio::task::yield_now()` in async loops to improve responsiveness

* refactor: remove commented debug print statements from test_indexer

chore: included `pkgconf` and `libssl-dev` to support building with OpenSSL (#1721)

fix: forester do not retry failing tx (#1724)

* fix: forester do not retry failing tx

* cleanup

feat: add retry mechanism to rate-limited requests in Photon indexer (#1722)

* feat: add retry mechanism to rate-limited requests in Photon indexer

Replaced `rate_limited_request` with `rate_limited_request_with_retry` to include a retry mechanism for handling transient errors.

* format

* Reduced initial retry delay to 100ms and capped exponential backoff at 4000ms to improve responsiveness and mitigate excessive delays.

* refactor: simplify retry logic in get_validity_proof_v2 request

fix: check_account_balance_is_rent_exempt return rent_exemption (#1715)

* fix: check_account_balance_is_rent_exempt return rent_exemption

* test: test rollover fee is correct

* Update program-tests/account-compression-test/tests/batched_merkle_tree_test.rs

feat: add batch compress tokens (#1718)

* feat: add batch compress tokens

fix ctoken js test: mint-to with wrong authority now throws inside spl program

test and optimize batch compress

test: add failing tests and fix mint to failing tests

fix: token22 compression

feat: add single amount to batch compress

* fix: comments

* perf: remove unnecessary seed check

* perf: remove unused input data

* perf: switch ctoken system program cpi to with_readonly

* feat: add with tx hash to transfer ix

* chore: add transfer2 to ensure transfer backwards compatibility

* stash pre claude

* feat: stateless.js add decodeInstructionDataInvokeCpiWithReadOnly

* stash

* stash

* remove transaction2

* cleanup

* chore: review 1718 (#1725)

* chore: expect index in batch compress

* chore: is_valid_token_pool_pda return Result

* test: add randomized test for BatchCompressInstructionData

* fix: mint lookup

---------

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

chore: fix token escrow idl (#1729)

build(deps-dev): bump eslint from 9.21.0 to 9.26.0 (#1726)

Bumps [eslint](https://github.com/eslint/eslint) from 9.21.0 to 9.26.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.21.0...v9.26.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.26.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

CI: migrate workflows to cache v4 (#1716)

Co-authored-by: David Klank <hol1337hol@gmail.com>

build(deps): bump serde_json from 1.0.139 to 1.0.140 (#1639)

Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.139 to 1.0.140.
- [Release notes](https://github.com/serde-rs/json/releases)
- [Commits](https://github.com/serde-rs/json/compare/v1.0.139...v1.0.140)

---
updated-dependencies:
- dependency-name: serde_json
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps-dev): bump syncpack from 13.0.1 to 13.0.4 (#1713)

Bumps [syncpack](https://github.com/JamieMason/syncpack) from 13.0.1 to 13.0.4.
- [Release notes](https://github.com/JamieMason/syncpack/releases)
- [Changelog](https://github.com/JamieMason/syncpack/blob/13.0.4/CHANGELOG.md)
- [Commits](https://github.com/JamieMason/syncpack/compare/13.0.1...13.0.4)

---
updated-dependencies:
- dependency-name: syncpack
  dependency-version: 13.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump serde_with from 2.3.3 to 3.12.0 (#1649)

Bumps [serde_with](https://github.com/jonasbb/serde_with) from 2.3.3 to 3.12.0.
- [Release notes](https://github.com/jonasbb/serde_with/releases)
- [Commits](https://github.com/jonasbb/serde_with/compare/v2.3.3...v3.12.0)

---
updated-dependencies:
- dependency-name: serde_with
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump react and @types/react (#1738)

Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) and [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react). These dependencies needed to be updated together.

Updates `react` from 19.0.0 to 19.1.0
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.1.0/packages/react)

Updates `@types/react` from 19.0.8 to 19.1.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: react
  dependency-version: 19.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: "@types/react"
  dependency-version: 19.1.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

refactor: forester improvements (#1723)

* feat: add retry mechanism to rate-limited requests in Photon indexer

Replaced `rate_limited_request` with `rate_limited_request_with_retry` to include a retry mechanism for handling transient errors.

* Reduced initial retry delay to 100ms and capped exponential backoff at 4000ms to improve responsiveness and mitigate excessive delays.

* refactor: enhance error handling and return types in tree scheduling functions

* update transaction batching configuration for improved performance

* refactor: update light slot calculation and add tests for phase start scenarios

* refactor: implement rate-limited request for get_indexer_slot method

* refactor: adjust indexer wait logic and enhance error handling in transaction processing

* refactor: add hash cache into transaction processing

* Replace `debug` logs with `trace` and remove unused dependencies

* Increase sleep duration in utils.rs from 400ms to 500ms

* Add `#[serial]` attribute to test_transfer_with_transaction_hash

---------

Co-authored-by: ananas-block <58553958+ananas-block@users.noreply.github.com>

build(deps): bump react-dom and @types/react-dom (#1737)

Bumps [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) and [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom). These dependencies needed to be updated together.

Updates `react-dom` from 19.0.0 to 19.1.0
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.1.0/packages/react-dom)

Updates `@types/react-dom` from 19.0.4 to 19.1.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

---
updated-dependencies:
- dependency-name: react-dom
  dependency-version: 19.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: "@types/react-dom"
  dependency-version: 19.1.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps-dev): bump eslint-config-next from 15.1.4 to 15.3.2 (#1739)

Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 15.1.4 to 15.3.2.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/commits/v15.3.2/packages/eslint-config-next)

---
updated-dependencies:
- dependency-name: eslint-config-next
  dependency-version: 15.3.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

Refactor Dockerfile and update README for key management (#1743)

chore: pnpm update (#1744)

chore: cleanup light client and light-program-test (#1720)

* refactored dependencies in light-client

* refactor program-test

* chore: split up system-cpi-test into v1 and v2

* fix test_state_indexer_async_batched

* ignore flaky forester test

refactor: counter program 2 (#1710)

fix: zero copy num traits (#1750)

* chore: feature flag num traits

* chore: removed redundant light verifier tests

refactor: RPC pool configuration and connection handling (#1745)

* Refactor RPC pool configuration and connection handling

- Introduced `RpcPoolConfig` struct for better organization of RPC pool settings.
- Updated CLI arguments to include new RPC pool parameters: connection timeout, idle timeout, max retries, and retry delays.
- Replaced direct usage of `SolanaRpcPool` with a builder pattern for improved configurability.
- Enhanced connection retrieval with retry logic and exponential backoff.
- Removed unused `log` dependency from `sdk-libs/client/Cargo.toml`.

* rebase

* fix after rebase

feat: regenerate photon-api crate & v2 proof handling (#1753)

* feat: regenerate photon-api crate

* refactor: remove debug print statement from get_validity_proof_v2

* feat: enable indexer in LightValidatorConfig for address tree initialization

* refactor: disable adjust address root index calculation in types.rs

* feat: update photon dependency to a newer commit

* rename AddressSeq to AddressQueueIndex and update related references

* refactor: implement Display trait for AccountState and update formatting

* rename: change AddressSeq to AddressQueueIndex and update module references

* refactor: change nullifier_queue_index and tree_type to u16 in AccountContext

chore: update rust to 1.86 (#1759)

* chore: update rust to 1.86

* chore: simplify get_output_account (#1760)

---------

Co-authored-by: ananas-block <58553958+ananas-block@users.noreply.github.com>

add light-compressed-token-sdk crate

lint

add tree and queue

add account_info

rename to decompress

proof option

fix lint

rebased to main

add c-token rust client helpers

Configure Docker image with proper proving keys (#1766) (#1764)

Add proving key files to Docker image instead of using empty directory.
Change run mode to RPC and update documentation for Docker usage.

fix: indexer get_compressed_account return type (#1765)

* fix: rpc return types

* fix: discriminator serialization is le bytes in photon

* fix: pr feedback

chore: bump versions, add batched Merkle tree placeholder bytes (#1767)

* chore: bump light-batched-merkle-tree -> 0.2.0, light-merkle-tree-metadata -> 0.2.0, light-concurrent-merkle-tree -> 2.0.0, light-merkle-tree-reference 2.0.0

* chore: add batched-merkle-tree placeholder bytes

* regenerate accounts

* fix: make concurrent mt *mut fields private

* chore: bump light-hash-set version -> 2.0.0

* bump: light-bloom-filter version -> 0.2.0

* fix: light-test-utils usage of concurrent-merkle-tree

* chore: bump concurrent-merkle-tree version -> 2.0.1

* chore: bump light-indexed-merkle-tree version -> 2.0.0

feat: add next nullifier index (#1604)

* feat: add next_nullifier_index

* chore: regenerated accounts

* fix: tests

refactor: nullifiers in BatchPublicTransactionEvent (#1606)

* refactor: nullifiers in BatchPublicTransactionEvent

* fix: e2e test

fix: precision in js rpc client (#1588)

* fix precision in js rpc client when  coercing tokenData responses

* fix lint

* fix toCamelCase for nested objects + BN conversion for BiggNumbers

* exclude winston from rollup

* simplify stringification

* add for u64::max

* rename coercer

* fix lint

* release to npm

* bump, rm winston

* bump

* switch toCamelCas

* add tests for safe-conversion

* rm comments

* rm logger

feat: add selection helpers and idempotent variants (#1600)

* fix precision in js rpc client when  coercing tokenData responses

fix lint

fix toCamelCase for nested objects + BN conversion for BiggNumbers

exclude winston from rollup

simplify stringification

add for u64::max

rename coercer

fix lint

release to npm

bump, rm winston

bump

switch toCamelCas

add tests for safe-conversion

rm comments

add selection helpers, idempotent, meaningfful error messages. add tests

add tests to ci

fmt

bump CHANGELOG.md

* rm logger

* better error messages

* bump to 0.20.5

* add docstring

* bump CHANGELOG.md

* bump and update expected error message in tests

chore: rename token selectors in js (#1612)

* rename

* bump

Update verify.rs (#1605)

fix: parse event from transaction (#1614)

* wip

* cleanup and refactor into event dir

* fix: ci

* chore: add photon test data generation for 4 cpi events

fix: proof by index by fixing get_num_inserted_elements() (#1611)

* wip

* cleanup and refactor into event dir

* fix: ci

* chore: add photon test data generation for 4 cpi events

* fix: proof by index by fixing get_num_inserted_elements()

* fix: run program ci tests on program libs changes

* remove legacy comment

* fix: system test

* fix: sytem test

fix: add registered program ownership check

fix: add signer check for batched address tree

fix: migrate state output queue signer check

build(deps): bump tabled from 0.17.0 to 0.18.0 (#1607)

Bumps [tabled](https://github.com/zhiburt/tabled) from 0.17.0 to 0.18.0.
- [Changelog](https://github.com/zhiburt/tabled/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zhiburt/tabled/commits)

---
updated-dependencies:
- dependency-name: tabled
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps-dev): bump nx from 20.3.0 to 20.4.6 (#1610)

Bumps [nx](https://github.com/nrwl/nx/tree/HEAD/packages/nx) from 20.3.0 to 20.4.6.
- [Release notes](https://github.com/nrwl/nx/releases)
- [Commits](https://github.com/nrwl/nx/commits/20.4.6/packages/nx)

---
updated-dependencies:
- dependency-name: nx
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps-dev): bump eslint from 9.19.0 to 9.21.0 (#1609)

Bumps [eslint](https://github.com/eslint/eslint) from 9.19.0 to 9.21.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.19.0...v9.21.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump zerocopy from 0.8.14 to 0.8.20 (#1608)

Bumps [zerocopy](https://github.com/google/zerocopy) from 0.8.14 to 0.8.20.
- [Release notes](https://github.com/google/zerocopy/releases)
- [Changelog](https://github.com/google/zerocopy/blob/main/CHANGELOG.md)
- [Commits](https://github.com/google/zerocopy/compare/v0.8.14...v0.8.20)

---
updated-dependencies:
- dependency-name: zerocopy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump pnpm/action-setup from 4.0.0 to 4.1.0 (#1565)

Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/pnpm/action-setup/releases)
- [Commits](https://github.com/pnpm/action-setup/compare/v4.0.0...v4.1.0)

---
updated-dependencies:
- dependency-name: pnpm/action-setup
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps-dev): bump husky from 9.1.5 to 9.1.7 (#1574)

Bumps [husky](https://github.com/typicode/husky) from 9.1.5 to 9.1.7.
- [Release notes](https://github.com/typicode/husky/releases)
- [Commits](https://github.com/typicode/husky/compare/v9.1.5...v9.1.7)

---
updated-dependencies:
- dependency-name: husky
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

test: e2e forester (#1615)

build(deps-dev): bump chai from 5.1.2 to 5.2.0 (#1620)

Bumps [chai](https://github.com/chaijs/chai) from 5.1.2 to 5.2.0.
- [Release notes](https://github.com/chaijs/chai/releases)
- [Changelog](https://github.com/chaijs/chai/blob/main/History.md)
- [Commits](https://github.com/chaijs/chai/compare/v5.1.2...v5.2.0)

---
updated-dependencies:
- dependency-name: chai
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps-dev): bump @types/react-dom from 19.0.3 to 19.0.4 (#1623)

Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 19.0.3 to 19.0.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

---
updated-dependencies:
- dependency-name: "@types/react-dom"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

fix: install rust 1.83 via install.sh (#1628)

build(deps-dev): bump ts-mocha from 10.0.0 to 11.1.0 (#1621)

Bumps [ts-mocha](https://github.com/piotrwitek/ts-mocha) from 10.0.0 to 11.1.0.
- [Release notes](https://github.com/piotrwitek/ts-mocha/releases)
- [Commits](https://github.com/piotrwitek/ts-mocha/compare/v10.0.0...v11.1.0)

---
updated-dependencies:
- dependency-name: ts-mocha
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump thiserror from 2.0.11 to 2.0.12 (#1622)

Bumps [thiserror](https://github.com/dtolnay/thiserror) from 2.0.11 to 2.0.12.
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](https://github.com/dtolnay/thiserror/compare/2.0.11...2.0.12)

---
updated-dependencies:
- dependency-name: thiserror
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump log from 0.4.25 to 0.4.26 (#1624)

Bumps [log](https://github.com/rust-lang/log) from 0.4.25 to 0.4.26.
- [Release notes](https://github.com/rust-lang/log/releases)
- [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/log/compare/0.4.25...0.4.26)

---
updated-dependencies:
- dependency-name: log
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump syn from 2.0.96 to 2.0.99 (#1625)

Bumps [syn](https://github.com/dtolnay/syn) from 2.0.96 to 2.0.99.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/2.0.96...2.0.99)

---
updated-dependencies:
- dependency-name: syn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

refactor: forester(send_transaction): add timeout checks (#1631)

feat: add testnet init xtask command (#1632)

* feat: add testnet init xtask command

* fix tests

* fix lint

* fix: registry program test

perf: indexed array remove next index (#1629)

* created separate indexed array crate, updated MockBatchedAddressForester, created indexed tree in test mt

* refactor: remove next_index from non-inclusion circuit

* chore: debugged tests: batched merkle tree, light-prover-client, added new reference indexed array and Merkle tree

* stash, empty_address_queue_test v1 wip

* more fixes, e2e tests work

* fix: e2e, registry tests

* fix: concurrent tree tests

* chore: clean up light-indexed-array

* cleanup and regenerate batched address tree account

* chore: updated proving keys download url

* Update GitHub Actions to use 8vCPU runner for prover tests

* remove warnings

* Update prover/server/prover/proving_keys_utils.go

* chore: add comma for ,input

Co-authored-by: Sergey Timoshin <sergeytimoshin@proton.me>

* chore: remove leftover

* remove unwrap

* remove legacy tests

---------

Co-authored-by: Sergey Timoshin <sergeytimoshin@proton.me>

chore: update photon api (#1634)

* chore: update photon api

* fix: context

* fix: install script

* Update sdk-libs/client/src/indexer/photon_indexer.rs

* chore: trigger forester ci on program and photon api changes

* switch to warp-vms for forester ci workflow

* add retry logic for `get_validity_proof_v2`

---------

Co-authored-by: Sergey Timoshin <sergeytimoshin@proton.me>

feat: optimize forester by parallelizing zkp proof generation for batch append and nullify (#1633)

* wip

* parallel batch proof gen

* Remove debug logs

* remove unnecessary init_logger calls from tests

* cleanup

* cleanup

* Add delays to stabilize async indexer batch tests

* test_indexer: get_queue_elements with 0 offset

* fix

* Group transactions into chunks for batch processing.

* Remove sleep delay in transaction processing.

* Refactor chunking logic with a constant for chunk size.

* add batch_ixs_per_tx configuration for transaction batching

Replaces the fixed CHUNK_SIZE with a configurable batch_ixs_per_tx parameter, allowing dynamic control over instructions per transaction.

* Change batch_ixs_per_tx to 1 in test configurations

* format

* switch to warp-ubuntu-latest-x64-4x for forester ci workflow

chore: fix and rename sdk test to anchor sdk test (#1645)

* chore: fix and rename sdk test to anchor sdk test

* fix: pnpm lockfile

* chore: renamed anchor-sdk-test -> sdk-anchor-test

* fix: pnpm lock

* remove warnings

* cleanup sdk-anchor-test

fix: allow export for batch* circuits (#1653)

fix: hashing be for batched trees for TokenData and CompressedAccount… (#1652)

* fix: hashing be for batched trees for TokenData and CompressedAccount amount

* refactor: indexed element hashing to use 32 byte inputs

* test: add more tests CompressedAccount hash

* test: randomized legacy, hash vs z hash test

* test: token data legacy random test

* test: circuit account hash and token data hash equivalence

refactor: LightHasher and AsByteVec -> ToByteArray (#1650)

refactor: hasher and ToByteArray -> ToByteArray

refactor: hash_to_bn254_field_size_be return Option<[u8;32]> -> [u8;32]

rename: Truncate -> HashToFieldSize

refactor: move bigint -> light-hasher, hash to field size return Result

refactor: data hasher into file, add macros to implement data hasher and to bytes for arrays

refactor: rename bytes.rs -> to_byte_array.rs

refactor: replace light_merkle_tree_metadata::TreeType with light_compressed_account::TreeType (#1655)

refactor: add queue_pubkey & tree_type to MerkleTreeSequenceNumber (#1660)

* refactor: add queue_pubkey & tree_type to MerkleTreeSequenceNumber

* format

* fix: update photon to sergey/merkle-tree-seq-plus

* update program layout in typescript bindings, fix tests

* cleanup

* fix test

* fix: update photon dependency to latest commit

refactor: light-sdk, Light Account and LightAccountInfo (#1662)

* refactor: sdk verify

* refactor: LightAccount, LightAccountInfo and tests

* fixed: sdk test

feat: Formal Verification for updated circuits (#1644)

* bump lean version

* update circuits with input hashing

* checkpoint on rangetrees

* no indices

* remove next index

* progress on address tree

* extract all circuits

* checkpoint

* bring back some tests

* catch-up old mains

* batch append circuit

* add proofs for BatchUpdate

* soundness and completeness for address append

* clean up sorries

* state main props for address append

* fix change

* fix tags

* correct tree depths

refactor: light-sdk file structure (#1663)

fix: rent exemption check (#1668)

* fix: relax rent exemption check from strict equal to greater than

* remove dead code

* Update program-libs/account-checks/src/checks.rs

Co-authored-by: ananas-block <58553958+ananas-block@users.noreply.github.com>

---------

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

fix: queue type usage in from account info (#1669)

* fix: use queue type consistently in from_account_info

* chore: fix lint

chore: unify queue and tree types (#1670)

* fix: use queue type consistently in from_account_info

* chore: fix lint

* chore: unify queue and tree type constants in light-compressed-account

chore: add metadata length and current index checks to vec and cyclic vec from_bytes_at (#1671)

chore: feature gate try_into_array, to_vec behind std feature, make std non default (#1672)

chore: light-batched-merkle-tree feature gate test-utils test-only (#1673)

* chore: light-batched-merkle-tree feature gate test-utils test-only

chore: update github workflow to test with test-only feature

* fix: account compression program test imports

refactor: system program anchor -> pinocchio (#1664)

* feat: created anchor system program

feat: account checks with pinoccio and anchor
feat: program_check, signer_check, pda_check

* fix: cli, replace light_system_program with light_system_program_pinocchio

* fix: rust tests

feat: batch address updates support (#1651)

* feat: batch address updates support

* refactor: remove debug prints and improve PhotonIndexer initialization

* add light-concurrent-merkle-tree dep to sdk-libs/program-test

* refactor: reduce batch size for transaction configuration in e2e forester test

chore: bump groth16 solana v0.1.0 (#1680)

feat: feat: add queue_index to NewAddress and implement handling logic (#1683)

feat: extend PackedAccounts with pre and system accounts (#1679)

* feat: extend PackedAccounts with pre and system accounts

* Update sdk-libs/sdk/src/instruction/pack_accounts.rs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* format

* feat: return offsets from packed accounts

* Update sdk-libs/sdk/Cargo.toml

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

refactor: light hasher, add fuzzing (#1684)

* chore: remove flatten attribute, rename truncate code -> hash_to_field_size_code

refactor: into hasher dir

refactor: field processor

refactor: input validation

remove reconstructed struct

refactor: add context struct

refactor: move context struct into field_processor

format

feat: add basic fuzzing

move tests

refined fuzzing strategy

implemented review feedback

removed to_bytes_arrays

fix LightHasher unit tests

cleanup

fix: tests

* test: add Pubkey and borsh #[hash] tests, add debug print to DataHasher::hash

* Update program-libs/hasher/src/hash_to_field_size.rs

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

* Update program-libs/hasher/src/errors.rs

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

---------

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

refactor: discriminator sdk macro, light-hasher remove Discriminator, light-account-checks remove constant from Discriminator (#1685)

refactor: sdk use compressed account info from light-compressed-account (#1686)

* refactor: sdk use compressed account info from light-compressed-account

* chore: resolve merge conflict

refactore: rename tree and queue types with v1, v2 suffixes (#1687)

refactor: MerkleContext nullifier_queue_pubkey -> queue_pubkey (#1688)

refactor: counter example (#1690)

* fixed counter test program

* feat: counter program added close instruction

* add to ci tests, format

* refactor: rename CBorshAccount -> LightAccount

feat: cli: update commands for checking compressed SOL and token balances (#1694)

* feat: cli: update commands for checking compressed SOL and token balances

* fix: update token balance command to handle multiple accounts

feat: assign addresses (#1695)

* feat: assign addresses to compressed accounts

* feat: make tx hash optional

* chore: bump photon commit hash

perf: extend registered program pda account (#1698)

* perf: replaced signer derivation check with comparison

* feat: add resize instruction with tests

* regenerated accounts

chore: rename instruction data traits (#1699)

fix: add account is zeroed check to init cpi context account (#1700)

* fix: add account is zeroed check to init cpi context account

refactor: improve epoch_manager error handling and logging (#1697)

1. Increases log verbosity for key operations in `process_queue` (finding slots, waiting, sending txs) by changing several `trace!` calls to `info!`.
2. Modifies error handling within the main loop:
- Errors encountered during the rollover check (`check_for_epoch_rollover`) are now logged as errors but no longer cause the `process_queue` function to return immediately.
- Failures during `send_batched_transactions` are also logged as errors, but the function now continues processing the epoch instead of returning the error. This makes the forester more resilient to transient transaction send issues.
3. Removes a redundant `TODO` comment.

test: add new instruction integration test (#1703)

* test: add rnd test for zero copy ix data & traits, restore cpi tests, add account checks unit tests

add tests for invoke_cpi_with_account_info

bump anchor to 0.31.0, and solana versions to 2.2.1

chore: added tests, refactored cpi context validation

* update ci setup and build

* fix setup and build

* chore: bump RPC methods to solana v2 (#1704)

---------

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

refactor: instruction data field is_decompress -> is_compress

refactor: use check_data_is_zeroed set_discriminator

test: restore verify signer test

test: restore cpi context unit tests

fix: typos in filenames

chore: remove obsolete combine logic and tests

refactor: use account_info_init instead of manually setting the discriminator

feat: add xtask to create serialized protocol config update instruction

feat: address v2 test with multiple addresses, add async yields (#1719)

* feat: address v2 test with multiple addresses, add async yields

* enhance address creation logic to support multiple addresses
* add `tokio::task::yield_now()` in async loops to improve responsiveness

* refactor: remove commented debug print statements from test_indexer

chore: included `pkgconf` and `libssl-dev` to support building with OpenSSL (#1721)

fix: forester do not retry failing tx (#1724)

* fix: forester do not retry failing tx

* cleanup

feat: add retry mechanism to rate-limited requests in Photon indexer (#1722)

* feat: add retry mechanism to rate-limited requests in Photon indexer

Replaced `rate_limited_request` with `rate_limited_request_with_retry` to include a retry mechanism for handling transient errors.

* format

* Reduced initial retry delay to 100ms and capped exponential backoff at 4000ms to improve responsiveness and mitigate excessive delays.

* refactor: simplify retry logic in get_validity_proof_v2 request

fix: check_account_balance_is_rent_exempt return rent_exemption (#1715)

* fix: check_account_balance_is_rent_exempt return rent_exemption

* test: test rollover fee is correct

* Update program-tests/account-compression-test/tests/batched_merkle_tree_test.rs

feat: add batch compress tokens (#1718)

* feat: add batch compress tokens

fix ctoken js test: mint-to with wrong authority now throws inside spl program

test and optimize batch compress

test: add failing tests and fix mint to failing tests

fix: token22 compression

feat: add single amount to batch compress

* fix: comments

* perf: remove unnecessary seed check

* perf: remove unused input data

* perf: switch ctoken system program cpi to with_readonly

* feat: add with tx hash to transfer ix

* chore: add transfer2 to ensure transfer backwards compatibility

* stash pre claude

* feat: stateless.js add decodeInstructionDataInvokeCpiWithReadOnly

* stash

* stash

* remove transaction2

* cleanup

* chore: review 1718 (#1725)

* chore: expect index in batch compress

* chore: is_valid_token_pool_pda return Result

* test: add randomized test for BatchCompressInstructionData

* fix: mint lookup

---------

Co-authored-by: Swen Schäferjohann <42959314+SwenSchaeferjohann@users.noreply.github.com>

chore: fix token escrow idl (#1729)

build(deps-dev): bump eslint from 9.21.0 to 9.26.0 (#1726)

Bumps [eslint](https://github.com/eslint/eslint) from 9.21.0 to 9.26.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.21.0...v9.26.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.26.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

CI: migrate workflows to cache v4 (#1716)

Co-authored-by: David Klank <hol1337hol@gmail.com>

build(deps): bump serde_json from 1.0.139 to 1.0.140 (#1639)

Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.139 to 1.0.140.
- [Release notes](https://github.com/serde-rs/json/releases)
- [Commits](https://github.com/serde-rs/json/compare/v1.0.139...v1.0.140)

---
updated-dependencies:
- dependency-name: serde_json
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps-dev): bump syncpack from 13.0.1 to 13.0.4 (#1713)

Bumps [syncpack](https://github.com/JamieMason/syncpack) from 13.0.1 to 13.0.4.
- [Release notes](https://github.com/JamieMason/syncpack/releases)
- [Changelog](https://github.com/JamieMason/syncpack/blob/13.0.4/CHANGELOG.md)
- [Commits](https://github.com/JamieMason/syncpack/compare/13.0.1...13.0.4)

---
updated-dependencies:
- dependency-name: syncpack
  dependency-version: 13.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump serde_with from 2.3.3 to 3.12.0 (#1649)

Bumps [serde_with](https://github.com/jonasbb/serde_with) from 2.3.3 to 3.12.0.
- [Release notes](https://github.com/jonasbb/serde_with/releases)
- [Commits](https://github.com/jonasbb/serde_with/compare/v2.3.3...v3.12.0)

---
updated-dependencies:
- dependency-name: serde_with
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps): bump react and @types/react (#1738)

Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) and [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react). These dependencies needed to be updated together.

Updates `react` from 19.0.0 to 19.1.0
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.1.0/packages/react)

Updates `@types/react` from 19.0.8 to 19.1.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: react
  dependency-version: 19.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: "@types/react"
  dependency-version: 19.1.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

refactor: forester improvements (#1723)

* feat: add retry mechanism to rate-limited requests in Photon indexer

Replaced `rate_limited_request` with `rate_limited_request_with_retry` to include a retry mechanism for handling transient errors.

* Reduced initial retry delay to 100ms and capped exponential backoff at 4000ms to improve responsiveness and mitigate excessive delays.

* refactor: enhance error handling and return types in tree scheduling functions

* update transaction batching configuration for improved performance

* refactor: update light slot calculation and add tests for phase start scenarios

* refactor: implement rate-limited request for get_indexer_slot method

* refactor: adjust indexer wait logic and enhance error handling in transaction processing

* refactor: add hash cache into transaction processing

* Replace `debug` logs with `trace` and remove unused dependencies

* Increase sleep duration in utils.rs from 400ms to 500ms

* Add `#[serial]` attribute to test_transfer_with_transaction_hash

---------

Co-authored-by: ananas-block <58553958+ananas-block@users.noreply.github.com>

build(deps): bump react-dom and @types/react-dom (#1737)

Bumps [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) and [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom). These dependencies needed to be updated together.

Updates `react-dom` from 19.0.0 to 19.1.0
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.1.0/packages/react-dom)

Updates `@types/react-dom` from 19.0.4 to 19.1.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

---
updated-dependencies:
- dependency-name: react-dom
  dependency-version: 19.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: "@types/react-dom"
  dependency-version: 19.1.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

build(deps-dev): bump eslint-config-next from 15.1.4 to 15.3.2 (#1739)

Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 15.1.4 to 15.3.2.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/commits/v15.3.2/packages/eslint-config-next)

---
updated-dependencies:
- dependency-name: eslint-config-next
  dependency-version: 15.3.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

Refactor Dockerfile and update README for key management (#1743)

chore: pnpm update (#1744)

chore: cleanup light client and light-program-test (#1720)

* refactored dependencies in light-client

* refactor program-test

* chore: split up system-cpi-test into v1 and v2

* fix test_state_indexer_async_batched

* ignore flaky forester test

refactor: counter program 2 (#1710)

fix: zero copy num traits (#1750)

* chore: feature flag num traits

* chore: removed redundant light verifier tests

refactor: RPC pool configuration and connection handling (#1745)

* Refactor RPC pool configuration and connection handling

- Introduced `RpcPoolConfig` struct for better organization of RPC pool settings.
- Updated CLI arguments to include new RPC pool parameters: connection timeout, idle timeout, max retries, and retry delays.
- Replaced direct usage of `SolanaRpcPool` with a builder pattern for improved configurability.
- Enhanced connection retrieval with retry logic and exponential backoff.
- Removed unused `log` dependency from `sdk-libs/client/Cargo.toml`.

* rebase

* fix after rebase

feat: regenerate photon-api crate & v2 proof handling (#1753)

* feat: regenerate photon-api crate

* refactor: remove debug print statement from get_validity_proof_v2

* feat: enable indexer in LightValidatorConfig for address tree initialization

* refactor: disable adjust address root index calculation in types.rs

* feat: update photon dependency to a newer commit

* rename AddressSeq to AddressQueueIndex and update related references

* refactor: implement Display trait for AccountState and update formatting

* rename: change AddressSeq to AddressQueueIndex and update module references

* refactor: change nullifier_queue_index and tree_type to u16 in AccountContext

chore: update rust to 1.86 (#1759)

* chore: update rust to 1.86

* chore: simplify get_output_account (#1760)

---------

Co-authored-by: ananas-block <58553958+ananas-block@users.noreply.github.com>

add light-compressed-token-sdk crate

lint

add tree and queue

add account_info

rename to decompress

proof option

fix lint

rebased to main

add c-token rust client helpers

wip

wip

wip

add test dir

wip

rev. transfersdk

wip

wip

wip

wip

wip

wip

wip

wip

wip

wip

wip

wip

aadd lengthbuffer to cpi

wuip

Co-authored-by: Sergey Timoshin <sergeytimoshin@proton.me>

wip
Copy link
Contributor

coderabbitai bot commented Jun 17, 2025

Caution

Review failed

An error occurred during the review process. Please try again later.


🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@SwenSchaeferjohann SwenSchaeferjohann force-pushed the swen/sdk-anchorless branch 2 times, most recently from 4f1cad2 to ba3b354 Compare June 17, 2025 19:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants