JAM-Protocol

module
v0.0.0-...-c7fb743 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 24, 2026 License: Apache-2.0

README

JAM Protocol Implementation

New-JAMneration JAM Protocol banner

Go Format Check Release M1 Conformance License

A Go implementation of the Polkadot JAM Protocol, built by the New-JAMneration team.

Project Status

Table of Contents

Documentation

Our development documentation is maintained on HackMD for real-time collaboration and easy updates.

This is our mindmap link: JAM Mindmap

If you want to update the mindmap, you can go to the JAM-mindmap repository.

Access Documentation

Getting Started

Prerequisites
Clone the repository

This project uses git submodules (Rust-VRF and test-data vectors), so clone with submodules:

git clone --recurse-submodules https://github.com/New-JAMneration/JAM-Protocol.git

If you already cloned without --recurse-submodules:

git submodule update --init --recursive
Install dependencies
go mod tidy
Run the JAM Protocol
make run
Build the JAM Protocol
make build

Testing

Test jam-test-vectors

Run single test:

make test-jam-test-vectors mode=safrole size=full
make test-jam-test-vectors-trace mode=safrole

Run all:

make test-jam-test-vectors
make test-jam-test-vectors-trace

Conformance & Fuzzing

We continuously validate the node against the JAM Conformance fuzz protocol. See the Fuzz Validation guide for vectors, trace, socket, and CI steps.

Operations

Contributing

  • Coding Style: our codebase follows the Google Go Style Guide for consistent and maintainable code.
  • Code Formatting: we use gofmt to maintain consistent code formatting. See the commands here.
  • Commit Message: please stick to the Semantic Commit Messages when submitting a commit.
  • Pull Request: before creating a pull request, please rebase (instead of merging) your branch onto the target branch. Also, follow these instructions to link your PR to the assigned ticket's issue.

License

Licensed under the Apache License 2.0.

Directories

Path Synopsis
PVM
PVMtrace
Package PVMtrace provides per-instruction and host-call boundary tracing for PVM interpreter and recompiler backends.
Package PVMtrace provides per-instruction and host-call boundary tracing for PVM interpreter and recompiler backends.
PVMtrace/deblob
Package deblob provides utilities for extracting and writing PVM program static metadata (InstrMeta, BlockMeta) from program blobs.
Package deblob provides utilities for extracting and writing PVM program static metadata (InstrMeta, BlockMeta) from program blobs.
PVMtrace/diff
Package diff implements offline streaming comparison of two PVM trace directories.
Package diff implements offline streaming comparison of two PVM trace directories.
interpreter
Package interpreter is the cross-platform (pure-Go) PVM execution backend.
Package interpreter is the cross-platform (pure-Go) PVM execution backend.
recompiler
Package recompiler implements the PVM JIT recompiler's memory management layer, including executable memory (W^X), guest memory (unified mmap with slice aliasing), code cache, and control region accessors for the Generic Sandbox memory layout.
Package recompiler implements the PVM JIT recompiler's memory management layer, including executable memory (W^X), guest memory (unified mmap with slice aliasing), code cache, and control region accessors for the Generic Sandbox memory layout.
recompiler/asm
Package asm provides a minimal x86-64 assembler for the PVM JIT recompiler.
Package asm provides a minimal x86-64 assembler for the PVM JIT recompiler.
cmd
fuzz command
node command
pvmtrace command
Command pvmtrace provides offline PVM trace analysis tools.
Command pvmtrace provides offline PVM trace analysis tools.
internal
safrole
6.7.
6.7.
stf
telemetry
Package telemetry implements a JIP-3 telemetry client streaming node events to JamTART (or any compatible aggregator) over TCP.
Package telemetry implements a JIP-3 telemetry client streaming node events to JamTART (or any compatible aggregator) over TCP.
utilities/timing
Package timing provides utilities for measuring and reporting execution time of various code sections across the codebase.
Package timing provides utilities for measuring and reporting execution time of various code sections across the codebase.
jamtests
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL