Dapp-Learning 深入 Aave V2:GenericLogic 用户状态计算与健康因子验证全解
示例工程区块链【免费下载链接】Dapp-LearningDapp learning project for developers at all stages. Becoming and cultivating sovereign individuals. Nonprofit organization.项目地址https://gitcode.com/gh_mirrors/da/Dapp-Learning点击查看免费下载导读本文基于 Dapp-Learning 仓库中 Aave 合约源码解析系列 的第 5 篇文档聚焦 Aave V2 协议中最核心的通用逻辑库GenericLogic。该库负责聚合计算用户的抵押、债务、平均 LTV、平均清算阈值与健康因子Health Factor并在每次减少抵押操作前执行安全验证保证用户在质押/借贷过程中的用户级状态一致。读完本文你将掌握健康因子与可借贷额度的精确计算公式、balanceDecreaseAllowed的完整决策链路以及如何通过getUserAccountData链上接口在实际项目中复现这些计算。一、GenericLogic 在 Aave 协议中的定位1.1 协议整体架构中的计算中枢从 合约系列导读 可以看到Aave V2 协议由一组明确分工的合约构成LendingPool用户交互入口负责deposit / borrow / repay / withdraw / liquidationCall / flashLoan等操作LendingPoolCollateralManager抵押品管理通过delegatecall执行具体清算AToken / DebtToken计息代币与债务代币GenericLogic用户级状态计算库被上述多个模块共享调用。GenericLogic 本身是 Soliditylibrary库合约不存储任何状态只提供internal纯函数/视图函数供调用方在继承链中直接复用。它的两大职责是计算汇总用户在所有储备资产上的抵押价值、债务价值、平均 LTV、平均清算阈值与健康因子验证在用户试图减少抵押withdraw或关闭抵押品开关时模拟减少后的健康因子判断是否允许操作。从源码结构可以推断凡是涉及用户整体风险状态的判断如 LendingPool.withdraw、LendingPoolCollateralManager.liquidationCall最终都会落到 GenericLogic 的计算函数上。1.2 与用户配置UserConfiguration的关系GenericLogic 的计算输入之一是DataTypes.UserConfigurationMap即 用户配置。该配置是一个 256 位的位图bitmap每两位代表一种资产的配置状态第一位表示用户是否将该资产作为抵押第二位表示用户是否在该资产上有借贷组合值00无抵押无借贷、01无抵押有借贷、10有抵押无借贷、11有抵押有借贷。由于uint256共 256 位最多可表达128种资产的配置。GenericLogic 中的calculateUserAccountData正是利用userConfig.isUsingAsCollateralOrBorrowing(i)跳过用户未使用的资产从而大幅减少遍历开销。而balanceDecreaseAllowed第一步调用的userConfig.isBorrowingAny()则通过掩码0x5555...每个资产第二位为 1、第一位为 0快速判断用户是否有任何借贷记录。二、健康因子Health Factor计算原理2.1 核心公式健康因子是整个 Aave 风险体系的中枢指标其定义来自 calculateHealthFactorFromBalances健康因子 (总质押资产 × 清算阈值) / 当前债务总值对应 Solidity 实现function calculateHealthFactorFromBalances( uint256 totalCollateralInETH, uint256 totalDebtInETH, uint256 liquidationThreshold ) internal pure returns (uint256) { if (totalDebtInETH 0) return uint256(-1); return (totalCollateralInETH.percentMul(liquidationThreshold)).wadDiv(totalDebtInETH); }三个关键细节无债务时返回uint256(-1)用户没有借贷时健康因子为最大值类型上限表示状态绝对健康也保证了后续 HEALTH_FACTOR_LIQUIDATION_THRESHOLD的比较恒成立percentMul语义percentMul(x, p)等价于x * p / 10^4即按百分比缩放的定点乘法。清算阈值liquidationThreshold以百分数形式存储如85表示 85%因此totalCollateralInETH.percentMul(liquidationThreshold)得到的是触发清算时的抵押价值上限wadDiv语义WAD 定点除法10^18精度。totalDebtInETH与抵押价值均为 WAD 精度ETH 计价除法结果依然保持 WAD 定点格式保证链上计算的精度一致性。相关定点数学约定可参考 合约系列中 WAD/RAY 的使用 与 MathUtils 复利计算。2.2 阈值常量HEALTH_FACTOR_LIQUIDATION_THRESHOLDbalanceDecreaseAllowed最终返回return healthFactorAfterDecrease GenericLogic.HEALTH_FACTOR_LIQUIDATION_THRESHOLD;即减少抵押后的健康因子不得低于清算阈值通常为 1。当健康因子低于 1 时任何用户都可能通过liquidationCall清算该头寸这正是 LendingPool 清算流程 与 LendingPoolCollateralManager.liquidationCall 的触发前提。清算人偿还部分债务后按清算奖励比例liquidationBonus如 DAI 的 5% 对应合约值105%获得折价抵押品。2.3 用户账户数据的完整聚合calculateUserAccountData在 LendingPoolCollateralManager 文档 中同样收录了calculateUserAccountData这是 GenericLogic 最核心的聚合函数balanceDecreaseAllowed正是通过它获取用户当前抵押与债务总量的。其计算流程若userConfig.isEmpty()直接返回(0, 0, 0, 0, uint256(-1))——无抵押无债务健康因子为最大值遍历reservesCount种储备资产跳过用户未使用无抵押且无借贷的资产对用作抵押的资产读取aToken余额含累计利息的本息总额、单位价格折算成 ETH 价值并累加至totalCollateralInETH同时以ETH 价值 × 该资产 LTV/清算阈值的方式累加加权项对有借贷的资产分别读取stableDebtToken与variableDebtToken余额按价格折算成 ETH 价值累加至totalDebtInETH加权平均avgLtv Σ(value_i × ltv_i) / totalCollateralInETHavgLiquidationThreshold同理最后调用calculateHealthFactorFromBalances计算健康因子。返回的五元组(totalCollateralInETH, totalDebtInETH, avgLtv, avgLiquidationThreshold, healthFactor)与 ILendingPool.getUserAccountData 的返回值一一对应可见协议对外暴露的用户数据正是由 GenericLogic 计算得出的。2.4 可借贷额度calculateAvailableBorrowsETH与健康因子并列的另一个关键指标是用户还能借多少钱公式为可借贷额度 (用户总质押资产 × 借贷系数 LTV) - 已借贷资产总值实现如下function calculateAvailableBorrowsETH( uint256 totalCollateralInETH, uint256 totalDebtInETH, uint256 ltv ) internal pure returns (uint256) { uint256 availableBorrowsETH totalCollateralInETH.percentMul(ltv); if (availableBorrowsETH totalDebtInETH) { return 0; } availableBorrowsETH availableBorrowsETH.sub(totalDebtInETH); return availableBorrowsETH; }两点说明ltvLoan To Value即借贷系数表示抵押资产可借出的最大比例如 75%。它与清算阈值如 80%是两个不同的风险参数LTV 决定能借多少清算阈值决定何时被清算当totalCollateralInETH × LTV小于已有债务时返回0即用户已无剩余借贷空间防止出现负值。三、balanceDecreaseAllowed减少抵押的安全闸门3.1 函数定位与入参balanceDecreaseAllowed是一个view函数用于检查用户质押金是否可以减少。它的完整签名含参数注释function balanceDecreaseAllowed( address asset, // 资产地址, 比如 Dai, USDT address user, // 用户地址 uint256 amount, // 减少的存款金额数量 mapping(address DataTypes.ReserveData) storage reservesData, // 质押资产配置信息 DataTypes.UserConfigurationMap calldata userConfig, // 用户配置信息 mapping(uint256 address) storage reserves, // 所有质押资产的配置信息 uint256 reservesCount, // 所有质押资产的配置信息总个数 address oracle // oracle 地址 ) external view returns (bool)其中reservesData、reserves、reservesCount共同描述了储备资产集合ReserveData的具体字段配置、流动性指数、债务指数、利率、各 token 地址、储备 ID 等可参考 DataTypes.sol。oracle则通过IPriceOracleGetter(oracle).getAssetPrice(asset)获取资产价格用于把减少的金额折算成 ETH 价值。3.2 决策链路逐层拆解整个函数的验证逻辑可以归纳为五个渐进的关卡关卡 1无风险前置判断直接放行if (!userConfig.isBorrowingAny() || !userConfig.isUsingAsCollateral(reservesData[asset].id)) { return true; }用户没有任何借贷记录减少抵押不会影响任何债务头寸直接允许用户未将该资产用作抵押该资产与借贷风险无关直接允许。关卡 2清算阈值为 0永不清算(, vars.liquidationThreshold, , vars.decimals, ) reservesData[asset].configuration.getParams(); if (vars.liquidationThreshold 0) { return true; }从储备配置中读取清算阈值与精度。若该资产的清算阈值为0表示它永远不会触发清算例如未被授权作为抵押的资产即使该资产被用于借贷也直接放行。getParams()返回的配置位含义LTV、清算阈值、清算奖励、精度、激活/冻结/借贷开关等可参见 ReserveConfiguration 位图布局。关卡 3无债务则放行(vars.totalCollateralInETH, vars.totalDebtInETH, , vars.avgLiquidationThreshold, ) calculateUserAccountData(user, reservesData, userConfig, reserves, reservesCount, oracle); if (vars.totalDebtInETH 0) { return true; }调用calculateUserAccountData获取用户当前抵押总额、债务总额与平均清算阈值。若债务为 0减少抵押不影响偿债能力直接放行。关卡 4抵押品不能归零vars.amountToDecreaseInETH IPriceOracleGetter(oracle).getAssetPrice(asset).mul(amount).div(10**vars.decimals); vars.collateralBalanceAfterDecrease vars.totalCollateralInETH.sub(vars.amountToDecreaseInETH); if (vars.collateralBalanceAfterDecrease 0) { return false; }先把待减少金额按资产精度与预言机价格折算成 ETH 价值再用当前抵押总额 − 减少额得到减少后的抵押余额。只要有借贷就不允许抵押品归零——即使减少后健康因子仍达标零抵押意味着协议无法再对该头寸提供任何保障。关卡 5模拟减少后的健康因子vars.liquidationThresholdAfterDecrease vars .totalCollateralInETH .mul(vars.avgLiquidationThreshold) .sub(vars.amountToDecreaseInETH.mul(vars.liquidationThreshold)) .div(vars.collateralBalanceAfterDecrease); uint256 healthFactorAfterDecrease calculateHealthFactorFromBalances( vars.collateralBalanceAfterDecrease, vars.totalDebtInETH, vars.liquidationThresholdAfterDecrease ); return healthFactorAfterDecrease GenericLogic.HEALTH_FACTOR_LIQUIDATION_THRESHOLD;这是全文最精妙的计算注释中的变量推演如下totalCollateralInETH × avgLiquidationThreshold当前所有抵押资产达到清算阈值时的价值上限记为MamountToDecreaseInETH × liquidationThreshold被减少的那部分抵押所对应的清算阈值价值记为N(M − N) / collateralBalanceAfterDecrease减少后剩余抵押资产的加权平均清算阈值。之所以不能简单沿用原avgLiquidationThreshold是因为被减少的资产asset与用户整体抵押组合的清算阈值不同减少后组合的加权均值会发生变化必须重新推导。得到新阈值后再代入健康因子公式判断其是否仍不低于HEALTH_FACTOR_LIQUIDATION_THRESHOLD。3.3 实际调用场景balanceDecreaseAllowed是view函数本身不修改状态它被上层交易逻辑用于预检。从 LendingPool.withdraw 的流程看withdraw会调用ValidationLogic.validateWithdraw其内部最终调用balanceDecreaseAllowed完成同样的模拟校验只有返回true时才会继续执行updateState()、updateInterestRates()、aToken.burn()等状态变更。这也印证了 GenericLogic 的定位——在一切涉及用户风险状态的变更前先以视图方式完成假设推演从机制上杜绝把用户推向可清算状态的操作。四、定点数学WAD / RAY / 百分比运算的工程细节GenericLogic 三个函数的精度处理依赖 Aave 的WadRayMath库percentMul、wadDiv。理解其单位约定有助于读懂所有公式单位数值典型用途WAD10^18ETH 计价的价值量、代币数量相关计算RAY10^27利率、流动性指数、债务指数等比例/指数值百分比percent以10^4为基LTV、清算阈值、清算奖励等百分数参数percentMul(x, p)x * p / 10^4用于抵押价值 × LTV/清算阈值这类百分比缩放wadDiv(a, b)a * 10^18 / bWAD 精度除法用于健康因子两个 WAD 值相除后再放大回 WAD 精度rayMul / rayDivRAY 精度下的乘除广泛用于指数累计如 ReserveLogic 的指数更新 与 AToken 余额的本息换算。在 MathUtils 复利计算 中可以看到 RAY 精度的典型用法由于 Solidity 不支持指数运算复利(1x)^n采用二项式近似展开取前三项牺牲极小精度换取 gas 大幅下降——这与 GenericLogic 追求gas 友好且结果可复现的工程风格一脉相承。五、链上复现与实践验证5.1 通过getUserAccountData查询真实用户状态协议把 GenericLogic 的计算结果通过ILendingPool.getUserAccountData对外暴露见 ILendingPool.solfunction getUserAccountData(address user) external view returns ( uint256 totalCollateralETH, uint256 totalDebtETH, uint256 availableBorrowsETH, uint256 currentLiquidationThreshold, uint256 ltv, uint256 healthFactor );仓库 graph/scripts/lendingpool.ts 给出了基于 Hardhat ethers 的查询示例const lendingPool await ethers.getContractAt(ILendingPool, 0x8dff5e27ea6b7ac08ebfdf9eb090f32ee9a30fcf); // user data let useraccount await lendingPool.getUserAccountData(userAddress); console.log(userdata: , useraccount); console.log(healthFactor: , useraccount.healthFactor.toString()); // returns the configuration of the user across all the reserves. let userConfiguration await lendingPool.getUserConfiguration(userAddress); // returns the list of initialized reserves. let reservesList await lendingPool.getReservesList(); // returns the state and configuration of the reserve let asset reservesList[0]; let reserveData await lendingPool.getReserveData(asset);将返回的healthFactor与本文公式手工推算值对照即可验证对 GenericLogic 的理解。注意链上返回的所有比率类数据均为 RAY 精度10^27读取时需按该精度解析。5.2 复现balanceDecreaseAllowed的模拟逻辑在集成或审计场景中可在链下复现第 3.2 节的五步推演判断isBorrowingAny与isUsingAsCollateral可由getUserConfiguration返回的位图解析从getReserveData(asset)读取该资产的清算阈值与精度调getUserAccountData拿到totalCollateralETH、totalDebtETH、currentLiquidationThreshold用预言机价格把amount折算为 ETH计算减少后抵押余额拒绝归零按公式重算平均清算阈值与健康因子与1HEALTH_FACTOR_LIQUIDATION_THRESHOLD比较。任何减少后健康因子 1的操作都会被协议拒绝这正是用户永远不会被自己的一笔withdraw直接送进清算区间的机制保证。六、总结GenericLogic 的三个核心函数一览函数作用核心公式调用方balanceDecreaseAllowed校验减少抵押是否安全减少后 HF ≥ 1且抵押不为 0withdraw、关闭抵押品开关等预检calculateHealthFactorFromBalances计算健康因子(抵押 × 清算阈值) / 债务被前两者及清算流程复用calculateAvailableBorrowsETH计算剩余可借额度抵押 × LTV − 债务非负用户借贷能力展示与借贷校验calculateUserAccountData聚合用户全量风险数据遍历各资产加权汇总上述函数的公共数据底座收录于 LendingPoolCollateralManager 文档综上GenericLogic 用一组纯计算 视图校验的函数把 Aave 最复杂的用户级风险状态收敛为三个可复现的公式。无论你是要接入 Aave 构建借贷聚合器、编写清算机器人还是审计协议的抵押安全边界5-GenericLogic.md 与本文梳理的计算链路都是最直接的参考资料更完整的协议骨架可继续阅读 合约系列导读 及 Aave 白皮书解析。赞分享示例工程区块链【免费下载链接】Dapp-LearningDapp learning project for developers at all stages. Becoming and cultivating sovereign individuals. Nonprofit organization.项目地址https://gitcode.com/gh_mirrors/da/Dapp-Learning点击查看免费下载相关推荐OpenTelemetry-Go 指南在 Go 应用中实现分布式追踪、指标采集与遥测导出OpenTelemetry Go 指南在 Go 应用中实现分布式追踪、指标采集与遥测导出 导读 本文以当前仓库GitHub 加速计划 / vc / vclu示例工程区块链Uniswap V2 Interface 用户交互流程与 Redux 状态追踪详解Dapp-LearningUniswap V2 Interface 用户交互流程与 Redux 状态追踪详解Dapp Learning 本文以 Dapp Learning 仓库中 U示例工程区块链Apache DataFusion Agent 与开发者贡献指南从环境搭建、质量检查到提交 PR 的完整工作流Apache DataFusion Agent 与开发者贡献指南从环境搭建、质量检查到提交 PR 的完整工作流 导读本文以 Apache DataFusio示例工程区块链上一篇3分钟快速上手用timeline-vuejs打造专业级时间轴应用下一篇终极Vue时间轴组件指南5分钟打造专业级时间线应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

