Files
selfrelease 166f460d57 feat(chain): ChainMaker 真实链接入脚手架(build tag 隔离)+ 契约测试
- internal/chain/chainmaker.go [//go:build chainmaker]: ChainMakerClient 适配器骨架,
  实现 chain.Client 全部方法到合约 Invoke/Query,按角色证书做链上鉴权,错误映射回标准错误
- internal/chain/chainmaker_stub.go [//go:build !chainmaker]: 占位构造函数,
  保证默认构建不依赖 SDK、主工程始终可编译
- contracts/tcs_registry/registry.go: 补齐合约方法
  RegisterHashBinding/VerifyEpisodeHash/ListEpisodes/HashExists/RecordVersionChange/
  RevokeEpisode/Restore/RestoreEpisode/SetContentStatus/QueryMappings/ListContents
  并增加集级哈希/映射/版本计数索引 KV 设计
- config: TCS_CHAIN_BACKEND=memory|pg|chainmaker + TCS_CHAINMAKER_SDK_CONF 开关
- cmd/api-svc: newChain 按 backend 选择,chainmaker 失败逐级降级 pg 到内存
- internal/chain/conformance_test.go: chain.Client 契约测试套件,双实现共用
  MemoryChain 默认跑;PersistentChain 经 TCS_TEST_PG_DSN;ChainMaker 经 -tags 与 env
- 验证: 默认 build/vet/test 全绿;MemoryChain 与 PersistentChain 契约套件均通过,行为一致
2026-06-14 20:47:21 +08:00
..

tcs_registry — ChainMaker 智能合约(Go

可信数据空间的链上合约,实现 TCS-IPTV 的四类核心数据结构与合约方法。 与 internal/chainClient 接口语义一一对应:MVP 用 MemoryChain 开发测试, 真实部署时由 chain-svc 通过 ChainMaker Go SDK 调用本合约。

合约方法(对应需求16-AC2

方法 权限 说明
IssueMA(maCode, ctid, merkleRoot, fileHash, contentJSON) 仅监管节点 签发 MA 码并 1:1 强绑定哈希;不可重复、不可解绑
RegisterHashBinding(ctid, bindingJSON) 审核/监管 追加哈希绑定(转码版父子关系)
RegisterMapping(ctid, party, partyID, cdnEndpoint) 三方 注册编码映射;MA 必须已签发
VerifyHash(maCode, fileHash) -> bool 任意 校验提交哈希与绑定哈希是否一致
QueryContent(maCode) -> json 任意 查询内容主记录
QueryMappings(maCode) -> json 任意 查询全部三方映射与 CDN 端点
RecordVersionChange(ctid, vcJSON) 审核/监管 记录版本变更,触发重审
Revoke(maCode, reason) 仅监管节点 下架,返回受影响映射

权限模型(对应需求14

合约内通过 sender() 的组织/角色证书判断调用方身份:

  • RoleRegulator(监管主体):IssueMA / Revoke 唯一发起方
  • RoleReviewer(审核主体/CSPS/媒资库):哈希绑定、版本变更
  • RoleCP:送审时注册哈希、本方映射
  • RoleOperator:注册本方映射、验真

国密

底层链使用长安链 ChainMaker(国密 SM2 签名 / SM3 哈希)。 内容哈希在链外用 SHA-256 计算(哈希SDK),链上仅存哈希值与映射,明文不入链(需求20-AC2)。

状态键设计(KV

content:{maCode}            -> Content JSON
binding:{maCode}:{idx}      -> HashBinding JSON
hashidx:{fileHash}          -> maCode      (防换壳重发)
mapping:{maCode}:{idx}      -> Mapping JSON
version:{maCode}:{idx}      -> VersionChange JSON
ctid2ma:{ctid}             -> maCode

构建与部署(真实链,二期接入)

# 依赖 ChainMaker contract SDK
go mod init tcs_registry
# 编译为 wasm 或 docker-go 合约,按 ChainMaker 部署流程发布

MVP 阶段:业务逻辑与规则已在 internal/chain.MemoryChain 完整实现并测试通过, 本合约为真实链落地的等价实现规格,二期搭建 ChainMaker 测试网后落地替换。