PiHiker/arkapi

GitHub: PiHiker/arkapi

一个以比特币微支付驱动的匿名按调用付费 API 网关,提供安全侦察、OSINT、AI 等多类端点,无需注册即可使用。

Stars: 1 | Forks: 0

# ArkAPI [![实时站点](https://img.shields.io/badge/live-arkapi.dev-0f766e?style=flat-square)](https://arkapi.dev) [![许可证: MIT](https://img.shields.io/badge/license-MIT-2563eb?style=flat-square)](./LICENSE) [![Go 1.25+](https://img.shields.io/badge/go-1.25+-0ea5e9?style=flat-square)](https://go.dev/) [![Bitcoin Signet](https://img.shields.io/badge/network-Bitcoin%20Signet-f59e0b?style=flat-square)](https://en.bitcoin.it/wiki/Signet) [![Ark 协议](https://img.shields.io/badge/funding-Ark%20Protocol-f97316?style=flat-square)](https://ark-protocol.org/) **由 Bitcoin 驱动的按调用付费 API。无需账户。无需长期 API 密钥。只需聪。** [实时站点](https://arkapi.dev) · [API 文档](https://arkapi.dev/docs/) · [OpenAPI 规范](https://arkapi.dev/openapi.json) · [为会话充值](https://arkapi.dev/fund/) [![ArkAPI 主页预览](https://raw.githubusercontent.com/PiHiker/arkapi/main/assets/arkapi-homepage.png)](https://arkapi.dev) ArkAPI 是一个 Bitcoin 原生 API 网关,通过微支付来计量对安全、OSINT、AI 和实用工具端点的访问。用聪为匿名会话充值,然后调用任何端点,直到余额耗尽。 它使用 [Second](https://second.tech/) 的 [Bark](https://github.com/ark-bitcoin/bark) 钱包和 [Ark 协议](https://ark-protocol.org/) 在 Signet 测试网络上进行会话充值。目前,每个会话可以通过 Signet Lightning 发票或 Signet Ark 地址进行充值。 ### 为什么选择 ArkAPI? - **无需注册** — 只需一个 POST 请求即可创建会话,无需电子邮件或 OAuth - **无需轮换 API 密钥** — 会话是由 Bitcoin 充值的短期 bearer token - **对 Agent 友好** — 机器可读的 OpenAPI 规范、`llms.txt` 和 `.well-known/arkapi.json`,支持自主发现 - **按需付费** — 每次调用定价从 1 到 100 聪不等,无订阅费 - **极小数据足迹** — 无账户,无电子邮件 — 仅保留会话状态和账单记录 - **可自托管** — MIT 许可证的 Go 二进制文件,附带用于所有依赖项的 Docker Compose ## 前置条件 - Go 1.25+ - Docker 和 Docker Compose - MySQL 或 MariaDB - 如果需要生产级前端,可使用 Apache 或其他反向代理 - 在宿主机或容器构建路径中可用的 `dig` 和 `whois` ## 快速开始 ``` # 1. 创建 Signet 会话 curl -X POST https://arkapi.dev/v1/sessions # 2. 使用返回的 token 调用 API TOKEN="ak_your_token_here" curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"domain":"example.com"}' \ https://arkapi.dev/api/dns-lookup ``` ## 发现与索引 ArkAPI 发布机器可读的元数据,以便 AI agent 和工具可以在无需自定义胶水代码的情况下发现端点: | URL | 用途 | |-----|---------| | [`openapi.json`](https://arkapi.dev/openapi.json) | 完整的 OpenAPI 3 规范,包含 `x-cost-sats` 定价 | | [`.well-known/arkapi.json`](https://arkapi.dev/.well-known/arkapi.json) | 轻量级服务清单 | | [`llms.txt`](https://arkapi.dev/llms.txt) | LLM 友好的纯文本摘要 | | [`llms-full.txt`](https://arkapi.dev/llms-full.txt) | 扩展的 LLM 参考 | | [`sitemap.xml`](https://arkapi.dev/sitemap.xml) | 用于爬虫的 XML 站点地图 | | [`bitcoin-news/`](https://arkapi.dev/bitcoin-news/) | Bitcoin News API 的专用着陆页 | OpenAPI 规范包括 bearer token 身份验证 (`Authorization: Bearer ak_xxx`)、请求/响应模式,以及以聪为单位的明确单端点定价。 如果您部署自己的实例,请生成您自己的 IndexNow 验证密钥,而不是重用生产环境的密钥。 ## API 参考 ### 公开端点(无需身份验证) | 方法 | 路径 | 描述 | |--------|------|-------------| | GET | `/health` | 健康检查,返回 `{"status":"ok"}` | | GET | `/v1/catalog` | 列出所有端点和定价 | | POST | `/v1/sessions` | 创建新会话 | ### 受保护端点(需要身份验证) 全部需要请求头:`Authorization: Bearer ak_xxxxx` | 方法 | 路径 | 成本 | 描述 | |--------|------|------|-------------| | GET | `/v1/balance` | 免费 | 检查会话余额 | | POST | `/api/ai-chat` | 100 聪 | 由 ArkAPI 管理推理的匿名 AI 聊天 | | POST | `/api/ai-translate` | 25 聪 | 带有风格控制的高质量 AI 翻译,输出更自然 | | POST | `/api/domain-intel` | 25 聪 | 聚合 DNS、WHOIS、TLS、请求头、电子邮件身份验证、security.txt、robots.txt、改进的技术指纹、HTTP 行为和已解析的 IP 情报 | | GET | `/api/btc-price` | 1 聪 | 10 种主要法定货币的实时 Bitcoin 现货价格,带有可选的货币筛选、市场统计和 Alternative.me 的恐惧贪婪指数 (fear_greed sentiment) | | POST | `/api/prediction-market-search` | 4 聪 | 搜索开放的 Polymarket 预测市场 | | POST | `/api/translate` | 3 聪 | 带有源语言自动检测的自托管文本翻译 | | POST | `/api/url-to-markdown` | 5 聪 | 从任何公开 URL 提取干净的 Markdown | | POST | `/api/axfr-check` | 12 聪 | 检查域是否允许 DNS 区域传输,并在可用时返回暴露的 AXFR 记录 | | POST | `/api/cve-lookup` | 3 聪 | 在 NVD 中查找 CVE,包含严重性、CWE、KEV 和参考链接 | | POST | `/api/dns-lookup` | 3 聪 | 以结构化 JSON 返回完整 DNS 记录 | | POST | `/api/bitcoin-address` | 3 聪 | 验证主网 Bitcoin 地址并获取链上余额数据 | | POST | `/api/bitcoin-news` | 2 聪 | 多来源 Bitcoin 新闻头条,带有跨信息流去重和 AI 辅助的单项情感分析 | | POST | `/api/cve-search` | 4 聪 | 按关键字搜索 NVD CVE | | POST | `/api/hash-crack` | 25 聪 | 使用 fasttrack 字典加上 John Wordlist 规则恢复弱 MD5、SHA1、SHA256 或 NTLM 哈希 | | POST | `/api/domain-check` | 3 聪 | 通过 WHOIS 检查域可用性 | | POST | `/api/email-auth-check` | 4 聪 | SPF、DKIM 和 DMARC 状态及 A-F 评级 | | POST | `/api/headers` | 3 聪 | 带有评分的 HTTP 安全头审计 | | POST | `/api/image-generate` | 25 聪 | AI 图像生成,提供短期下载 URL | | POST | `/api/ip-lookup` | 3 聪 | IP 地理定位、ISP、ASN、大致位置及 Google 地图链接 | | POST | `/api/qr-generate` | 2 聪 | 从文本或 URL 生成二维码 PNG | | POST | `/api/screenshot` | 15 聪 | 服务器端网页截图及下载 URL | | POST | `/api/ssl-check` | 5 聪 | SSL 证书分析 | | POST | `/api/weather` | 3 聪 | 当前天气 + 7 天预报 | | POST | `/api/whois` | 5 聪 | 解析为干净 JSON 的 WHOIS 数据 | ### 创建会话 **Signet 充值模式**(当前线上模式): ``` curl -X POST -H "Content-Type: application/json" \ -d '{"amount_sats": 500}' \ https://arkapi.dev/v1/sessions ``` 同时返回一个 Signet Lightning 发票和一个 Signet Ark 地址。支付任意一个即可激活会话: ``` { "token": "ak_xxx", "funding": { "lightning_invoice": "lntbs...", "ark_address": "tark1...", "payment_hash": "abc123..." }, "amount_sats": 500, "balance_sats": 0, "status": "awaiting_payment", "expires_in": 86400 } ``` 当前线上公开充值页面:[为会话充值](https://arkapi.dev/fund/) 此部署仅运行在 **Signet 测试网络**上。同一会话对象支持两种充值途径,一旦任意一种支付结算,ArkAPI 就会激活余额。 ### 请求/响应示例
域名情报 (25 sats) ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"domain":"example.com","ai_summary":true}' \ https://arkapi.dev/api/domain-intel ``` 返回 DNS、WHOIS、TLS、请求头、电子邮件身份验证、security.txt、robots.txt、技术指纹、HTTP 行为、子域名提示、CT 子域名、网络摘要、发现、建议以及可选的 AI 摘要。 公开指南:[Domain Intel](https://arkapi.dev/domain-intel/)
匿名 AI 聊天 (100 sats) ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"prompt":"How is Ark different from Lightning?"}' \ https://arkapi.dev/api/ai-chat ``` 公开指南:[Anonymous AI Chat](https://arkapi.dev/ai-chat/)
AI 翻译 (25 sats) ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"text":"Bonjour tout le monde","target_language":"en","style":"natural"}' \ https://arkapi.dev/api/ai-translate ``` 公开指南:[AI Translate](https://arkapi.dev/ai-translate/)
BTC 价格 (1 sat) ``` curl -H "Authorization: Bearer $TOKEN" \ https://arkapi.dev/api/btc-price curl -H "Authorization: Bearer $TOKEN" \ "https://arkapi.dev/api/btc-price?currency=USD" curl -H "Authorization: Bearer $TOKEN" \ "https://arkapi.dev/api/btc-price?currencies=USD,EUR,CAD" ``` 公开指南:[BTC Price](https://arkapi.dev/btc-price/)
预测市场搜索 (4 sats) ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"query":"bitcoin etf","limit":5}' \ https://arkapi.dev/api/prediction-market-search ``` 公开指南:[Prediction Market Search](https://arkapi.dev/prediction-market-search/)
更多端点示例(翻译、URL 转 Markdown、AXFR、CVE、DNS、WHOIS、SSL、请求头、天气、IP) **翻译 (3 sats):** ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"text":"Hola, me llamo ArkAPI.","target_language":"en"}' \ https://arkapi.dev/api/translate ``` **URL 转 Markdown (5 sats):** ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"url":"https://example.com"}' \ https://arkapi.dev/api/url-to-markdown ``` **AXFR 检查 (12 sats):** ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"domain":"example.com"}' \ https://arkapi.dev/api/axfr-check ``` **CVE 查找 (3 sats):** ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"cve":"CVE-2024-3400"}' \ https://arkapi.dev/api/cve-lookup ``` **哈希破解 (25 sats):** ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"hash":"482c811da5d5b4bc6d497ffa98491e38","type":"md5","mode":"fasttrack"}' \ https://arkapi.dev/api/hash-crack ``` **DNS 查找 (3 sats):** ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"domain":"example.com"}' \ https://arkapi.dev/api/dns-lookup ``` **WHOIS (5 sats):** ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"domain":"example.com"}' \ https://arkapi.dev/api/whois ``` **SSL 检查 (5 sats):** ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"domain":"google.com"}' \ https://arkapi.dev/api/ssl-check ``` **HTTP 请求头审计 (3 sats):** ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"url":"https://google.com"}' \ https://arkapi.dev/api/headers ``` **天气 (3 sats):** ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"city":"New York"}' \ https://arkapi.dev/api/weather ``` **IP 查找 (3 sats):** ``` curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"ip":"8.8.8.8"}' \ https://arkapi.dev/api/ip-lookup ``` 公开指南:[IP Lookup](https://arkapi.dev/ip-lookup/)
### 响应格式 所有 API 端点返回一致的响应包装器: ``` { "success": true, "data": { ... }, "cost_sats": 3, "balance_remaining": 9997, "response_ms": 142, "endpoint": "/api/dns-lookup" } ``` 错误时(不收费): ``` { "success": false, "error": "description of what went wrong", "cost_sats": 0, "endpoint": "/api/dns-lookup" } ``` ## 架构 ``` Internet | v Cloudflare (SSL termination) | v Apache (reverse proxy on host) | proxies /health, /v1/*, /api/* to localhost:8080 | serves static landing page at / v +-----------------------------------------------+ | Docker / Host Services | | | | +--------------+ +----------------------+ | | | arkapi |--->| bark (barkd) | | | | Go binary | | Ark wallet | | | | :8080 | | :3000 (localhost) | | | | (host net) | +----------------------+ | | +------+-------+ | | | +----------------------+ | | +----------->| LibreTranslate | | | | | :5001 (localhost) | | | | +----------------------+ | | | +----------------------+ | | +----------->| Screenshotter | | | | | :9010 (localhost) | | | | +----------------------+ | | | | | +-----------> MySQL :3306 (host) | +---------|---------------------------------------+ | +----> External / host-local upstreams - ComfyUI (:8188 on host in reference deployment) - Cloudflare AI - Open-Meteo - NVD API - Polymarket Gamma API - Public DNS / WHOIS / RDAP services ``` ### 组件 - **Apache** — 宿主机上的示例反向代理。将 `/health`、`/v1/*` 和 `/api/*` 路由到 Go 后端,并可在 `/` 提供静态站点服务。 - **Cloudflare** — Web 层前可选的 DNS、TLS 和 CDN 层。 - **arkapi 容器** — 以 `network_mode: host` 运行的 Go 二进制文件。在 `127.0.0.1:8080` 上提供 API 服务,处理会话、身份验证、速率限制、计费,并调用本地辅助服务和外部上游 API。安装 `dig`、`whois` 和 `curl` 以用于基于命令的处理器。 - **bark 容器** — Second 在 Bitcoin Signet 上的 `barkd` 守护进程。在 `127.0.0.1:3000` 上暴露 REST API,并处理 Lightning 发票和 Ark 地址充值的会话资金检测。钱包数据持久化在 `bark-data` Docker 卷中。 - **translate 容器** — 在 `127.0.0.1:5001` 上的自托管 LibreTranslate 服务。 - **screenshotter 容器** — 在 `127.0.0.1:9010` 上的基于 Playwright 的截图服务。 - **MySQL** — 在 `127.0.0.1:3306` 上的宿主数据库,用于会话、余额和调用日志。`arkapi` MySQL 用户的作用域限定在 `arkapi` 数据库。 - **DB-IP Lite MMDB 文件** — 由 `/api/ip-lookup` 从磁盘读取的自托管 IP 地理定位数据库。非外部服务。 - **外部上游服务** — 在本地基础设施并非真实数据源的情况下,ArkAPI 也会调用上游服务: - 参考部署中位于 `127.0.0.1:8188` 的 **ComfyUI**,用于 `/api/image-generate` - **Cloudflare AI**,用于 `/api/ai-chat` 和 `/api/ai-translate` - **Open-Meteo**,用于 `/api/weather` - **NVD API**,用于 `/api/cve-search` 和 `/api/cve-lookup` - **Polymarket Gamma API**,用于 `/api/prediction-market-search` - **公共 WHOIS、RDAP 和 DNS 基础设施**,用于域名和注册情报 ### AI 聊天安全说明 - `/api/ai-chat` 限制为每个 token `5次/天`。 - 完全重复的请求可能会从 ArkAPI 缓存中提供服务,但成功的调用仍会被计费。 - 拒绝调用方提供的 `system_prompt`。 - 调用方提供的聊天记录只能包含 `user` 和 `assistant` 角色;拒绝 `system` 角色输入。 - 内置的系统指令明确拒绝泄露隐藏提示内部配置。 ### 网络 - arkapi 使用 `network_mode: host`,以便它能访问宿主机本地的 MySQL 和绑定到 localhost 的辅助服务。 - arkapi 本身仍旨在通过 Apache 访问,并可选择通过 Cloudflare 访问。 - bark 仅向 `127.0.0.1` 暴露 3000 端口 —— 无法从互联网访问。 - ComfyUI 在参考部署中使用时,仅监听 `127.0.0.1:8188` —— 无法从互联网访问。 - LibreTranslate 仅向 `127.0.0.1` 暴露 5001 端口 —— 无法从互联网访问。 - Screenshotter 仅向 `127.0.0.1` 暴露 9010 端口 —— 无法从互联网访问。 - 在参考部署中,只有 Web 层在端口 `80` 和 `443` 上面向互联网。Bark、ComfyUI、翻译、截图和数据库服务均保持绑定到 localhost。 - 如果您需要可选的流量报告,请将 `ARKAPI_ADMIN_TRAFFIC_LOG_PATH` 设置为可读的 Web 访问日志路径。 ## 服务器运维 ### 文件位置 以下路径使用参考部署布局。请根据您的设置进行调整。 | 路径 | 用途 | |------|---------| | `./` | 项目根目录 —— 源代码和 compose 文件 | | `./.env` | 环境变量 (chmod 600,不纳入 git) | | `./docker-compose.yml` | 主服务 (arkapi + bark + translate + screenshotter) | | `./translate/Dockerfile` | 专用的自托管 LibreTranslate 容器 | | `./docker-compose.consumer.yml` | 测试消费者钱包 | | `site/` | 静态站点文件(由您的反向代理提供服务) | ### Docker 命令 ``` # 查看运行中的容器 sudo docker compose ps # 查看日志 sudo docker logs arkapi sudo docker logs bark sudo docker logs arkapi-translate sudo docker logs arkapi-screenshotter # 重启所有内容 sudo docker compose restart # 重新构建并重启(在代码更改之后) sudo docker compose up -d --build # 停止所有内容 sudo docker compose down ``` ### Bark 钱包管理 ``` # 检查钱包余额(通过 REST API,因为 barkd 持有锁) curl -s http://127.0.0.1:3000/api/v1/wallet/balance # 获取钱包地址 curl -s -X POST http://127.0.0.1:3000/api/v1/wallet/addresses/next # 列出待处理的 Lightning invoices curl -s http://127.0.0.1:3000/api/v1/lightning/receives # 从 signet faucet 获取资金 # https://signet.2nd.dev ``` ### 运行测试 ``` # 完整 API 测试套件(测试模式) bash scripts/test.sh # Bark 支付流程测试(需要已注资的消费者钱包) bash scripts/test-bark.sh ``` ### 切换支付模式 编辑 `.env`: ``` # 测试模式 — 即时免费余额,无需 bark ARKAPI_PAYMENT_MODE=test # Bark 模式 — 需要 Lightning 支付才能激活会话 ARKAPI_PAYMENT_MODE=bark ``` 然后重新构建:`sudo docker compose up -d --build` ## 配置 所有配置均通过环境变量完成。将 `.env.example` 复制到 `.env` 并进行编辑: | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `ARKAPI_PORT` | `8080` | HTTP 服务器端口 | | `ARKAPI_BIND_HOST` | `127.0.0.1` | HTTP 服务器绑定地址 | | `ARKAPI_DB_USER` | `arkapi` | MySQL 用户名 | | `ARKAPI_DB_PASS` | — | MySQL 密码 | | `ARKAPI_DB_HOST` | `127.0.0.1` | MySQL 主机 | | `ARKAPI_DB_PORT` | `3306` | MySQL 端口 | | `ARKAPI_DB_NAME` | `arkapi` | MySQL 数据库名 | | `ARKAPI_PAYMENT_MODE` | `test` | `test` 或 `bark` | | `ARKAPI_BARK_URL` | `http://127.0.0.1:3000` | barkd REST API URL | | `ARKAPI_BARK_TOKEN` | — | barkd 认证 token(如果需要) | | `ARKAPI_DEFAULT_BALANCE_SATS` | `10000` | 测试模式下的起始余额 | | `ARKAPI_SESSION_TTL_HOURS` | `24` | 会话过期时间(小时) | | `ARKAPI_SESSION_CREATE_LIMIT` | `10` | 每个时间窗口的最大会话创建数 | | `ARKAPI_SESSION_CREATE_WINDOW_SECONDS` | `3600` | 会话创建的速率限制窗口 | | `ARKAPI_API_RATE_LIMIT` | `60` | 每个 IP 每个窗口的最大 API 调用次数 | | `ARKAPI_API_RATE_WINDOW_SECONDS` | `60` | API 调用的速率限制窗口 | ## 数据库模式 `arkapi` MySQL 数据库中的两个表: **sessions** — 已充值的 API 会话 ``` token VARCHAR(64) PRIMARY KEY balance_sats BIGINT NOT NULL DEFAULT 0 status ENUM('awaiting_payment','active','expired') created_at TIMESTAMP last_used_at TIMESTAMP NULL expires_at TIMESTAMP NULL payment_hash VARCHAR(255) NULL lightning_invoice TEXT NULL ``` **call_log** — 记录每次 API 调用 ``` id BIGINT AUTO_INCREMENT PRIMARY KEY session_token VARCHAR(64) NOT NULL endpoint VARCHAR(100) NOT NULL cost_sats INT NOT NULL response_ms INT NOT NULL DEFAULT 0 status_code SMALLINT NOT NULL DEFAULT 200 created_at TIMESTAMP ``` ## 安全 - **仅限本地的服务绑定** — 参考部署仅在 `80/443` 上暴露 Web 层;后端服务保留在 localhost - **SSRF 防护** — `/api/headers` 拒绝环回、私有、链路本地和云元数据 IP - **速率限制** — 会话创建和 API 调用的每 IP/路径限制 - **会话过期** — 在身份验证中间件中强制执行,每次使用时刷新 - **请求大小限制** — 1MB 请求体上限,不接受尾部多余的 JSON - **非 root 容器** — arkapi 在容器内以 `uid=999` 运行 - **MySQL 隔离** — `arkapi` 用户只能访问 `arkapi` 数据库 - **`.env` 权限** — `chmod 600`,位于 Web 根目录之外 - **Bark 仅限本地** — barkd REST API 绑定到 `127.0.0.1:3000`,无法从互联网访问 - **防止 SQL 注入** — 所有查询均使用参数化语句 - **防止命令注入** — 域名/IP 输入在执行 shell 前经过验证 ### 钱包助记词备份 Signet 助记词存储在本地的 `WALLETS.md` (chmod 600,已加入 gitignore) 中以及 Docker 卷内。 公共仓库可以携带 `WALLETS.example.md` 作为安全模板,但绝不包含真实的助记词文件。 **在迁移至主网之前:** 1. 生成**新**钱包 —— 不要重用 Signet 助记词 2. 将商家助记词备份到 Docker 外部的安全位置(加密备份、硬件钱包或密码管理器) 3. 切勿将助记词提交到 git 4. 消费者测试钱包是一次性的,主网上不需要 查看助记词: ``` # Merchant sudo docker exec bark cat /root/.bark/mnemonic # Consumer(仅限测试) sudo docker exec bark-consumer cat /root/.bark/mnemonic ``` ### 上线前检查清单 - [ ] 在公开发布前将 `ARKAPI_DEFAULT_BALANCE_SATS` 设置为 `0` 或将 `ARKAPI_PAYMENT_MODE` 设置为 `bark` - [ ] 考虑将 CORS 源从 `*` 限制为特定域 - [ ] 在测试部署中通过 Signet 水龙头为商家 Bark 钱包充值 - [ ] 使用 Lightning、Ark 充值或两者测试至少一次完整的会话激活流程 - [ ] 在主网上线前安全备份商家钱包助记词 - [ ] 在发布前确认 `.env`、`WALLETS.md` 和 `CLOUDFLARE.md` 保持未跟踪状态 ### 发布规范 - 仅将实际密钥保存在本地私有文件中,例如 `.env`、`WALLETS.md` 和 `CLOUDFLARE.md` - 发布经过清理的模板,例如 `.env.example`、`WALLETS.example.md` 和 `CLOUDFLARE.example.md`,以替代真实文件 - 将 `go.sum` 保留在仓库中,以使构建保持可复现 ## 充值流程 (Bark / Ark) ``` Consumer ArkAPI barkd | | | | POST /v1/sessions | | | {"amount_sats": 5000} | | |----------------------------->| | | | create funding options | | |------------------------------>| | |<------------------------------| | {"token":"ak_...", | | | "funding": { | | | "lightning_invoice": | | | "ark_address": | | | }, | | | "status":"awaiting_payment"} | |<-----------------------------| | | | | | Option A: pay Lightning invoice | | Option B: send sats to Ark address | |----------------------------->|------------------------------>| | | | | | poll / wallet state | | |------------------------------>| | |<------------------------------| | | | | | session activated | | | balance_sats = 5000 | | | | | POST /api/domain-intel | | | Authorization: Bearer ak_...| | |----------------------------->| | | {"success": true, | | | "cost_sats": 25, | | | "balance_remaining": 4975} | | |<-----------------------------| | ``` ## 项目结构 ``` arkapi/ ├── cmd/arkapi/main.go # Entry point, routing, server startup ├── internal/ │ ├── bark/ │ │ ├── client.go # barkd REST API client │ │ └── poller.go # Background payment detection │ ├── config/config.go # Environment-based configuration │ ├── database/database.go # MySQL operations (sessions, billing) │ ├── handlers/ │ │ ├── handlers.go # Shared handler logic, response formatting │ │ ├── session.go # Session creation (test + bark modes) │ │ ├── admin.go # Admin/traffic endpoints │ │ ├── ai_chat.go # Anonymous AI chat (Cloudflare AI) │ │ ├── ai_translate.go # AI-powered translation │ │ ├── axfr_check.go # DNS zone transfer check │ │ ├── bitcoin_address.go # Bitcoin address validation │ │ ├── bitcoin_news.go # Bitcoin RSS news aggregation │ │ ├── bitcoin_price.go # Live BTC spot price │ │ ├── cve_lookup.go # CVE lookup (NVD) │ │ ├── cve_search.go # CVE keyword search (NVD) │ │ ├── dns_lookup.go # DNS record lookup │ │ ├── domain_check.go # Domain availability check │ │ ├── domain_intel.go # Aggregate domain intelligence │ │ ├── email_auth_check.go # SPF/DKIM/DMARC audit │ │ ├── headers.go # HTTP security headers audit (SSRF-safe) │ │ ├── image_generate.go # AI image generation (ComfyUI) │ │ ├── ip_lookup.go # IP geolocation (DB-IP Lite) │ │ ├── markdown.go # URL to Markdown extraction │ │ ├── prediction_market_search.go # Polymarket search │ │ ├── qr_generate.go # QR code generation │ │ ├── screenshot.go # Webpage screenshot │ │ ├── ssl_check.go # SSL certificate analysis │ │ ├── translate.go # Self-hosted translation (LibreTranslate) │ │ ├── weather.go # Weather forecast (Open-Meteo) │ │ └── whois.go # WHOIS lookup │ └── middleware/ │ ├── auth.go # Bearer token auth + session validation │ └── rate_limit.go # Per-IP/path rate limiting ├── scripts/ │ ├── bark-init.sh # Bark wallet init + daemon startup │ ├── test.sh # API test suite (test mode) │ └── test-bark.sh # Lightning payment flow test ├── sql/ │ ├── schema.sql # Initial database schema │ └── 002_bark_columns.sql # Bark payment columns migration ├── Dockerfile # ArkAPI Go container (multi-stage) ├── Dockerfile.bark # Bark wallet daemon container ├── docker-compose.yml # Production services ├── docker-compose.consumer.yml # Test consumer wallet ├── .env.example # Configuration template (copy to .env) ├── .dockerignore ├── .gitignore └── go.mod ``` ## 技术 - **Go 1.25** — 核心 API 服务器和请求编排 - **MySQL 或 MariaDB** — 会话、余额和计费日志 - **Docker Compose** — ArkAPI 和本地辅助服务的编排 - **Apache 或其他反向代理** — 参考部署中的前端 Web 层 - **Cloudflare** — DNS、TLS/CDN,以及用于聊天和 AI 翻译的 AI 推理 - **Second Bark v0.1.0-beta.8** — 用于会话资金检测的 Ark 钱包守护进程 - **Bitcoin Signet** — 当前用于测试的线上充值网络 - **ComfyUI** — 用于 `/api/image-generate` 的宿主机本地图像生成上游服务 - **LibreTranslate** — 用于 `/api/translate` 的本地翻译后端 - **Playwright** — 用于 `/api/screenshot` 的本地截图渲染后端 - **Open-Meteo** — `/api/weather` 的上游天气数据 - **DB-IP Lite** — 用于 `/api/ip-lookup` 中 IP 地理定位的自托管 MMDB 文件 - **NVD API** — 用于搜索和查找的上游 CVE 数据 - **Polymarket Gamma API** — 上游市场发现数据 - **RDAP / WHOIS / DNS 工具** — 注册和域名情报输入 - **ARM64 友好部署** — 示例 Bark 镜像目前针对 ARM64 架构 ## 贡献 欢迎贡献!请先开一个 issue 来讨论您想要更改的内容。 1. Fork 本仓库 2. 创建一个功能分支 (`git checkout -b feature/my-change`) 3. 提交您的更改 4. 向 `main` 分支发起 Pull Request ## 许可证 [MIT](./LICENSE) © [PiHiker](https://github.com/PiHiker)
标签:AI, API网关, Ark协议, Bitcoin, Docker, ESC4, EVTX分析, GitHub, Golang, Go语言, MIT开源协议, OpenAPI, OSINT, REST API, Session机制, Signet测试网, 人工智能, 加密货币, 匿名支付, 安全编程, 安全防御评估, 实时处理, 微支付, 按次付费, 无服务器, 无需账户, 日志审计, 比特币, 版权保护, 特征检测, 用户模式Hook绕过, 程序破解, 网络安全, 自主代理, 自动化代码审查, 自托管, 闪电发票, 闪电网络, 隐私保护