solidity
Solidity is a statically-typed language for writing secure smart contracts on the Ethereum blockchain.
What this skill does
# solidity
## Purpose
This skill enables the AI to write, compile, and debug Solidity code for secure smart contracts on the Ethereum blockchain. It focuses on generating and manipulating Solidity scripts to interact with decentralized applications.
## When to Use
Use this skill when developing Ethereum-based smart contracts, such as token implementations, decentralized exchanges, or voting systems. Apply it for tasks requiring on-chain logic, like handling transactions or state changes, especially in projects involving Web3 integration or blockchain prototyping.
## Key Capabilities
- Write statically-typed code with support for inheritance, libraries, and modifiers.
- Compile Solidity files into bytecode using the solc compiler.
- Generate ABI (Application Binary Interface) for contract interactions.
- Handle data types like uint, address, and mappings for secure storage.
- Support for events and functions to emit logs and execute logic.
## Usage Patterns
To accomplish tasks, structure code with a contract definition, state variables, and functions. For example, invoke this skill by providing a prompt like: "Write a Solidity contract for a simple token." Always specify the Solidity version in code, e.g., pragma solidity ^0.8.0;. Use it in loops for iterative development, such as compiling code, checking for errors, and redeploying. Integrate with testing frameworks like Hardhat or Truffle for end-to-end workflows.
## Common Commands/API
Use the solc compiler for building contracts. To compile a file: `solc --optimize --bin YourContract.sol --output-dir build/`. For ABI generation: `solc --abi YourContract.sol`. In OpenClaw, call this via API endpoints like POST /api/solidity/compile with a JSON body: {"source": "pragma solidity ^0.8.0; contract Simple {}"}. Config formats: Use a solc.json file with {"language": "Solidity", "sources": {"YourContract.sol": {"content": "..."}}}. For Ethereum interactions, set environment variables like $ETHEREUM_API_KEY for RPC nodes, then use web3.js: const web3 = new Web3(new Web3.providers.HttpProvider(`https://mainnet.infura.io/v3/${process.env.ETHEREUM_API_KEY}`)).
## Integration Notes
Integrate Solidity with OpenClaw by passing code snippets in prompts, e.g., "Compile this Solidity code: pragma solidity ^0.8.0; contract Example {}." Use Hardhat for project setup: install via `npm install --save-dev hardhat`, then run `npx hardhat compile` in your workflow. For API calls, ensure $SOLC_VERSION is set, e.g., export SOLC_VERSION=0.8.19, and use it in commands like `solc-select $SOLC_VERSION`. If deploying, reference Infura or Alchemy endpoints with auth: export ALCHEMY_API_KEY=yourkey, then connect via web3. Avoid direct blockchain interactions without error checking.
## Error Handling
When compiling, check for syntax errors like undeclared variables; use `solc --optimize YourContract.sol 2>&1` to capture output and parse for messages like "Parser error: Expected token". For runtime errors, wrap functions with require statements, e.g.: function safeTransfer(uint amount) public { require(amount > 0, "Amount must be positive"); }. In OpenClaw, handle API errors by checking response codes: if (response.status === 400) { retry with corrected code; }. Common issues: Gas limit exceeded—optimize code by removing unnecessary computations; Type mismatches—use explicit casting, e.g., uint8(myUint) = 255;. Log errors with events: event Error(string message); emit Error("Transaction failed").
## Concrete Usage Examples
1. **Write and Compile a Simple Contract**: To create a basic storage contract, prompt: "Generate Solidity code for a contract that stores a number." Result: pragma solidity ^0.8.0; contract Storage { uint public number; function set(uint _number) public { number = _number; } } Then, compile it: solc --bin Storage.sol to get bytecode for deployment.
2. **Deploy a Token Contract**: For an ERC20 token, use: "Write a Solidity ERC20 token contract." Output: pragma solidity ^0.8.0; import "OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; contract MyToken is ERC20 { constructor() ERC20("MyToken", "MTK") { _mint(msg.sender, 1000 * 10 ** 18); } } Deploy via: npx hardhat run scripts/deploy.js --network sepolia, assuming $PRIVATE_KEY is set for signing.
## Graph Relationships
- Related to cluster: blockchain (e.g., shares nodes with other blockchain skills like web3.js).
- Connected to tags: solidity (direct match), smart-contracts (for contract-specific tools), ethereum (links to Ethereum ecosystem skills).
- Outgoing links: to ethereum (for deployment), smart-contracts (for auditing tools).
- Incoming links: from programming (as a language skill), blockchain (as a sub-category).
Related in Writing & Docs
jax-development
IncludedUse this skill when the user is writing, debugging, profiling, refactoring, reviewing, benchmarking, parallelising, exporting, or explaining JAX code, or when they mention JAX, jax.numpy, jit, grad, value_and_grad, vmap, scan, lax, random keys, pytrees, jax.Array, sharding, Mesh, PartitionSpec, NamedSharding, pmap, shard_map, Pallas, XLA, StableHLO, checkify, profiler, or the JAX repo. It helps turn NumPy or PyTorch-style code into pure functional JAX, fix tracer/control-flow/shape/PRNG bugs, remove recompiles and host-device syncs, choose transforms and sharding strategies, inspect jaxpr/lowering/IR, and benchmark compiled code correctly.
nature-article-writer
IncludedDrafts, rewrites, diagnostically critiques, and style-calibrates primary research manuscripts for Nature and Nature Portfolio journals. Use when the user wants a Nature-style title, summary paragraph or abstract, introduction, results, discussion, methods, figure legends, presubmission enquiry, cover letter, reviewer response, or when a scientific draft sounds generic, jargon-heavy, structurally weak, or AI-ish and needs precise, broad-reader-friendly prose without inventing data, analyses, or references. Best for primary research articles and letters rather than reviews or press releases unless explicitly adapting one.
deckrd
IncludedDocument-driven framework that derives requirements, specifications, implementation plans, and executable tasks from goals through structured AI dialogue. Use when user says "write requirements", "create spec", "plan implementation", "derive tasks", "structure this feature", "break down into tasks", or "document this module". Also use for reverse engineering existing code into docs (/deckrd rev). Do NOT use for direct code writing — use /deckrd-coder after tasks are generated. Do NOT use when the user only wants to run or fix existing code without planning.
clinical-decision-support
IncludedGenerate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug development, clinical research, and evidence synthesis.
handling-sf-data
IncludedSalesforce data operations with 130-point scoring. Use this skill to create, update, delete, bulk import/export, generate test data, and clean up org records using sf CLI and anonymous Apex. TRIGGER when: user creates test data, performs bulk import/export, uses sf data CLI commands, needs data factory patterns for Apex tests, or needs to seed/clean records in a Salesforce org. DO NOT TRIGGER when: SOQL query writing only (use querying-soql), Apex test execution (use running-apex-tests), or metadata deployment (use deploying-metadata).
accelint-ac-to-playwright
IncludedConvert and validate acceptance criteria for Playwright test automation. Use when user asks to (1) review/evaluate/check if AC are ready for automation, (2) assess if AC can be converted as-is, (3) validate AC quality for Playwright, (4) turn AC into tests, (5) generate tests from acceptance criteria, (6) convert .md bullets or .feature Gherkin files to Playwright specs, (7) create test automation from requirements. Handles both bullet-style markdown and Gherkin syntax with JSON test plan generation and validation.