ituac-crypto-hub/docs/architecture.md
2026-09-08 09:29:20 -04:00

86 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 项目架构
## 1. 背景与本次决策
目标是沉淀可复用的虚拟货币操作解决方案,从 ETH 开始,逐步加入 BTC 等链。
现有仓库只有 Python IDE 示例,故延续 Python采用单仓库、单分发包、链能力模块化布局。
`src` 仅作为源码目录,直接包含同级 `core``eth` 包,不再增加项目名命名空间。
分发包名称仍为 `ituac-crypto-hub`,导入使用 `from eth import ...` / `from core import ...`
顶层包名较通用,使用项目独立虚拟环境;未来引入 SDK 时检查是否与 `eth``core` 同名冲突。
本次状态:基础骨架已落地;下文节点、钱包和交易能力均为后续方向,不代表已经实现。
备选方案及取舍:
- 暂不引入 FastAPI / 微服务:尚无 HTTP、认证或部署需求先让能力能被脚本和未来服务复用。
- 暂不为每条链建立独立仓库或分发包:降低早期维护成本;需独立发布或出现依赖冲突时再拆分。
- 不建立统一交易大接口:仅有 ETH 首期需求,提前抽象容易把链特有语义泄漏到公共层。
- 暂不安装链 SDK首期只有离线基础能力节点接入时再按官方维护状态、接口和测试支持选型。
## 2. 依赖方向
```text
调用方(脚本 / 未来 API / 任务)
↓ ↓
eth btc未来
↓ ↓
core
```
`core` 不导入任何币种包;币种包互不导入。当前 `eth.units` 依赖 `core.errors`
`eth.__init__` 暴露经过测试的金额转换接口。
每条链在真实需求出现时再增长为:
```text
eth/
units.py # 已有:原生币单位转换
models.py # 未来:本链请求、结果和值对象
ports.py # 未来:节点与签名器接口,按能力拆分
services/ # 未来:查询、交易等用例,不绑定 SDK
adapters/ # 未来RPC / SDK / 外部签名器实现
```
以上未来文件不预建空壳。外部适配器实现端口,调用入口负责组装和注入;用例不直接实例化 SDK。
单元测试注入离线替身;集成测试独立配置网络及节点,不在包导入时建立连接。
## 3. 公共层与链专属层
| 归属 | 内容 |
| --- | --- |
| `core` | 当前公共异常;未来有真实复用证据的原语 |
| `eth` | 原生 ETH 单位、后续地址 / chain ID / 费用 / 交易与回执语义 |
| 未来 `btc` | BTC 自有单位、网络 / 地址 / UTXO / 手续费 / 交易模型 |
| 调用应用 | 身份权限、业务订单、持久化、调度、审计和部署,当前不实现 |
链与资产分开:原生 ETH 的单位转换不能用于未知精度的代币。
ERC-20 若进入范围,先归于 ETH / EVM 相关能力,不因币种名称拆成重复的链客户端。
其他 EVM 链及共享 `evm` 层只有在需求明确、复用证据充分后再决定。
## 4. 后续操作的安全契约
- 节点 URL、目标网络、预期链标识显式配置并核验节点身份不得隐式落到主网。
- 金额边界使用最小单位整数,展示才转换 Decimal拒绝浮点和静默精度损失。
- 密钥通过专门签名接口管理,不进入普通配置对象、日志、测试夹具或异常输出;不自行实现密码学。
- 交易构建、费用估算、签名、广播、回执查询及最终确认分离。返回交易哈希不等于成功。
- 对外错误需区分输入错误、节点拒绝、传输故障、响应格式错误、执行失败和结果未知。
- 广播超时不自动重发资金操作;引入写能力前明确幂等、并发、费用上限、重试和链重组策略。
- 真实转账或合约授权必须另行明确授权;离线测试不构成资金操作许可。
## 5. 增加 BTC 等链
1. 明确该链首批用例与非目标,验证协议和 SDK 官方资料。
2. 新建 `src/btc/`,独立维护公共接口和链特有模型,不从 `eth` 继承。
3. 新建 `tests/btc/`,验证单位、边界、失败路径;有节点适配器后再提供可选集成测试。
4. SDK 依赖优先用按链可选依赖声明,防止 ETH 用户被迫安装 BTC 全部依赖。
5. 只有已经出现的共同需求才提取到 `core`,同时更新此文档和 README。
## 6. 建议演进顺序(待具体需求确认)
1. ETH 只读接入:节点身份、区块、原生币余额、交易及回执查询。
2. ETH 写能力:构建和估算 → 独立签名器 → 显式广播 → 确认跟踪及异常恢复。
3. 按需求扩展代币、事件查询等能力。
4. BTC 首期只读能力,再按其自身模型补充资金操作。
验收分开记录源码 / 离线测试 / 本地链或测试网 / 真实节点 / 真实资金证据。
目前只提供并验证基础库不声明主网、RPC 或真实交易已验证。