2 个版本
| 1.0.1 |
|
|---|---|
| 1.0.0 |
|
| 0.1.1 | 2024 年 1 月 31 日 |
| 0.1.0 | 2023 年 11 月 8 日 |
#18 in #llvm-ir
每月 39 下载次数
2MB
50K SLoC
简介
Ola 是一种用于开发 OlaVM 智能合约的高级编程语言。它是图灵完备的,可以用来编写算术程序。计算过程通过 OlaVM 后端证明系统得到证明,该系统验证 OlaVM 处理的准确性。大多数现有的 ZKP 领域编程语言都需要对电路领域的根本知识,这并非普遍适用,或者执行过程难以通过 ZKP 进行证明和验证。
👉👉📖 Ola 语言文档
简单示例
以下是一个用于计算斐波那契函数的简单合约示例
contract Fibonacci {
fn fib_recursive(u32 n) -> (u32) {
if (n <= 2) {
return 1;
}
return fib_recursive(n -1) + fib_recursive(n -2);
}
fn fib_non_recursive(u32 n) -> (u32) {
u32 first = 0;
u32 second = 1;
u32 third = 1;
for (u32 i = 2; i <= n; i++) {
third = first + second;
first = second;
second = third;
}
return third;
}
}
Ola 语言特性
语言类型
- 简单类型:包括
u32、field、bool、enum、address和hash类型。在 Ola 中,所有数据类型都内部表示为field类型的组合。field类型的最大值是0xFFFFFFFF00000001。地址和哈希类型内部表示为四个field元素组成的数组。 - 复杂类型:包括静态数组、动态数组、
string、fields、结构体和映射。fields 类型是 field 元素的动态数组。 - 类型别名:支持类型别名。
运算符
- 不同类型支持不同的运算符。类型
u32支持最多的运算符,例如:+、-、*、/、%、**、==、!=等。
函数
- 函数的语法与 Solidity 和 Rust 类似,使用关键字
fn来声明函数。
控制流程
- 控制流程结构包括
if语句、if-else语句、while语句、do-while语句、for循环、continue和break。
先知函数
- Ola 语言中的
prophet函数用于特定场景下的非确定性计算,例如u32_sqrt、u32_quick_sort等。
核心库函数
- Ola 语言提供了许多核心库,包括
assert、print、fileds_conct、encode、decode等。
IR 生成
- Ola 语言由前端处理为 LLVM IR 的子集以进行编译。
Olac 后端
Olac 编译器前端生成的 LLVM IR 子集被降级为 OlaVM 字节码,以便由 OlaVM 虚拟机执行。
支持的 LLVM IR 子集
类型系统
void类型- 函数类型
- 一阶类型内的单值类型支持
i64、i1、ptr类型 label和token类型- 数组、结构等聚合类型
指令集
- 终端指令:
ret、br、switch - 一元运算:
neg - 二元运算:
add、sub、mul - 逻辑运算:
and、or、xor - 聚合运算:
insertvalue、extractvalue - 内存访问和寻址:
alloca、store、load、getelementptr - 转换指令:
trunc - 其他操作:
icmp、phi、call
支持的 IR 库扩展
- 包括内置和先知:
assert、rangecheck、u32_sqrt、div、mod、vec_new、poseidon_hash - 合约存储访问操作:
set_storage、get_storage - 合约输入/输出访问操作:
get_context_data、get_tape_data、set_tape_data - 调试:
printf - 跨合约调用:
contract_call
OlaVM 汇编
- 汇编语言包括
program和prophet部分,分别由 VM 直接执行和嵌入式解释器解释。 program部分:定义汇编输出格式,支持整个 OlaVM 自定义指令集。prophet部分:指在 IR 库扩展中描述的prophets集合。
未来工作
- 引入测试框架,更有序的语言设计,以及稳健的编译器工程实现。
- 堆内存分配和管理重构,更简洁的指令生成。
- 优化前端和后端的代码生成,指令生成和执行效率更高。
- 设计面向对象的合约语法,增强语言的表达能力。
- 扩展合约中的隐私功能,支持 ZK 隐私合约编程。
🧰 故障排除
如果您在安装和使用 Ola 时遇到问题,请打开 问题。
许可证
依赖项
~10–20MB
~266K SLoC