Skip to content

Commit eeb1ded

Browse files
ananas-blockSwenSchaeferjohann
authored andcommitted
feat: ctoken pinocchio
post rebase feat: add addresses to cpi context, enable spending of created accounts in same ix system program update small instruction sdk token 4 cpis works chained token test create mint in cpi context works chaind token mint to works stash multiple ctoken action test implemented not working for address creation fails refactor: cpi context, enable addresses, enable assigned addresses, placeholders for readonly addresses, and accounts,breaking account layout change feat: add cpi context to ctoken ixs fix: chained ctoken actions test fix: cpi context address owner feat: update compressed mint, untested fix tests client test works fixed event parsing in system program, chained test works refactor: rename TokenContext -> HashCache cleanup ix data, rename UpdateCompressedMintInstructionData -> CompressedMintWithContext, UpdateCompressedMintInstructionDataV2 -> UpdateCompressedMintInstructionData feat: sha hashing for cmints, start update_metadata minor CU improvements feat: add zero copy enum support stash mint action feat: add update to mint action stash implemeneted mint actions for existing ixs test: mint actions with token client works without create mint stash cleanup cleanup chained action test passes stash chained test cleanup cleanup errors started refactor create spl mint feat: mint to decompressed update metadata compiles stash stash stash fix: mint hashing feat: format tx logs in light program test fix: logging fix: create spl test_create_compressed_mint_with_token_metadata_sha works fix: mint action program side bugs fix: test test_create_compressed_mint_with_token_metadata_poseidon fix create compressed mint test fix: update mint authority refactor: chained test to pda_ctoken, ctoken_pda comment create_spl_mint dir remove: dead code compressed token program test: decompressed transfer and update latest slot fix: token22 import fix: tests add program id check, cleanups refactor: unify create pda refactor associated token update claude md reactor: close account refactor: create token account refactor: mint_to_action fix: close account fix: mint action test refactor and cleanup create mint action mint action cleanup refactor: update authorities refactor: mint to decompressed refactor: update metadata refactor: update metadata authority cleanup refactor: always check that authority is signer cleanup fix: token sdk tests cherrypicked hasher update: support sha in hasher and lighthasher macro lint remove unused _output_account_info update lightdiscriminator macro wip add compress_pda helper compress_pda compiling decompress_idempotent.rs wip wip decompress batch idempotent wip add compress_pda_new and compress_multiple_pdas_new native program with decompress done compress_dynamic, decompress_dynamic wip adding anchor testprogram uses sdk fix compilation wip experiment with procmacro skip SLOT check at compress_pda_new wip add_compressible_instructions() works for compress, idl gen works add proc macro decompress_multiple_pdas is working as it should fix decompress_idempotent impl rm expanded add remove_data force apps to pass the whole signer_seeds directly add compressible_config draft add create_config_unchecked and checked use config, add unified header struct (just last_written_slot) for now use hascompressioninfo and compressioninfo add config support to compressible macro add expanded.rs cleanup anchor-derived example add support for multiple address_trees per address space add support for multiple address_trees per address space update macro to multiple address_trees add test-sdk-derived program wip cleanup native macro-derive example wip fix compilation config tests working clean up test_config.rs testing add a separate anchor compress_pda_new version so we dont have redundant serde wip wip wip fix decompress_idempotent anchor add test with 2nd account decompress works with multiple different PDAs cleanup, remove anchor helper decompress_multiple_pdas, fix discriminator writes rm examples simplify add compress_multiple_new + test add test add test: compressing multiple accounts_new fix compress_pda and add test added test case: invalid compression cleanup cleanup fmt and lint for anchor-compressible-user program config ix helpers added tests working, added generic create_compress_account_instruction rm warnings added standardized decompress_multiple_accounts_idempotent client rm idl add cu logger util wip add test: decompress with accounts stored in 2 different v2 state trees, added 2nd tree impl. to program-test and cli, added util to xtask clean clean up librs add opt anchor program error conv for errors, fix compression_info usage with single account struct wip clean fmt comments wip sdk-tests working extend and fix sdk-test tests, cleanup csdk, anchor program, update macro clean clean clean data_hasher.rs clean derive program tests, renaming, better simulate_cu err handling renames, remove deadcode remove unused discriminator field from config account move variable length field to end of config account struct simplify anchor/borsh serde imports add DEFAULT_DATA_HASH to constants rename CompressionInfo::new() to CompressionInfo::new_decompressed() xtask, remove helper wip remove redundant owner_program param add compile time size() rename pda_account to solana_account fix doctest output.data correctly clean initconfig, updatteconfig accounts struct rename signer_seeds to solana_accounts__signer_seeds move programs to sdk-test dir move to light-compressible-client lint ci wip wip add check load config add sdk-tests to workspace rename sdk-tests program names fix ci fix asserts in tests fmt update pkg json for sdk-tests debug prints for ci in test_indexer fmt make macro robust, lint anchor-discriminator-compat feature for LightDiscriminator lint add test_discriminator test replace actionlint revert actionlint macro: allow flex imports wip fmt update macro add sha hash function support to LightAccount and LightHasher + tests DataHasher macro: explicit validation for sha fix rebase gmt add compressible macro rebased - fixed macro compressAs trait for compression with custom data add test, fix lint compress_as, flexible Compressible macro auto-derives HasCompressionInfo macro clean remove debug trait bound wip wip add compress_empty_account for native + tests refactor compression config actions to accept rpc trait better upgrade_authority check better error logging add cpda derivation check in prepare_empty_compressed_accounts_on_init js: dedupe in lut creation add PackedAccounts, deriveAddressV2, initializeCompressionConfig helpers add borsh_compat module for validityProof add compressible ts sdk packedaccounts, fix v2 tree getters wip wip wip switch to cpiaccountsSmall wip wip wip wip workaround assign correct hash in client add leafIndex bug reproducer in sdk-token-test pda_ctoken test_indexer, rm debug fix: test_indexer treetype assignment (hotfix) patch compressed accounts with correct leaf_indices in test_indexer clean apply jorrits rc fix add ts packedAccountsSmall, add cpi_inputs helpers for using cpi_context wip wip make csdk use heap alot wip
1 parent 50778df commit eeb1ded

