agents/skills/evm/share-allocation-fairness/SKILL.md
Trigger SHARE_ALLOCATION flag detected in pattern scan - Used by Breadth agents, depth-edge-case
npx skillsauth add plamentsv/plamen share-allocation-fairnessInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Trigger: SHARE_ALLOCATION flag detected in pattern scan Used by: Breadth agents, depth-edge-case
Analyze fairness of share/token allocation mechanisms where users receive shares proportional to deposits, contributions, or participation -- checking for late-entry advantages, queue-position gaming, and time-weighting omissions.
Identify which pattern the protocol uses:
| Type | Pattern | Key Risk | |------|---------|----------| | Pro-rata snapshot | Shares minted at fixed ratio at deposit time | Late depositors dilute early depositors' accrued value | | Time-weighted | Shares accrue value based on duration held | Checkpoint manipulation, discrete vs continuous accrual | | Queue-based | Deposits processed in batch/queue order | Queue position gaming, front-running batch processing | | Epoch-based | Shares valued per epoch/period boundary | Cross-epoch timing arbitrage |
For each allocation entry point:
| Entry Function | Accrual Source | Time-Weighted? | Late Entry Possible? | Impact | |---------------|----------------|----------------|---------------------|--------|
For each entry function accepting an address beneficiary parameter (e.g., stake(address to, uint256 amount)):
Check: what is the DEFAULT state for a never-before-seen to address? Can depositing for to where to has zero-initialized accounting unlock historical rewards, bypass cooldowns, or inherit accrued value?
| Entry Function | Accepts Beneficiary? | Default State for New Address | Exploitable? | Impact | |---------------|---------------------|------------------------------|-------------|--------|
If to != msg.sender enables reward capture the recipient did not earn -> FINDING (late-entry variant).
For each admin-settable reward/rate parameter: model the sequence user_stakes -> admin_sets_rate -> rewards_accrue. Does the user receive retroactive rewards for the period BEFORE the rate was set? Does a staker after rate-setting receive the same, more, or less?
| Parameter Setter | Staked-Before-Set? | Retroactive Rewards? | Fair? | |-----------------|-------------------|---------------------|-------|
If staking before rate-setting yields unearned rewards or causes reward loss for post-set stakers -> FINDING (timing fairness).
For the allocation mechanism identified in Step 1:
| Configuration Step | Parameter Set | Functions Available Before Set | Exploitable Default? | |--------------------|-------------|-------------------------------|---------------------|
pause mechanism that prevents interaction before configuration completes?If users can interact during partial configuration AND default values create unfair advantage → FINDING (minimum Medium, Rule 13: design gap).
For protocols with batch/queue processing:
Check that entry and exit use consistent valuation:
For independently-settable allocation rates/shares (e.g., per-pool weights, fee splits, distribution %): Is the sum constraint enforced ON-CHAIN in the setter? Can each rate be changed independently without validating the aggregate?
| Rate/Weight Setter | Aggregate Constraint | Enforced On-Chain? | What if Sum Exceeds/Falls Short? | |-------------------|---------------------|-------------------|--------------------------------|
If aggregate constraint NOT enforced and rates independently settable -> FINDING (Rule 14).
For each finding, specify:
| Step | Required | Completed? | Notes | |------|----------|------------|-------| | 1. Classify Allocation Mechanism | YES | ✓/✗/? | | | 2. Late Entry Attack Model | YES | ✓/✗/? | | | 2c. Cross-Address Deposit Model | YES | ✓/✗/? | Check beneficiary != msg.sender patterns | | 2d. Pre-Setter Timing Model | YES | ✓/✗/? | Model deposit-before-rate-set sequence | | 2e. Pre-Configuration State Analysis | YES | ✓/✗/? | Deployment window + unconfigured defaults | | 3. Queue Position and Batch Processing | IF queue/batch detected | ✓/✗(N/A)/? | | | 4. Share Redemption Symmetry | YES | ✓/✗/? | | | 4b. Aggregate Constraint Coherence | IF multiple settable weights | ✓/✗(N/A)/? | Rule 14 enforcement check |
If any step skipped, document valid reason (N/A, no queue, single pool, no settable weights).
development
Prepare Solidity projects for a security audit — test coverage, test quality, NatSpec docs, code hygiene, dependency health, best-practice enforcement, deployment readiness, and project documentation checks. Generates a scored Audit Readiness Report and optionally runs static analysis. Trigger on: "prepare for audit", "audit readiness", "pre-audit check", "audit prep", "NatSpec check", or any request to review a Solidity codebase before a security review.
development
Launch the Plamen deterministic Web3 security audit pipeline
development
Run the Plamen smart-contract audit wizard in Codex
testing
Launch the Plamen deterministic L1 infrastructure audit pipeline