solidity-coding
[AUTO-INVOKE] MUST be invoked BEFORE writing or modifying any Solidity contract (.sol files).
Skill by ComeOnOliver
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/comeonoliver-solidity-coding
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, writing, productivity, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/solidity-coding
What's inside
- Skill name
solidity-coding- Description
- [AUTO-INVOKE] MUST be invoked BEFORE writing or modifying any Solidity contract (.sol files). Covers pragma version, naming conventions, project layout, OpenZeppelin library selection standards, oracle integration, and anti-patterns. Trigger: any task involving creating, editing, or reviewing .sol source files.
- License
- MIT
- Instructions
- 255 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Solidity Coding Standards
## Language Rule
- **Always respond in the same language the user is using.** If the user asks in Chinese, respond in Chinese. If in English, respond in English.
## Coding Principles
- **Pragma**: Use `pragma solidity ^0.8.19;` — keep consistent across all files in the project
- **Dependencies**: OpenZeppelin Contracts 4.9.x, manage imports via `remappings.txt`
- **Error Handling**: Prefer custom errors over `require` strings — saves gas and is more expressive
- Define: `error InsufficientBalance(uint256 available, uint256 required);`
- Use: `if (balance < amount) revert InsufficientBalance(balance, amount);`
- **Documentation**: All `public` / `external` functions must have NatSpec (`@notice`, `@param`, `@return`)
- **Event Indexing**: Only add `indexed` to `address` type parameters — add comment if indexing other types
- **Special Keywords**: `immutable` / `constant` / `unchecked` / `assembly` must have inline comment explaining why
## Event Design Patterns
### Reason-Annotated Events(原因标注事件)
When an event represents a **conditional/branching outcome** (the same action can happen for different reasons), add a `string reason` parameter to make on-chain data self-documenting:
```solidity
// GOOD — on-chain data is self-explanatory
event WithdrawalFailed(address indexed user, uint256 amount, string reason);
emit WithdrawalFailed(user, amount, "insufficient balance");
emit WithdrawalFailed(user, amount, "cooldown not expired");
event ProposalRejected(uint256 indexed proposalId, string reason);
emit ProposalRejected(id, "quorum not reached");
emit ProposalRejected(id, "voting period ended");
// BAD — must read contract source to understand why
event WithdrawalFailed(address indexed user, uint256 amount);
```
**适用场景**:
- 资金去向分叉:同一笔资金因不同条件流向不同地址
- 操作被拒绝/降级:用户请求未完全满足,附带原因
- 状态转换:同一个状态变更可能由不同触发条件引起
- 管理员操作:记录 why(如 `"security incident"`, `"parameter tuning"`)
**不适用场景**:
- 事件只有一种触发路径(无分支)→ 不需要 reason
- 高频事件(每笔 swap/transfer)→ string 消耗额外 gas,用 `uint8 reasonCode` 代替
### Reason 实现方式选择
| 场景 | 方式 | Gas 成本 |
|------|------|----------|
| 原因种类少且固定(≤5种) | `string reason` 字面量 | 低(编译器优化短字符串) |
| 原因种类多或动态 | `uint8 reasonCode` + 前端映射表 | 最低 |
| 需要附带动态数据 | `string reason` 拼接 | 较高,慎用 |
```solidity
// 方式 A:string literal(推荐,可读性最好)
emit WithdrawalFailed(user, amount, "cooldown not expired");
// 方式 B:uint8 code(高频场景省 gas)
event SwapRejected(address indexed user, uint256 amount, uint8 reasonCode);
// 0 = slippage, 1 = insufficient liquidity, 2 = paused
emit SwapRejected(user, amount, 0);
```
### General Event Design Rules
- 每个改变状态的 `external` / `public` 函数**必须** emit 至少一个事件
- 事件参数应包含足够信息让前端/indexer **无需额外 RPC 调用**就能重建完整上下文
- NatSpec `@param` 必须为 reason 参数列出所有可能的值
## Naming Conventions
| Element | Convention | Example |
|---------|-----------|---------|
| Contract / Library | PascalCase | `MyToken`, `StakingPool` |
| Interface | `I` + PascalCase | `IMyToken`, `IStakingPool` |
| State variable / Function | lowerCamelCase | `totalSupply`, `claimDividend` |
| Constant / Immutable | UPPER_SNAKE_CASE | `MAX_SUPPLY`, `ROUTER_ADDRESS` |
| Event | PascalCase (past tense) | `TokenTransferred`, `PoolCreated` |
| Custom Error | PascalCase | `InsufficientBalance`, `Unauthorized` |
| Function parameter | prefix `_` for setter | `function setFee(uint256 _fee)` |
- **Forbidden**: Pinyin names, single-letter variables (except `i/j/k` in loops), excessive abbreviations
## Code Organization Rules
| Situation | Rule |
|-----------|------|
| Cross-contract constants | Place in `src/common/Const.sol` |
| Interface definitions | Place in `src/interfaces/I<Name>.sol`, separate from implementation |
| Simple on-chain queries | Use Foundry cast CLI (call / send) |
| Complex multi-step operations | Use Foundry script (*.s.sol) |
| Import style | Use named imports: `import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";` |
## Project Directory Structure
```
src/ — Contract source code
interfaces/ — Interface definitions (I*.sol)
common/ — Shared constants, types, errors (Const.sol, Types.sol)
test/ — Test files (*.t.sol)
script/ — Deployment & interaction scripts (*.s.sol)
config/ — Network config, parameters (*.json)
deployments/ — Deployment records (latest.env)
docs/ — Documentation, changelogs
lib/ — Dependencies (managed by Foundry)
```
## Configuration Management
- `config/*.json` — network RPC URLs, contract addresses, business parameters
- `deployments/latest.env` — latest deployed contract addresses, must update after each deployment
- `foundry.toml` — compiler version, optimizer settings, remappings
- Important config changes must be documented in the PR description
## OpenZeppelin Library Selection Standards
When writing Solidity contracts, prioritize using battle-tested OpenZeppelin libraries over custom implementations. Select the appropriate library based on the scenario:From ComeOnOliver/skillshub, MIT.
More from ComeOnOliver/skillshub
- 0.512score
solidity-debug
ComeOnOliver
[AUTO-INVOKE] MUST be invoked when debugging failed on-chain transactions.
SkillDFreshness: D★ 64Claude Code +9 - 0.512score
ilspy-decompile
ComeOnOliver
Understand implementation details of .NET code by decompiling assemblies.
SkillDFreshness: D★ 64Claude Code +9 - 0.512score
solidity-audit
ComeOnOliver
Security audit and code review checklist.
SkillDFreshness: D★ 64Claude Code +9 - 0.509score
package-management
ComeOnOliver
Manage NuGet packages using Central Package Management (CPM) and dotnet CLI commands.
SkillDFreshness: D★ 64Claude Code +9 - 0.509score
crap-analysis
ComeOnOliver
Analyze code coverage and CRAP (Change Risk Anti-Patterns) scores to identify high-risk code.
SkillDFreshness: D★ 64Claude Code +9 - 0.509score
claude-code-usage
ComeOnOliver
[AUTO-INVOKE] MUST be invoked at the START of each new coding session.
SkillDFreshness: D★ 64Claude Code +9 - 0.509score
microsoft-extensions-configuration
ComeOnOliver
Microsoft.Extensions.Options patterns including IValidateOptions, strongly-typed settings, validation on startup, and the Options pattern for clean…
SkillDFreshness: D★ 64Claude Code +9 - 0.509score
defi-security
ComeOnOliver
[AUTO-INVOKE] MUST be invoked BEFORE deploying DeFi contracts (DEX, lending, staking, LP, token).
SkillDFreshness: D★ 64Claude Code +9 - 0.509score
solidity-deploy
ComeOnOliver
[AUTO-INVOKE] MUST be invoked BEFORE deploying contracts or writing deployment scripts (*.s.sol).
SkillDFreshness: D★ 64Claude Code +9 - 0.509score
aspire-service-defaults
ComeOnOliver
Create a shared ServiceDefaults project for Aspire applications.
SkillDFreshness: D★ 64Claude Code +9 - 0.509score
dotnet-devcert-trust
ComeOnOliver
Diagnose and fix .NET HTTPS dev certificate trust issues on Linux.
SkillDFreshness: D★ 64Claude Code +9 - 0.509score
mjml-email-templates
ComeOnOliver
Build responsive email templates using MJML markup language.
SkillDFreshness: D★ 64Claude Code +9
Signals
- Stars
- 64
- Forks
- 24
- Open issues
- 30
- Last commit (this folder)
- Mar 23, 2026 (7 months ago)
- Last release
- Apr 3, 2026 (6 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/ComeOnOliver/skillshub
- Website
- skillshub.wtf
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from ComeOnOliver
- 0.512score
solidity-audit
ComeOnOliver
Security audit and code review checklist.
SkillDFreshness: D★ 64Claude Code +9 - 0.512score
ilspy-decompile
ComeOnOliver
Understand implementation details of .NET code by decompiling assemblies.
SkillDFreshness: D★ 64Claude Code +9 - 0.512score
solidity-debug
ComeOnOliver
[AUTO-INVOKE] MUST be invoked when debugging failed on-chain transactions.
SkillDFreshness: D★ 64Claude Code +9 - 0.509score
claude-code-usage
ComeOnOliver
[AUTO-INVOKE] MUST be invoked at the START of each new coding session.
SkillDFreshness: D★ 64Claude Code +9 - 0.509score
solidity-deploy
ComeOnOliver
[AUTO-INVOKE] MUST be invoked BEFORE deploying contracts or writing deployment scripts (*.s.sol).
SkillDFreshness: D★ 64Claude Code +9 - 0.509score
defi-security
ComeOnOliver
[AUTO-INVOKE] MUST be invoked BEFORE deploying DeFi contracts (DEX, lending, staking, LP, token).
SkillDFreshness: D★ 64Claude Code +9
Cite this page
solidity-coding skill. Agent Mart. https://agentmart.dev/skills/comeonoliver-solidity-coding (last updated 2026-10-24)