File tree

485 files changed

+53643
-2595
lines changed

Some content is hidden

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

485 files changed

+53643
-2595
lines changed

.cargo/config.toml

Lines changed: 0 additions & 40 deletions
This file was deleted.

.github/workflows/ci-lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ jobs:
1212
shell: bash
1313
- name: Check workflow files
1414
run: ${{ steps.get_actionlint.outputs.executable }} -color
15-
shell: bash
15+
shell: bash

.github/workflows/light-examples-tests.yml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,16 @@ on:
44
- main
55
paths:
66
- "examples/**"
7+
- "program-tests/sdk-anchor-test/**"
8+
- "program-tests/sdk-pinocchio-test/**"
79
- "sdk-libs/**"
810
pull_request:
911
branches:
1012
- "*"
1113
paths:
1214
- "examples/**"
15+
- "program-tests/sdk-anchor-test/**"
16+
- "program-tests/sdk-pinocchio-test/**"
1317
- "sdk-libs/**"
1418
types:
1519
- opened
@@ -24,8 +28,8 @@ concurrency:
2428
cancel-in-progress: true
2529

2630
jobs:
27-
system-programs:
28-
name: system-programs
31+
examples-tests:
32+
name: examples-tests
2933
if: github.event.pull_request.draft == false
3034
runs-on: ubuntu-latest
3135
timeout-minutes: 60
@@ -47,8 +51,6 @@ jobs:
4751
strategy:
4852
matrix:
4953
include:
50-
- program: sdk-test-program
51-
sub-tests: '["cargo-test-sbf -p sdk-test"]'
5254
- program: sdk-anchor-test-program
5355
sub-tests: '["cargo-test-sbf -p sdk-anchor-test", "cargo-test-sbf -p sdk-pinocchio-test"]'
5456

