02 · 核心概念
上一章说明了 Project RWA 的用途和接入层次。本章从一项资产和一个投资者出发,依次解释后续流程中会用到的核心对象。
2.1 Token:资产份额
每项 RWA 资产都有一个独立的 ERC-3643 Token。
它兼容常用 ERC-20 接口:
name / symbol / decimals
totalSupply / balanceOf
transfer / approve / transferFrom
Transfer / Approval
同时增加:
- 投资者资格校验;
- 合规规则校验;
- 暂停和冻结;
- Agent 增发、销毁和强制转移;
- 丢失钱包恢复。
因此,外部应用可以像读取 ERC-20 一样读取 Token,但不能假设“余额足够就一定能转账”。
金额使用链上整数:
链上 amount = 展示数量 × 10^decimals
PRWA 的 decimals 为 6,因此 1 PRWA = 1,000,000。接入其他资产时必须动态调用 decimals()。
2.2 钱包:签名和持有资产
投资者钱包是 EOA 地址,用于:
- 签署链上交易;
- 支付 gas;
- 持有 Token;
- 控制自己的 ONCHAINID。
钱包地址本身不保存 KYC 结论。是否具备持有资格,需要通过钱包关联的 ONCHAINID 和目标资产的 IdentityRegistry 判断。
2.3 ONCHAINID:投资者链上身份
ONCHAINID 是智能合约地址,不是另一个普通钱包。
钱包与 ONCHAINID 的区别:
| 项 | 钱包 | ONCHAINID |
|---|---|---|
| 类型 | EOA | 智能合约 |
| 主要作用 | 签名、付 gas、持有 Token | 管理身份密钥和 Claim |
| 是否直接保存 KYC 明文 | 否 | 不应保存 |
| 创建入口 | 钱包工具 | ONCHAINID Gateway |
投资者通常调用 ONCHAINID Gateway.deployIdentityForWallet(wallet) 创建身份。IdFactory.getIdentity(wallet) 可查询钱包是否已经有关联身份。
2.4 Claim:机构签名的资格结论
Claim 表示“某个资格签发机构确认该身份满足某项条件”。
常用字段:
| 字段 | 含义 |
|---|---|
topic | 资格类型,例如 KYC 已通过 |
scheme | 签名方案 |
issuer | ClaimIssuer 合约 |
signature | 资格机构生成的签名 |
data | 被签名的资格数据 |
uri | 可选链下引用 |
Claim 的形成分成两步:
- 资格机构在链下审核并生成签名;
- 投资者将签名和 Claim 字段写入自己的 ONCHAINID。
签名由资格机构生成,但 addClaim 链上交易通常由投资者发起并支付 gas。
Claim 中不应写入姓名、证件号、住址、证件照片等明文材料。链上只需要保存可验证的资格结论。
2.5 ClaimIssuer:资格签发机构
ClaimIssuer 代表可被资产认可的资格机构。
它负责:
- 在链下完成 KYC/AML 或其他审核;
- 使用受控签名密钥生成 Claim 签名;
- 必要时撤销资格;
- 保护签名密钥。
普通应用自行生成的签名不会自动获得认可。目标资产必须在 TrustedIssuersRegistry 中登记该 ClaimIssuer,并允许它签发目标 Topic。
2.6 IdentityRegistry:某项资产的资格入口
Claim 写入 ONCHAINID 后,投资者还需要登记到目标资产的 IdentityRegistry。
IdentityRegistry 组合四类信息:
必须区分两个结果:
contains(wallet):钱包是否已经登记;isVerified(wallet):钱包是否满足当前资产的全部资格要求。
已登记不代表资格一定有效。外部应用应以 isVerified 作为最终判断。
2.7 为什么资格与资产绑定
不同资产可以要求不同资格:
因此:
- 同一个 ONCHAINID 可以被多项资产使用;
- Claim 能否复用取决于资产是否认可相同 Topic 和 ClaimIssuer;
registerIdentity是对具体资产的 IdentityRegistry 执行;- 参与多项独立资产时,通常需要分别登记;
- 查询资格时,应先通过
Token.identityRegistry()找到正确的注册表。
不要用“资产 A 验证通过”推断“资产 B 也验证通过”。
2.8 ModularCompliance:交易规则
IdentityRegistry 回答“这个钱包是否可以持有”;ModularCompliance 回答“这笔交易是否可以发生”。
规则模块可以表达:
- 国家或地区白名单;
- 单地址持仓上限;
- 总发行量上限;
- 锁定期;
- 投资者类别;
- 转账额度或其他限制。
具体规则以目标资产的链上配置和公开说明为准,不能根据其他资产推断。
2.9 一笔转账的完整检查
部分冻结时:
可用余额 = balanceOf(wallet) - getFrozenTokens(wallet)
2.10 Suite:一项资产的一组合约
一项资产不只有 Token。完整 Suite 通常包含:
| 合约 | 作用 |
|---|---|
Token | 资产份额和持有人操作入口 |
IdentityRegistry | 判断钱包是否具备持有资格 |
IdentityRegistryStorage | 保存钱包、身份和国家码映射 |
ClaimTopicsRegistry | 保存该资产要求的资格 Topic |
TrustedIssuersRegistry | 保存该资产认可的 ClaimIssuer |
ModularCompliance | 组合该资产的交易规则 |
外部应用最常使用 Token 和 IdentityRegistry。其他合约用于解释资格要求和规则。
2.11 代理地址
Project RWA 的业务合约使用代理模式:
接入方应保存公开地址表中的代理地址,不要把实现合约地址当作业务地址。
2.12 ERC-3643 约定与术语
| 项 | 说明 |
|---|---|
| T-REX | ERC-3643 的参考实现体系;一项资产的配套合约集合称为 Suite |
| Topic | 协议不固定 1 = KYC;每个项目应公开 Topic 名称、数值和版本 |
| 国家码 | uint16,通常使用 ISO 3166-1 numeric,例如中国 156、新加坡 702 |
| IR / IRS | IdentityRegistry / IdentityRegistryStorage |
| CTR / TIR | ClaimTopicsRegistry / TrustedIssuersRegistry |
| MC | ModularCompliance |
| IA | Implementation Authority,代理合约使用的实现版本入口 |
链上保存的是资格结论、地址映射、资产余额和规则参数,不应保存姓名、证件号、照片等 KYC 明文资料。
2.13 接下来阅读什么
现在已经理解单个对象的含义。下一章将把这些对象放进完整系统,说明哪些合约平台共享、哪些合约属于具体资产,以及每个角色负责什么: