50 lines
1.8 KiB
Markdown
50 lines
1.8 KiB
Markdown
# 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)
|