上下行数据交互分类清单:工业物联网数据治理与落地指南

上下行数据交互分类清单:工业物联网数据治理与落地指南

1. 项目概述与分类动机1.1 一次“数据梳理”引发的刚需如果你在工厂里待过一段时间,一定会遇到这样的场景:设备改造完成后,电气工程师报上来一堆点位表,IT那边催着要数据字典,平台开发的同事又在问“哪些数据需要实时入…

2026/10/13 2:41:33 阅读更多 →
Trae 国际版下载后 API 通道怎么配?把 Base URL 改到 TaoToken 的完整验证流程

Trae 国际版下载后 API 通道怎么配?把 Base URL 改到 TaoToken 的完整验证流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 2:41:33 阅读更多 →
KernelSU Android Root 实战指南:LKM 还是 GKI?安装流程与避坑一次讲清

KernelSU Android Root 实战指南:LKM 还是 GKI?安装流程与避坑一次讲清

KernelSU Android Root 实战指南:LKM 还是 GKI?安装流程与避坑一次讲清 【免费下载链接】KernelSU A Kernel based root solution for Android 项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU 刷 root 最容易翻车的场景是这样的&…

2026/10/13 2:40:33 阅读更多 →

最新新闻

基于模型的测试(MBT)实战:状态机建模与用例自动生成

