1.8 KiB
1.8 KiB
NVM XTZH 汇率指令集扩展
Issue #61: NVM v2.1 新增指令 0xF0-0xF7
指令列表
| 操作码 | 助记符 | 操作数 | 描述 |
|---|---|---|---|
| 0xF0 | XTZH_RATE | - | 从系统状态树读取当前 XTZHRate,压栈 |
| 0xF1 | XTZH_RATE_HIST | epoch: u64 | 读取指定纪元历史汇率,压栈 |
| 0xF2 | XTZH_CONVERT | amount: u64, rate_ptr: ptr | XTZH → SDR 定点数转换 |
| 0xF3 | XTZH_CONVERT_INV | amount: u64, rate_ptr: ptr | SDR → XTZH 定点数转换 |
| 0xF4 | XTZH_VERIFY | receipt_ptr: ptr | 验证宪法收据,返回 bool |
| 0xF5 | SDR_BASKET | - | 读取 SDR 篮子权重数组,压栈 |
| 0xF6 | GOLD_COVERAGE | - | 计算黄金覆盖率,压栈 |
| 0xF7 | XTZH_FREEZE | receipt_ptr: ptr | 紧急冻结(需系统权限) |
安全约束
- 0xF7 (XTZH_FREEZE) 仅在
@system修饰的函数中可用 - 0xF4 (XTZH_VERIFY) 在编译期静态检查 ConstitutionalReceipt 类型
- 0xF0-0xF6 在
@view和@pure函数中均可调用 - 所有定点数运算使用 256 位中间精度,防止溢出
Charter 编译器映射规则
@builtin(0xF0) fn get_rate() -> XTZHRate
→ PUSH_SYSCALL 0xF0
→ POP_STRUCT XTZHRate (4 fields × 8 bytes = 32 bytes)
@builtin(0xF2) fn to_sdr(amount: u64, rate: XTZHRate) -> u64
→ PUSH amount
→ PUSH_STRUCT rate
→ SYSCALL 0xF2
→ POP u64
@system @builtin(0xF7) fn emergency_freeze(cr: CR) -> bool
→ CHECK_SYSCALL_PERMISSION SYSTEM
→ PUSH_STRUCT cr
→ SYSCALL 0xF7
→ POP bool
零成本抽象验证
所有 XTZH 汇率操作均直接映射为 1-2 条 NVM 指令,无运行时开销:
- get_rate() → 1 条指令(XTZH_RATE)
- to_sdr() → 3 条指令(PUSH + PUSH_STRUCT + SYSCALL)
- verify_rate_receipt() → 2 条指令(PUSH_STRUCT + XTZH_VERIFY)