diff --git a/changelog.mdx b/changelog.mdx new file mode 100644 index 0000000..f5364bf --- /dev/null +++ b/changelog.mdx @@ -0,0 +1,343 @@ +--- +title: "Changelog" +sidebarTitle: "Latest Releases" +description: "Latest Releases" +rss: true +--- + + + + +Breaking changes in this release. See the CHANGELOG for migration steps. + + +### light-system-program v2.3.0 (Mainnet) + +Program hash: `581998887c26c6bda44872703b55187a435e3643293c8fd77929d562032fd04b` + +`light-system-program` v2.3.0 deployed to mainnet with security fixes, new Pinocchio SDK support, and breaking SDK changes. + +**Security**: `MintCloseAuthority` added to `RESTRICTED_EXTENSION_TYPES` and `has_mint_extensions()`. A mint with this extension could previously be compressed without `CompressOnly` mode, allowing the mint authority to close the mint and strand compressed tokens. Certora audit finding M-03. (#2263) + +**New**: `light-account` (Anchor/Solana) and `light-account-pinocchio` crates provide framework-agnostic compressed account development. Introduces `#[derive(LightAccount)]`, `#[derive(LightProgramPinocchio)]`, and generic type aliases (`CpiAccounts`, `CompressCtx`, `DecompressCtx`, `ValidatedPdaContext`, `PackedAccounts`). (#2230) + +**New**: `AccountLoader` for loading compressed accounts without derive macros. `#[light_account(init)]` now requires a `pda_rent_sponsor` account. (#2222) + +**New**: `DECOMPRESSED_PDA_DISCRIMINATOR` constant (`[255u8; 8]`) in `light-compressible` marks decompressed PDA placeholder accounts. (#2208) + +**Fixes**: `store_data()` owner caching corrected (#2277), v2 tree rollover balance check fixed (#2278), canonical bump enforced in ATA verification (#2249), batched address tree init asserts tree and queue index match (#2318), system program addresses corrected (#2298). + +### Breaking changes in light-system-program v2.3.0 + +- `COMPRESSIBLE_CONFIG_SEED` renamed to `LIGHT_CONFIG_SEED`. Migration: update all references. (#2222) +- `COMPRESSIBLE_CONFIG_V1` renamed to `LIGHT_TOKEN_CONFIG`. Migration: update all references. (#2222) +- `token::authority` renamed to `token::owner_seeds` in `#[light_account]`. Owner seeds must be constants. (#2222) +- `#[light_account(init)]` now requires `pda_rent_sponsor` in instruction accounts. (#2222) +- `#[derive(Compressible)]` removed -- use `#[derive(LightAccount)]` or `#[derive(LightProgramPinocchio)]`. (#2230) + +### light-compressed-token v2.4.0 (Mainnet) + +Program hash: `ad43a477a97cad48b088a64ab51008c2d27b5798090330a922a588fdecec8ea1` + +`light-compressed-token` v2.4.0 deployed to mainnet with a new mint creation fee and optional fee payer support. + +**New**: Mint creation charges `MINT_CREATION_FEE` (50,000 lamports) forwarded to `rent_sponsor`. `CreateMintInputs` gains a required `rent_sponsor` field. Use `MintActionMetaConfig::with_rent_sponsor()` to configure the recipient. (#2309) + +**New**: `revoke` and `approve` instructions accept an optional `fee_payer` account via `FEE_PAYER_IDX` const generic, with fallback to owner. (#2306) + +**Fixes**: additional self-transfer validation (#2292), rent exemption check added to `create_token_account()` (#2292), `create_ata_idempotent()` guards against double-creation (#2292). + +### Breaking changes in light-compressed-token v2.4.0 + +- `CreateMintInputs` requires a `rent_sponsor` field. Use `MintActionMetaConfig::with_rent_sponsor()`. (#2309) +- `handle_compressible_top_up()` and `process_compressible_top_up()` take a new `FEE_PAYER_IDX` const generic. `APPROVE_PAYER_IDX`/`REVOKE_PAYER_IDX` renamed to `OWNER_IDX`. (#2306) + +### light-registry v2.3.0 (Devnet) + +`light-registry` v2.3.0 deployed to devnet. Tree initialization functions (`create_initialize_merkle_tree_instruction`, `create_initialize_batched_merkle_tree_instruction`, `create_initialize_batched_address_merkle_tree_instruction`) now require the protocol authority as signer. The `payer` parameter is renamed to `authority`. (#2325) + +V1 tree initialization logs a deprecation warning. V1 trees will be removed in a future release. (#2329) + +Fixes: `init_v1_tree_with_custom_forester()` corrected (#2319), `migrate_trees_ix()` preserves in-progress work (#2320). + +### account-compression v2.2.0 (Devnet) + +`account-compression` v2.2.0 deployed to devnet. V1 tree initialization logs a deprecation warning. Tree default values updated to match mainnet configuration. (#2329, #2124) + + + + + +### light-token v0.23.0 + + +Breaking changes in this release. See the CHANGELOG for migration steps. + + +`max_top_up` removed from all instruction structs (`Transfer`, `Burn`, `MintTo`, etc.). The on-chain program defaults to `u16::MAX`. `fee_payer` is now required in instruction and CPI APIs. `get_token_account_balance()` returns `ProgramError` instead of SDK-specific errors. (#2301) + +```toml +[dependencies] +light-token = "0.23.0" +``` + +### light-sdk-macros v0.23.0 + +1-byte discriminator support via `#[light_pinocchio(discriminator = [...])]`. Unified `create_accounts()` replaces multiple code generation paths for PDAs, mints, tokens, and ATAs. (#2302, #2287) + +```toml +[dependencies] +light-sdk-macros = "0.23.0" +``` + +### light-account v0.23.0 + +`create_accounts()` generic function for unified PDA, mint, token, and ATA creation. (#2287) + +```toml +[dependencies] +light-account = "0.23.0" +``` + +### light-client v0.23.0 + +Forester dashboard with compression improvements, pending state tracking, and eligibility checks. (#2310) + +```toml +[dependencies] +light-client = "0.23.0" +``` + +### Other SDK crate updates + +- `light-token-pinocchio` v0.23.0 - authority mutability aligned, `TransferInterfaceCpi` `fee_payer` fix. (#2301, #2294) +- `light-token-client` v0.23.0 - authority mutability aligned. (#2301) +- `light-compressed-token-sdk` v0.23.0 - authority mutability aligned. (#2301) +- `light-account-pinocchio` v0.23.0 - `create_accounts()` generic function. (#2287) + +Version-only bumps: `light-token-types` v0.23.0, `light-sdk` v0.23.0, `light-sdk-types` v0.23.0, `light-sdk-pinocchio` v0.23.0, `light-program-test` v0.23.0, `photon-api` v0.56.0, `light-instruction-decoder` v0.23.0, `light-instruction-decoder-derive` v0.4.0, `light-event` v0.23.0. + + + + + +### light-registry v2.2.0 + +`light-registry` v2.2.0 deployed to devnet. Adds `init_compressible_config` xtask, fixes registry program errors, refactors forester default tree/epoch handling. (#2117, #2122, #2127, #2279) + +```toml +[dependencies] +light-registry = "2.2.0" +``` + + + + + +### light-token v0.22.1 + +Fixes `TransferInterfaceCpi` in the LightToLight transfer path - `fee_payer` was hardcoded to `None`, causing PrivilegeEscalation errors. (#2294) + +```toml +[dependencies] +light-token = "0.22.1" +``` + + + + + +### photon-api v0.55.0 + + +Breaking changes in this release. See the CHANGELOG for migration steps. + + +`photon-api` replaces hand-written client code with progenitor-generated types from the Photon OpenAPI spec. `Configuration::new()` takes a single URL parameter now (embed API key as query param). `AccountInterface` uses photon v2 types, `ColdContext` simplified. (#2219, #2274, #2198, #2226) + +```toml +[dependencies] +photon-api = "0.55.0" +``` + +### light-client v0.22.0 + +`validate_mint()` validates mint for all token accounts, not just compressible. Enforces canonical bump in ATA verification. `AccountInterface` uses photon v2 types. (#2251, #2249, #2274) + +```toml +[dependencies] +light-client = "0.22.0" +``` + +### light-token v0.22.0 + +`max_top_up` defaults to `u16::MAX` instead of `0` in instruction builders. Enforces canonical bump in ATA verification. (#2279, #2249) + +```toml +[dependencies] +light-token = "0.22.0" +``` + +### light-token-pinocchio v0.22.0 + +Same fixes as `light-token` v0.22.0: `max_top_up` defaults to `u16::MAX`, enforces canonical bump. (#2279, #2249) + +```toml +[dependencies] +light-token-pinocchio = "0.22.0" +``` + +### light-sdk-macros v0.22.0 + +`light_program` pinocchio macro refactored. Enforces canonical bump in ATA verification. (#2247, #2249) + +```toml +[dependencies] +light-sdk-macros = "0.22.0" +``` + +### Other SDK crate updates + +The following crates are updated to v0.22.0 with `max_top_up` fix and dependency bumps: + +- `light-account` v0.22.0 (#2249) +- `light-account-pinocchio` v0.22.0 (#2249) +- `light-compressed-token-sdk` v0.22.0 (#2279) +- `light-event` v0.22.0 (#2279) +- `light-instruction-decoder` v0.22.0 (#2279) +- `light-program-test` v0.22.0 (#2249) + +Version-only bumps (no API changes): `light-token-types` v0.22.0, `light-token-client` v0.22.0, `light-sdk` v0.22.0, `light-sdk-types` v0.22.0, `light-sdk-pinocchio` v0.22.0, `light-prover-client` v8.0.0, `light-verifier` v10.0.0. + + + + + +### light-compressed-token v2.3.0 + +Program hash: `09ea6d03fbef7f40c9a27a2c4c6aa8358662cc8f91e2e86cb2a801683c518027` + + +Security release with multiple audit fixes. + + +`light-compressed-token` v2.3.0 deployed to devnet with security and correctness fixes: + +- `max_top_up` interprets values as units of 1,000 lamports. (#2265) +- Account-level delegates can compress CTokens. (#2262) +- `MintCloseAuthority` added as restricted extension. (#2263) +- Enforces canonical bump in ATA verification. (#2249) +- `validate_mint()` validates mint for all token accounts. (#2251) +- Zeros base token bytes before init to prevent IDL buffer attack. (#2248) +- Rejects rent sponsor self-referencing the token account. (#2257) +- Rejects duplicate accounts in `convert_account_infos()`. (#2258) +- Allows closing frozen light token accounts. (#2243) +- Processes metadata add/remove actions in sequential order. (#2256) +- Validates authority on self-transfer early return. (#2252) +- Enforces mint extension checks in CToken-to-CToken decompress. (#2246) +- Accumulates delegated amount at decompression. (#2242) +- Rejects `rent_payment < 2` for CMint decompression. (#2267) +- Fixes `compress_only` amount check. (#2235) +- Fixes SPL compress transfer fee check. (#2281) + +```toml +[dependencies] +light-compressed-token = "2.3.0" +``` + + + + + +### light-client v0.21.0 + + +Breaking changes in this release. See the CHANGELOG for migration steps. + + +`LightClientConfig::new()` takes 2 parameters instead of 3. The API key is now embedded in `photon_url`. Replaces photon-api with progenitor-generated client. Adds `compressed_mint` photon API support. (#2219, #2198, #2244) + +```toml +[dependencies] +light-client = "0.21.0" +``` + +### Other SDK updates + +- `light-event` v0.21.0 - `compressed_mint` photon API support. (#2198) +- `light-program-test` v0.21.0 - `compressed_mint` photon API support. (#2198) +- `light-compressed-account` v0.10.1 - `compressed_mint` photon API support. (#2198) +- `light-token-client` v0.21.0 + + + + + +### ZK Compression CLI + + + + ```bash + npm i -g @lightprotocol/zk-compression-cli@beta + ``` + + + ```bash + yarn global add @lightprotocol/zk-compression-cli@beta + ``` + + + ```bash + pnpm add -g @lightprotocol/zk-compression-cli@beta + ``` + + + +### TypeScript Client + + + + ```bash + npm install @lightprotocol/stateless.js@beta + npm install @lightprotocol/compressed-token@beta + ``` + + + ```bash + yarn add @lightprotocol/stateless.js@beta + yarn add @lightprotocol/compressed-token@beta + ``` + + + ```bash + pnpm add @lightprotocol/stateless.js@beta + pnpm add @lightprotocol/compressed-token@beta + ``` + + + + +`TestRpc` for unit tests is built into `@lightprotocol/stateless.js` + + +### Rust Client + +``` +[dependencies] +light-client = "0.16.0" +light-sdk = "0.16.0" +``` + +## Program Development + +```toml +[dependencies] +light-sdk = "0.16.0" +light-compressed-token-sdk = "0.1.0" + +[dev-dependencies] +light-program-test = "1.2.1" +``` + + +