基于模型的测试(MBT)实战:状态机建模与用例自动生成

1. 为什么我会推荐把MBT放进测试技术栈1.1 传统用例设计的三道坎做测试这行时间长了,你会慢慢发现一个有意思的现象:真正让人头疼的不是测试执行,而是测试设计。需求评审完了,开发方案定了,接下来就是用例设计。但用例…

2026/10/13 15:09:41 阅读更多 →
从数据抓取到统计回测:足球数据下载搜索统计系统设计

从数据抓取到统计回测:足球数据下载搜索统计系统设计

简介:这套面向足球爱好者和彩票玩家的数据处理套件,围绕赔率、盘口、竞彩数据,提供下载、检索与统计能力,适合跟踪赛事动态、辅助投注决策的用户。压缩包共18个文件、约1.53MB,exe主程序承担下载与查询核心工作&#x…

2026/10/13 15:09:41 阅读更多 →
PaperSpine 本地参考文献摄入(Local Reference Ingestion)实战指南:local-first 文献索引机制与源码级解析

PaperSpine 本地参考文献摄入(Local Reference Ingestion)实战指南:local-first 文献索引机制与源码级解析

AI 技能AI 写作人工智能深度研究AI 应用 【免费下载链接】PaperSpine PaperSpine5 — local-first, evidence-bound paper research, writing, figures, review and delivery. Download: https://wubing2023.github.io/PaperSpine/v5/ 项目地址: https://gitcode.co…

