-
Notifications
You must be signed in to change notification settings - Fork 3
Add airdrop implementations #26
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
Conversation
|
Important Review skippedReview was skipped due to path filters ⛔ Files ignored due to path filters (7)
CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including You can disable this status message by setting the 📝 WalkthroughWalkthroughThe pull request adds two Git submodules (depin-poc and distributor), creates comprehensive documentation files describing compressed account operations and airdrop implementations, and introduces a complete compressed claim airdrop program with instruction building, error handling, processor logic, and functional tests. Changes
Poem
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes 🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
de6be07 to
27b4ade
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 15
🤖 Fix all issues with AI agents
In @.gitmodules:
- Around line 1-6: The `.gitmodules` entries for submodules "depin-poc" and
"airdrop-implementations/distributor" are not pinned to commits; add a `commit =
<sha>` line under each submodule entry with the verified commit SHA you want to
lock to, then update the submodule working trees to those SHAs and commit the
changed `.gitmodules` and submodule state so clones reproduce that exact commit;
ensure you verify the correct commit hashes from the upstream repos before
adding them.
In @account-comparison/CLAUDE.md:
- Around line 24-36: The documented fixed offsets and total "Space: 232 bytes"
for the AccountData PDA are misleading because Rust/Anchor `String` is
serialized with a 4-byte length prefix and variable bytes; update the
AccountData documentation so that field `name` is either documented as a bounded
string (e.g., add a max length) and the offsets/Space are recalculated as:
discriminator (8) + user Pubkey (32) + 4 (string length prefix) + max_name_bytes
+ data (128), or remove the fixed `name` offset and overall Space and instead
state "variable size; formula: 8 + 32 + 4 + name_len + 128" (referencing the
struct AccountData and the `name` and `data` fields).
In @airdrop-implementations/compressed-claim/program/Cargo.toml:
- Line 22: The Cargo.toml currently pins borsh = "0.10.0", which is vulnerable
(RUSTSEC-2023-0033); update the dependency to borsh = "1.6.0" (or later) in
Cargo.toml, run cargo update and cargo build/test to ensure compatibility, and
if any crate (e.g., Light Protocol-related crates) breaks, update those crates
or add compatible borsh features/versions so the code compiles and tests pass
before merging.
In @airdrop-implementations/compressed-claim/program/src/error.rs:
- Around line 4-18: The enum ClaimError lacks a stable on-chain numeric layout;
add #[repr(u32)] to ClaimError and give each variant an explicit discriminant
(e.g., MissingRequiredSignature = 0, TokensLocked = 1, InvalidPDA = 2) so the
ProgramError conversion (impl From<ClaimError> for ProgramError) yields stable,
predictable custom error codes matching the tests that expect 0x1 for
TokensLocked; keep the From implementation as-is.
In @airdrop-implementations/compressed-claim/program/src/processor.rs:
- Around line 130-148: check_claim_pda currently calls
Pubkey::create_program_address(...).expect(...) which panics on invalid seeds;
change that to handle the Result instead of panicking: call
Pubkey::create_program_address(seeds, claim_program) and match on the Result,
returning an appropriate error (e.g., map the Err case to a ProgramError or a
ClaimError like ClaimError::InvalidPDA or a new ClaimError::InvalidSeeds)
instead of expecting; only continue to compare derived_pda to airdrop_account on
Ok(derived_pda) and keep the existing msg!/Err return when they don’t match.
- Around line 24-55: The code in process_claim indexes into accounts before
checking accounts.len(), which can panic when fewer than 16 accounts are
supplied and incorrectly requires exactly 16 instead of allowing extra accounts;
move the length check to the top of process_claim and change the condition to
require accounts.len() >= 16, returning ProgramError::NotEnoughAccountKeys (with
the same msg!) if fewer than 16, then perform the existing assignments to
claimant_info, fee_payer_info, associated_airdrop_pda_info, ..., queue_info;
this preserves composability by permitting extra accounts while ensuring safe
indexing.
- Around line 101-127: Validate the SPL Token program ID before performing the
CPI: add an assertion that token_program_info.key == &spl_token::ID (similar to
the existing ctoken_program_info check against light_ctoken_sdk::ctoken::id())
before calling decompress_inputs and before building/invoking the instruction;
reference token_program_info, decompress_inputs, and invoke_signed so the check
is placed just after the ctoken_program_info validation and prior to using
token_program_info in the CPI.
In @airdrop-implementations/compressed-claim/program/tests/functional.rs:
- Around line 64-77: The test currently indexes items[0] after calling
rpc.get_compressed_token_accounts_by_owner which can panic if no items are
returned; update the code around compressed_token_account to first assert that
the returned .value.items is non-empty (or use .first().expect with a clear
message) before cloning the element, so replace the direct items[0].clone() with
a safe check and an expect message that explains the missing compressed token
account for claimant_pda/mint when the test fails.
- Around line 141-149: The test currently asserts the full RPC error string
using assert_eq! on result.unwrap_err().to_string(), which is brittle; change
the assertion to check that the error string contains the custom program error
code (e.g., use assert!(result.unwrap_err().to_string().contains("custom program
error: 0x1")) ) so the test still verifies the program error while being
resilient to RPC/SDK formatting changes; update the assertion around
create_and_send_transaction result (where result is produced after
rpc.warp_to_slot and the instruction) to use .contains(...) instead of exact
equality.
In @airdrop-implementations/compressed-claim/README.md:
- Line 12: The README's contact line mentions Discord but omits a handle or
invite link; update the contact section in
airdrop-implementations/compressed-claim/README.md by replacing the placeholder
or adding a new Discord identifier (e.g., username#1234 or a server invite URL)
so readers can reach out, ensuring the line clearly labels it as "Discord:"
followed by the actual handle or link.
In @basic-operations/CLAUDE.md:
- Around line 16-31: Update the fenced code block that lists the directory tree
(starting with "basic-operations/") to include a language identifier on the
opening fence (e.g., change ``` to ```text or ```bash) so Markdown renderers and
linters apply proper highlighting; keep the block contents and closing fence
unchanged.
In @create-and-update/CLAUDE.md:
- Around line 16-19: The fenced code block in CLAUDE.md is missing a language
identifier; update the opening fence for the snippet that shows the directory
tree (the block starting with "programs/create-and-update/src/") to include a
language tag such as "text" (i.e., change ``` to ```text) so the code block is
properly labeled for syntax highlighting and linting.
In @depin-poc:
- Line 1: The submodule in .gitmodules is currently tracking the feature branch
jorrit/feat-compressed-stake-accounts at commit
94aeff26f945f181648a2f5ca76308f33e6691bc; verify whether tracking that feature
branch is intentional and either (a) re-pin the submodule to a stable branch
(e.g., main or master) or a specific release tag by updating the submodule entry
and committing the change, or (b) if you must track the feature branch, add a
clear note in the repository documentation (README or CONTRIBUTING) explaining
why Lightprotocol/nosana-programs is being tracked on
jorrit/feat-compressed-stake-accounts and any maintenance expectations; if the
intent is to include newer upstream commits, consider rebasing the feature
branch onto a stable branch before repinning.
In @zk-id/CLAUDE.md:
- Around line 16-26: The fenced code block that begins with "src/" in the
CLAUDE.md README is missing a language identifier; update the opening
triple-backtick to include a language (e.g., add "text" so it becomes ```text)
to satisfy linting and improve readability, leaving the block contents unchanged
and keeping the closing triple-backtick as-is.
🧹 Nitpick comments (5)
read-only/CLAUDE.md (1)
16-21: Add language specifier to fenced code block.The code block should specify a language for proper rendering and syntax highlighting.
📝 Proposed fix
-``` +```text src/ └── lib.rs # Program entry, instructions, account definitions tests/ └── test.rs # Integration tests for create and read operations</details> </blockquote></details> <details> <summary>airdrop-implementations/README.md (1)</summary><blockquote> `3-3`: **Use formal language: replace "get decompressed" with "are decompressed".** The current phrasing is informal. Changing to passive voice maintains clarity and consistency with technical documentation style. <details> <summary>✏️ Suggested fix</summary> ```diff -Simple Implementation: compressed-claim - Distributes compressed tokens that get decompressed on claim +Simple Implementation: compressed-claim - Distributes compressed tokens that are decompressed on claimairdrop-implementations/compressed-claim/program/tests/functional.rs (1)
85-111: Hardcoded PDAs: add a short comment on provenance or derive them in-test.Lines 90–106 embed constants for program-related PDAs. If these are stable fixtures from
light_program_test, a short comment pointing to the source (or deriving via SDK helpers) will reduce confusion when they change.airdrop-implementations/compressed-claim/program/src/instruction.rs (2)
74-120: Prefer returningResultinstead ofunwrap()when serializing instruction data.Line 118 can be a
Resultto make the client API harder to misuse (especially in examples that people copy/paste).
132-163: Document (or parameterize) the hardcoded SPL interface index0.Line 143 assumes
derive_spl_interface_pda(&mint, 0); if multiple token pools are possible, users will trip on this. A short doc note or anindexparameter would help.
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
airdrop-implementations/compressed-claim/Cargo.lockis excluded by!**/*.lock
📒 Files selected for processing (22)
.gitmodulesaccount-comparison/CLAUDE.mdairdrop-implementations/README.mdairdrop-implementations/compressed-claim/.gitignoreairdrop-implementations/compressed-claim/CLAUDE.mdairdrop-implementations/compressed-claim/Cargo.tomlairdrop-implementations/compressed-claim/LICENSEairdrop-implementations/compressed-claim/README.mdairdrop-implementations/compressed-claim/program/Cargo.tomlairdrop-implementations/compressed-claim/program/src/error.rsairdrop-implementations/compressed-claim/program/src/instruction.rsairdrop-implementations/compressed-claim/program/src/lib.rsairdrop-implementations/compressed-claim/program/src/processor.rsairdrop-implementations/compressed-claim/program/tests/functional.rsairdrop-implementations/compressed-claim/rustfmt.tomlairdrop-implementations/distributorbasic-operations/CLAUDE.mdcounter/CLAUDE.mdcreate-and-update/CLAUDE.mddepin-pocread-only/CLAUDE.mdzk-id/CLAUDE.md
🧰 Additional context used
🧬 Code graph analysis (2)
airdrop-implementations/compressed-claim/program/tests/functional.rs (1)
airdrop-implementations/compressed-claim/program/src/instruction.rs (2)
build_claim_and_decompress_instruction(76-120)compress(133-163)
airdrop-implementations/compressed-claim/program/src/lib.rs (1)
airdrop-implementations/compressed-claim/program/src/processor.rs (1)
process_instruction(15-21)
🪛 LanguageTool
airdrop-implementations/README.md
[style] ~3-~3: The verb “get” can be informal. Consider replacing it with a form of “to be”.
Context: ...m - Distributes compressed tokens that get decompressed on claim Advanced Implementation: dist...
(GET_USED_ARE_USED)
create-and-update/CLAUDE.md
[grammar] ~48-~48: Ensure spelling is correct
Context: ...o from program ID ### Instruction data structs | Struct | Fields | Used by | |--------|...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
counter/CLAUDE.md
[grammar] ~51-~51: Ensure spelling is correct
Context: ...nnot be reused. | ### Instruction data structs | Struct | Fields | |--------|--------| ...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
🪛 markdownlint-cli2 (0.18.1)
create-and-update/CLAUDE.md
16-16: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
read-only/CLAUDE.md
16-16: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
basic-operations/CLAUDE.md
16-16: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
zk-id/CLAUDE.md
17-17: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (12)
- GitHub Check: basic-operations/native/native-program-close
- GitHub Check: counter/native
- GitHub Check: counter/pinocchio
- GitHub Check: zk-id
- GitHub Check: basic-operations/anchor/close
- GitHub Check: counter/anchor
- GitHub Check: create-and-update
- GitHub Check: basic-operations/anchor/reinit
- GitHub Check: basic-operations/anchor/create
- GitHub Check: basic-operations/anchor/create-nullifier
- GitHub Check: basic-operations/anchor/burn
- GitHub Check: basic-operations/anchor/update
🔇 Additional comments (14)
basic-operations/CLAUDE.md (3)
37-45: LGTM.The
MyCompressedAccountstruct is well-documented with theLightDiscriminatorderive macro and clear field descriptions. The code example is syntactically correct and serves its purpose well.
102-115: Security and error documentation is comprehensive.The security checks and error conditions are clearly documented with table format that's easy to scan. All major failure modes appear to be covered.
51-101: The review comment is based on a misunderstanding of the codebase architecture. The CLAUDE.md file documents separate Solana programs for each operation (create, update, close, reinit, burn), not instructions within a single unified program. Each program has its ownInstructionTypeenum with its own discriminator namespace:
basic-operations/native/programs/update/:InstructionType { Create=0, Update=1 }basic-operations/native/programs/close/:InstructionType { Create, Close }basic-operations/native/programs/reinit/:InstructionType { Create, Close, Reinit }basic-operations/native/programs/burn/:InstructionType { Create, Burn }There is no ambiguity—discriminators are correctly scoped per-program. The CLAUDE.md documentation presents instructions from separate programs in a unified section, which could be clearer, but this reflects the actual architecture where each operation is a distinct program.
Likely an incorrect or invalid review comment.
airdrop-implementations/distributor (1)
1-1: Verify submodule configuration and external repository.This file references an external Git submodule. The actual implementation code is not visible in this review context, so I cannot assess its correctness, security, or quality.
Please verify:
- The
.gitmodulesconfiguration includes a valid entry for this submodule with the correct URL (expected:https://github.com/Lightprotocol/distributor.git).- The external repository at that URL is legitimate and maintained by Lightprotocol.
- The commit hash
2cf79f63973a79e6354871dc9355a63aa1d15139points to stable, reviewed code.Additionally, consider whether a Git submodule is the right approach here, or if vendoring/copying the code would be more maintainable given this is an example program repository.
airdrop-implementations/compressed-claim/.gitignore (1)
1-10: LGTM!Standard and appropriate exclusions for a Solana/Anchor program project.
airdrop-implementations/compressed-claim/LICENSE (1)
1-176: LGTM!Standard Apache License 2.0 text is correctly included.
airdrop-implementations/compressed-claim/program/Cargo.toml (2)
1-15: LGTM!Package metadata and feature configuration are appropriate for a Solana program with CPI support.
25-40: LGTM!Dev dependencies and crate configuration are appropriate. The
unexpected_cfgslint allowance correctly handles Solana's custom target OS.counter/CLAUDE.md (1)
1-77: LGTM!Comprehensive documentation covering all aspects of the Counter Program including multiple implementations, account structures, instruction set, security checks, and error handling.
airdrop-implementations/compressed-claim/rustfmt.toml (1)
1-10: LGTM!Rustfmt configuration is reasonable with a 100-character line width and automatic import/module reordering for consistency.
airdrop-implementations/compressed-claim/CLAUDE.md (1)
1-84: Well-structured technical documentation.The documentation clearly describes the compressed-claim program architecture, account layout, instruction flow, security model, and error handling. The source structure, PDA derivation, and claim/decompress process are well-explained with supporting tables.
airdrop-implementations/README.md (2)
8-24: Comparison and cost tables are clear and helpful.The feature matrix and cost breakdown (10k recipients) effectively communicate the tradeoffs between implementations and demonstrate the on-chain cost efficiency of both approaches vs. regular SPL distribution. Well-organized reference material.
25-28: Getting started links are properly formatted.Links to compressed-claim and distributor READMEs are correctly referenced and will guide users to implementation-specific documentation.
airdrop-implementations/compressed-claim/program/src/lib.rs (1)
7-19: Entrypoint + program id guard look good.Line 7–19 is a clean dispatch boundary (especially the
IncorrectProgramIdguard).
| #[derive(Error, Debug, Copy, Clone)] | ||
| pub enum ClaimError { | ||
| #[error("Missing required signature.")] | ||
| MissingRequiredSignature, | ||
| #[error("Tokens are still locked.")] | ||
| TokensLocked, | ||
| #[error("Invalid airdrop PDA provided.")] | ||
| InvalidPDA, | ||
| } | ||
|
|
||
| impl From<ClaimError> for ProgramError { | ||
| fn from(e: ClaimError) -> Self { | ||
| ProgramError::Custom(e as u32) | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# Find test files and search for error code references
find . -path "*compressed-claim*" -name "*.rs" -type f | head -20Repository: Lightprotocol/program-examples
Length of output: 408
🏁 Script executed:
# Search for files that might contain tests for ClaimError
find . -path "*compressed-claim*" -type f -name "*.rs" | xargs grep -l "ClaimError\|0x1\|error.*code" 2>/dev/null | head -20Repository: Lightprotocol/program-examples
Length of output: 276
🏁 Script executed:
# Look for test references to error codes in the compressed-claim program directory
find . -path "*compressed-claim*" -type f \( -name "*.rs" -o -name "*.toml" \) | xargs grep -E "(0x[0-9]|error.*code|ClaimError)" 2>/dev/null | grep -v ".git" | head -40Repository: Lightprotocol/program-examples
Length of output: 853
🏁 Script executed:
# Check the actual error.rs file and surrounding context
find . -path "*compressed-claim*" -name "error.rs" -type fRepository: Lightprotocol/program-examples
Length of output: 137
🏁 Script executed:
# Read the functional test to see the context of the 0x1 error
cat -n ./airdrop-implementations/compressed-claim/program/tests/functional.rs | grep -A 5 -B 5 "0x1"Repository: Lightprotocol/program-examples
Length of output: 585
🏁 Script executed:
# Read the error.rs file to see current structure
cat -n ./airdrop-implementations/compressed-claim/program/src/error.rsRepository: Lightprotocol/program-examples
Length of output: 653
🏁 Script executed:
# Search for any other hardcoded error codes in tests
grep -r "0x0\|0x1\|0x2\|custom program error" ./airdrop-implementations/compressed-claim/program/tests/Repository: Lightprotocol/program-examples
Length of output: 230
Stabilize on-chain error codes with #[repr(u32)] and explicit discriminants.
The test in functional.rs (line 148) asserts error code 0x1, which currently maps to TokensLocked via implicit discriminants. Reordering enum variants would silently change error codes and break the test. Explicitly assign discriminants to prevent accidental breaking changes.
Proposed diff
#[derive(Error, Debug, Copy, Clone)]
+#[repr(u32)]
pub enum ClaimError {
#[error("Missing required signature.")]
- MissingRequiredSignature,
+ MissingRequiredSignature = 0,
#[error("Tokens are still locked.")]
- TokensLocked,
+ TokensLocked = 1,
#[error("Invalid airdrop PDA provided.")]
- InvalidPDA,
+ InvalidPDA = 2,
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| #[derive(Error, Debug, Copy, Clone)] | |
| pub enum ClaimError { | |
| #[error("Missing required signature.")] | |
| MissingRequiredSignature, | |
| #[error("Tokens are still locked.")] | |
| TokensLocked, | |
| #[error("Invalid airdrop PDA provided.")] | |
| InvalidPDA, | |
| } | |
| impl From<ClaimError> for ProgramError { | |
| fn from(e: ClaimError) -> Self { | |
| ProgramError::Custom(e as u32) | |
| } | |
| } | |
| #[derive(Error, Debug, Copy, Clone)] | |
| #[repr(u32)] | |
| pub enum ClaimError { | |
| #[error("Missing required signature.")] | |
| MissingRequiredSignature = 0, | |
| #[error("Tokens are still locked.")] | |
| TokensLocked = 1, | |
| #[error("Invalid airdrop PDA provided.")] | |
| InvalidPDA = 2, | |
| } | |
| impl From<ClaimError> for ProgramError { | |
| fn from(e: ClaimError) -> Self { | |
| ProgramError::Custom(e as u32) | |
| } | |
| } |
🤖 Prompt for AI Agents
In @airdrop-implementations/compressed-claim/program/src/error.rs around lines 4
- 18, The enum ClaimError lacks a stable on-chain numeric layout; add
#[repr(u32)] to ClaimError and give each variant an explicit discriminant (e.g.,
MissingRequiredSignature = 0, TokensLocked = 1, InvalidPDA = 2) so the
ProgramError conversion (impl From<ClaimError> for ProgramError) yields stable,
predictable custom error codes matching the tests that expect 0x1 for
TokensLocked; keep the From implementation as-is.
| ``` | ||
| programs/create-and-update/src/ | ||
| └── lib.rs # Program entry, instructions, accounts, state structs | ||
| ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add language identifier to fenced code block.
The code block is missing a language identifier, which helps with syntax highlighting and linting compliance.
📝 Proposed fix
-```
+```text
programs/create-and-update/src/
└── lib.rs # Program entry, instructions, accounts, state structs
-```
+```📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ``` | |
| programs/create-and-update/src/ | |
| └── lib.rs # Program entry, instructions, accounts, state structs | |
| ``` |
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
16-16: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
In @create-and-update/CLAUDE.md around lines 16 - 19, The fenced code block in
CLAUDE.md is missing a language identifier; update the opening fence for the
snippet that shows the directory tree (the block starting with
"programs/create-and-update/src/") to include a language tag such as "text"
(i.e., change ``` to ```text) so the code block is properly labeled for syntax
highlighting and linting.
depin-poc
Outdated
| @@ -0,0 +1 @@ | |||
| Subproject commit 94aeff26f945f181648a2f5ca76308f33e6691bc | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# Check .gitmodules file for depin-poc entry
echo "=== .gitmodules configuration ==="
if [ -f .gitmodules ]; then
cat .gitmodules
else
echo ".gitmodules not found"
fi
echo -e "\n=== Directory structure for depin-poc ==="
ls -la depin-poc 2>/dev/null || echo "depin-poc directory not found"
echo -e "\n=== Git status for depin-poc ==="
git status depin-poc 2>/dev/null || echo "Unable to get git status"
echo -e "\n=== Files modified in this PR ==="
git diff --name-only HEAD^ HEAD 2>/dev/null | head -20 || echo "Unable to determine PR files"Repository: Lightprotocol/program-examples
Length of output: 644
🏁 Script executed:
# Verify the commit hash exists in the remote repository
echo "=== Verifying commit in Lightprotocol/nosana-programs ==="
git ls-remote https://github.com/Lightprotocol/nosana-programs 94aeff26f945f181648a2f5ca76308f33e6691bc 2>&1Repository: Lightprotocol/program-examples
Length of output: 131
🏁 Script executed:
# More comprehensive commit verification - check all refs including all branches and tags
echo "=== Checking all refs in Lightprotocol/nosana-programs ==="
git ls-remote --all https://github.com/Lightprotocol/nosana-programs | head -50
echo -e "\n=== Searching for similar commits (first 8 chars) ==="
git ls-remote https://github.com/Lightprotocol/nosana-programs | grep "^94aeff2"Repository: Lightprotocol/program-examples
Length of output: 1204
🏁 Script executed:
# Verify the submodule was actually added/modified in this commit
echo "=== Current submodule state ==="
git config --file .gitmodules --name-only --get-regexp path
echo -e "\n=== Submodule details ==="
git config --file .gitmodules --get submodule.depin-poc.url
git config --file .gitmodules --get submodule.depin-poc.pathRepository: Lightprotocol/program-examples
Length of output: 267
Submodule pinned to feature branch—verify this is intentional.
The commit 94aeff26f945f181648a2f5ca76308f33e6691bc exists in Lightprotocol/nosana-programs, and the .gitmodules configuration is correct. However, the submodule is pinned to the feature branch jorrit/feat-compressed-stake-accounts rather than a stable branch (main/master). If this is unintentional, consider rebasing or pinning to a stable release branch instead. If intentional, document the reason for tracking a feature branch.
🤖 Prompt for AI Agents
In @depin-poc at line 1, The submodule in .gitmodules is currently tracking the
feature branch jorrit/feat-compressed-stake-accounts at commit
94aeff26f945f181648a2f5ca76308f33e6691bc; verify whether tracking that feature
branch is intentional and either (a) re-pin the submodule to a stable branch
(e.g., main or master) or a specific release tag by updating the submodule entry
and committing the change, or (b) if you must track the feature branch, add a
clear note in the repository documentation (README or CONTRIBUTING) explaining
why Lightprotocol/nosana-programs is being tracked on
jorrit/feat-compressed-stake-accounts and any maintenance expectations; if the
intent is to include newer upstream commits, consider rebasing the feature
branch onto a stable branch before repinning.
| ``` | ||
| src/ | ||
| ├── lib.rs # Program entry, instructions, account structs, error codes | ||
| └── verifying_key.rs # Groth16 verifying key constants (8 public inputs) | ||
|
|
||
| circuits/ | ||
| ├── compressed_account_merkle_proof.circom # Main circuit (26-level Merkle proof) | ||
| ├── compressed_account.circom # CompressedAccountHash template | ||
| ├── credential.circom # Keypair and CredentialOwnership templates | ||
| └── merkle_proof.circom # MerkleProof template | ||
| ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add language identifier to fenced code block.
The code block at line 17 is missing a language specification. Update it to improve readability and satisfy linting standards.
🔧 Proposed fix
- ```
+ ```text
src/
├── lib.rs # Program entry, instructions, account structs, error codes
└── verifying_key.rs # Groth16 verifying key constants (8 public inputs)
circuits/
├── compressed_account_merkle_proof.circom # Main circuit (26-level Merkle proof)
├── compressed_account.circom # CompressedAccountHash template
├── credential.circom # Keypair and CredentialOwnership templates
└── merkle_proof.circom # MerkleProof template
- ```
+ ```🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
17-17: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
In @zk-id/CLAUDE.md around lines 16 - 26, The fenced code block that begins with
"src/" in the CLAUDE.md README is missing a language identifier; update the
opening triple-backtick to include a language (e.g., add "text" so it becomes
```text) to satisfy linting and improve readability, leaving the block contents
unchanged and keeping the closing triple-backtick as-is.
3c8d55d to
efaa390
Compare
efaa390 to
dec6aff
Compare
Summary
airdrop-implementations/with two approaches:Summary by CodeRabbit
New Features
Documentation
✏️ Tip: You can customize this high-level summary in your review settings.