Skip to main content

tools for working with chialisp language; compiler, repl, python and wasm bindings

Project description

clvm_tools_rs

GitHub Coverage Status Build Crate Build Wheels

PyPI Crates.io

Theory of operation of the modern compiler: ./HOW_CHIALISP_IS_COMPILED.md

This repo can be installed via cargo

cargo install clvm_tools_rs

or via pip

pip install clvm_tools_rs@git+https://github.com/Chia-Network/clvm_tools_rs.git@e17412032aa7d3b8b1d1f931893fb5802eee626a

Note: pip installs a subset of the tools installed by cargo, including brun, run, opc and opd.

The most current version of the language is in the nightly branch:

[nightly](https://github.com/Chia-Network/clvm_tools_rs/tree/nightly)

To install from a specific branch:

cargo install --no-default-features --git 'https://github.com/Chia-Network/clvm_tools_rs' --branch nightly

To install a git checkout into your current python environment (must be in some kind of venv or conda environment):

git clone https://github.com/Chia-Network/clvm_tools_rs
cd clvm_tools_rs
maturin develop

Install from PYPI:

pip install -i https://pypi.chia.net/nightlies/ clvm_tools_rs

Most people still compile chialisp via python. One way to set up compilation in that way is like this:

import json
from clvm_tools_rs import compile_clvm

def compile_module_with_symbols(include_paths,source):
    path_obj = Path(source)
    file_path = path_obj.parent
    file_stem = path_obj.stem
    target_file = file_path / (file_stem + ".clvm.hex")
    sym_file = file_path / (file_stem + ".sym")
    compile_result = compile_clvm(source, str(target_file.absolute()), include_paths, True)
    symbols = compile_result['symbols']
    if len(symbols) != 0:
        with open(str(sym_file.absolute()),'w') as symfile:
            symfile.write(json.dumps(symbols))

The command line tools provided:

- run -- Compiles CLVM code from chialisp

Most commonly, you'll compile chialisp like this:

  ./target/debug/run -O -i include_dir chialisp.clsp

'run' outputs the code resulting from compiling the program, or an error.

- repl -- Accepts chialisp forms and expressions and produces results
          interactively.
          
Run like:

  ./target/debug/repl
  
Example session:

>>> (defmacro assert items
   (if (r items)
       (list if (f items) (c assert (r items)) (q . (x)))
     (f items)
     )
   )
(q)
>>> (assert 1 1 "hello")
(q . hello)
>>> (assert 1 0 "bye")
failed: CompileErr(Srcloc { file: "*macros*", line: 2, col: 26, until: Some(Until { line: 2, col: 82 }) }, "clvm raise in (8) (())")
>>> 

- cldb -- Stepwise run chialisp programs with program readable yaml output.

  ./target/debug/cldb '(mod (X) (x X))' '(4)'
  ---
  - Arguments: (() (4))
    Operator: "4"
    Operator-Location: "*command*(1):11"
    Result-Location: "*command*(1):11"
    Row: "0"
    Value: (() 4)
  - Env: "4"
    Env-Args: ()
    Operator: "2"
    Operator-Location: "*command*(1):11"
    Result-Location: "*command*(1):13"
    Row: "1"
    Value: "4"
  - Arguments: (4)
    Failure: clvm raise in (8 5) (() 4)
    Failure-Location: "*command*(1):11"
    Operator: "8"
    Operator-Location: "*command*(1):13"

- brun -- Runs a "binary" program.  Instead of serving as a chialisp
  compiler, instead runs clvm programs.

As 'brun' from the python code:

$ ./target/debug/run '(mod (X) (defun fact (N X) (if (> 2 X) N (fact (* X N) (- X 1)))) (fact 1 X))'
(a (q 2 2 (c 2 (c (q . 1) (c 5 ())))) (c (q 2 (i (> (q . 2) 11) (q . 5) (q 2 2 (c 2 (c (* 11 5) (c (- 11 (q . 1)) ()))))) 1) 1))
$ ./target/debug/brun '(a (q 2 2 (c 2 (c (q . 1) (c 5 ())))) (c (q 2 (i (> (q . 2) 11) (q . 5) (q 2 2 (c 2 (c (* 11 5) (c (- 11 (q . 1)) ()))))) 1) 1))' '(5)'
120

- opc -- crush clvm s-expression form to hex.

As 'opc' from the python code.

opc '(a (q 2 2 (c 2 (c (q . 1) (c 5 ())))) (c (q 2 (i (> (q . 2) 11) (q . 5) (q 2 2 (c 2 (c (* 11 5) (c (- 11 (q . 1)) ()))))) 1) 1))'
ff02ffff01ff02ff02ffff04ff02ffff04ffff0101ffff04ff05ff8080808080ffff04ffff01ff02ffff03ffff15ffff0102ff0b80ffff0105ffff01ff02ff02ffff04ff02ffff04ffff12ff0bff0580ffff04ffff11ff0bffff010180ff808080808080ff0180ff018080

- opd -- disassemble hex to s-expression form.

As 'opd' from the python code.

opd 'ff02ffff01ff02ff02ffff04ff02ffff04ffff0101ffff04ff05ff8080808080ffff04ffff01ff02ffff03ffff15ffff0102ff0b80ffff0105ffff01ff02ff02ffff04ff02ffff04ffff12ff0bff0580ffff04ffff11ff0bffff010180ff808080808080ff0180ff018080'
(a (q 2 2 (c 2 (c (q . 1) (c 5 ())))) (c (q 2 (i (> (q . 2) 11) (q . 5) (q 2 2 (c 2 (c (* 11 5) (c (- 11 (q . 1)) ()))))) 1) 1))

History

This is a second-hand port of chia's clvm tools to rust via the work of ChiaMineJP porting to typescript. This would have been a lot harder to get to where it is without prior work mapping out the types of various semi-dynamic things (thanks, ChiaMineJP).

Some reasons for doing this are:

  • Chia switched the clvm implementation to rust: clvm_rs, and this code may both pick up speed and track clvm better being in the same language.

  • I wrote a new compiler with a simpler, less intricate structure that should be easier to improve and verify in the future in ocaml: ochialisp.

  • Also it's faster even in this unoptimized form.

All acceptance tests i've brought over so far work, and more are being added. As of now, I'm not aware of anything that shouldn't be authentic when running these command line tools from clvm_tools in their equivalents in this repository

  • opc

  • opd

  • run

  • brun

  • repl

argparse was ported to javascript and I believe I have faithfully reproduced it as it is used in cmds, so command line parsing should work similarly in all three versions.

The directory structure is expected to be:

src/classic  <-- any ported code with heritage pointing back to
                 the original chia repo.
                
src/compiler <-- a newer compiler (ochialisp) with a simpler
                 structure.  Select new style compilation by
                 including a `(include *standard-cl-21*)`
                 form in your toplevel `mod` form.

Mac M1

Use cargo build --no-default-features due to differences in how mac m1 and other platforms handle python extensions.

Use with chia-blockchain

# Activate your venv, then
$ maturin develop --release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clvm_tools_rs-0.4.0.tar.gz (552.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

clvm_tools_rs-0.4.0-cp39-abi3-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.9+Windows x86-64

clvm_tools_rs-0.4.0-cp39-abi3-musllinux_1_1_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.1+ x86-64

clvm_tools_rs-0.4.0-cp39-abi3-manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ x86-64

clvm_tools_rs-0.4.0-cp39-abi3-manylinux_2_28_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

clvm_tools_rs-0.4.0-cp39-abi3-macosx_13_0_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.9+macOS 13.0+ x86-64

clvm_tools_rs-0.4.0-cp39-abi3-macosx_13_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.9+macOS 13.0+ ARM64

File details

Details for the file clvm_tools_rs-0.4.0.tar.gz.

File metadata

  • Download URL: clvm_tools_rs-0.4.0.tar.gz
  • Upload date:
  • Size: 552.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for clvm_tools_rs-0.4.0.tar.gz
Algorithm Hash digest
SHA256 81860b64bb0a67ec8b471d45632a2809c462356eacfbe3c2ccd9a53d9c4798dd
MD5 9036fdd765566032d023f33900bec9c2
BLAKE2b-256 6e9c291e2a56057a2750581c1f8a2795ccbecfd8213a48879ebbbc71c81b5d0e

See more details on using hashes here.

Provenance

The following attestation bundles were made for clvm_tools_rs-0.4.0.tar.gz:

Publisher: build-test.yml on Chia-Network/clvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clvm_tools_rs-0.4.0-cp39-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for clvm_tools_rs-0.4.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 759fd851dfe95d23ef7192c4a4c306de66230db703873d50d5d32e3040cfdf53
MD5 ec5199013d17ff78fad3c0eb9a410a88
BLAKE2b-256 55a30449785c7fd099b82999c3bf697db42c573557b53111295f13cbc9be714a

See more details on using hashes here.

Provenance

The following attestation bundles were made for clvm_tools_rs-0.4.0-cp39-abi3-win_amd64.whl:

Publisher: build-test.yml on Chia-Network/clvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clvm_tools_rs-0.4.0-cp39-abi3-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for clvm_tools_rs-0.4.0-cp39-abi3-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 5c469dfa29ae9936c53af575360025a1115d88bfc46f25b9ac1eabb2031dd1ce
MD5 f995d5190221b454814b507e9b78eea5
BLAKE2b-256 866ee631cbae5b77e206403339f74ad3eb88de0c3b33ea74fec3901a03ebe8bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for clvm_tools_rs-0.4.0-cp39-abi3-musllinux_1_1_x86_64.whl:

Publisher: build-test.yml on Chia-Network/clvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clvm_tools_rs-0.4.0-cp39-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for clvm_tools_rs-0.4.0-cp39-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3e8ff1aa203a8aa876391d72d2527af0980114a99b9ddbf2230b3ca4ff17ded3
MD5 96ff60f07ce19ebc9fa454ecfddeae24
BLAKE2b-256 2b66ad16ffa16a2274f015f3752ed1ab3a89c493e33b10c6d9677b372450be48

See more details on using hashes here.

Provenance

The following attestation bundles were made for clvm_tools_rs-0.4.0-cp39-abi3-manylinux_2_28_x86_64.whl:

Publisher: build-test.yml on Chia-Network/clvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clvm_tools_rs-0.4.0-cp39-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for clvm_tools_rs-0.4.0-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 82369052c2bb3a90df6120e8679d48fb2d9a546355be4acd73ebb0d3304b1726
MD5 dc6be73d3eba1b884c3c3dec34879201
BLAKE2b-256 5ae06d4b9c9f6b317098aed246e6e9f1b5825f5c3fab72f852441bbdd11219c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for clvm_tools_rs-0.4.0-cp39-abi3-manylinux_2_28_aarch64.whl:

Publisher: build-arm64-wheels.yml on Chia-Network/clvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clvm_tools_rs-0.4.0-cp39-abi3-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for clvm_tools_rs-0.4.0-cp39-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 78a39bd07c093e85c93924d67b5847155bf6c52fe8d1510a8a8cf11de3bbbd32
MD5 66fcb07b15bad427b282ebb0925863c8
BLAKE2b-256 6f2a25eefc4f8f12ad9f0864095ec52c9b475feae9ba79054c728c024001183f

See more details on using hashes here.

Provenance

The following attestation bundles were made for clvm_tools_rs-0.4.0-cp39-abi3-macosx_13_0_x86_64.whl:

Publisher: build-test.yml on Chia-Network/clvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clvm_tools_rs-0.4.0-cp39-abi3-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for clvm_tools_rs-0.4.0-cp39-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 4f2973b5e31c5844857757f9365881cbe698f578add5536a7bca325231df655c
MD5 5f44fccf67652902c8b498d9f741fe63
BLAKE2b-256 dc95de14a0b38c833c643868d48e27a870d85bc180b3de1568cdd69e980c3d2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for clvm_tools_rs-0.4.0-cp39-abi3-macosx_13_0_arm64.whl:

Publisher: build-m1-wheel.yml on Chia-Network/clvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page