1 unstable release
0.1.0 | Oct 10, 2023 |
---|
#302 in #zero-knowledge
35KB
789 lines
zkllvm-rslang-types
This library defines zkLLVM field type wrappers with implemented external traits.
For more info about zkLLVM visit homepage.
This library is supposed to be built only with rslang
compiler (fork of Rust compiler).
Installation instructions may be found here.
Since rslang
-defined types are used, compiling with original Rust compiler will naturally lead to an error.
The same will happened if one is trying to build for any target different from assigner-unknown-unknown
.
Right now this will lead to an unpleasent segmentation fault, but the fix is comming up soon (tracking issue).
Motivation
The main reason to use type wrappers is traits: it is not allowed to implement external traits on built-in types. Thus to avoid forking a large number of popular public crates and implement their traits at their own crates, this library was created.
To control which traits are implemented one can use crate features.
For now available: hash
, ord
, iter
, int-conversions
, num-traits
.
Arithmetic and formatting traits are implemented by default.
Usage
To add zkllvm-rslang-types
to your dependencies, add this to your Cargo.toml
:
zkllvm-rslang-types = "0.1.0"
If you want to add e.g. implementations of integer conversions, add this:
zkllvm-rslang-types = { version = "0.1.0", features = [ "int-conversions" ]}
Example
Type wrappers fully support same operations that built-in types do. The only difference comes across when instantiating variable from a literal:
let x: PallasBase = 1g.into();
Since field literals (e.g. 1g
) are used to define built-in types,
one have to explicitly convert them into type wrappers with into
.
Alternatively one can explicitly wrap the literal:
let x = PallasBase(1g);
Dependencies
~0–600KB
~12K SLoC