2026/10/13 15:09:41 阅读更多 →
AI如何“看懂“屏幕?typesafe-computer-use五步决策循环完全解析

AI如何“看懂“屏幕?typesafe-computer-use五步决策循环完全解析

【免费下载链接】typesafe-computer-use Computer use for about $0.0002 a step: OCR the screen, classify the next action with TypeSafe, click. macOS. 项目地址: https://gitcode.com/gh_mirrors/ty/typesafe-computer-use 点击查看 免费下载 typesafe-comp…

2026/10/13 15:09:41 阅读更多 →
Rune主题与外观定制:从主题包到壁纸的5个快速美化技巧

Rune主题与外观定制:从主题包到壁纸的5个快速美化技巧

【免费下载链接】rune the development environment for pros 项目地址: https://gitcode.com/gh_mirrors/rune13/rune 点击查看 免费下载 Rune 是一款面向专业开发者的键盘驱动 IDE,它的主题与外观定制能力远超想象:内置 16 个高质量主题、…

2026/10/13 15:09:41 阅读更多 →
掌握新一代AI工具:从提示词设计到工作流搭建的硬技能

掌握新一代AI工具:从提示词设计到工作流搭建的硬技能

1. 为什么“会用AI工具”正在变成一项硬技能 这两年我身边做开发的朋友、做设计的朋友、甚至做运营和行政的朋友,都在聊同一件事:AI工具怎么用才能真正落到工作里。不是那种“打开网页问一句、复制答案”的浅层玩法,而是把它当成一个能持续产…

2026/10/13 15:08:40 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →