Skip to main content

Crate leo_package

Crate leo_package 

Source
Expand description

This crate deals with Leo packages on the file system and network.

The main type is Package, which deals with Leo packages on the local filesystem. A Leo package directory is intended to have a structure like this: . ├── program.json ├── build │ ├── imports │ │ └── credits.aleo │ └── main.aleo ├── outputs │ ├── program.TypeChecking.ast │ └── program.TypeChecking.json ├── src │ └── main.leo └── tests └── test_something.leo

The file program.json is a manifest containing the program name, version, description, and license, together with information about its dependencies.

Such a directory structure, together with a .gitignore file, may be created on the file system using Package::initialize.

let path = Package::initialize("my_package", "path/to/parent", false).unwrap();

tests is where unit test files may be placed.

Given an existing directory with such a structure, a Package may be created from it with Package::from_directory:

use leo_package::Package;
let package = Package::from_directory("path/to/package", "/home/me/.aleo", false, false, Some(NetworkName::TestnetV0), Some("http://localhost:3030")).unwrap();

This will read the manifest and keep their data in package.manifest. It will also process dependencies and store them in topological order in package.compilation_units. This processing will involve fetching bytecode from the network for network dependencies. If the no_cache option (3rd parameter) is set to true, the package will not use the dependency cache. The endpoint and network are optional and are only needed if the package has network dependencies.

If you want to simply read the manifest file without processing dependencies, use Package::from_directory_no_graph.

CompilationUnit generally doesn’t need to be created directly, as Package will create CompilationUnits for the main program and all dependencies. However, if you’d like to fetch bytecode for a program, you can use CompilationUnit::fetch.

Structs§

CompilationUnit
Information about a single Leo compilation unit.
Dependency
Information about a dependency, as represented in the program.json manifest.
Manifest
Struct representation of program’s program.json specification.
Package
A Leo package.

Enums§

Location
PackageKind
The kind of a Leo compilation unit: a deployable program, a library, or a test.
ProgramData
Either the bytecode of an Aleo program (if it was a network dependency) or a path to its source (if it was local).

Constants§

ABI_FILENAME
BUILD_DIRECTORY
IMPORTS_DIRECTORY
LIB_FILENAME
MAIN_FILENAME
MANIFEST_FILENAME
MAX_PROGRAM_SIZE
Maximum allowed program size in bytes.
OUTPUTS_DIRECTORY
SOURCE_DIRECTORY
TESTS_DIRECTORY

Functions§

create_http_agent
Creates a configured ureq agent for Leo network requests.
fetch_from_network
fetch_from_network_plain
fetch_latest_edition
Fetch the latest edition of a program from the network.
fetch_program_from_network
Fetch the given program from the network and return the program as a string.
filename_no_aleo_extension
filename_no_leo_extension
is_valid_library_name
Checks whether a string is a valid Aleo library name.
is_valid_program_name
Checks whether a string is a valid Aleo program name.
reserved_keywords
Get the list of all reserved and restricted keywords from snarkVM. These keywords cannot be used as program names. See: https://github.com/ProvableHQ/snarkVM/blob/046a2964f75576b2c4afbab9aa9eabc43ceb6dc3/synthesizer/program/src/lib.rs#L192
verify_valid_program

Type Aliases§

Edition
The edition of a deployed program on the Aleo network. Edition 0 is the initial deployment, and increments with each upgrade.