name: agent-credit description: 通过信用委托从Aave借款。代理人通过抵押委托人的资产来自主借款。支持借款、还款、健康检查。适用于Aave V2/V3。
Aave信用委托
使用委托信用从Aave借款。您的主钱包提供抵押品,并将借款权限委托给代理钱包。代理人随后可以在需要时自主借款——债务将计入委托人的头寸。
协议: 适用于 Aave V3 和 Aave V2 —— 信用委托的函数签名(
borrow,repay,approveDelegation,borrowAllowance)在两个版本中完全相同。只需替换V2的LendingPool和ProtocolDataProvider地址。唯一的表面区别:V3以美元(8位小数)返回抵押/债务价值,V2以ETH(18位小数)返回。健康因子安全检查在两者上均正常工作。
兼容性
- OpenClaw — 作为技能安装,代理人可自主借款
- Claude Code — 直接从Claude Code会话运行脚本
- 任何代理框架 — 纯bash + Foundry的
cast,在任何有shell的地方都能工作
与 Bankr 技能结合,用于“借款-然后-兑换”流程:通过委托借入USDC,然后使用Bankr进行兑换、跨链或部署。
信用委托工作原理
Aave V3中的信用委托将两件事分开:借款能力和委托授权。
借款能力是整体性的。 它来自您所有资产的全部抵押头寸。如果您存入价值1万美元的ETH,贷款价值比(LTV)为80%,那么您就有8000美元的借款能力——仅此而已。该借款能力不锁定于任何特定资产。
委托授权是按债务代币隔离的。 您通过调用各个VariableDebtToken上的approveDelegation()来控制代理人可以借入哪些资产以及每种资产多少额度。每种资产都有自己的债务代币合约,每次授权都是独立的。
这意味着您可以,例如:
- 存入ETH作为抵押品(为您提供广泛的借款能力)
- 授权代理人最多借入500 USDC(通过USDC VariableDebtToken)
- 授权代理人最多借入0.1 WETH(通过WETH VariableDebtToken)
- 不授权cbETH(代理人完全无法借入它)
代理人只能借入您明确授权的资产,最高至您设定的额度——但借款容量来自您的总抵押品,而非任何单一存款。
您的抵押品(整体性) 委托授权(隔离性)
┌─────────────────────────┐ ┌──────────────────────────────┐
│ $5k ETH │ │ USDC债务代币 → 代理人: 500 │
│ $3k USDC │ ───LTV───▶ │ WETH债务代币 → 代理人: 0.1 │
│ $2k cbETH │ = $8k │ cbETH债务代币 → 代理人: 0 │
│ 总计: $10k @ 80% LTV │ 容量 └──────────────────────────────┘
└─────────────────────────┘
流程
委托人(您的主钱包) 代理人钱包(被委托人)
│ │
│ 1. 向Aave提供抵押品 │
│ 2. 在VariableDebtToken上调用 │
│ approveDelegation(代理人地址, 额度) │
│ │
│ ┌─── 3. borrow(资产, │
│ │ 金额, onBehalfOf │
│ │ = 委托人) │
│ │ │
│ [债务记在您的头寸上] [代币进入代理人钱包]
│ │ │
│ └─── 4. repay(资产, │
│ 金额, onBehalfOf │
│ = 委托人) │
快速开始
先决条件
-
必须安装Foundry(
castCLI):curl -L https://foundry.paradigm.xyz | bash && foundryup -
委托人设置(由用户执行一次,非代理人):
- 向Aave V3提供抵押品(通过app.aave.com或合约)
- 在您希望代理人借入的资产的VariableDebtToken上调用
approveDelegation(代理人地址, 最大额度) - 可通过以下命令找到VariableDebtToken地址:
cast call $DATA_PROVIDER "getReserveTokensAddresses(address)(address,address,address)" $ASSET --rpc-url $RPC
-
配置技能:
mkdir -p ~/.openclaw/skills/aave-delegation cat > ~/.openclaw/skills/aave-delegation/config.json << 'EOF' { "chain": "base", "rpcUrl": "https://mainnet.base.org", "agentPrivateKey": "0x您的代理人私钥", "delegatorAddress": "0x您的主钱包地址", "poolAddress": "0xA238Dd80C259a72e81d7e4664a9801593F98d1c5", "dataProviderAddress": "0x2d8A3C5677189723C4cB8873CfC9C8976FDF38Ac", "assets": { "USDC": { "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "decimals": 6 }, "WETH": { "address": "0x4200000000000000000000000000000000000006", "decimals": 18 } }, "safety": { "minHealthFactor": "1.5", "maxBorrowPerTx": "1000", "maxBorrowPerTxUnit": "USDC" } } EOF -
验证设置:
scripts/aave-setup.sh
核心用法
检查状态(授权额度、健康因子、债务)
# 完整状态报告
scripts/aave-status.sh
# 检查特定资产的委托
scripts/aave-status.sh USDC
# 仅检查健康因子
scripts/aave-status.sh --health-only
通过委托借款
# 借入100 USDC
scripts/aave-borrow.sh USDC 100
# 借入0.5 WETH
scripts/aave-borrow.sh WETH 0.5
借款脚本自动执行:
- 检查委托授权额度(是否充足?)
- 检查委托人健康因子(借款是否安全?)
- 执行借款
- 报告结果
偿还债务
# 偿还100 USDC
scripts/aave-repay.sh USDC 100
# 偿还全部USDC债务
scripts/aave-repay.sh USDC max
还款脚本自动执行:
- 授权Pool花费代币(如果需要)
- 执行还款
- 报告剩余债务
安全系统
每次借款操作在执行前都会运行以下检查:
- 委托授权额度 — 剩余授权额度是否 >= 请求金额?
- 健康因子 — 借款后委托人的健康因子是否 >
minHealthFactor(默认1.5)? - 单笔交易上限 — 金额是否 <=
maxBorrowPerTx? - 确认 — 在发送前记录完整的操作详情
如果任何检查失败,借款将中止并显示清晰的错误信息。
⚠️ 代理人绝不能绕过安全检查。 如果用户要求代理人借款而健康因子过低,代理人应拒绝并解释原因。
功能
读取操作(无需gas)
- 检查委托授权额度 — 代理人还能借多少?
- 检查健康因子 — 委托人的头寸是否安全?
- 检查未偿债务 — 委托人在每种资产上欠多少?
- 检查可用流动性 — Aave池中是否有足够的资金可供借出?
- 解析债务代币地址 — 查找任何资产的VariableDebtToken
写入操作(需要代理人钱包中的gas)
- 借款 — 从Aave提取资金,使用委托信用
- 还款 — 返还借入的资金以减少委托人的债务
- 授权 — 授权Pool花费代币用于还款
支持的链
| 链 | 池地址 | Gas成本 |
|---|---|---|
| Base | 0xA238Dd80C259a72e81d7e4664a9801593F98d1c5 |
非常低 |
| Ethereum | 0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2 |
高 |
| Polygon | 0x794a61358D6845594F94dc1DB02A252b5b4814aD |
非常低 |
| Arbitrum | 0x794a61358D6845594F94dc1DB02A252b5b4814aD |
低 |
完整地址列表(包括债务代币)请参见deployments.md。
常见模式
代理人自筹gas
# 检查是否有足够的gas
BALANCE=$(cast balance $AGENT_ADDRESS --rpc-url $RPC)
if [ "$BALANCE" -lt "1000000000000000" ]; then # < 0.001 ETH
# 借入少量WETH用于gas
aave-borrow.sh WETH 0.005
fi
借款 + 通过Bankr兑换
# 从委托信用借入USDC
aave-borrow.sh USDC 100
# 使用Bankr兑换为ETH
bankr.sh "在Base上将100 USDC兑换为ETH"
定期定额投资(DCA)
# 代理人每周借入USDC并兑换为ETH
aave-borrow.sh USDC 100
bankr.sh "在Base上将100 USDC兑换为ETH"
安全优先的投资组合再平衡
# 始终先检查健康因子
aave-status.sh
# 仅在健康时借款
aave-borrow.sh USDC 500
配置参考
config.json字段
| 字段 | 必需 | 描述 |
|---|---|---|
chain |
是 | 链名称(base, ethereum, polygon, arbitrum) |
rpcUrl |
是 | JSON-RPC端点URL |
agentPrivateKey |
是 | 代理人钱包私钥(0x前缀) |
delegatorAddress |
是 | 委托信用的用户主钱包地址 |
poolAddress |
是 | Aave V3池合约地址 |
dataProviderAddress |
是 | Aave V3 PoolDataProvider地址 |
assets |
是 | 符号 → {地址, 小数位}的映射 |
safety.minHealthFactor |
否 | 借款后的最小健康因子(默认:1.5) |
safety.maxBorrowPerTx |
否 | 每笔交易最大借款额(默认:1000) |
safety.maxBorrowPerTxUnit |
否 | maxBorrowPerTx的单位(默认:USDC) |
环境变量(覆盖配置)
| 变量 | 覆盖项 |
|---|---|
AAVE_RPC_URL |
rpcUrl |
AAVE_AGENT_PRIVATE_KEY |
agentPrivateKey |
AAVE_DELEGATOR_ADDRESS |
delegatorAddress |
AAVE_POOL_ADDRESS |
poolAddress |
AAVE_MIN_HEALTH_FACTOR |
safety.minHealthFactor |
错误处理
| 错误 | 原因 | 解决方法 |
|---|---|---|
INSUFFICIENT_ALLOWANCE |
超出委托授权额度 | 委托人必须再次调用approveDelegation() |
HEALTH_FACTOR_TOO_LOW |
借款可能导致清算风险 | 减少金额或增加抵押品 |
AMOUNT_EXCEEDS_CAP |
达到单笔交易安全上限 | 减少金额或更新配置 |
INSUFFICIENT_LIQUIDITY |
Aave池中资金不足 | 尝试较小金额或不同资产 |
INSUFFICIENT_GAS |
代理人钱包没有原生代币 | 向代理人钱包发送gas |
EMODE_MISMATCH |
资产与委托人的eMode不兼容 | 借入同一eMode类别中的资产 |
安全
完整威胁模型和应急程序请参见safety.md。
关键规则:
- 委托人的私钥绝不能出现在此仓库、配置或脚本中 — 这是代理人的工作空间。委托人通过Aave UI或区块浏览器管理自己的部分。
- 切勿将config.json提交到版本控制 — 它包含代理人的私钥
- 切勿将
minHealthFactor设置为低于1.2 — 清算发生在1.0 - 始终限制委托额度 — 切勿批准
type(uint256).max - 监控委托人健康因子 — 如果健康因子降至2.0以下,请设置警报
- 代理人必须拒绝在安全检查失败时借款,即使被指示也要拒绝