32 个版本
新 0.11.0-beta.7 | 2024 年 8 月 17 日 |
---|---|
0.11.0-beta.6 | 2024 年 5 月 24 日 |
0.11.0-beta.5 | 2024 年 3 月 12 日 |
0.11.0-beta.2 | 2023 年 12 月 25 日 |
0.4.0 | 2021 年 7 月 31 日 |
#147 在 模拟器
3,225 每月下载量
在 25 个 仓库(4 个直接使用)中使用
555KB
12K SLoC
AluVM rust 实现
AluVM(算术逻辑单元虚拟机)的 Rust 实现和汇编器,将 Alu 汇编语言转换为字节码。
AluVM 是一个纯功能注册表基础的、高度确定性和无异常的指令集架构(ISA)和虚拟机(VM),没有随机内存访问,能够执行算术操作,包括椭圆曲线操作。AluVM ISA 可以通过运行虚拟机的环境(宿主环境)进行扩展,提供将数据加载到 VM 注册器和支持特定应用指令(如 SIMD)的能力。
ALuVM 的主要目的是用于分布式系统,其中鲁棒性和平台无关的确定性比计算速度更重要。AluVM 的主要应用领域(使用适当的 ISA 扩展)是区块链环境、共识关键计算、边缘计算、多方计算(包括确定性机器学习)、客户端验证、沙盒计算和遗传算法。
有关 AluVM 的更多详细信息,请参阅 规范,观看 YouTube 上的详细演示或查看演示的 幻灯片。
设计
鲁棒性是 AluVM 的核心。它旨在避免任何未定义的行为。具体来说,
- 所有寄存器可能处于未定义状态;
- 不可能或不正确的操作将目标寄存器置于特殊的 未定义状态;
- 代码始终扩展到 2^16 字节,用零填充,对应于“设置 st0 寄存器为假并停止执行”操作码;
- 没有无效的跳转操作;
- 没有无效的指令;
- 循环和跳转计数有2^16的限制(有界时间执行);
- 无歧义:任何两个不同的字节字符串总是代表严格不同的程序;
- 代码始终是已签名的;
- 数据段始终是已签名的;
- 代码承诺使用所用的ISA扩展;
- 库通过签名识别;
- 如果库不全,则代码不运行;
指令集架构
指令操作码
- RISC:只有256条指令
- 三种核心指令系列
- 控制流
- 寄存器间的数据加载/移动
- ALU(包括密码学)
- 可使用ISA扩展进行扩展:127个操作为扩展预留
- 更多密码学
- 自定义数据I/O(区块链、LN、客户端验证)
- 遗传算法/代码自我修改
算术ISA的设计具有强大的鲁棒性目标
- 不可能的算术运算(0/0、Inf/inf)始终将目标寄存器设置为未定义状态(与IEEE-754中的NaN不同,它只有一个唯一的值)
- 导致值无法适应使用编码的位维度的操作,包括整数编码的无限表示(x/0如果x不等于0)会导致
- 对于浮点下溢,异常编码的数
- 对于浮点数中的x/0(如果x不等于0),±Inf浮点值
- 对于整数检查操作和浮点数的溢出:未定义值,将st0设置为false
- 对于整数封装操作中的溢出,最大寄存器值上的模除
大多数算术操作必须提供标志,指定应使用哪种编码和异常处理
- 整数编码有两个标志
- 一个用于编码的符号/无符号变体
- 一个用于检查或封装的异常处理变体
- 浮点编码有4种舍入方式,与IEEE-754选项匹配
因此,许多算术指令有8种变体,指示使用的编码(无符号整数或浮点数)以及在结果值无法适应寄存器时(整数溢出或封装和浮点数的四种舍入选项之一)的操作行为。
请查看规范以获取详细信息。
寄存器
ALU寄存器:8块32个寄存器
- 整数算术(A寄存器)块:8、16、32、64、128、256、512、1024位
- 浮点算术(F寄存器)块
- IEEE:二进制半精度、单精度、双精度、四精度、八精度
- IEEE扩展:80位X87寄存器
- BFloat16寄存器,用于机器学习
- 密码学操作(R寄存器)块:128、160、256、512、1024、2048、4096、8192位
- 字符串寄存器(S寄存器):1块256个寄存器,每个64kb
控制流寄存器
- 状态(st0),布尔值(1位)
- 周期计数器(cy0),16位
- 指令复杂度累加器(ca0),16位
- 调用栈寄存器(cs0),3*2^16位(192kB块)
- 调用栈指针寄存器(cp0),16位
历史
- 在2021年3月24日和31日,RGB项目的一部分认识到AluVM的需求(参见开发者电话https://youtu.be/JmKNyOMv68I)
- 概念于2021年5月19日提出(查看重播)
- 2021年5月28日发布了Rust AluVM实现的v0.1版本(ISA & API文档)
- 2021年6月9日发布了v0.2版本,包括多项增强(ISA & API文档) – 在YouTube上查看演示或阅读幻灯片
依赖关系
~4.5–7MB
~143K SLoC