Skip to content

Latest commit

 

History

History
259 lines (215 loc) · 16.7 KB

File metadata and controls

259 lines (215 loc) · 16.7 KB

DimSum RightProof - 系统设计文档

1. 整体架构设计

┌─────────────────────────────────────────────────────────────────────────────┐
│                              用户层 (User Layer)                             │
│                    浏览器 / MetaMask 钱包 / Web3 Provider                     │
└─────────────────────────────────────────────────────────────────────────────┘
                                      │
                                      ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                           前端应用层 (Frontend)                              │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐ │
│  │  首页       │  │ Dataset     │  │ License     │  │ Contract Interactor │ │
│  │  (数据注册) │  │ Gallery     │  │ Gallery     │  │ (合约调试)          │ │
│  └─────────────┘  └─────────────┘  └─────────────┘  └─────────────────────┘ │
│                         Next.js + React + TypeScript                         │
└─────────────────────────────────────────────────────────────────────────────┘
                          │                           │
                          ▼                           ▼
┌──────────────────────────────────┐  ┌──────────────────────────────────────┐
│       后端 API (Backend)          │  │         区块链层 (Blockchain)         │
│  ┌────────────────────────────┐  │  │  ┌────────────────────────────────┐  │
│  │   Deno API Server          │  │  │  │   BodhiBasedCopyright          │  │
│  │   - dataset_licences CRUD  │  │  │  │   - 数据确权核心合约            │  │
│  │   - 文档服务               │  │  │  ├────────────────────────────────┤  │
│  └────────────────────────────┘  │  │  │   CopyrightNFT (ERC721)        │  │
│              │                   │  │  │   - 数据集 NFT                  │  │
│              ▼                   │  │  ├────────────────────────────────┤  │
│  ┌────────────────────────────┐  │  │  │   LicenseNFT (ERC721)          │  │
│  │      Supabase              │  │  │  │   - 许可证 NFT                  │  │
│  │   - dataset_licences 表    │  │  │  ├────────────────────────────────┤  │
│  │   - 元数据存储             │  │  │  │   Bodhi Protocol (ERC1155)     │  │
│  └────────────────────────────┘  │  │  │   - 数据代币化                  │  │
└──────────────────────────────────┘  │  └────────────────────────────────┘  │
                                      │         Ethereum / HashKey Chain      │
                                      └──────────────────────────────────────┘

2. 系统模块划分与职责

2.1 前端模块 (packages/nextjs)

模块 路径 职责
首页 /pages/index.tsx 数据集注册入口,引导用户完成存证、确权、代币化流程
Dataset Gallery /pages/dataset-gallery.tsx 展示所有已注册的数据集 NFT,支持查看详情、购买/卖出份额
License Gallery /pages/license-gallery.tsx 展示可用的许可证模板,支持许可证管理
API Docs /pages/api-docs.tsx 展示后端 API 文档
Contract Interactor /pages/debug/ 智能合约交互调试界面
Hooks /hooks/ 封装合约交互逻辑(useScaffoldContractRead/Write)
Components /components/ 可复用 UI 组件(Header, Footer, TopicCard 等)

2.2 后端模块 (deno/)

模块 职责
API Server 提供 RESTful API,处理 dataset_licences 的 CRUD 操作
Supabase Client 与 Supabase 数据库交互,存储链下元数据
文档服务 提供 API 文档的 Markdown/HTML 渲染

2.3 智能合约模块 (contracts/)

合约 职责
BodhiBasedCopyright 核心业务合约,管理数据集的存证、确权、与许可证绑定
CopyrightNFT ERC721 实现,每个数据集铸造为唯一的 NFT
LicenseNFT ERC721 实现,每个许可证铸造为唯一的 NFT
Bodhi ERC1155 实现,支持数据集的份额化(代币化)
Space/SpaceFactory Bodhi 协议的空间管理,用于组织数据集

3. 关键流程说明

3.1 数据集注册流程(用户路径)

用户操作                      系统处理                           区块链/存储
   │                            │                                   │
   │  1. 填写数据集信息          │                                   │
   │  (名称/描述/哈希/链接)      │                                   │
   │─────────────────────────────▶                                   │
   │                            │                                   │
   │  2. 选择许可证类型          │                                   │
   │  (CC0 / CC0+ with profit)  │                                   │
   │─────────────────────────────▶                                   │
   │                            │                                   │
   │  3. 选择是否代币化          │                                   │
   │  (可选: 填写代币化协议)     │                                   │
   │─────────────────────────────▶                                   │
   │                            │                                   │
   │  4. 点击「Create on DimSum」│  调用 POST /dataset_licences      │
   │─────────────────────────────▶─────────────────────────────────────▶ Supabase
   │                            │  返回 unique_id                   │
   │◀─────────────────────────────◀─────────────────────────────────────
   │                            │                                   │
   │  5. 点击「Create NFT」      │  调用 generateCopyright()         │
   │─────────────────────────────▶─────────────────────────────────────▶ 智能合约
   │                            │  铸造 CopyrightNFT                │
   │◀─────────────────────────────◀─────────────────────────────────────
   │                            │                                   │
   ▼                            ▼                                   ▼

3.2 数据代币化流程

┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│ 用户注册     │───▶│ 选择代币化   │───▶│ Bodhi协议   │───▶│ 份额交易    │
│ 数据集       │    │ 选项        │    │ 铸造ERC1155 │    │ 买入/卖出   │
└─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘
                          │
                          ▼
                   ┌─────────────┐
                   │ 填写代币化   │
                   │ 协议(可选)   │
                   │ 利益分配规则 │
                   └─────────────┘

3.3 数据查询流程

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│ Dataset     │───▶│ 调用合约    │───▶│ 渲染数据集  │
│ Gallery页面 │    │ getCopyright│    │ 卡片列表    │
└─────────────┘    └─────────────┘    └─────────────┘
       │                                    │
       │                                    ▼
       │                           ┌─────────────┐
       │                           │ 如果有bodhi_id│
       │                           │ 获取摘要信息 │
       └──────────────────────────▶│ (Bodhi API) │
                                   └─────────────┘

4. 合约 / API / 数据流设计思路

4.1 智能合约设计

核心思想:将数据集的「存证」「确权」「代币化」三个功能解耦,通过组合实现灵活性。

// BodhiBasedCopyright 核心数据结构
struct Copyright {
    string name;           // 数据集名称
    string link;           // 数据集链接(可以是 Bodhi ID 或外部 URL)
    string contentHash;    // 数据集内容哈希(SHA256)
    uint256 licenseId;     // 绑定的许可证 NFT ID
    string uri;            // NFT 元数据 URI
    string bodhi_id;       // Bodhi 协议 ID(代币化时使用)
}

设计原则

  1. 解耦存储与逻辑:链上存储核心元数据,链下(Supabase)存储详细描述
  2. 组合模式:CopyrightNFT + LicenseNFT + Bodhi1155 组合使用
  3. 向后兼容:bodhi_id 支持数字(Bodhi协议)和 UUID(DimSum系统)

4.2 API 设计

RESTful 风格,CRUD 操作对应 HTTP 方法:

方法 路径 功能
GET /dataset_licences 获取所有数据集许可记录
GET /dataset_licences/:id 按 ID 或 UUID 获取单条记录
POST /dataset_licences 创建新的数据集许可记录
PUT /dataset_licences/:unique_id 更新现有记录
DELETE /dataset_licences/:id 删除记录

4.3 数据流设计

                    ┌─────────────────────────────────────┐
                    │           数据流向                   │
                    └─────────────────────────────────────┘
                                      │
        ┌─────────────────────────────┼─────────────────────────────┐
        ▼                             ▼                             ▼
┌───────────────┐           ┌───────────────┐           ┌───────────────┐
│  链上数据      │           │  链下数据      │           │  外部数据      │
│  (不可变)     │           │  (可变)        │           │  (引用)       │
├───────────────┤           ├───────────────┤           ├───────────────┤
│ • 数据集名称   │           │ • 详细描述     │           │ • Bodhi内容   │
│ • 内容哈希     │           │ • 代币化协议   │           │ • 外部链接    │
│ • 许可证ID    │           │ • 创建时间     │           │ • 数据集文件  │
│ • NFT元数据   │           │ • 分类标签     │           │               │
│ • 所有者地址   │           │               │           │               │
└───────────────┘           └───────────────┘           └───────────────┘
        │                             │                             │
        └─────────────────────────────┴─────────────────────────────┘
                                      │
                                      ▼
                           ┌───────────────┐
                           │  前端聚合展示  │
                           └───────────────┘

5. 核心技术选型理由

5.1 前端:Next.js + React + TypeScript

选型 理由
Next.js SSR/SSG 支持,SEO 友好,内置路由,适合 dApp 开发
React 组件化开发,生态丰富,与 Web3 库兼容性好
TypeScript 类型安全,减少运行时错误,提升开发体验
wagmi/viem 现代 React Web3 库,类型完善,支持多链
TailwindCSS + DaisyUI 快速 UI 开发,一致的设计系统

5.2 后端:Deno + Supabase

选型 理由
Deno TypeScript 原生支持,安全沙箱,部署简单(Deno Deploy)
Oak Deno 生态最成熟的 Web 框架,API 类似 Koa
Supabase PostgreSQL 托管,自带 REST API,实时订阅,免费额度充足

5.3 智能合约:Solidity + Hardhat

选型 理由
Solidity 以太坊生态标准,工具链成熟
Hardhat 测试友好,支持 TypeScript,调试体验好
ERC721 适合唯一性资产(数据集、许可证)
ERC1155 适合份额化资产(Bodhi 代币化)

5.4 协议选择:Bodhi Protocol

选型 理由
Bodhi Protocol 专为数据代币化设计,支持内容存储+份额交易+收益分配
Arweave 集成 通过 Bodhi 实现数据永久存储
联合曲线定价 自动做市,无需外部流动性

6. 工程自洽性说明

6.1 数据一致性

  • 链上数据:通过合约事件 + 索引保证查询一致性
  • 链下数据:Supabase 提供 ACID 事务保证
  • 跨层关联:通过 unique_id / bodhi_id 建立链上链下映射

6.2 错误处理

  • 前端:try-catch + 用户友好提示
  • 后端:统一错误响应格式 { error: string }
  • 合约:require 语句 + 自定义错误

6.3 扩展性

  • 多链支持:通过配置切换网络(Sepolia / HashKey)
  • 许可证扩展:新增许可证只需铸造 LicenseNFT
  • API 扩展:RESTful 设计便于新增端点

文档版本: v1.0 | 最后更新: 2026-01-25