DeFi(去中心化金融)介绍
DeFi(去中心化金融)介绍
DeFi(Decentralized Finance,去中心化金融)是基于区块链和智能合约构建的开放金融系统。它无需中间商,任何人都可以访问金融服务。
什么是 DeFi
传统金融体系依赖银行、证券公司、保险公司等中心化机构提供服务。这些机构:
- 控制着用户资金
- 设置准入门槛(KYC、最低存款等)
- 收取中间费用
- 在某些国家受到严格管制
DeFi 的目标是通过智能合约重建这些金融服务,使其:
- 无需许可:任何人都可以访问,无需身份验证
- 透明:所有代码和交易公开可查
- 自我托管:用户始终控制自己的资金
- 可组合:不同协议可以像积木一样组合使用
DeFi 核心协议类型
1. 去中心化交易所(DEX)
DEX 允许用户直接通过智能合约交换代币,无需中心化托管。
自动做市商(AMM)
Uniswap 首创了 AMM 模型,通过数学公式确定价格:
x × y = k(恒定乘积公式)其中 x 和 y 是流动性池中两种代币的数量,k 是常数。
// Uniswap V2 核心交换逻辑(简化版)function swap( uint256 amount0Out, uint256 amount1Out, address to) external { (uint112 _reserve0, uint112 _reserve1,) = getReserves();
// 检查滑点 uint256 balance0 = IERC20(token0).balanceOf(address(this)); uint256 balance1 = IERC20(token1).balanceOf(address(this));
uint256 amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0; uint256 amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0;
// 验证 k 不变量(减去 0.3% 手续费) require( (balance0 * 1000 - amount0In * 3) * (balance1 * 1000 - amount1In * 3) >= uint256(_reserve0) * _reserve1 * 1000**2 );
IERC20(token0).transfer(to, amount0Out); IERC20(token1).transfer(to, amount1Out);}主流 DEX
| DEX | 特点 | 适用场景 |
|---|---|---|
| Uniswap V3 | 集中流动性,资金利用率高 | 主流代币交换 |
| Curve | 专为稳定币优化,低滑点 | 稳定币/同类资产交换 |
| Balancer | 支持多代币池,自定义权重 | 指数化投资组合 |
| dYdX | 订单簿模式,Layer2 | 衍生品交易 |
与 DEX 交互
const { ethers } = require('ethers');
// Uniswap V3 SwapRouterconst SWAP_ROUTER = '0xE592427A0AEce92De3Edee1F18E0157C05861564';const SWAP_ROUTER_ABI = [...]; // Uniswap V3 Router ABI
const router = new ethers.Contract(SWAP_ROUTER, SWAP_ROUTER_ABI, signer);
// 精确输入交换:用 ETH 换 USDCconst params = { tokenIn: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH tokenOut: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC fee: 3000, // 0.3% 费率 recipient: signer.address, deadline: Math.floor(Date.now() / 1000) + 1800, // 30分钟后过期 amountIn: ethers.parseEther('1'), // 1 ETH amountOutMinimum: ethers.parseUnits('1800', 6), // 最少收到 1800 USDC(防滑点) sqrtPriceLimitX96: 0};
const tx = await router.exactInputSingle(params, { value: ethers.parseEther('1') // 发送 ETH});await tx.wait();2. 借贷协议
Aave
Aave 是最大的去中心化借贷协议之一:
// 与 Aave V3 交互interface IPool { // 存入资产(赚取利息) function supply( address asset, uint256 amount, address onBehalfOf, uint16 referralCode ) external;
// 借款 function borrow( address asset, uint256 amount, uint256 interestRateMode, // 1=固定利率, 2=浮动利率 uint16 referralCode, address onBehalfOf ) external;
// 还款 function repay( address asset, uint256 amount, uint256 interestRateMode, address onBehalfOf ) external returns (uint256);}
// 闪电贷interface IFlashLoanReceiver { function executeOperation( address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums, // 闪电贷手续费 address initiator, bytes calldata params ) external returns (bool);}健康因子(Health Factor)
借贷协议使用健康因子衡量账户风险:
健康因子 = (抵押品价值 × 清算门槛) / 借款总额
健康因子 < 1 → 触发清算3. 稳定币
算法稳定币(DAI)
MakerDAO 的 DAI 是最著名的去中心化稳定币,通过超额抵押 ETH 来维持 1:1 美元锚定。
// 铸造 DAI 需要抵押 ETHinterface IMakerDAO { // 存入 ETH 并铸造 DAI function open(bytes32 ilk, address usr) external returns (uint256 cdp); function lock(address manager, uint256 cdp, uint256 wad) external; function draw(address manager, address jug, address daiJoin, uint256 cdp, uint256 wad) external;}主流稳定币对比
| 稳定币 | 类型 | 发行方 | 特点 |
|---|---|---|---|
| USDT | 中心化 | Tether | 最广泛使用 |
| USDC | 中心化 | Circle | 合规,可冻结 |
| DAI | 去中心化 | MakerDAO | 超额抵押,抗审查 |
| FRAX | 部分算法 | Frax Finance | 混合机制 |
4. 流动性挖矿(Yield Farming)
流动性挖矿是 DeFi 的重要激励机制,用户提供流动性获得代币奖励:
// 简化的流动性挖矿合约contract LiquidityMining { IERC20 public stakingToken; // 质押代币(LP Token) IERC20 public rewardToken; // 奖励代币 uint256 public rewardRate; // 每秒奖励数量
mapping(address => uint256) public stakedBalance; mapping(address => uint256) public rewards; mapping(address => uint256) public lastUpdateTime;
uint256 public rewardPerTokenStored; uint256 public totalStaked;
function stake(uint256 amount) external updateReward(msg.sender) { totalStaked += amount; stakedBalance[msg.sender] += amount; stakingToken.transferFrom(msg.sender, address(this), amount); }
function withdraw(uint256 amount) external updateReward(msg.sender) { totalStaked -= amount; stakedBalance[msg.sender] -= amount; stakingToken.transfer(msg.sender, amount); }
function claimReward() external updateReward(msg.sender) { uint256 reward = rewards[msg.sender]; rewards[msg.sender] = 0; rewardToken.transfer(msg.sender, reward); }
modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); lastUpdateTime[block.timestamp]; rewards[account] = earned(account); _; }}5. 收益聚合器
Yearn Finance 等收益聚合器自动将资金部署到最高收益的策略中:
用户存入 USDC → Yearn 策略合约 → Aave 借贷(当前年化 5%) → Compound 借贷(当前年化 4%) → Curve 流动性(当前年化 8%) ← 自动选择最高收益DeFi 关键概念
TVL(总锁定价值)
TVL 是衡量 DeFi 协议规模的主要指标,表示锁定在协议中的资产总价值。
可在 DeFiLlama 查看各协议 TVL 排行。
APY vs APR
- APR(年化利率):不考虑复利
- APY(年化收益率):考虑复利后的实际年收益
APY = (1 + APR/n)^n - 1n = 每年复利次数无常损失(Impermanent Loss)
为 AMM 提供流动性时,如果代币价格比例发生变化,LP 的实际收益可能低于单纯持币:
无常损失 = 2 × √(价格比率) / (1 + 价格比率) - 1
例如:如果 ETH 价格翻倍无常损失 ≈ -5.7%(相比持有)套利与 MEV
MEV(最大可提取价值)是矿工/验证者通过重新排序、插入或删除交易获得的利润。
常见 MEV 类型:
- 三明治攻击:在用户大额交易前后插入交易
- 清算套利:抢先清算即将被清算的头寸
- DEX 套利:利用不同 DEX 之间的价格差异
主要 DeFi 协议
| 协议 | 类型 | TVL | 特点 |
|---|---|---|---|
| Uniswap | DEX | 数十亿 | AMM 先驱 |
| Aave | 借贷 | 数十亿 | 闪电贷发明者 |
| Curve | DEX | 数十亿 | 稳定币专家 |
| MakerDAO | 稳定币 | 数十亿 | DAI 发行方 |
| Compound | 借贷 | 数亿 | 流动性挖矿先驱 |
| Yearn | 聚合器 | 数亿 | 自动化收益 |
| Lido | 质押 | 数百亿 | ETH 流动性质押 |
DeFi 风险
1. 智能合约风险
代码漏洞可能导致资金损失,如历史上的多次黑客攻击事件。
降低风险:
- 选择经过多次审计的老牌协议
- 从小额开始,测试水温
- 关注漏洞赏金和安全报告
2. 流动性风险
流动性不足时,大额交易会产生高滑点,或在紧急情况下无法提款。
3. 预言机风险
依赖外部价格数据的协议可能因预言机被操纵而遭受攻击。
4. 监管风险
各国对 DeFi 的监管态度不一,存在政策变化风险。
如何开始使用 DeFi
- 准备钱包:安装 MetaMask 或 Rabby Wallet
- 获取 ETH:在中心化交易所购买并提现到钱包
- 选择网络:以太坊主网或 Arbitrum/Optimism(低 Gas)
- 从稳定协议开始:如 Aave 存入稳定币赚取利息
// 简单示例:查询 Aave 利率const AAVE_POOL_DATA_PROVIDER = '0x7B4EB56E7CD4b454BA8ff71E4518426369a138a3';
const reserveData = await provider.call({ to: AAVE_POOL_DATA_PROVIDER, data: aaveInterface.encodeFunctionData('getReserveData', [USDC_ADDRESS])});
const decoded = aaveInterface.decodeFunctionResult('getReserveData', reserveData);const liquidityRate = decoded[5]; // 存款年化利率(Ray 单位)const apy = (Number(liquidityRate) / 1e27) * 100; // 转换为百分比console.log(`USDC 存款 APY: ${apy.toFixed(2)}%`);总结
DeFi 代表了金融基础设施的一次重大创新:
- 去中心化:无需信任中间商
- 可组合性:不同协议可以无缝组合(DeFi 乐高)
- 全球可访问:7×24 小时,无国界
- 透明:所有规则写在代码里
核心协议包括:DEX(Uniswap、Curve)、借贷(Aave、Compound)、稳定币(DAI)、收益聚合(Yearn)。
在参与 DeFi 前,务必充分了解相关风险,从小额开始,选择经过充分审计的知名协议。