18 KiB
charter-std-zh 模块深度分析报告
模块名称: charter-std-zh
版本: v1.0
分析日期: 2026-02-18
分析人员: NAC开发团队
📋 模块概览
功能定位: Charter语言中文标准库 - 提供Charter智能合约的中文API
英文全称: Charter Standard Library (Chinese)
代码行数: 384行(仅1个文件)
完成度: 5%
测试覆盖: 0% (无测试)
编译状态: ⚠️ 未测试(无编译器)
🏗️ 架构设计
核心功能
charter-std-zh是Charter语言的中文标准库,目前只包含一个模块:
- ACC-20: 可替代资产协议(Asset Certificate Contract - 20)
设计目标
- 中文编程: 使用中文关键字和函数名
- RWA专用: 专为实物资产(Real World Asset)设计
- GNACS集成: 集成GNACS资产分类编码
- 主权支持: 支持资产主权类型
目录结构
charter-std-zh/
├── README.md
├── acc/
│ └── acc20.ch (384行) - ACC-20协议实现
├── asset/ (空)
├── defi/ (空)
├── governance/ (空)
├── sovereignty/ (空)
└── utils/ (空)
问题: 除了acc20.ch外,其他目录都是空的
🔍 核心功能详解
1. ACC-20接口定义
1.1 接口概述
接口 ACC20 {
// 查询函数
函数 总供应量() -> u256;
函数 持有量(持有者: 地址) -> u256;
函数 名称() -> 字符串;
函数 符号() -> 字符串;
函数 小数位() -> u8;
函数 GNACS编码() -> GNACS编码;
函数 主权类型() -> 主权类型;
函数 授权额度(持有者: 地址, 代理人: 地址) -> u256;
// 交易函数
函数 转移(接收者: 地址, 数额: u256) -> bool;
函数 授权(代理人: 地址, 数额: u256) -> bool;
函数 代理转移(发送者: 地址, 接收者: 地址, 数额: u256) -> bool;
函数 增发(接收者: 地址, 数额: u256) -> bool;
函数 销毁(数额: u256) -> bool;
}
对比ERC-20:
| 功能 | ERC-20 | ACC-20 | 说明 |
|---|---|---|---|
| 总供应量 | totalSupply | 总供应量 | ✅ 相同 |
| 余额查询 | balanceOf | 持有量 | ✅ 相同 |
| 转账 | transfer | 转移 | ✅ 相同 |
| 授权 | approve | 授权 | ✅ 相同 |
| 授权额度 | allowance | 授权额度 | ✅ 相同 |
| 代理转账 | transferFrom | 代理转移 | ✅ 相同 |
| 名称 | name | 名称 | ✅ 相同 |
| 符号 | symbol | 符号 | ✅ 相同 |
| 小数位 | decimals | 小数位 | ✅ 相同 |
| GNACS编码 | - | GNACS编码 | ✨ 新增 |
| 主权类型 | - | 主权类型 | ✨ 新增 |
| 增发 | - | 增发 | ✨ 新增 |
| 销毁 | - | 销毁 | ✨ 新增 |
创新点:
- GNACS编码: 48位资产分类编码
- 主权类型: 资产主权属性
- 增发/销毁: 内置铸造和销毁功能
1.2 查询函数
基础查询
函数 总供应量() -> u256;
函数 持有量(持有者: 地址) -> u256;
函数 名称() -> 字符串;
函数 符号() -> 字符串;
函数 小数位() -> u8;
说明: 与ERC-20完全相同
RWA专用查询
函数 GNACS编码() -> GNACS编码;
函数 主权类型() -> 主权类型;
GNACS编码: 全球NAC资产分类系统
- 48位二进制编码
- 标识资产类型、地区、行业
主权类型: 资产主权属性
- 完全主权
- 部分主权
- 共享主权
- 无主权
授权查询
函数 授权额度(持有者: 地址, 代理人: 地址) -> u256;
说明: 查询持有者授权给代理人的额度
1.3 交易函数
转移
函数 转移(接收者: 地址, 数额: u256) -> bool;
功能: 将资产从调用者转移到接收者
事件: 转移事件(发送者, 接收者, 数额)
授权
函数 授权(代理人: 地址, 数额: u256) -> bool;
功能: 授权代理人使用一定数额的资产
事件: 授权事件(持有者, 代理人, 数额)
代理转移
函数 代理转移(发送者: 地址, 接收者: 地址, 数额: u256) -> bool;
功能: 代理人代表持有者转移资产
事件: 转移事件(发送者, 接收者, 数额)
增发
函数 增发(接收者: 地址, 数额: u256) -> bool;
功能: 增发新的资产(仅发行者)
权限: 仅发行者
事件:
增发事件(接收者, 数额)转移事件(零地址, 接收者, 数额)
销毁
函数 销毁(数额: u256) -> bool;
功能: 销毁调用者的资产
事件:
销毁事件(持有者, 数额)转移事件(持有者, 零地址, 数额)
2. ACC-20事件定义
2.1 转移事件
事件 转移事件 {
发送者: 地址,
接收者: 地址,
数额: u256,
}
触发时机:
- 转移
- 代理转移
- 增发(发送者为零地址)
- 销毁(接收者为零地址)
2.2 授权事件
事件 授权事件 {
持有者: 地址,
代理人: 地址,
数额: u256,
}
触发时机: 授权
2.3 增发事件
事件 增发事件 {
接收者: 地址,
数额: u256,
}
触发时机: 增发
2.4 销毁事件
事件 销毁事件 {
持有者: 地址,
数额: u256,
}
触发时机: 销毁
3. ACC-20基础实现
3.1 状态变量
私有 _名称: 字符串;
私有 _符号: 字符串;
私有 _小数位: u8;
私有 _gnacs编码: GNACS编码;
私有 _主权类型: 主权类型;
私有 _总供应量: u256;
私有 _持有量: 映射<地址, u256>;
私有 _授权: 映射<地址, 映射<地址, u256>>;
私有 _发行者: 地址;
存储结构:
- 基础信息: 名称、符号、小数位
- RWA信息: GNACS编码、主权类型
- 供应量: 总供应量
- 持有量: 地址 → 余额
- 授权: 持有者 → 代理人 → 额度
- 发行者: 发行者地址
3.2 构造函数
构造函数(
名称: 字符串,
符号: 字符串,
小数位: u8,
gnacs编码: GNACS编码,
主权类型: 主权类型,
初始供应量: u256
) {
_名称 = 名称;
_符号 = 符号;
_小数位 = 小数位;
_gnacs编码 = gnacs编码;
_主权类型 = 主权类型;
_发行者 = 消息.发送者;
如果 初始供应量 > 0 {
_总供应量 = 初始供应量;
_持有量[消息.发送者] = 初始供应量;
触发 转移事件 {
发送者: 地址::零地址(),
接收者: 消息.发送者,
数额: 初始供应量,
};
}
}
功能:
- 初始化基础信息
- 设置发行者为部署者
- 如果初始供应量>0,铸造给部署者
3.3 转移实现
函数 转移(接收者: 地址, 数额: u256) -> bool {
要求(接收者 != 地址::零地址(), "ACC20: 不能转移到零地址");
要求(_持有量[消息.发送者] >= 数额, "ACC20: 余额不足");
_持有量[消息.发送者] -= 数额;
_持有量[接收者] += 数额;
触发 转移事件 {
发送者: 消息.发送者,
接收者: 接收者,
数额: 数额,
};
返回 真;
}
验证:
- 接收者不能是零地址
- 发送者余额充足
操作:
- 扣除发送者余额
- 增加接收者余额
- 触发转移事件
3.4 代理转移实现
函数 代理转移(发送者: 地址, 接收者: 地址, 数额: u256) -> bool {
要求(接收者 != 地址::零地址(), "ACC20: 不能转移到零地址");
要求(_持有量[发送者] >= 数额, "ACC20: 余额不足");
要求(_授权[发送者][消息.发送者] >= 数额, "ACC20: 授权额度不足");
_持有量[发送者] -= 数额;
_持有量[接收者] += 数额;
_授权[发送者][消息.发送者] -= 数额;
触发 转移事件 {
发送者: 发送者,
接收者: 接收者,
数额: 数额,
};
返回 真;
}
验证:
- 接收者不能是零地址
- 发送者余额充足
- 代理人授权额度充足
操作:
- 扣除发送者余额
- 增加接收者余额
- 扣除授权额度
- 触发转移事件
3.5 增发实现
函数 增发(接收者: 地址, 数额: u256) -> bool {
要求(消息.发送者 == _发行者, "ACC20: 仅发行者可以增发");
要求(接收者 != 地址::零地址(), "ACC20: 不能增发到零地址");
_总供应量 += 数额;
_持有量[接收者] += 数额;
触发 增发事件 {
接收者: 接收者,
数额: 数额,
};
触发 转移事件 {
发送者: 地址::零地址(),
接收者: 接收者,
数额: 数额,
};
返回 真;
}
验证:
- 调用者是发行者
- 接收者不能是零地址
操作:
- 增加总供应量
- 增加接收者余额
- 触发增发事件和转移事件
3.6 销毁实现
函数 销毁(数额: u256) -> bool {
要求(_持有量[消息.发送者] >= 数额, "ACC20: 余额不足");
_持有量[消息.发送者] -= 数额;
_总供应量 -= 数额;
触发 销毁事件 {
持有者: 消息.发送者,
数额: 数额,
};
触发 转移事件 {
发送者: 消息.发送者,
接收者: 地址::零地址(),
数额: 数额,
};
返回 真;
}
验证: 调用者余额充足
操作:
- 扣除调用者余额
- 减少总供应量
- 触发销毁事件和转移事件
🐛 发现的问题
问题1: 标准库几乎为空
严重程度: ⚠️ 极高
描述: 除了ACC-20外,其他目录都是空的
缺失模块:
- asset/ - 资产管理
- defi/ - DeFi协议
- governance/ - 治理模块
- sovereignty/ - 主权模块
- utils/ - 工具函数
建议: 添加完整的标准库
charter-std-zh/
├── acc/
│ ├── acc20.ch (已有)
│ ├── acc721.ch (NFT协议)
│ └── acc1400.ch (证券型资产)
├── asset/
│ ├── gnacs.ch (GNACS编码)
│ ├── valuation.ch (估值)
│ └── metadata.ch (元数据)
├── defi/
│ ├── swap.ch (交换)
│ ├── lending.ch (借贷)
│ └── staking.ch (质押)
├── governance/
│ ├── voting.ch (投票)
│ ├── proposal.ch (提案)
│ └── timelock.ch (时间锁)
├── sovereignty/
│ ├── types.ch (主权类型)
│ ├── rules.ch (主权规则)
│ └── transfer.ch (主权转移)
└── utils/
├── math.ch (数学)
├── string.ch (字符串)
└── address.ch (地址)
状态: ❌ 待实现
问题2: 缺少编译器支持
严重程度: ⚠️ 极高
描述: Charter编译器不支持中文语法
影响: 无法编译和测试
建议: 扩展charter-compiler
// charter-compiler/src/parser.rs
pub enum Keyword {
// 英文关键字
Contract,
Function,
Event,
// 中文关键字
合约,
函数,
事件,
}
状态: ❌ 待实现
问题3: 缺少测试
严重程度: ⚠️ 高
描述: 没有任何测试
建议: 添加测试
// tests/acc20_test.ch
测试 ACC20基础功能 {
// 部署合约
让 合约 = 部署 ACC20基础(
名称: "测试资产",
符号: "TEST",
小数位: 18,
gnacs编码: GNACS::新建(0x123456),
主权类型: 主权类型::完全主权,
初始供应量: 1000000
);
// 测试总供应量
断言(合约.总供应量() == 1000000);
// 测试转移
合约.转移(地址::新建("0x..."), 100);
断言(合约.持有量(地址::新建("0x...")) == 100);
}
状态: ❌ 待添加
问题4: 缺少文档
严重程度: ⚠️ 中等
描述: README几乎为空
建议: 添加完整文档
# charter-std-zh
Charter语言中文标准库
## 模块
### ACC-20 - 可替代资产协议
ACC-20是NAC公链的可替代资产协议,类似于以太坊的ERC-20,但专为RWA设计。
#### 特性
- ✅ 兼容ERC-20
- ✨ GNACS资产分类编码
- ✨ 主权类型支持
- ✨ 内置增发/销毁
#### 使用示例
\`\`\`charter
使用 acc::acc20::ACC20基础;
合约 我的资产 继承 ACC20基础 {
构造函数() {
父::构造函数(
名称: "我的资产",
符号: "MYA",
小数位: 18,
gnacs编码: GNACS::新建(0x123456),
主权类型: 主权类型::完全主权,
初始供应量: 1000000
);
}
}
\`\`\`
状态: ❌ 待添加
问题5: 缺少示例
严重程度: ⚠️ 中等
描述: 没有示例代码
建议: 添加examples目录
charter-std-zh/
├── examples/
│ ├── basic_token.ch (基础代币)
│ ├── real_estate.ch (房产代币)
│ ├── art_token.ch (艺术品代币)
│ └── security_token.ch (证券型代币)
状态: ❌ 待添加
问题6: 中文关键字不一致
严重程度: ⚠️ 低
描述: 中文关键字的选择可能不够直观
建议: 统一关键字
// 当前
接口 ACC20 { ... }
合约 ACC20基础 实现 ACC20 { ... }
函数 转移(...) -> bool { ... }
// 建议
接口 ACC20 { ... }
合约 ACC20基础 实现 ACC20 { ... }
函数 转移(...) -> 布尔 { ... } // bool → 布尔
状态: ⏳ 待讨论
📊 完成度评估
| 功能模块 | 代码行数 | 完成度 | 状态 |
|---|---|---|---|
| ACC-20协议 | 384行 | 90% | ✅ 基本完成 |
| ACC-721协议 | 0行 | 0% | ❌ 未实现 |
| ACC-1400协议 | 0行 | 0% | ❌ 未实现 |
| 资产管理 | 0行 | 0% | ❌ 未实现 |
| DeFi协议 | 0行 | 0% | ❌ 未实现 |
| 治理模块 | 0行 | 0% | ❌ 未实现 |
| 主权模块 | 0行 | 0% | ❌ 未实现 |
| 工具函数 | 0行 | 0% | ❌ 未实现 |
| 测试覆盖 | 0行 | 0% | ❌ 无测试 |
| 总计 | 384行 | 5% | 🚧 刚起步 |
待完善功能
-
高优先级:
- ❌ 添加编译器支持
- ❌ 实现ACC-721(NFT)
- ❌ 实现ACC-1400(证券)
- ❌ 添加测试
-
中优先级:
- ❌ 实现资产管理模块
- ❌ 实现DeFi协议
- ❌ 实现治理模块
- ❌ 添加文档和示例
-
低优先级:
- ⏳ 实现主权模块
- ⏳ 实现工具函数
- ⏳ 统一中文关键字
🌟 设计亮点
-
中文编程
- 使用中文关键字
- 降低学习门槛
-
RWA专用
- GNACS编码
- 主权类型
-
兼容ERC-20
- 保留ERC-20核心功能
- 易于迁移
-
内置增发/销毁
- 简化资产管理
- 适合RWA场景
🔗 模块依赖关系
charter-std-zh
├── 依赖
│ ├── 资产::gnacs::GNACS编码
│ └── 主权::规则::主权类型
├── 被依赖
│ └── 所有使用ACC-20的合约
└── 协作模块
├── charter-std (英文版)
└── charter-compiler (编译器)
📝 开发建议
短期目标 (1周)
-
添加编译器支持 (优先级P1)
- 扩展词法分析器
- 支持中文关键字
- 测试编译
-
实现ACC-721 (优先级P1)
- NFT协议
- 元数据支持
- 枚举功能
-
添加测试 (优先级P1)
- ACC-20测试
- 集成测试
- 边界测试
中期目标 (2周)
-
实现ACC-1400 (优先级P2)
- 证券型资产
- 分区管理
- 合规检查
-
实现资产管理模块 (优先级P2)
- GNACS编码
- 估值系统
- 元数据管理
-
添加文档和示例 (优先级P2)
- 完善README
- 添加示例代码
- API文档
长期目标 (1个月)
-
实现DeFi协议 (优先级P3)
- 交换协议
- 借贷协议
- 质押协议
-
实现治理模块 (优先级P3)
- 投票系统
- 提案系统
- 时间锁
-
实现主权模块 (优先级P4)
- 主权类型定义
- 主权规则
- 主权转移
💡 使用示例
示例1: 基础代币
使用 acc::acc20::ACC20基础;
合约 基础代币 继承 ACC20基础 {
构造函数() {
父::构造函数(
名称: "基础代币",
符号: "BASIC",
小数位: 18,
gnacs编码: GNACS::新建(0x000000000001),
主权类型: 主权类型::完全主权,
初始供应量: 1000000 * 10**18
);
}
}
示例2: 房产代币
使用 acc::acc20::ACC20基础;
合约 房产代币 继承 ACC20基础 {
构造函数() {
父::构造函数(
名称: "北京朝阳区房产A",
符号: "BJ-CY-A",
小数位: 0, // 不可分割
gnacs编码: GNACS::新建(0x010203040506), // 房产类GNACS编码
主权类型: 主权类型::完全主权,
初始供应量: 100 // 100份
);
}
}
示例3: 艺术品代币
使用 acc::acc20::ACC20基础;
合约 艺术品代币 继承 ACC20基础 {
构造函数() {
父::构造函数(
名称: "梵高《向日葵》",
符号: "VG-SF",
小数位: 18,
gnacs编码: GNACS::新建(0x020304050607), // 艺术品类GNACS编码
主权类型: 主权类型::部分主权, // 艺术品可能有版权限制
初始供应量: 1000000 * 10**18
);
}
}
🔄 与charter-std的关系
charter-std-zh是charter-std的中文版本,两者功能完全相同,只是语言不同。
对比:
| 特性 | charter-std | charter-std-zh |
|---|---|---|
| 语言 | 英文 | 中文 |
| 功能 | 完整 | 仅ACC-20 |
| 完成度 | 90% | 5% |
| 目标用户 | 国际开发者 | 中文开发者 |
建议: 保持两者同步更新
分析完成时间: 2026-02-18
下一步: 添加编译器支持并实现ACC-721协议