返回 SC 笔记
SC Day 86

复习: Week 14总结 (Mini Lending完成 + 多链对比整合)

### 一、Mini Lending 项目完整架构回顾

2026-07-03
第四阶段:综合实战
周复习MiniLending多链技能评估部署清单

日期: 2026-07-03 方向: 总结 阶段: 第四阶段:综合实战 标签: #周复习 #MiniLending #多链 #技能评估 #部署清单


今日目标

Week 14 是整个90天计划中承上启下的关键一周: Mini Lending 项目从开发→测试→审计全流程走完,同时完成了三大智能合约平台的系统对比。今天进行全面的回顾、整合和部署准备。


核心概念

一、Mini Lending 项目完整架构回顾

1.1 架构总览

┌─────────────────────────────────────────────────────┐
│                Mini Lending Protocol                 │
│                                                     │
│  ┌──────────────┐  ┌──────────────┐  ┌───────────┐ │
│  │  MiniLending │  │ PriceOracle  │  │ InterestR │ │
│  │  (Core)      │←─│ (Interface)  │  │ ateModel  │ │
│  └──────┬───────┘  └──────────────┘  └───────────┘ │
│         │                                           │
│  Core Functions:                                    │
│  ├── deposit(token, amount)                         │
│  ├── withdraw(token, amount)                        │
│  ├── borrow(token, amount)                          │
│  ├── repay(token, amount)                           │
│  ├── liquidate(borrower, token, amount)             │
│  └── getHealthFactor(user) → uint256                │
│                                                     │
│  Security Features:                                 │
│  ├── ReentrancyGuard (nonReentrant)                 │
│  ├── CEI Pattern (Check-Effects-Interactions)       │
│  ├── SafeERC20 (处理非标代币)                        │
│  ├── Oracle Staleness Check (价格过时检查)           │
│  └── Pausable (紧急暂停)                            │
│                                                     │
│  Admin Functions:                                   │
│  ├── addMarket(token, collateralFactor, bonus)      │
│  ├── setCollateralFactor(token, factor)             │
│  └── pause() / unpause()                            │
└─────────────────────────────────────────────────────┘

1.2 项目开发进度回顾

阶段天数完成内容关键学习
设计Day 75-76架构设计、接口定义DeFi 借贷机制、清算数学
核心开发Day 77-79deposit/borrow/repay/liquidateSolidity 存储布局、预言机集成
测试Day 8224个测试用例(含 Fuzz)Foundry 测试框架、DeFi 测试方法论
Gas优化Day 82Slot Packing/immutable/uncheckedGas 测量与优化权衡
审计Day 84Slither/Aderyn + 自我审计安全思维、审计报告写作
修复Day 847个问题全部修复CEI模式、SafeERC20、价格验证

1.3 发现的问题清单

#严重度问题修复方案教训
H-01High重入漏洞(withdraw)nonReentrant + CEI永远先更新状态再做外部调用
H-02High预言机无过时检查时间戳检查 + 零值检查不要信任外部数据源
M-01Medium不安全的ERC20操作SafeERC20不假设代币标准实现
M-02Medium清算坏账风险部分清算 + 动态调整极端场景必须有预案
M-03Medium利率精度损失先乘后除数学运算顺序影响精度
L-01Low缺少零地址检查constructor中添加防御性编程
I-01Info缺少事件添加事件 + 参数检查链下监控依赖事件

二、多链对比知识整合

2.1 三链核心差异速查表

维度EVMSolanaMove(Sui)
一句话总结"全球共享计算机""高速交易引擎""安全资产管理系统"
账户模型全局状态树程序-数据分离对象模型
并行顺序执行声明式并行所有权自动并行
安全特色靠开发者+审计靠Account约束靠线性类型系统
典型漏洞重入、闪电贷签名验证缺失逻辑错误(少资源漏洞)
开发者体验最好(工具多)中等(Rust难)新语言(生态少)
适合场景金融、可组合DeFi高频交易、支付游戏、NFT、安全优先
代表协议Aave, UniswapRaydium, JupiterCetus, Scallop

2.2 知识图谱

