#zero-knowledge #wrapper #field #traits #type #zkllvm #zk-llvm

yanked zkllvm-rslang-types

zkLLVM field type wrappers

1 unstable release

0.1.0 Oct 10, 2023

#302 in #zero-knowledge

MIT/Apache

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