/staking-receipt-tokens
Type Thought-template (instantiate before use) - Research basis Donation attacks via unsolicited token transfers
$ npx -y skills add PlamenTSV/plamen --skill staking-receipt-tokens --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/staking-receipt-tokens
Context preview
The summary Claude sees to decide when to auto-load this skill.
Type Thought-template (instantiate before use) - Research basis Donation attacks via unsolicited token transfers
SKILL.md
staking-receipt-tokens.SKILL.mdname: "staking-receipt-tokens"
description: "Type Thought-template (instantiate before use) - Research basis Donation attacks via unsolicited token transfers"
Skill: Staking Receipt Token Analysis
> **Type**: Thought-template (instantiate before use) > **Research basis**: Donation attacks via unsolicited token transfers
Trigger Patterns
delegation|staking.*receipt|liquid.*staking|getLiquidRewards|unbond|
stake.*share|validator|deposit.*voucher|withdraw.*voucher|claimReward
Reasoning Template
Step 1: Identify Receipt Tokens
- In {CONTRACTS}, find all external calls that return tokens
- For each, determine:
- What token type is returned? (shares, vouchers, receipts, LP tokens)
- Is the returned token ERC20-compatible?
- Does the protocol hold these tokens?
Step 2: Check Transferability
- For each receipt token {RECEIPT_TOKEN}:
- Can it be acquired externally? (stake directly with {EXTERNAL_STAKING})
- Can it be transferred via standard `transfer()`/`transferFrom()`?
- Can anyone transfer it to {PROTOCOL_CONTRACT} unsolicited?
Step 2b: External Token Transferability
For each EXTERNAL staking/delegation token the protocol interacts with (not just the protocol's own receipt token):
1. Is it ERC20-transferable? (check if extends IERC20/IERC20Upgradeable) 2. Can it be transferred TO the protocol contract unsolicited (without calling deposit/stake)? 3. If YES to both: a. Does the protocol iterate over these tokens or their sources? (gas DoS from many unsolicited transfers) b. Does `getTotalStake(protocol)` or equivalent change? (accounting impact on withdrawal calculations) c. Does `transfer()` trigger side effects? (reward auto-claim, delegation state changes) d. Does non-zero balance block any admin/privileged operations? (e.g., entity removal requires balance == 0)
| External Token | ERC20? | Unsolicited Transfer? | Iteration DoS? | Balance Impact? | Side Effects? | Blocks Operations? | |----------------|--------|----------------------|-----------------|-----------------|---------------|-------------------| | {token_name} | YES/NO | YES/NO | YES/NO | YES/NO | YES/NO | YES/NO |
**RULE**: If ANY external token is ERC20-transferable AND affects protocol state → finding with severity >= MEDIUM.
Step 3: Trace Balance Dependencies
- In {PROTOCOL_CONTRACT}, find all uses of `balanceOf(address(this))` for {RECEIPT_TOKEN}
- For each usage at {BALANCE_CHECK_LOCATIONS}:
- What calculation depends on this balance?
- Is there a tracked state variable that should match?
- What's the gap risk: tracked vs actual?
Step 4: Model Donation Attack
1. Attacker acquires {RECEIPT_TOKEN} externally via {EXTERNAL_ACQUISITION}
2. Attacker transfers {DONATION_AMOUNT} to {PROTOCOL_CONTRACT}
3. Protocol's balanceOf(this) increases by {DONATION_AMOUNT}
4. Next operation at {AFFECTED_FUNCTION} uses inflated balance
5. Impact: {IMPACT_DESCRIPTION}Step 5: Assess Severity
- Can attacker profit from this manipulation?
- Can attacker grief other users?
- What's the minimum donation needed for impact?
- Is there a defense (e.g., balance reconciliation)?
Key Questions (must answer all)
1. Can {RECEIPT_TOKEN} be acquired without going through {PROTOCOL_CONTRACT}? 2. Does {PROTOCOL_CONTRACT} use `balanceOf(this)` for {RECEIPT_TOKEN} in any calculation? 3. Is there a tracked state variable that should equal the actual balance? 4. What happens if tracked ≠ actual?
Common False Positives
- **Balance reconciliation**: If protocol calls `balanceOf` and compares to tracked state, donation is detected
- **Isolated accounting**: If receipt tokens are accounted separately per user (not pooled), donation doesn't affect others
- **No balance dependency**: If protocol never calls `balanceOf(this)` for this token, donation has no effect
- **Burn on transfer**: Some receipt tokens are non-transferable or burn on transfer
Multi-Entity Dust Attack Analysis
Step 6: Identify Multi-Entity Patterns
- Does the protocol interact with MULTIPLE staking entities? (validators, pools, vaults)
- Are there separate receipt tokens per entity?
- How does the protocol aggregate across entities?
Step 7: Model Compounding Dust
For protocols with N entities:
Single entity dust: X tokens (below threshold, ignored)
N entities with dust: N × X tokens
Compounding factor: If dust compounds over time → N × X × T
Check: Can attacker spread small amounts across many entities to:
1. Accumulate significant total value?
2. Avoid per-entity dust thresholds?
3. Exploit aggregation rounding?
Step 8: On-Transfer Side Effects
When receipt tokens are transferred:
- Does `transfer()` trigger reward claims?
- Does `transfer()` update internal delegation state?
- Does `transfer()` call any hooks or callbacks?
**Specific checks**: | Token | transfer() Side Effect | Exploitable? | |-------|----------------------|--------------| | Staking receipts | May claim rewards | Check if rewards go to sender/receiver/neither | | stETH | Rebases on transfer | Check exchange rate impact | | LP tokens | May trigger sync | Check for manipulation window | | cTokens/aTokens | May accrue interest | Check balance vs shares discrepancy |
Step 9: Cross-Validator Attack Patterns
For protocols managing multiple validators:
Pattern A: Dust Spreading
- Attacker creates dust positions across N validators
- Each position below withdrawal threshold
- Total value: significant
- Impact: locked value, accounting discrepancies
Pattern B: Selective Validator Manipulation
- Attacker identifies validator with exploitable state
- Moves delegation to that specific validator
- Exploits validator-specific vulnerability
- Impact: depends on vulnerability
Pattern C: Aggregation Rounding
- Protocol rounds down per-validator withdrawals
- Attacker exploits: N validators × rounding_error = significant loss/gain
Step 10: External Adverse Events on Pending Operations
When the p
Read more
name: "staking-receipt-tokens" description: "Type Thought-template (instantiate before use) - Research basis Donation attacks via unsolicited token transfers"
Skill: Staking Receipt Token Analysis
> **Type**: Thought-template (instantiate before use) > **Research basis**: Donation attacks via unsolicited token transfers
Trigger Patterns
delegation|staking.*receipt|liquid.*staking|getLiquidRewards|unbond| stake.*share|validator|deposit.*voucher|withdraw.*voucher|claimReward
Reasoning Template
Step 1: Identify Receipt Tokens
- In {CONTRACTS}, find all external calls that return tokens
- For each, determine:
- What token type is returned? (shares, vouchers, receipts, LP tokens)
- Is the returned token ERC20-compatible?
- Does the protocol hold these tokens?
Step 2: Check Transferability
- For each receipt token {RECEIPT_TOKEN}:
- Can it be acquired externally? (stake directly with {EXTERNAL_STAKING})
- Can it be transferred via standard `transfer()`/`transferFrom()`?
- Can anyone transfer it to {PROTOCOL_CONTRACT} unsolicited?
Step 2b: External Token Transferability
For each EXTERNAL staking/delegation token the protocol interacts with (not just the protocol's own receipt token):
1. Is it ERC20-transferable? (check if extends IERC20/IERC20Upgradeable) 2. Can it be transferred TO the protocol contract unsolicited (without calling deposit/stake)? 3. If YES to both: a. Does the protocol iterate over these tokens or their sources? (gas DoS from many unsolicited transfers) b. Does `getTotalStake(protocol)` or equivalent change? (accounting impact on withdrawal calculations) c. Does `transfer()` trigger side effects? (reward auto-claim, delegation state changes) d. Does non-zero balance block any admin/privileged operations? (e.g., entity removal requires balance == 0)
| External Token | ERC20? | Unsolicited Transfer? | Iteration DoS? | Balance Impact? | Side Effects? | Blocks Operations? | |----------------|--------|----------------------|-----------------|-----------------|---------------|-------------------| | {token_name} | YES/NO | YES/NO | YES/NO | YES/NO | YES/NO | YES/NO |
**RULE**: If ANY external token is ERC20-transferable AND affects protocol state → finding with severity >= MEDIUM.
Step 3: Trace Balance Dependencies
- In {PROTOCOL_CONTRACT}, find all uses of `balanceOf(address(this))` for {RECEIPT_TOKEN}
- For each usage at {BALANCE_CHECK_LOCATIONS}:
- What calculation depends on this balance?
- Is there a tracked state variable that should match?
- What's the gap risk: tracked vs actual?
Step 4: Model Donation Attack
1. Attacker acquires {RECEIPT_TOKEN} externally via {EXTERNAL_ACQUISITION}
2. Attacker transfers {DONATION_AMOUNT} to {PROTOCOL_CONTRACT}
3. Protocol's balanceOf(this) increases by {DONATION_AMOUNT}
4. Next operation at {AFFECTED_FUNCTION} uses inflated balance
5. Impact: {IMPACT_DESCRIPTION}Step 5: Assess Severity
- Can attacker profit from this manipulation?
- Can attacker grief other users?
- What's the minimum donation needed for impact?
- Is there a defense (e.g., balance reconciliation)?
Key Questions (must answer all)
1. Can {RECEIPT_TOKEN} be acquired without going through {PROTOCOL_CONTRACT}? 2. Does {PROTOCOL_CONTRACT} use `balanceOf(this)` for {RECEIPT_TOKEN} in any calculation? 3. Is there a tracked state variable that should equal the actual balance? 4. What happens if tracked ≠ actual?
Common False Positives
- **Balance reconciliation**: If protocol calls `balanceOf` and compares to tracked state, donation is detected
- **Isolated accounting**: If receipt tokens are accounted separately per user (not pooled), donation doesn't affect others
- **No balance dependency**: If protocol never calls `balanceOf(this)` for this token, donation has no effect
- **Burn on transfer**: Some receipt tokens are non-transferable or burn on transfer
Multi-Entity Dust Attack Analysis
Step 6: Identify Multi-Entity Patterns
- Does the protocol interact with MULTIPLE staking entities? (validators, pools, vaults)
- Are there separate receipt tokens per entity?
- How does the protocol aggregate across entities?
Step 7: Model Compounding Dust
For protocols with N entities:
Single entity dust: X tokens (below threshold, ignored) N entities with dust: N × X tokens Compounding factor: If dust compounds over time → N × X × T Check: Can attacker spread small amounts across many entities to: 1. Accumulate significant total value? 2. Avoid per-entity dust thresholds? 3. Exploit aggregation rounding?
Step 8: On-Transfer Side Effects
When receipt tokens are transferred:
- Does `transfer()` trigger reward claims?
- Does `transfer()` update internal delegation state?
- Does `transfer()` call any hooks or callbacks?
**Specific checks**: | Token | transfer() Side Effect | Exploitable? | |-------|----------------------|--------------| | Staking receipts | May claim rewards | Check if rewards go to sender/receiver/neither | | stETH | Rebases on transfer | Check exchange rate impact | | LP tokens | May trigger sync | Check for manipulation window | | cTokens/aTokens | May accrue interest | Check balance vs shares discrepancy |
Step 9: Cross-Validator Attack Patterns
For protocols managing multiple validators:
Pattern A: Dust Spreading - Attacker creates dust positions across N validators - Each position below withdrawal threshold - Total value: significant - Impact: locked value, accounting discrepancies Pattern B: Selective Validator Manipulation - Attacker identifies validator with exploitable state - Moves delegation to that specific validator - Exploits validator-specific vulnerability - Impact: depends on vulnerability Pattern C: Aggregation Rounding - Protocol rounds down per-validator withdrawals - Attacker exploits: N validators × rounding_error = significant loss/gain
Step 10: External Adverse Events on Pending Operations
When the p
Autonomous Web3 security auditor for Claude Code and OpenAI Codex CLI. Orchestrates 18-100 AI agents across 40+ phases to produce audit reports with verified PoC exploits — for smart contracts and L1 node-client infrastructure.
Repo: PlamenTSV/plamen
Other skills on plamen.
- /ability-analysis
Trigger Pattern Always (Aptos Move) - foundational security check - Inject Into Breadth agents, depth agents
Open skill - /bit-shift-safety
Trigger Pattern Always (Aptos Move) - Move VM aborts on shift = bit width - Inject Into Breadth agents, depth-edge-case
Open skill - /centralization-risk
Trigger Protocol has privileged roles (admin, operator, governance, resource account owner) - Covers Single points of failure, privilege escalation, external governance dependen...
Open skill - /cross-chain-timing
Trigger Pattern wormhole|layerzero|ccip|bridge|cross_chain|vaa|guardian|emitter|relay|remote_chain|payload|nonce.sequence - Inject Into Breadth agents, depth-external
Open skill - /dependency-audit
Trigger EXTERNAL_LIB flag detected (protocol uses third-party Move dependencies) - Used by Breadth agents, depth-external
Open skill - /economic-design-audit
Trigger Pattern MONETARY_PARAMETER flag (required) - Inject Into Breadth agents (merged via M4 hierarchy)
Open skill