多链知识体系
├── 底层架构 (Day 81)
│   ├── 账户模型: 全局状态 vs 分离账户 vs 对象
│   ├── 执行模型: 顺序 vs 并行
│   ├── 存储模型: 永久 vs 租金 vs 存储基金
│   ├── Gas模型: EIP-1559 vs 固定费 vs Gas Units
│   └── 编程范式: OOP vs 系统编程 vs 资源导向
│
├── 应用层 (Day 83)
│   ├── DeFi: AMM/借贷/Staking 跨链实现差异
│   ├── NFT: ERC721 vs Metaplex vs Object
│   ├── 安全: 各链特有漏洞类型
│   └── 生态: 开发者/工具链/TVL/DAU
│
└── PM决策 (Day 85)
    ├── 五维评估框架
    ├── 决策树
    ├── 真实案例分析
    ├── 多链 vs 跨链战略
    └── 桥风险评估

三、部署清单

3.1 Mini Lending 部署到 Sepolia

# 1. 环境检查
forge --version  # 确认 Foundry 安装
echo $SEPOLIA_RPC_URL  # 确认 RPC URL
echo $DEPLOYER_PRIVATE_KEY  # 确认私钥(测试网!)

# 2. 编译
forge build

# 3. 运行所有测试
forge test -vvv

# 4. Gas报告
forge test --gas-report

# 5. 部署脚本
forge script script/Deploy.s.sol:DeployMiniLending \
    --rpc-url $SEPOLIA_RPC_URL \
    --broadcast \
    --verify \
    --etherscan-api-key $ETHERSCAN_API_KEY \
    -vvvv

# 6. 验证合约
forge verify-contract <CONTRACT_ADDRESS> \
    src/MiniLending.sol:MiniLending \
    --chain sepolia \
    --etherscan-api-key $ETHERSCAN_API_KEY

部署脚本示例:

// script/Deploy.s.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "forge-std/Script.sol";
import "../src/MiniLending.sol";
import "../src/MockPriceOracle.sol";

contract DeployMiniLending is Script {
    function run() external {
        uint256 deployerKey = vm.envUint("DEPLOYER_PRIVATE_KEY");

        vm.startBroadcast(deployerKey);

        // 1. 部署 Mock 预言机 (测试网)
        MockPriceOracle oracle = new MockPriceOracle();
        oracle.setPrice(
            0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, // WETH
            2000e8
        );

        // 2. 部署 Lending 核心合约
        MiniLending lending = new MiniLending(address(oracle));

        // 3. 添加市场
        lending.addMarket(
            0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, // WETH
            7500,  // 75% collateral factor
            500    // 5% liquidation bonus
        );

        vm.stopBroadcast();

        console.log("Oracle deployed at:", address(oracle));
        console.log("MiniLending deployed at:", address(lending));
    }
}

3.2 部署前检查清单

Mini Lending Sepolia 部署检查清单:

代码准备:
□ 所有测试通过 (forge test)
□ 无 Slither High/Medium 未修复项
□ Gas 报告在合理范围
□ 所有外部调用使用 SafeERC20
□ 所有关键函数有 nonReentrant
□ 事件覆盖所有状态变更

部署参数:
□ 预言机地址确认
□ 抵押率设置合理 (50%-85%)
□ 清算奖励设置合理 (5%-15%)
□ 利率模型参数设置

安全配置:
□ Owner 地址使用多签 (测试网可用EOA)
□ 紧急暂停机制已实现
□ 参数修改上限已设置

验证:
□ 合约在 Etherscan 已验证
□ 部署后执行基本操作测试
□ 前端能正确连接

3.3 Solana/Sui Devnet 部署参考

# Solana (如果有 Anchor 程序)
solana config set --url devnet
anchor build
anchor deploy --provider.cluster devnet
# 记录 Program ID

# Sui (如果有 Move 模块)
sui client switch --env devnet
sui client publish --gas-budget 50000000
# 记录 Package ID

四、技能差距分析

4.1 当前能力评估 (Day 86)

技能领域掌握度薄弱点后续计划
Solidity 语法85%高级 AssemblyDay 87 Gas优化专题
DeFi 机制理解80%复杂衍生品持续学习
安全审计70%形式化验证Day 88 DVDF
测试方法论80%Invariant Testing补充
Gas 优化65%Assembly 优化Day 87
Solana/Anchor50%复杂 CPI、PDA需要更多实战
Move/Sui40%实际项目经验需要写完整项目
多链战略75%实际决策经验案例积累
前端集成60%wagmi v2、viem需要补强

