https://github.com/broxus/everscale-asm
Rust implementation of TVM Assembler
https://github.com/broxus/everscale-asm
blockchain everscale tvm venom-blockchain venom-developer-program vm
Last synced: 6 months ago
JSON representation
Rust implementation of TVM Assembler
- Host: GitHub
- URL: https://github.com/broxus/everscale-asm
- Owner: broxus
- License: apache-2.0
- Created: 2023-10-14T22:28:41.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-09-23T13:34:49.000Z (8 months ago)
- Last Synced: 2024-11-15T00:48:21.039Z (6 months ago)
- Topics: blockchain, everscale, tvm, venom-blockchain, venom-developer-program, vm
- Language: Rust
- Homepage:
- Size: 306 KB
- Stars: 2
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# everscale-asm [![crates-io-batch]][crates-io-link] [![docs-badge]][docs-url] [![rust-version-badge]][rust-version-link] [![workflow-badge]][workflow-link]
[crates-io-batch]: https://img.shields.io/crates/v/everscale-asm.svg
[crates-io-link]: https://crates.io/crates/everscale-asm
[docs-badge]: https://docs.rs/everscale-asm/badge.svg
[docs-url]: https://docs.rs/everscale-asm
[rust-version-badge]: https://img.shields.io/badge/rustc-1.70+-lightgray.svg
[rust-version-link]: https://blog.rust-lang.org/2023/06/01/Rust-1.70.0.html
[workflow-badge]: https://img.shields.io/github/actions/workflow/status/broxus/everscale-asm/master.yaml?branch=master
[workflow-link]: https://github.com/broxus/everscale-asm/actions?query=workflow%3Amaster
> Status: WIP
## About
Rust implementation of TVM Assembler.
## LSP Server/Client
- Install [TVM Assembler](https://marketplace.visualstudio.com/items?itemName=Rexagon.tvmasm-lsp) VSCode extension
- Install CLI
```bash
cargo install --locked tvmasm
```## How to use
### Building a contract using CLI
```bash
tvmasm build ./src/tests/walletv3.tvm -o walletv3.boc
```
Output:
```
Code path: walletv3.boc
Code hash: 84dafa449f98a6987789ba232358072bc0f76dc4524002a5d0918b9a75d2d599
Unique cells: 1
Unique bits: 888
```### Building a contract from Rust
Runtime:
```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
"#)?;
```Compile time:
```rust
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)?;
```## Syntax
```
// 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}
```[Full opcodes list](https://test.ton.org/tvm.pdf)
## Contributing
We welcome contributions to the project! If you notice any issues or errors, feel free to open an issue or submit a pull request.
## License
Licensed under either of
* Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or )
* MIT license ([LICENSE-MIT](LICENSE-MIT) or )at your option.