名称: agent-credit
描述: 通过信用委托从 Aave 借款。代理通过抵押品借款实现自筹资金。支持借款、还款和健康度检查。适用于 Aave V2/V3。
使用委托信用从 Aave 借款。您的主钱包提供抵押品,并将借款能力委托给代理钱包。随后,代理可以在需要时自主借款——债务将计入委托人的头寸。
协议说明: 适用于 Aave V3 和 Aave V2——信用委托的函数签名(
borrow、repay、approveDelegation、borrowAllowance)在两个版本中完全相同。只需替换为 V2 的 LendingPool 和 ProtocolDataProvider 地址即可。唯一的表面区别是:V3 以美元(8位小数)返回抵押品/债务价值,V2 以 ETH(18位小数)返回。健康因子安全检查在两者上均可正常工作。
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(cast CLI):
bash
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
配置技能:
bash
mkdir -p ~/.openclaw/skills/aave-delegation
cat > ~/.openclaw/skills/aave-delegation/config.json << 'EOF'
{
"chain": "base",
"rpcUrl": "https://mainnet.base.org",
"agentPrivateKey": "0xYOUR_AGENT_PRIVATE_KEY",
"delegatorAddress": "0xYOUR_MAIN_WALLET",
"poolAddress": "0xA238Dd80C259a72e81d7e4664a9801593F98d1c5",
"dataProviderAddress": "0x2d8A3C5677189723C4cB8873CfC9C8976FDF38Ac",
"assets": {
"USDC": {
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"decimals": 6
},
"WETH": {
"address": "0x4200000000000000000000000000000000000006",
"decimals": 18
}
},
"safety": {
"minHealthFactor": "1.5",
"maxBorrowPerTx": "1000",
"maxBorrowPerTxUnit": "USDC"
}
}
EOF
验证设置:
bash
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
借款脚本自动执行以下操作:
1. 检查委托授权额度(是否充足?)
2. 检查委托人健康因子(借款是否安全?)
3. 执行借款
4. 报告结果
# 偿还 100 USDC
scripts/aave-repay.sh USDC 100
# 偿还全部 USDC 债务
scripts/aave-repay.sh USDC max
还款脚本自动执行以下操作:
1. 授权 Pool 合约使用代币(如果需要)
2. 执行还款
3. 报告剩余债务
每次借款操作在执行前都会运行以下检查:
minHealthFactor(默认 1.5)?maxBorrowPerTx?如果任何一项检查失败,借款操作将被中止,并显示清晰的错误信息。
⚠️ 代理绝不能绕过安全检查。 如果用户要求代理借款而健康因子过低,代理应拒绝并解释原因。
| 链 | 资金池地址 | Gas 成本 |
|---|---|---|
| Base | 0xA238Dd80C259a72e81d7e4664a9801593F98d1c5 |
非常低 |
| Ethereum | 0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2 |
高 |
| Polygon | 0x794a61358D6845594F94dc1DB02A252b5b4814aD |
非常低 |
| Arbitrum | 0x794a61358D6845594F94dc1DB02A252b5b4814aD |
低 |
完整地址列表(包括债务代币)请参阅 deployments.md。
# 检查是否有足够的 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
# 从委托信用中借入 USDC
aave-borrow.sh USDC 100
# 使用 Bankr 兑换为 ETH
bankr.sh "在 Base 上将 100 USDC 兑换为 ETH"
# 代理每周借入 USDC 并兑换为 ETH
aave-borrow.sh USDC 100
bankr.sh "在 Base 上将 100 USDC 兑换为 ETH"
# 始终先检查健康度
aave-status.sh
# 仅在健康时才借款
aave-borrow.sh USDC 500
| 字段 | 必填 | 描述 |
|---|---|---|
chain |
是 | 链名称(base、ethereum、polygon、arbitrum) |
rpcUrl |
是 | JSON-RPC 端点 URL |
agentPrivateKey |
是 | 代理钱包私钥(0x 前缀) |
delegatorAddress |
是 | 委托信用的用户主钱包地址 |
poolAddress |
是 | Aave V3 Pool 合约地址 |
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。
关键规则:
1. 委托人的私钥绝不能出现在此仓库、配置或脚本中 — 这是代理的工作空间。委托人通过 Aave UI 或区块浏览器管理其账户。
2. 切勿将 config.json 提交到版本控制 — 它包含代理的私钥
3. 切勿将 minHealthFactor 设置为低于 1.2 — 清算发生在 1.0
4. 始终限制委托授权金额 — 切勿批准 type(uint256).max
5. 监控委托人健康度 — 如果健康因子降至 2.0 以下,请设置警报
6. 代理必须拒绝在安全检查失败时借款,即使被要求执行