.github/workflows/sdk-tests.yml

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
on:
2+
push:
3+
branches:
4+
- main
5+
paths:
6+
- "sdk-tests/**"
7+
- "sdk-libs/**"
8+
- "program-libs/**"
9+
- ".github/workflows/sdk-tests.yml"
10+
pull_request:
11+
branches:
12+
- "*"
13+
paths:
14+
- "sdk-tests/**"
15+
- "sdk-libs/**"
16+
- "program-libs/**"
17+
- ".github/workflows/sdk-tests.yml"
18+
types:
19+
- opened
20+
- synchronize
21+
- reopened
22+
- ready_for_review
23+
24+
name: sdk-tests
25+
26+
concurrency:
27+
group: ${{ github.workflow }}-${{ github.ref }}
28+
cancel-in-progress: true
29+
30+
jobs:
31+
sdk-tests:
32+
name: sdk-tests
33+
if: github.event.pull_request.draft == false
34+
runs-on: warp-ubuntu-latest-x64-4x
35+
timeout-minutes: 60
36+
37+
services:
38+
redis:
39+
image: redis:8.0.1
40+
ports:
41+
- 6379:6379
42+
options: >-
43+
--health-cmd "redis-cli ping"
44+
--health-interval 10s
45+
--health-timeout 5s
46+
--health-retries 5
47+
48+
env:
49+
REDIS_URL: redis://localhost:6379
50+
RUST_MIN_STACK: 8388608
51+
52+
steps:
53+
- name: Checkout sources
54+
uses: actions/checkout@v4
55+
56+
- name: Setup and build
57+
uses: ./.github/actions/setup-and-build
58+
with:
59+
skip-components: "redis"
60+
61+
- name: Build CLI
62+
run: |
63+
source ./scripts/devenv.sh
64+
npx nx build @lightprotocol/zk-compression-cli
65+
66+
- name: Build core programs
67+
run: |
68+
source ./scripts/devenv.sh
69+
npx nx build @lightprotocol/programs
70+
71+
- name: Build and test all sdk-tests programs
72+
run: |
73+
source ./scripts/devenv.sh
74+
# Increase stack size for SBF compilation to avoid regex_automata stack overflow
75+
export RUST_MIN_STACK=16777216
76+
# Remove -D warnings flag for SBF compilation to avoid compilation issues
77+
export RUSTFLAGS=""
78+
79+
echo "Building and testing all sdk-tests programs sequentially..."
80+
# Build and test each program one by one to ensure .so files exist
81+
82+
echo "Building and testing native-compressible"
83+
cargo-test-sbf -p native-compressible
84+
85+
echo "Building and testing anchor-compressible"
86+
cargo-test-sbf -p anchor-compressible
87+
88+
echo "Building and testing anchor-compressible-derived"
89+
cargo-test-sbf -p anchor-compressible-derived

CLAUDE.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# Debugging with LightProgramTest
2+
3+
## Transaction Log File
4+
5+
The light-program-test library automatically creates detailed transaction logs in:
6+
```
7+
target/light_program_test.log
8+
```
9+
10+
### Features
11+
12+
- **Always enabled**: Logs are written to file regardless of environment variables
13+
- **Clean format**: Plain text without ANSI color codes for easy reading and processing
14+
- **Session-based**: Each test session starts with a timestamp header, transactions append to the same file
15+
- **Comprehensive details**: Includes transaction signatures, fees, compute usage, instruction hierarchies, Light Protocol instruction parsing, and compressed account information
16+
17+
### Configuration
18+
19+
Enhanced logging is enabled by default. To disable:
20+
```rust
21+
let mut config = ProgramTestConfig::default();
22+
config.enhanced_logging.enabled = false;
23+
```
24+
25+
Console output requires `RUST_BACKTRACE` environment variable and can be controlled separately from file logging.
26+
27+
### Log File Location
28+
29+
The log file is automatically placed in the cargo workspace target directory, making it consistent across different test environments and working directories.
30+
31+
# Program Performance
32+
- send bump seeds
33+
- avoid deriving addresses
34+
- avoid vectors stack over heap use ArrayVec
35+
36+
# Program Security
37+
38+
- every input (instruction data and account infos) must be checked
39+
- inclusion of instruction data in an input compressed account data hash counts as checked
40+
41+
### Account checks
42+
- ownership is checked
43+
- cpis should use hardcoded
44+
45+
### Compressed accounts
46+
- the program id is the owner of the compressed account
47+
- data hash must be computed in the owning program
48+
- all data that is in an input compressed account is checked implicitly by inclusion in the data hash, the data hash is part of the compressed account hash that is in the Merkle tree or queue which we prove inclusion in by zkp or index
49+
- input compressed account
50+
- is existing state
51+
- validity is proven by index (zkp is None) or zkp
52+
- no data is sent to the system program
53+
- data hash must be computed in the owning program
54+
- output compressed account
55+
- this is new state, no validity proof
56+
- data hash must be computed in the owning program
57+
- no changes to data after data hash has been computed
58+
- minimize use of instruction data, ie do not send data twice.
59+
1. example, owner pubkey
60+
if a compressed account has an owner pubkey field which should be a tx signer, send it as signer account info, set it in the custom program, and do not sending it as instruction data. No comparison in the program is required.
61+
2. example, values from accounts
62+
63+
-
64+
65+
- a compressed account the state update is atomic through the cpi to the light system program, writes to the cpi context can produce non atomic transactions if solana accounts are involved and instantly updated for compressed accounts atomicity still applies, in case that a written cpi context account is not executed the state update is never actually applied only prepared.

0 commit comments

Comments
 (0)