# JAM SDK The Parity JAM SDK is at a very early stage of development but is functional for developing JAM services and authorizers. It consists of three main components: - JAM Types & PVM Common - JAM Bootstrap Service & Null Authorizer - JAM PVM Builder ## JAM Types & PVM Common This the basic API of the SDK, including traits, types, functions and macros needed for expressing Services and Authorizers, including their invocations, returns and host functions. There are two crates: [`jam-types`](https://docs.rs/jam-types/latest/jam_types/) and [`jam-pvm-common`](https://docs.rs/jam-pvm-common/latest/jam_pvm_common/). ## JAM Bootstrap Service & Null Authorizer These are two basic PVM modules useful for creating sensible JAM Genesis configurations. They can be found in crates.io under [`jam-null-authorizer`](https://crates.io/crates/jam-null-authorizer) and [`jam-bootstrap-service`](https://crates.io/crates/jam-bootstrap-service). After installing [`rustup`](https://rustup.rs), Bootstrap service can be downloaded using `cargo clone`: ```sh $ cargo install cargo-clone # NOTE only needed once ... $ cargo clone jam-bootstrap-service ``` The code for null authorizer can be cloned in a similar manner. ## JAM PVM Builder The [JAM PVM Builder](https://crates.io/crates/jam-pvm-builder) is CLI tool which allows PVM code blobs be built, either services or authorizers. After installing [`rustup`](https://rustup.rs), it can be installed with: ```sh $ rustup toolchain install nightly-2024-11-01 -c rust-src # NOTE only needed once $ cargo install jam-pvm-build ``` Its usage can be seen in the usual way: ```sh $ jam-pvm-build --help CLI utility for building PVM code blobs, particularly services and authorizers. Usage: jam-pvm-build [OPTIONS] [PATH] Arguments: [PATH] Path of crate to build, defaults to current directory Options: -o, --output <OUTPUT> Output path -m, --module <MODULE> Module type to build [default: automatic] Possible values: - automatic: Automatically derive the module type from the crate name - service: Service - authorizer: Authorizer --auto-install Install rustc dependencies if missing -h, --help Print help (see a summary with '-h') -V, --version Print version ``` For example, the `jam-null-authorizer` could be built using just: ```sh $ cargo clone jam-null-authorizer ... $ jam-pvm-build ./jam-null-authorizer ``` You could find the PVM binary `jam-bootstrap-service.pvm` in the current directory.