该工具本质上是一个 LLM 驱动的模块化流水线 (Pipeline) 。它解决了开发者在进行 Web3 技术调研时的三个核心痛点:
^0.8.24 和 OpenZeppelin V5,确保代码具备现代安全性。Hardhat Ignition 部署模块与 loadFixture 驱动的单元测试,难以直接落地。该 Skill 的核心设计思想是模块化提示词工程(Modular Prompt Engineering) 。为了保证生产级代码质量,合约生成环节采用了严谨的约束:
Solidity ^0.8.24。_beforeTokenTransfer),采用 OpenZeppelin V5 的 _update 机制;权限管理强制使用 Ownable2Step,防止所有权误转。在第二阶段,工具联动生成了工程化代码:
expect().to.be.reverted 的负面用例,验证合约在非法调用下的防御能力。利用 loadFixture 优化了快照恢复,确保测试套件的高效运行。Hardhat Ignition 声明式架构。通过 buildModule 定义部署逻辑,真正实现了“配置即部署”,极大地降低了复杂协议在不同环境下的部署心智负担。 复制代码import { OpenAI } from 'openai';
import * as fs from 'fs';
import * as path from 'path';
import 'dotenv/config';const deepseek = new OpenAI({
apiKey: process.env.LLM_API_KEY,
baseURL: process.env.LLM_BASE_URL,
});// 使用稳定、代码能力极强的模型生成结构化内容
const MODEL_NAME = 'deepseek-chat'; /**
* 工业级防御工具函数:带有指数退避自动重试的大模型请求包装器
*/
async function callDeepSeekWithRetry(options, maxRetries = 3, baseDelay = 2000) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const response = await deepseek.chat.completions.create(options);
const content = response?.choices?.[0]?.message?.content;
if (content && content.trim() !== '') {
return content; // 成功获取到内容,直接返回
}
console.warn(`️ [API 预警] 响应内容为空,准备开展第 ${attempt}/${maxRetries} 次重试...`);
} catch (error) {
console.warn(`️ [API 异常] 第 ${attempt}/${maxRetries} 次请求遭遇错误: ${error.message}`);
// 如果已经是最后一次尝试,则不再等待,直接向上抛出
if (attempt === maxRetries) {
console.error(" [API 溃败] 完整错误响应:", JSON.stringify(error));
throw error;
}
}
// 计算退避延迟时间:2s -> 4s -> 8s
const delay = baseDelay * Math.pow(2, attempt - 1);
console.log(`⏳ 正在等待 ${delay / 1000} 秒后重新送入请求...`);
await new Promise(resolve => setTimeout(resolve, delay));
}
throw new Error("大模型在多次尝试后均未返回有效响应。");
}/**
* 核心 Skill 处理器:按照指定大纲全自动分段组装 Web3 技术长文
*/
async function generateFullWeb3Article(projectName, projectKeywords) {
const outputDir = path.join(process.cwd(), 'output_articles');
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, { recursive: true });
} console.log(`n [Skill 启动] 正在为热门 Web3 项目 [${projectName}] 全自动撰写深度技术长文...`); const systemPrompt = `你是一个精通 Solidity 合约开发、智能合约安全审计与 Hardhat v3 工程化交付的 Web3 技术大牛。
请严格按照用户指定的目录大纲输出技术文章。代码部分必须符合 Solidity ^0.8.24 与 OpenZeppelin V5 标准。
只输出纯粹的 Markdown 文本,绝不能带有任何 HTML/Script 网页杂质代码。`; // ────────────────────────────────────────────────────────
// 阶段 1:生成 前言 + 项目介绍 + 核心智能合约
// ────────────────────────────────────────────────────────
console.log('▶️ [Step 1/3] 正在生成:前言、项目介绍与重构后的核心智能合约源码...');
const stage1Prompt = `
请针对热门 Web3 项目 [${projectName}],编写技术文章的第一部分。
该项目的核心关键词为:【${projectKeywords}】。
请严格遵循以下大纲输出 Markdown:
# 热门 Web3 项目现代化重构实战:深度解析 ${projectName}
## 一、 前言
- 阐述该项目在当前 Web3 行业引发的热潮、行业地位与技术风向。
- 说明本次技术重构的极客初衷(将其升级至现代安全的 Solidity ^0.8.24 与 OpenZeppelin V5 规范)。
## 二、 项目介绍
- 深度拆解该项目的宏观业务逻辑、它解决了什么行业核心痛点。
- 详细剖析该协议底层最核心的 3 个业务交互流程与资产流转路径。
## 三、 核心智能合约
- 请为该项目编写一个生产级、高可读性的主智能合约 Solidity 源码(要求必须使用 Solidity ^0.8.24,且全面适配 OpenZeppelin V5,如废弃 _beforeTokenTransfer 钩子,改用 _update 实现转账拦截逻辑;权限管理采用 Ownable2Step 等)。
- 代码请包裹在 ```solidity ... ``` 块中。并在代码下方用精炼的语言对该合约的关键安全机制和优化点进行 200 字的技术点评。
`; // 替换为高抗震重试请求
const part1Text = await callDeepSeekWithRetry({
model: MODEL_NAME,
messages: [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: stage1Prompt }
],
temperature: 0.2
}); // ────────────────────────────────────────────────────────
// 阶段 2:联动生成 测试脚本 + 部署脚本
// ────────────────────────────────────────────────────────
console.log('▶️ [Step 2/3] 正在基于核心合约,联动生成 Hardhat v3 测试脚本与部署脚本...');
const stage2Prompt = `
你现在是高级测试与运维工程师。基于上面已经写好的项目背景与核心业务逻辑,请为 [${projectName}] 继续撰写文章的工程化部分。
请严格遵循以下大纲输出 Markdown(不要输出一级标题,直接从第四章开始):
## 四、 测试脚本
- 请编写一个配套该合约的、功能完整的 Hardhat v3 JavaScript 测试脚本。
- 必须引入 "@nomicfoundation/hardhat-toolbox/network-helpers" 中的 loadFixture 优化快照。
- 包含至少 3 个核心业务用例测试(必须包含异常权限或条件拦截的 expect(...).to.be.reverted 异常断言)。
- 代码请包裹在 ```javascript ... ``` 块中。
## 五、 部署脚本
- 请基于现代 Hardhat 推荐的标准,编写一个符合规范的 Hardhat Ignition 声明式 JavaScript 部署模块(使用 buildModule 定义并通过 module.exports 导出)。
- 代码请包裹在 ```javascript ... ``` 块中。
`; // 替换为高抗震重试请求
const part2Text = await callDeepSeekWithRetry({
model: MODEL_NAME,
messages: [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: `这是项目的上下文信息:n${part1Text}nn现在请为我续写第四章和第五章:n${stage2Prompt}` }
],
temperature: 0.2
}); // ────────────────────────────────────────────────────────
// 阶段 3:生成 总结
// ────────────────────────────────────────────────────────
console.log('▶️ [Step 3/3] 正在撰写收尾总结并开展全景组装...');
const stage3Prompt = `
请为全篇关于 [${projectName}] 的拆解文章撰写收尾的总结章节。
请遵循以下大纲:
## 六、 总结
- 从系统架构师和开发者的双重视角,高度总结该项目的创新亮点和代码健壮性。
- 给出开发者在基于该项目做二次开发或迁移生产环境时的工程踩坑防范建议(不少于 3 条)。
`; // 替换为高抗震重试请求
const part3Text = await callDeepSeekWithRetry({
model: MODEL_NAME,
messages: [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: stage3Prompt }
],
temperature: 0.3
}); // ────────────────────────────────────────────────────────
// 成果汇编与静态清洗写盘
// ────────────────────────────────────────────────────────
const fullArticle = `${part1Text}nn${part2Text}nn${part3Text}`;
let cleanedArticle = fullArticle;
if (fullArticle.includes('</script>') || fullArticle.includes('__next_f')) {
cleanedArticle = fullArticle.split('<script>')[0].trim();
} const outputPath = path.join(outputDir, `${projectName}_Full_Technical_Guide.md`);
fs.writeFileSync(outputPath, cleanedArticle.trim()); console.log(`n [完美出坞] 你的 Web3 技术大文已完美组装成功!`);
console.log(` 最终生成的 Markdown 文章存放在:n ${outputPath}`);
return cleanedArticle;
}// 总控执行逻辑
// async function main() {
// const targetProjectName = 'ModernPolymarketProtocol';
// const targetKeywords = '去中心化预测市场, 条件代币(Conditional Tokens), 自动做市商AMM流动性拦截, 乐观预言机(UMA)数据仲裁';// try {
// const article = await generateFullWeb3Article(targetProjectName, targetKeywords);
// console.log("n=================== 文章生成大纲快照 ===================");
// console.log(`1. 逆向解析 ${targetProjectName} (前言)`);
// console.log(`2. 项目介绍 (核心业务痛点解构)`);
// console.log(`3. 核心智能合约 (Solidity ^0.8.24 + OZ V5 源码实现)`);
// console.log(`4. 测试脚本 (Hardhat v3 JavaScript + Chai 自动化夹具)`);
// console.log(`5. 部署脚本 (Hardhat Ignition 声明式部署模块)`);
// console.log(`6. 总结 (系统闪光点与二次开发避坑指南)`);
// console.log("==========================================================");
// } catch (e) {
// console.error(" Skill 流水线中途发生不可逆崩溃:", e.message);
// }
// }
async function main() {
// 读取命令行参数
const args = process.argv.slice(2);
if (args.length < 2) {
console.log(" 参数不足,使用方式:");
console.log('node doc.js 项目名称 "关键词1,关键词2,关键词3"');
console.log('示例:node doc.js ModernPolymarketProtocol "去中心化预测市场,条件代币,AMM流动性拦截"');
process.exit(1);
} const targetProjectName = args[0];
const targetKeywords = args[1]; try {
const article = await generateFullWeb3Article(targetProjectName, targetKeywords);
console.log("n=================== 文章生成大纲快照 ===================");
console.log(`1. 逆向解析 ${targetProjectName} (前言)`);
console.log(`2. 项目介绍 (核心业务痛点解构)`);
console.log(`3. 核心智能合约 (Solidity ^0.8.24 + OZ V5 源码实现)`);
console.log(`4. 测试脚本 (Hardhat v3 JavaScript + Chai 自动化夹具)`);
console.log(`5. 部署脚本 (Hardhat Ignition 声明式部署模块)`);
console.log(`6. 总结 (系统闪光点与二次开发避坑指南)`);
console.log("==========================================================");
} catch (e) {
console.error(" Skill 流水线中途发生不可逆崩溃:", e.message);
}
}
main();
复制代码# 指令
node xxx.js mdname "key1,key2"
# 参数说明
xxx.js:对应的skill文件
mdname:输出的md文章名
"key1,key2":对应的关键字1,关键字2
# 案例
mode web3mdskill.js ousd "ousd稳定币,ousd"
复制代码node doc.js ousd "ousd稳定币,ousd" [Skill 启动] 正在为热门 Web3 项目 [ousd] 全自动撰写深度技术长文...
▶️ [Step 1/3] 正在生成:前言、项目介绍与重构后的核心智能合约源码...
▶️ [Step 2/3] 正在基于核心合约,联动生成 Hardhat v3 测试脚本与部署脚本...
▶️ [Step 3/3] 正在撰写收尾总结并开展全景组装... [完美出坞] 你的 Web3 技术大文已完美组装成功!
最终生成的 Markdown 文章存放在:
D:ProjectDocumentsAgentPolymarketAPIoutput_articlesousd_Full_Technical_Guide.md=================== 文章生成大纲快照 ===================
1. 逆向解析 ousd (前言)
2. 项目介绍 (核心业务痛点解构)
3. 核心智能合约 (Solidity ^0.8.24 + OZ V5 源码实现)
4. 测试脚本 (Hardhat v3 JavaScript + Chai 自动化夹具)
5. 部署脚本 (Hardhat Ignition 声明式部署模块)
6. 总结 (系统闪光点与二次开发避坑指南)
==========================================================




作为一个系统架构师,我认为该工具的价值在于将“技术研究”转化为“可执行的代码资产”。
Slither 或 Aderyn 等静态分析工具进行二次审计。hardhat.config.js 编译器版本与生成出的 Solidity 版本保持一致,避免编译器不兼容问题。通过这个 Skill,我们不仅是在生成文章,更是在构建一套标准化的 Web3 工程化交付流程。