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

4.8 KiB
Raw Permalink Blame History

项目架构

1. 背景与本次决策

目标是沉淀可复用的虚拟货币操作解决方案,从 ETH 开始,逐步加入 BTC 等链。 现有仓库只有 Python IDE 示例,故延续 Python采用单仓库、单分发包、链能力模块化布局。 src 仅作为源码目录,直接包含同级 coreeth 包,不再增加项目名命名空间。 分发包名称仍为 ituac-crypto-hub,导入使用 from eth import ... / from core import ...。 顶层包名较通用,使用项目独立虚拟环境;未来引入 SDK 时检查是否与 ethcore 同名冲突。 本次状态:基础骨架已落地;下文节点、钱包和交易能力均为后续方向,不代表已经实现。

备选方案及取舍:

  • 暂不引入 FastAPI / 微服务:尚无 HTTP、认证或部署需求先让能力能被脚本和未来服务复用。
  • 暂不为每条链建立独立仓库或分发包:降低早期维护成本;需独立发布或出现依赖冲突时再拆分。
  • 不建立统一交易大接口:仅有 ETH 首期需求,提前抽象容易把链特有语义泄漏到公共层。
  • 暂不安装链 SDK首期只有离线基础能力节点接入时再按官方维护状态、接口和测试支持选型。

2. 依赖方向

调用方(脚本 / 未来 API / 任务)
        ↓             ↓
       eth        btc未来
        ↓             ↓
              core

core 不导入任何币种包;币种包互不导入。当前 eth.units 依赖 core.errors eth.__init__ 暴露经过测试的金额转换接口。

每条链在真实需求出现时再增长为:

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 或真实交易已验证。