{"id":"55bf5c7f-de07-4198-b2e3-1445b6024cde","shortId":"s5GVe5","kind":"skill","title":"solana-compression","tagline":"Build with ZK Compression on Solana using Light Protocol. Use when creating compressed tokens, compressed PDAs, or integrating ZK compression into Solana programs. Covers compressed account model, state trees, validity proofs, and client integration with Helius/Photon RPC.","description":"# ZK Compression on Solana\n\nZK Compression enables rent-free tokens and PDAs on Solana by storing state on the ledger instead of in accounts, using zero-knowledge proofs to validate state transitions. Built by Light Protocol and indexed by Helius Photon.\n\n## When to Use ZK Compression\n\n**Use ZK Compression when:**\n- Creating millions of token accounts (5000x cheaper than regular accounts)\n- Minting to many recipients (airdrops, loyalty programs, gaming assets)\n- Building apps with many user accounts that are infrequently updated\n- Reducing rent costs for PDAs with low update frequency\n\n**Use regular accounts when:**\n- Account is updated frequently (>1000 lifetime writes)\n- Account stores large data accessed in on-chain transactions\n- Compute budget is critical (compression adds ~100k CU overhead)\n\n## Quick Start\n\n### Installation\n\n```bash\n# TypeScript client\nnpm install @lightprotocol/stateless.js @lightprotocol/compressed-token\n\n# Rust SDK for programs\ncargo add light-sdk\n\n# CLI for development\nnpm install -g @lightprotocol/zk-compression-cli\n```\n\n### Local Development\n\n```bash\n# Start local validator with compression support\nlight test-validator\n\n# Initialize a new Anchor project with compression\nlight init my-program\n```\n\n### Mint Compressed Tokens (TypeScript)\n\n```typescript\nimport { createRpc } from '@lightprotocol/stateless.js';\nimport { createMint, mintTo, transfer } from '@lightprotocol/compressed-token';\n\nconst rpc = createRpc(); // or createRpc('https://mainnet.helius-rpc.com?api-key=YOUR_KEY')\n\n// Create mint with token pool for compression\nconst { mint } = await createMint(rpc, payer, payer.publicKey, 9);\n\n// Mint compressed tokens (creates compressed token accounts)\nawait mintTo(rpc, payer, mint, recipient, payer, 1_000_000_000);\n\n// Transfer compressed tokens\nawait transfer(rpc, payer, mint, 500_000_000, owner, recipient);\n\n// Query compressed token accounts\nconst accounts = await rpc.getCompressedTokenAccountsByOwner(owner, { mint });\n```\n\n### Build Program with Compressed PDAs (Anchor)\n\n```rust\nuse anchor_lang::prelude::*;\nuse light_sdk::{\n    account::LightAccount,\n    address::v1::derive_address,\n    cpi::{v1::CpiAccounts, CpiSigner},\n    derive_light_cpi_signer,\n    instruction::{account_meta::CompressedAccountMeta, PackedAddressTreeInfo, ValidityProof},\n    LightDiscriminator, LightHasher,\n};\n\ndeclare_id!(\"YourProgramID\");\n\npub const LIGHT_CPI_SIGNER: CpiSigner = derive_light_cpi_signer!(\"YourProgramID\");\n\n#[program]\npub mod my_program {\n    use super::*;\n    use light_sdk::cpi::{v1::LightSystemProgramCpi, InvokeLightSystemProgram};\n\n    pub fn create_account<'info>(\n        ctx: Context<'_, '_, '_, 'info, MyAccounts<'info>>,\n        proof: ValidityProof,\n        address_tree_info: PackedAddressTreeInfo,\n        output_state_tree_index: u8,\n    ) -> Result<()> {\n        let light_cpi_accounts = CpiAccounts::new(\n            ctx.accounts.signer.as_ref(),\n            ctx.remaining_accounts,\n            crate::LIGHT_CPI_SIGNER,\n        );\n\n        let (address, address_seed) = derive_address(\n            &[b\"my_account\", ctx.accounts.signer.key().as_ref()],\n            &address_tree_info.get_tree_pubkey(&light_cpi_accounts)?,\n            &crate::ID,\n        );\n\n        let new_address_params = address_tree_info.into_new_address_params_packed(address_seed);\n\n        // Create new compressed account\n        let mut account = LightAccount::<MyAccount>::new_init(\n            &crate::ID,\n            Some(address),\n            output_state_tree_index,\n        );\n        account.owner = ctx.accounts.signer.key();\n        account.data = 0;\n\n        LightSystemProgramCpi::new_cpi(LIGHT_CPI_SIGNER, proof)\n            .with_light_account(account)?\n            .with_new_addresses(&[new_address_params])\n            .invoke(light_cpi_accounts)?;\n\n        Ok(())\n    }\n\n    pub fn update_account<'info>(\n        ctx: Context<'_, '_, '_, 'info, MyAccounts<'info>>,\n        proof: ValidityProof,\n        current_data: u64,\n        account_meta: CompressedAccountMeta,\n    ) -> Result<()> {\n        // Modify existing compressed account\n        let mut account = LightAccount::<MyAccount>::new_mut(\n            &crate::ID,\n            &account_meta,\n            MyAccount {\n                owner: ctx.accounts.signer.key(),\n                data: current_data,\n            },\n        )?;\n\n        account.data = account.data.checked_add(1).unwrap();\n\n        let light_cpi_accounts = CpiAccounts::new(\n            ctx.accounts.signer.as_ref(),\n            ctx.remaining_accounts,\n            crate::LIGHT_CPI_SIGNER,\n        );\n\n        LightSystemProgramCpi::new_cpi(LIGHT_CPI_SIGNER, proof)\n            .with_light_account(account)?\n            .invoke(light_cpi_accounts)?;\n\n        Ok(())\n    }\n}\n\n#[derive(Accounts)]\npub struct MyAccounts<'info> {\n    #[account(mut)]\n    pub signer: Signer<'info>,\n}\n\n#[event]\n#[derive(Clone, Debug, Default, LightDiscriminator, LightHasher)]\npub struct MyAccount {\n    #[hash]\n    pub owner: Pubkey,\n    pub data: u64,\n}\n```\n\n## Core Concepts\n\n### Compressed Account Model\n\nCompressed accounts are similar to regular Solana accounts but stored differently:\n\n| Aspect | Regular Account | Compressed Account |\n|--------|-----------------|-------------------|\n| Storage | AccountsDB (disk) | Ledger (call data) |\n| Rent | Required (~0.002 SOL per 100 bytes) | None |\n| Identification | Pubkey | Hash (changes on write) or Address |\n| State validation | Runtime checks | ZK validity proofs |\n\n**Key differences:**\n- Hash changes on every write (accounts identified by content hash)\n- Optional persistent address for PDAs (similar to regular PDAs)\n- State stored in Merkle trees with only roots on-chain\n\n### State Trees\n\nCompressed accounts are stored in concurrent Merkle trees using Poseidon hashing:\n- Only the tree root is stored on-chain\n- Leaves contain compressed account hashes\n- Validity proofs prove account inclusion in tree\n\n**V2 Batched Merkle Trees** (mainnet, January 2026): State root updates are batched and verified with ZK proofs, reducing costs by ~250x per update and overall CU usage by ~70% compared to V1 trees. V1 trees remain supported for existing deployments. New deployments automatically use V2 trees.\n\n### Validity Proofs\n\nZK proofs (Groth16) validate state transitions:\n- Prove existence of N accounts in M state trees\n- Constant 128-byte proof size regardless of accounts\n- ~100k CU for proof verification\n\n### Transaction Lifecycle\n\n1. **Build**: Client fetches compressed accounts and validity proofs via RPC\n2. **Submit**: Transaction includes account data + proof in payload\n3. **Validate**: Light System Program verifies proof and account integrity\n4. **Update**: New state appended to tree, old state nullified\n5. **Index**: Photon RPC nodes index new state from ledger\n\n## LightAccount Operations\n\n```rust\n// Create new account (no input state, only output)\nlet account = LightAccount::<T>::new_init(&program_id, Some(address), tree_index);\n\n// Modify existing account (input + output state)\nlet mut account = LightAccount::<T>::new_mut(&program_id, &account_meta, current_state)?;\naccount.field = new_value;\n\n// Close account (input state, no output)\nlet account = LightAccount::<T>::new_close(&program_id, &account_meta, current_state)?;\n```\n\n## Helius SDK Integration\n\nQuery compressed state via Helius RPC:\n\n```typescript\nimport { Helius } from 'helius-sdk';\n\nconst helius = new Helius('YOUR_API_KEY');\n\n// Get compressed account by hash or address\nconst account = await helius.zk.getCompressedAccount({ address });\n\n// Get all compressed accounts for owner\nconst accounts = await helius.zk.getCompressedAccountsByOwner(owner);\n\n// Get compressed token accounts\nconst tokenAccounts = await helius.zk.getCompressedTokenAccountsByOwner(owner, { mint });\n\n// Get validity proof for accounts\nconst proof = await helius.zk.getValidityProof({ hashes: [hash1, hash2] });\n\n// Get compression signatures for account\nconst signatures = await helius.zk.getCompressionSignaturesForAccount(hash);\n```\n\n## RPC Methods\n\nZK Compression RPC API (via Helius or self-hosted Photon):\n\n| Method | Description |\n|--------|-------------|\n| `getCompressedAccount` | Get account by hash or address |\n| `getCompressedAccountsByOwner` | Get all accounts owned by pubkey |\n| `getCompressedTokenAccountsByOwner` | Get token accounts for owner |\n| `getCompressedTokenBalancesByOwner` | Get token balances summary |\n| `getValidityProof` | Get ZK proof for account inclusion |\n| `getMultipleCompressedAccounts` | Batch fetch accounts |\n| `getCompressionSignaturesForAccount` | Get transaction history |\n\n## Infrastructure\n\n### Node Types\n\n| Node | Purpose | Run By |\n|------|---------|--------|\n| **Photon RPC** | Index compressed state, serve queries | Helius (canonical), self-host |\n| **Prover** | Generate validity proofs | Bundled with Photon or standalone |\n| **Forester** | Maintain state trees, empty nullifier queues | Light Protocol, community |\n\n### Running Photon Locally\n\n```bash\n# Install\ncargo install photon-indexer\n\n# Run against devnet\nphoton --rpc-url=https://api.devnet.solana.com\n\n# With Postgres for production\nphoton --db-url=postgres://postgres@localhost/postgres --rpc-url=<RPC_URL>\n\n# Load from snapshot for faster bootstrap\nphoton-snapshot-loader --snapshot-dir=~/snapshot --snapshot-server-url=https://photon-devnet-snapshot.helius-rpc.com\n```\n\n## Trade-offs\n\n| Consideration | Impact |\n|---------------|--------|\n| **Larger transactions** | +128 bytes for proof + account data in payload |\n| **Higher CU usage** | ~100k CU proof verification + ~6k CU per account |\n| **Per-write cost** | Each write nullifies old state, appends new |\n| **Indexer dependency** | Requires Photon RPC (or self-host) for queries |\n\n**Break-even analysis**: With V2 batched trees, compressed accounts are cost-effective for significantly more writes than V1's ~1000 write threshold due to 250x cheaper state root updates. Exact break-even depends on tree utilization and batch sizes.\n\n## Reference Documentation\n\n- **[compressed-accounts.md](references/compressed-accounts.md)** - Detailed account model, hashing, addresses\n- **[compressed-tokens.md](references/compressed-tokens.md)** - Token operations, pools, batch operations\n- **[compressed-pdas.md](references/compressed-pdas.md)** - Building programs with compressed PDAs\n- **[client-integration.md](references/client-integration.md)** - TypeScript/Rust client setup, RPC methods\n\n## Resources\n\n- [ZK Compression Docs](https://www.zkcompression.com/)\n- [Light Protocol GitHub](https://github.com/Lightprotocol/light-protocol)\n- [Helius SDK](https://github.com/helius-labs/helius-sdk)\n- [Photon Indexer](https://github.com/helius-labs/photon)\n- [Program Examples](https://github.com/Lightprotocol/program-examples)\n- [Helius ZK Blog](https://www.helius.dev/blog/zero-knowledge-proofs-its-applications-on-solana)","tags":["solana","compression","skills","tenequm","agent-skills","ai-agents","claude-code","claude-skills","clawhub","erc-8004","mpp","openclaw"],"capabilities":["skill","source-tenequm","skill-solana-compression","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-claude-skills","topic-clawhub","topic-erc-8004","topic-mpp","topic-openclaw","topic-skills","topic-solana","topic-x402"],"categories":["skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/tenequm/skills/solana-compression","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add tenequm/skills","source_repo":"https://github.com/tenequm/skills","install_from":"skills.sh"}},"qualityScore":"0.461","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 23 github stars · SKILL.md body (10,890 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T01:01:40.943Z","embedding":null,"createdAt":"2026-04-18T23:05:26.541Z","updatedAt":"2026-04-22T01:01:40.943Z","lastSeenAt":"2026-04-22T01:01:40.943Z","tsv":"'+128':1104 '/)':1223 '/blog/zero-knowledge-proofs-its-applications-on-solana)':1250 '/helius-labs/helius-sdk)':1234 '/helius-labs/photon)':1239 '/lightprotocol/light-protocol)':1229 '/lightprotocol/program-examples)':1244 '/snapshot':1091 '0':446 '0.002':601 '000':268,269,270,280,281 '1':267,511,766 '100':604 '1000':139,1166 '100k':158,759,1115 '128':752 '2':777 '2026':694 '250x':708,1171 '3':786 '4':796 '5':806 '500':279 '5000x':98 '6k':1119 '70':716 '9':252 'access':146 'account':29,65,97,102,117,133,135,142,259,287,289,308,323,361,383,389,402,411,428,431,456,457,467,472,484,491,494,500,516,522,536,537,541,544,549,575,578,584,590,592,629,657,679,684,746,758,771,781,794,821,828,840,846,852,860,866,872,901,907,914,918,925,936,948,971,979,986,999,1004,1108,1122,1154,1192 'account.data':445,508 'account.data.checked':509 'account.field':856 'account.owner':443 'accountsdb':594 'add':157,176,510 'address':310,313,370,395,396,399,416,420,423,438,460,462,614,636,835,905,910,975,1195 'address_tree_info.get':406 'address_tree_info.into':418 'airdrop':107 'analysi':1148 'anchor':203,299,302 'api':234,897,959 'api-key':233 'api.devnet.solana.com':1064 'app':113 'append':800,1132 'aspect':588 'asset':111 'automat':730 'await':247,260,274,290,908,919,928,939,951 'b':400 'balanc':992 'bash':164,189,1050 'batch':689,699,1002,1151,1185,1201 'blog':1247 'bootstrap':1083 'break':1146,1178 'break-even':1145,1177 'budget':153 'build':4,112,294,767,1205 'built':75 'bundl':1032 'byte':605,753,1105 'call':597 'canon':1024 'cargo':175,1052 'chain':150,653,675 'chang':610,625 'cheaper':99,1172 'check':618 'cli':180 'client':36,166,768,1213 'client-integration.md':1210 'clone':557 'close':859,869 'communiti':1046 'compar':717 'compress':3,7,16,18,23,28,42,46,88,91,156,194,206,213,244,254,257,272,285,297,427,490,574,577,591,656,678,770,880,900,913,923,945,957,1019,1153,1208,1219 'compressed-accounts.md':1189 'compressed-pdas.md':1203 'compressed-tokens.md':1196 'compressedaccountmeta':325,486 'comput':152 'concept':573 'concurr':661 'consider':1100 'const':227,245,288,334,892,906,917,926,937,949 'constant':751 'contain':677 'content':632 'context':364,475 'core':572 'cost':124,706,1126,1157 'cost-effect':1156 'cover':27 'cpi':314,320,336,341,354,382,392,410,449,451,466,515,525,529,531,540 'cpiaccount':316,384,517 'cpisign':317,338 'crate':390,412,435,498,523 'creat':15,93,238,256,360,425,819 'createmint':222,248 'createrpc':218,229,231 'critic':155 'ctx':363,474 'ctx.accounts.signer.as':386,519 'ctx.accounts.signer.key':403,444,504 'ctx.remaining':388,521 'cu':159,713,760,1113,1116,1120 'current':481,506,854,874 'data':145,482,505,507,570,598,782,1109 'db':1071 'db-url':1070 'debug':558 'declar':330 'default':559 'depend':1135,1180 'deploy':727,729 'deriv':312,318,339,398,543,556 'descript':968 'detail':1191 'develop':182,188 'devnet':1059 'differ':587,623 'dir':1090 'disk':595 'doc':1220 'document':1188 'due':1169 'effect':1158 'empti':1041 'enabl':47 'even':1147,1179 'event':555 'everi':627 'exact':1176 'exampl':1241 'exist':489,726,743,839 'faster':1082 'fetch':769,1003 'fn':359,470 'forest':1037 'free':50 'frequenc':130 'frequent':138 'g':185 'game':110 'generat':1029 'get':899,911,922,932,944,970,977,984,990,995,1006 'getcompressedaccount':969 'getcompressedaccountsbyown':976 'getcompressedtokenaccountsbyown':983 'getcompressedtokenbalancesbyown':989 'getcompressionsignaturesforaccount':1005 'getmultiplecompressedaccount':1001 'getvalidityproof':994 'github':1226 'github.com':1228,1233,1238,1243 'github.com/helius-labs/helius-sdk)':1232 'github.com/helius-labs/photon)':1237 'github.com/lightprotocol/light-protocol)':1227 'github.com/lightprotocol/program-examples)':1242 'groth16':738 'hash':565,609,624,633,666,680,903,941,953,973,1194 'hash1':942 'hash2':943 'helius':82,876,883,887,890,893,895,961,1023,1230,1245 'helius-sdk':889 'helius.zk.getcompressedaccount':909 'helius.zk.getcompressedaccountsbyowner':920 'helius.zk.getcompressedtokenaccountsbyowner':929 'helius.zk.getcompressionsignaturesforaccount':952 'helius.zk.getvalidityproof':940 'helius/photon':39 'higher':1112 'histori':1008 'host':965,1027,1142 'id':331,413,436,499,833,851,871 'identif':607 'identifi':630 'impact':1101 'import':217,221,886 'includ':780 'inclus':685,1000 'index':80,377,442,807,811,837,1018,1056,1134,1236 'info':362,365,367,372,473,476,478,548,554 'infrastructur':1009 'infrequ':120 'init':208,434,831 'initi':200 'input':823,841,861 'instal':163,168,184,1051,1053 'instead':62 'instruct':322 'integr':21,37,795,878 'invok':464,538 'invokelightsystemprogram':357 'januari':693 'key':235,237,622,898 'knowledg':69 'lang':303 'larg':144 'larger':1102 'leav':676 'ledger':61,596,815 'let':380,394,414,429,492,513,827,844,865 'lifecycl':765 'lifetim':140 'light':11,77,178,196,207,306,319,335,340,352,381,391,409,450,455,465,514,524,530,535,539,788,1044,1224 'light-sdk':177 'lightaccount':309,432,495,816,829,847,867 'lightdiscrimin':328,560 'lighthash':329,561 'lightprotocol/compressed-token':170,226 'lightprotocol/stateless.js':169,220 'lightprotocol/zk-compression-cli':186 'lightsystemprogramcpi':356,447,527 'load':1078 'loader':1087 'local':187,191,1049 'localhost/postgres':1074 'low':128 'loyalti':108 'm':748 'mainnet':692 'mainnet.helius-rpc.com':232 'maintain':1038 'mani':105,115 'merkl':646,662,690 'meta':324,485,501,853,873 'method':955,967,1216 'million':94 'mint':103,212,239,246,253,264,278,293,931 'mintto':223,261 'mod':346 'model':30,576,1193 'modifi':488,838 'mut':430,493,497,550,845,849 'my-program':209 'myaccount':366,477,502,547,564 'n':745 'new':202,385,415,419,426,433,448,459,461,496,518,528,728,798,812,820,830,848,857,868,894,1133 'node':810,1010,1012 'none':606 'npm':167,183 'nullifi':805,1042,1129 'off':1099 'ok':468,542 'old':803,1130 'on-chain':148,651,673 'oper':817,1199,1202 'option':634 'output':374,439,826,842,864 'overal':712 'overhead':160 'own':980 'owner':282,292,503,567,916,921,930,988 'pack':422 'packedaddresstreeinfo':326,373 'param':417,421,463 'payer':250,263,266,277 'payer.publickey':251 'payload':785,1111 'pdas':19,53,126,298,638,642,1209 'per':603,709,1121,1124 'per-writ':1123 'persist':635 'photon':83,808,966,1016,1034,1048,1055,1060,1069,1085,1137,1235 'photon-devnet-snapshot.helius-rpc.com':1096 'photon-index':1054 'photon-snapshot-load':1084 'pool':242,1200 'poseidon':665 'postgr':1066,1073 'prelud':304 'product':1068 'program':26,109,174,211,295,344,348,790,832,850,870,1206,1240 'project':204 'proof':34,70,368,453,479,533,621,682,704,735,737,754,762,774,783,792,934,938,997,1031,1107,1117 'protocol':12,78,1045,1225 'prove':683,742 'prover':1028 'pub':333,345,358,469,545,551,562,566,569 'pubkey':408,568,608,982 'purpos':1013 'queri':284,879,1022,1144 'queue':1043 'quick':161 'recipi':106,265,283 'reduc':122,705 'ref':387,405,520 'refer':1187 'references/client-integration.md':1211 'references/compressed-accounts.md':1190 'references/compressed-pdas.md':1204 'references/compressed-tokens.md':1197 'regardless':756 'regular':101,132,582,589,641 'remain':723 'rent':49,123,599 'rent-fre':48 'requir':600,1136 'resourc':1217 'result':379,487 'root':650,670,696,1174 'rpc':40,228,249,262,276,776,809,884,954,958,1017,1062,1076,1138,1215 'rpc-url':1061,1075 'rpc.getcompressedtokenaccountsbyowner':291 'run':1014,1047,1057 'runtim':617 'rust':171,300,818 'sdk':172,179,307,353,877,891,1231 'seed':397,424 'self':964,1026,1141 'self-host':963,1025,1140 'serv':1021 'server':1094 'setup':1214 'signatur':946,950 'signer':321,337,342,393,452,526,532,552,553 'signific':1160 'similar':580,639 'size':755,1186 'skill' 'skill-solana-compression' 'snapshot':1080,1086,1089,1093 'snapshot-dir':1088 'snapshot-server-url':1092 'sol':602 'solana':2,9,25,44,55,583 'solana-compress':1 'source-tenequm' 'standalon':1036 'start':162,190 'state':31,58,73,375,440,615,643,654,695,740,749,799,804,813,824,843,855,862,875,881,1020,1039,1131,1173 'storag':593 'store':57,143,586,644,659,672 'struct':546,563 'submit':778 'summari':993 'super':350 'support':195,724 'system':789 'test':198 'test-valid':197 'threshold':1168 'token':17,51,96,214,241,255,258,273,286,924,985,991,1198 'tokenaccount':927 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-claude-skills' 'topic-clawhub' 'topic-erc-8004' 'topic-mpp' 'topic-openclaw' 'topic-skills' 'topic-solana' 'topic-x402' 'trade':1098 'trade-off':1097 'transact':151,764,779,1007,1103 'transfer':224,271,275 'transit':74,741 'tree':32,371,376,407,441,647,655,663,669,687,691,720,722,733,750,802,836,1040,1152,1182 'type':1011 'typescript':165,215,216,885 'typescript/rust':1212 'u64':483,571 'u8':378 'unwrap':512 'updat':121,129,137,471,697,710,797,1175 'url':1063,1072,1077,1095 'usag':714,1114 'use':10,13,66,86,89,131,301,305,349,351,664,731 'user':116 'util':1183 'v1':311,315,355,719,721,1164 'v2':688,732,1150 'valid':33,72,192,199,616,620,681,734,739,773,787,933,1030 'validityproof':327,369,480 'valu':858 'verif':763,1118 'verifi':701,791 'via':775,882,960 'write':141,612,628,1125,1128,1162,1167 'www.helius.dev':1249 'www.helius.dev/blog/zero-knowledge-proofs-its-applications-on-solana)':1248 'www.zkcompression.com':1222 'www.zkcompression.com/)':1221 'yourprogramid':332,343 'zero':68 'zero-knowledg':67 'zk':6,22,41,45,87,90,619,703,736,956,996,1218,1246","prices":[{"id":"7ef63513-b043-42f9-a8d5-6dd47fe1c7c2","listingId":"55bf5c7f-de07-4198-b2e3-1445b6024cde","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"tenequm","category":"skills","install_from":"skills.sh"},"createdAt":"2026-04-18T23:05:26.541Z"}],"sources":[{"listingId":"55bf5c7f-de07-4198-b2e3-1445b6024cde","source":"github","sourceId":"tenequm/skills/solana-compression","sourceUrl":"https://github.com/tenequm/skills/tree/main/skills/solana-compression","isPrimary":false,"firstSeenAt":"2026-04-18T23:05:26.541Z","lastSeenAt":"2026-04-22T01:01:40.943Z"}],"details":{"listingId":"55bf5c7f-de07-4198-b2e3-1445b6024cde","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"tenequm","slug":"solana-compression","github":{"repo":"tenequm/skills","stars":23,"topics":["agent-skills","ai-agents","claude-code","claude-skills","clawhub","erc-8004","mpp","openclaw","skills","solana","x402"],"license":"mit","html_url":"https://github.com/tenequm/skills","pushed_at":"2026-04-14T16:24:57Z","description":"Agent skills for building, shipping, and growing software products","skill_md_sha":"7cd212115921bdd0739f362523e451fcae70d69a","skill_md_path":"skills/solana-compression/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/tenequm/skills/tree/main/skills/solana-compression"},"layout":"multi","source":"github","category":"skills","frontmatter":{"name":"solana-compression","description":"Build with ZK Compression on Solana using Light Protocol. Use when creating compressed tokens, compressed PDAs, or integrating ZK compression into Solana programs. Covers compressed account model, state trees, validity proofs, and client integration with Helius/Photon RPC."},"skills_sh_url":"https://skills.sh/tenequm/skills/solana-compression"},"updatedAt":"2026-04-22T01:01:40.943Z"}}