4.2 与求职目标的差距

目标: Web3 产品经理 / 架构师

已具备:
✅ Solidity 读写能力 (超越大多数PM)
✅ DeFi 协议机制理解 (从底层到应用)
✅ 安全审计基础 (能读审计报告、使用工具)
✅ 多链架构理解 (EVM/Solana/Move)
✅ 测试方法论 (Foundry全套)
✅ Gas优化基础

还需补强:
⚠️ 真实项目部署经验 (Day 86-89 完成)
⚠️ 更多安全挑战练习 (Day 88 DVDF)
⚠️ 前端集成展示 (Day 89 作品集)
⚠️ 高级Gas优化/Assembly (Day 87)

竞争优势:
🌟 10年金融零售PM经验 + 智能合约能力 = 极稀缺
🌟 能和开发团队用代码语言沟通
🌟 理解安全风险和审计流程
🌟 多链视角(不只是以太坊)

五、Week 14 学习时间统计

日期主题时长产出
Day 81多链架构对比(上)6h技术对比文档
Day 82Mini Lending 测试+Gas优化6h24个测试用例
Day 83多链应用层对比(下)6h应用层对比文档
Day 84自我审计+Slither+修复6h审计报告+7个修复
Day 85PM视角多链选择指南6h决策框架+案例分析
Day 86周总结4h本文档
总计34h

六、下周预告 (Week 15: Day 87-90)

Day主题目标
87Gas优化专题Storage布局/Assembly/高级优化
88DVDF冲刺2-3道挑战题,巩固安全能力
89作品集整理90天所有项目整理成可展示状态
9090天总结完整复盘+知识图谱+下一步

关键要点总结

  1. Mini Lending 是一个完整的 DeFi 开发周期缩影: 从设计→开发→测试→审计→修复→部署,每个环节都有不可跳过的关键步骤。最大的收获不是代码本身,而是这个流程的肌肉记忆。

  2. 多链知识的价值在于决策能力: 不是要精通每条链的所有细节,而是能根据产品需求做出有理有据的链选择。PM需要的是"知道什么时候用什么"而非"所有都会写"。

  3. 安全不是附加功能: Mini Lending 的7个审计发现说明,即使是一个简单的借贷协议也有多个安全风险点。安全意识必须贯穿整个开发周期,而不是"写完了再检查"。

  4. 测试是信心的来源: 24个测试用例让我们在做Gas优化和修复漏洞时有信心——每次修改都有测试验证。没有测试的代码修改等于赌博。

  5. 技能差距是清晰的: 通过自我评估,明确知道还需要补强 Gas优化、安全挑战和前端集成。最后4天正好覆盖这些。


面试关联

Q: "描述你从零到一开发一个 DeFi 协议的完整流程"

回答:

以我开发的 Mini Lending 为例,完整流程是:

  1. 需求分析(1天): 确定核心功能——存款、借款、还款、清算。参考 Aave/Compound 的机制设计。
  2. 架构设计(1天): 定义接口、存储结构、预言机集成方案、利率模型。
  3. 核心开发(3天): 实现5个核心函数,关注 CEI 模式和存储优化。
  4. 测试(1天): 24个测试用例覆盖 happy path、边界条件、攻击场景、Fuzz 测试。
  5. Gas优化(0.5天): Slot Packing、immutable、unchecked,每次优化用 snapshot 量化。
  6. 审计(1天): Slither + Aderyn 自动扫描 + 手动审计清单。发现7个问题。
  7. 修复验证(0.5天): 修复每个问题并添加对应测试。
  8. 部署(0.5天): Sepolia 测试网部署 + Etherscan 验证。

整个流程最大的教训是: 安全审计发现了2个 High 级别问题,说明即使是有经验的开发者也需要多层防护(工具+人工+测试)。


参考资源

  1. Foundry Book — 完整参考手册
  2. Aave V3 Architecture — 生产级借贷协议参考
  3. DeFiLlama — 多链数据对比
  4. Smart Contract Security Field Guide — 安全实践指南