mcpField
S
solidity-development

solidity-development

github.com/pluginagentmarketplace开发1208 次安装43 周前更新
代码仓库

关于 solidity-development

面向智能合约开发者的 Solidity 开发技能,涵盖语言特性、设计模式、测试与升级方案,并提供代码示例和问题排查指引。

主要功能

  1. 01Solidity 0.8.x 语言特性
  2. 02合约设计模式
  3. 03Foundry 与 Hardhat 测试
  4. 04合约升级方案
  5. 05安全清单与问题排查

适用场景

  1. 01学习 Solidity 语言特性
  2. 02为合约设计选择模式
  3. 03使用模糊与不变量测试
  4. 04排查常见编译和安全问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/pluginagentmarketplace/custom-plugin-blockchain --skill solidity-development

安装后在 Claude Code 中输入/solidity-development确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
config.yaml
schema.json
references/
GUIDE.md
PATTERNS.md
scripts/
validate.py

详细介绍

Solidity 开发技能

掌握 Solidity 智能合约开发,涵盖设计模式、测试策略和生产环境最佳实践。

快速入门

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

涵盖主题

1. 语言特性(0.8.x)

现代 Solidity 基础知识:

  • 数据类型:值类型、引用类型、映射
  • 函数:可见性、修饰符、重载
  • 继承:菱形问题、C3 线性化
  • 自定义错误:节省 Gas 的错误处理
2. 设计模式

经过实践检验的模式:

  • CEI:检查-效果-交互
  • Factory:合约部署模式
  • Proxy:可升级合约
  • 访问控制:RBAC、Ownable
3. 测试

全面的测试策略:

  • 单元测试:Foundry、Hardhat
  • 模糊测试:基于属性的测试
  • 不变量测试:系统级属性
  • 分叉测试:主网模拟
4. 可升级性

安全的升级模式:

  • UUPS:自升级 Proxy
  • 透明模式:管理员隔离
  • Beacon:共享实现
  • Diamond:多面体

代码示例

CEI 模式
// 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 模式
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 测试
// 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);
    }
}

模式参考

模式使用场景复杂度
CEI所有状态更改低
Factory多个实例低
Clone (1167)节省 Gas 的副本中
UUPS可升级中
Diamond无限制大小高

常见陷阱

陷阱问题解决方案
栈太深>16 个变量使用结构体或辅助函数
合约太大>24KB拆分为库
重入调用后更新状态使用 CEI 模式
缺少访问控制任何人都可以调用添加修饰符

故障排除

“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

解决方案:拆分为库,使用 Diamond 模式。

安全检查清单

  • 所有提款操作都采用 CEI 模式
  • 对管理员函数进行访问控制
  • 输入验证(零地址、边界)
  • 对外部调用添加重入保护
  • 状态更改时发出事件
  • 使用自定义错误以提高 Gas 效率

CLI 命令

# 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

交叉引用

  • Bonded Agent:03-solidity-expert
  • 相关技能:ethereum-development、smart-contract-security

版本历史

版本日期更改
2.0.02025-01生产级版本,支持 Foundry 和各类模式
1.0.02024-12初始版本

评论

支持 Markdown