MilosMicun/solidity-libraries-demo
GitHub: MilosMicun/solidity-libraries-demo
演示 Solidity 库架构模式的 ETH Vault 示例项目,展示可复用逻辑与协议状态的分离设计。
Stars: 0 | Forks: 0
# Solidity 库示例
关于 Solidity 中**基于库的协议架构**的简单演示。
该项目展示了如何使用**库**将可复用的守卫逻辑与协议状态分离,同时保持安全的状态转换和可测试的行为。
使用 **Foundry** 构建。
## 概述
本仓库实现了一个支持以下功能的最小化 **ETH Vault**:
- 存款
- 取款
- 通过可复用库守卫进行余额验证
旨在演示以下架构模式:
合约 → 协议状态
库 → 可复用逻辑
测试 → 状态转换验证
这种分离提高了**代码复用性、可读性和可审计性**。
## 架构
### BalanceLib
协议使用的可复用守卫逻辑。
```
function requireBalance(uint256 available, uint256 required) internal pure
The function reverts with a custom error if a user attempts to withdraw more than their balance.
Key properties:
implemented as an internal Solidity library
uses custom errors for gas efficiency
reusable across multiple contracts
Vault
Protocol contract responsible for:
holding ETH custody
tracking user balances
executing deposits and withdrawals
State:
mapping(address => uint256) public balances;
Conceptual invariant:
sum(balances) == address(vault).balance
Withdrawals follow the Checks → Effects → Interactions pattern to prevent reentrancy.
Testing
Tests are written using Foundry.
Covered scenarios:
deposit increases user balance
withdraw decreases user balance and transfers ETH
withdraw above balance reverts with InsufficientBalance
Run tests with:
forge test -vv
Project Structure
src/
BalanceLib.sol
Vault.sol
test/
Vault.t.sol
Key Concepts Demonstrated
Solidity libraries
using for pattern
custom errors
protocol accounting vs EVM balance
checks-effects-interactions
Foundry testing workflow
Build & Test
forge build
forge test
forge fmt
Why Libraries?
Libraries allow protocol logic to be reused safely across contracts without duplicating code.
Benefits:
smaller attack surface
easier audits
consistent validation logic
cleaner contract architecture
License
MIT
```
标签:Checks-Effects-Interactions, DeFi, EVM, Foundry, Gas优化, Solidity, Using-for, Web3, 代码复用, 以太坊, 余额验证, 区块链开发, 协议架构, 单元测试, 存款取款, 安全模式, 库模式, 智能合约, 自定义错误, 金库协议, 防重入攻击