8 个版本
0.0.9 | 2024年6月27日 |
---|---|
0.0.8 | 2024年6月10日 |
0.0.7 | 2023年10月26日 |
#2717 in 魔法豆
496 每月下载量
140KB
3.5K SLoC
everscale-asm
状态:进行中
关于
TVM 汇编器的 Rust 实现。
LSP 服务器/客户端
- 安装 TVM Assembler VSCode 扩展
- 安装 CLI
cargo install --locked tvmasm
使用方法
使用 CLI 构建合约
tvmasm build ./src/tests/walletv3.tvm -o walletv3.boc
输出
Code path: walletv3.boc
Code hash: 84dafa449f98a6987789ba232358072bc0f76dc4524002a5d0918b9a75d2d599
Unique cells: 1
Unique bits: 888
从 Rust 构建合约
运行时
use everscale_asm::Code;
use everscale_types::prelude::Cell;
let code: Cell = Code::assemble(r#"
PUSHINT 1
SWAP DUP
PUSHCONT {
TUCK
MUL
SWAP
DEC
}
REPEAT
DROP
"#)?;
编译时间
use everscale_asm_macros::tvmasm;
use everscale_types::prelude::{Boc, Cell};
const CODE: &[u8] = tvmasm!(
"PUSHINT 1",
"PUSHCONT { INC PUSHINT 10 LESS }",
"PUSHCONT { DUMPSTK }",
"WHILE",
);
let code: Cell = Boc::decode(CODE)?;
语法
// Single-line comments
// Opcodes must be in uppercase, can start with a digit or minus,
// and can contain '#' or '_'
NOP
2DROP
-ROT
STREF_L
// Opcodes with number as an argument
PUSHINT 12
PUSHINT -0xded
PUSHINT 0b10110101
// Opcodes with stack register as an argument
PUSH s1
XCHG s10, s100
PU2XC s1, s(-1), s(-2)
// Opcodes with control registers (c0, .., c5, c7)
PUSH c3
PUSHCTR c7
// Opcodes with slice or continuation
PUSHSLICE x{123123_}
PUSHSLICE b{10001001}
IFREFELSEREF {
PUSHINT 1
}, {
PUSHINT 2
}
// Insert raw slices into code
@inline x{a924}
贡献
我们欢迎对项目的贡献!如果您发现任何问题或错误,请随时提出问题或提交拉取请求。
许可证
根据您的选择,许可为以下之一
- Apache License,版本 2.0 (LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
。
依赖关系
~14–27MB
~394K SLoC