DimSum RightProof - 系统设计文档
┌─────────────────────────────────────────────────────────────────────────────┐
│ 用户层 (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.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 等)
模块
职责
API Server
提供 RESTful API,处理 dataset_licences 的 CRUD 操作
Supabase Client
与 Supabase 数据库交互,存储链下元数据
文档服务
提供 API 文档的 Markdown/HTML 渲染
合约
职责
BodhiBasedCopyright
核心业务合约,管理数据集的存证、确权、与许可证绑定
CopyrightNFT
ERC721 实现,每个数据集铸造为唯一的 NFT
LicenseNFT
ERC721 实现,每个许可证铸造为唯一的 NFT
Bodhi
ERC1155 实现,支持数据集的份额化(代币化)
Space/SpaceFactory
Bodhi 协议的空间管理,用于组织数据集
用户操作 系统处理 区块链/存储
│ │ │
│ 1. 填写数据集信息 │ │
│ (名称/描述/哈希/链接) │ │
│─────────────────────────────▶ │
│ │ │
│ 2. 选择许可证类型 │ │
│ (CC0 / CC0+ with profit) │ │
│─────────────────────────────▶ │
│ │ │
│ 3. 选择是否代币化 │ │
│ (可选: 填写代币化协议) │ │
│─────────────────────────────▶ │
│ │ │
│ 4. 点击「Create on DimSum」│ 调用 POST /dataset_licences │
│─────────────────────────────▶─────────────────────────────────────▶ Supabase
│ │ 返回 unique_id │
│◀─────────────────────────────◀─────────────────────────────────────
│ │ │
│ 5. 点击「Create NFT」 │ 调用 generateCopyright() │
│─────────────────────────────▶─────────────────────────────────────▶ 智能合约
│ │ 铸造 CopyrightNFT │
│◀─────────────────────────────◀─────────────────────────────────────
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 用户注册 │───▶│ 选择代币化 │───▶│ Bodhi协议 │───▶│ 份额交易 │
│ 数据集 │ │ 选项 │ │ 铸造ERC1155 │ │ 买入/卖出 │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐
│ 填写代币化 │
│ 协议(可选) │
│ 利益分配规则 │
└─────────────┘
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Dataset │───▶│ 调用合约 │───▶│ 渲染数据集 │
│ Gallery页面 │ │ getCopyright│ │ 卡片列表 │
└─────────────┘ └─────────────┘ └─────────────┘
│ │
│ ▼
│ ┌─────────────┐
│ │ 如果有bodhi_id│
│ │ 获取摘要信息 │
└──────────────────────────▶│ (Bodhi API) │
└─────────────┘
核心思想 :将数据集的「存证」「确权」「代币化」三个功能解耦,通过组合实现灵活性。
// 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(代币化时使用)
}
设计原则 :
解耦存储与逻辑 :链上存储核心元数据,链下(Supabase)存储详细描述
组合模式 :CopyrightNFT + LicenseNFT + Bodhi1155 组合使用
向后兼容 :bodhi_id 支持数字(Bodhi协议)和 UUID(DimSum系统)
RESTful 风格 ,CRUD 操作对应 HTTP 方法:
方法
路径
功能
GET
/dataset_licences
获取所有数据集许可记录
GET
/dataset_licences/:id
按 ID 或 UUID 获取单条记录
POST
/dataset_licences
创建新的数据集许可记录
PUT
/dataset_licences/:unique_id
更新现有记录
DELETE
/dataset_licences/:id
删除记录
┌─────────────────────────────────────┐
│ 数据流向 │
└─────────────────────────────────────┘
│
┌─────────────────────────────┼─────────────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 链上数据 │ │ 链下数据 │ │ 外部数据 │
│ (不可变) │ │ (可变) │ │ (引用) │
├───────────────┤ ├───────────────┤ ├───────────────┤
│ • 数据集名称 │ │ • 详细描述 │ │ • Bodhi内容 │
│ • 内容哈希 │ │ • 代币化协议 │ │ • 外部链接 │
│ • 许可证ID │ │ • 创建时间 │ │ • 数据集文件 │
│ • NFT元数据 │ │ • 分类标签 │ │ │
│ • 所有者地址 │ │ │ │ │
└───────────────┘ └───────────────┘ └───────────────┘
│ │ │
└─────────────────────────────┴─────────────────────────────┘
│
▼
┌───────────────┐
│ 前端聚合展示 │
└───────────────┘
5.1 前端:Next.js + React + TypeScript
选型
理由
Next.js
SSR/SSG 支持,SEO 友好,内置路由,适合 dApp 开发
React
组件化开发,生态丰富,与 Web3 库兼容性好
TypeScript
类型安全,减少运行时错误,提升开发体验
wagmi/viem
现代 React Web3 库,类型完善,支持多链
TailwindCSS + DaisyUI
快速 UI 开发,一致的设计系统
选型
理由
Deno
TypeScript 原生支持,安全沙箱,部署简单(Deno Deploy)
Oak
Deno 生态最成熟的 Web 框架,API 类似 Koa
Supabase
PostgreSQL 托管,自带 REST API,实时订阅,免费额度充足
5.3 智能合约:Solidity + Hardhat
选型
理由
Solidity
以太坊生态标准,工具链成熟
Hardhat
测试友好,支持 TypeScript,调试体验好
ERC721
适合唯一性资产(数据集、许可证)
ERC1155
适合份额化资产(Bodhi 代币化)
选型
理由
Bodhi Protocol
专为数据代币化设计,支持内容存储+份额交易+收益分配
Arweave 集成
通过 Bodhi 实现数据永久存储
联合曲线定价
自动做市,无需外部流动性
链上数据 :通过合约事件 + 索引保证查询一致性
链下数据 :Supabase 提供 ACID 事务保证
跨层关联 :通过 unique_id / bodhi_id 建立链上链下映射
前端 :try-catch + 用户友好提示
后端 :统一错误响应格式 { error: string }
合约 :require 语句 + 自定义错误
多链支持 :通过配置切换网络(Sepolia / HashKey)
许可证扩展 :新增许可证只需铸造 LicenseNFT
API 扩展 :RESTful 设计便于新增端点
文档版本: v1.0 | 最后更新: 2026-01-25