Back to list
pluginagentmarketplace

solidity-development

by pluginagentmarketplace

Blockchain developer roadmap plugin with smart contracts and DeFi patterns

1🍴 0📅 Jan 5, 2026

SKILL.md


name: solidity-development description: Master Solidity smart contract development with patterns, testing, and best practices sasmp_version: "1.3.0" version: "2.0.0" updated: "2025-01" bonded_agent: 03-solidity-expert bond_type: PRIMARY_BOND

Skill Configuration

atomic: true single_responsibility: solidity_development

Parameter Validation

parameters: topic: type: string required: true enum: [syntax, patterns, testing, upgrades, security] solidity_version: type: string default: "0.8.24"

Retry & Error Handling

retry_config: max_attempts: 3 backoff: exponential initial_delay_ms: 1000

Logging & Observability

logging: level: info include_timestamps: true track_usage: true

Solidity Development Skill

Master Solidity smart contract development with design patterns, testing strategies, and production best practices.

Quick Start

# Invoke this skill for Solidity development
Skill("solidity-development", topic="patterns", solidity_version="0.8.24")

Topics Covered

1. Language Features (0.8.x)

Modern Solidity essentials:

  • Data Types: Value, reference, mappings
  • Functions: Visibility, modifiers, overloading
  • Inheritance: Diamond problem, C3 linearization
  • Custom Errors: Gas-efficient error handling

2. Design Patterns

Battle-tested patterns:

  • CEI: Checks-Effects-Interactions
  • Factory: Contract deployment patterns
  • Proxy: Upgradeable contracts
  • Access Control: RBAC, Ownable

3. Testing

Comprehensive test strategies:

  • Unit Tests: Foundry, Hardhat
  • Fuzz Testing: Property-based testing
  • Invariant Testing: System-wide properties
  • Fork Testing: Mainnet simulation

4. Upgradability

Safe upgrade patterns:

  • UUPS: Self-upgrading proxy
  • Transparent: Admin separation
  • Beacon: Shared implementation
  • Diamond: Multi-facet

Code Examples

CEI Pattern

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract SecureVault {
    mapping(address => uint256) public balances;

    error InsufficientBalance();
    error TransferFailed();

    function withdraw(uint256 amount) external {
        // 1. CHECKS
        if (balances[msg.sender] < amount) revert InsufficientBalance();

        // 2. EFFECTS
        balances[msg.sender] -= amount;

        // 3. INTERACTIONS
        (bool ok,) = msg.sender.call{value: amount}("");
        if (!ok) revert TransferFailed();
    }
}

Factory Pattern

contract TokenFactory {
    event TokenCreated(address indexed token, address indexed owner);

    function createToken(
        string memory name,
        string memory symbol
    ) external returns (address) {
        Token token = new Token(name, symbol, msg.sender);
        emit TokenCreated(address(token), msg.sender);
        return address(token);
    }
}

Foundry Test

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import "forge-std/Test.sol";

contract VaultTest is Test {
    Vault vault;
    address alice = makeAddr("alice");

    function setUp() public {
        vault = new Vault();
        vm.deal(alice, 10 ether);
    }

    function test_Deposit() public {
        vm.prank(alice);
        vault.deposit{value: 1 ether}();

        assertEq(vault.balances(alice), 1 ether);
    }

    function testFuzz_Withdraw(uint256 amount) public {
        amount = bound(amount, 0.01 ether, 10 ether);

        vm.startPrank(alice);
        vault.deposit{value: amount}();
        vault.withdraw(amount);
        vm.stopPrank();

        assertEq(vault.balances(alice), 0);
    }

    function test_RevertWhen_InsufficientBalance() public {
        vm.prank(alice);
        vm.expectRevert(Vault.InsufficientBalance.selector);
        vault.withdraw(1 ether);
    }
}

Pattern Reference

PatternUse CaseComplexity
CEIAll state changesLow
FactoryMultiple instancesLow
Clone (1167)Gas-efficient copiesMedium
UUPSUpgradeableMedium
DiamondUnlimited sizeHigh

Common Pitfalls

PitfallIssueSolution
Stack too deep>16 variablesUse structs or helpers
Contract too large>24KBSplit into libraries
ReentrancyState after callUse CEI pattern
Missing accessAnyone can callAdd modifiers

Troubleshooting

"Stack too deep"

// Solution 1: Use struct
struct Params { uint256 a; uint256 b; uint256 c; }

// Solution 2: Block scoping
{ uint256 temp = x + y; }

// Solution 3: Internal function
function _helper(uint256 a) internal { }

"Contract size exceeds limit"

# Check contract sizes
forge build --sizes

Solutions: Split into libraries, use Diamond pattern.

Security Checklist

  • CEI pattern on all withdrawals
  • Access control on admin functions
  • Input validation (zero address, bounds)
  • Reentrancy guards on external calls
  • Event emission for state changes
  • Custom errors for gas efficiency

CLI Commands

# Development workflow
forge init                    # New project
forge build                   # Compile
forge test -vvv               # Run tests
forge coverage                # Coverage report
forge fmt                     # Format code
forge snapshot                # Gas snapshot

Cross-References

  • Bonded Agent: 03-solidity-expert
  • Related Skills: ethereum-development, smart-contract-security

Version History

VersionDateChanges
2.0.02025-01Production-grade with Foundry, patterns
1.0.02024-12Initial release

Score

Total Score

60/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon