MultiversX: utility package for building Rust contracts (reproducible builds).
Project description
mx-sdk-rust-contract-builder
Docker image (and wrappers) for reproducible contract builds (Rust). See docs.multiversx.com.
Build the Docker image
We use docker buildx
to build the image:
docker buildx build --output type=docker --no-cache . -t sdk-rust-contract-builder:next -f ./Dockerfile
Maintainers can publish the image as follows:
docker buildx create --name multiarch --use
docker buildx build --no-cache --push --platform=linux/amd64,linux/arm64 . -t multiversx/sdk-rust-contract-builder:next -f ./Dockerfile
docker buildx rm multiarch
For the above to work properly, make sure to install tonistiigi/binfmt
beforehand. Please follow the official Docker documentation here.
Though, note that currently (January 2023) we recommend against using the linux/arm64
image for performing reproducible contract builds. This is because, in some (possibly rare) circumstances, a WASM binary generated on the linux/amd64
image might differ (at the bytecode level) from one generated on the linux/arm64
image - probably due to distinct (unfortunate) bytecode-emitting logic in the Rust compiler.
Build contract using the wrapper
If you are using a Mac with ARM64, we recommend setting the following variable beforehand (contract builds will be slower, but this eliminates the risk of not being able to reproduce the build on Linux):
export DOCKER_DEFAULT_PLATFORM=linux/amd64
Building from a project folder:
python3 ./build_with_docker.py --image=sdk-rust-contract-builder:next \
--project=~/contracts/example \
--output=~/contracts/output-from-docker
Building from a packaged source code:
python3 ./build_with_docker.py --image=sdk-rust-contract-builder:next \
--packaged-src=~/contracts/example-0.0.0.source.json \
--output=~/contracts/output-from-docker
Run unit tests (without Docker)
export PATH=${HOME}/multiversx-sdk/vendor-rust/bin:${HOME}/multiversx-sdk/wabt/latest/bin:${PATH}
export RUSTUP_HOME=${HOME}/multiversx-sdk/vendor-rust
export CARGO_HOME=${HOME}/multiversx-sdk/vendor-rust
pytest .
Run integration tests (with Docker)
python3 ./integration_tests/test_previous_builds_are_reproducible.py --selected-builds "a.1" [...]
python3 ./integration_tests/test_project_folder_and_packaged_src_are_equivalent.py
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for multiversx_sdk_rust_contract_builder-4.1.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2ff44a1aa7d64a49a8e8ca4439e82ac482bca2680abb9ad6c3ac348ec7b233ac |
|
MD5 | 45901090f2d273dea4d519b2b10db1dd |
|
BLAKE2b-256 | ad493cf1a1c459b324ad2b96acf817e7753c18455766a4a134480e4f5d420200 |
Hashes for multiversx_sdk_rust_contract_builder-4.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f8fc0168d1ca1884f2cb882ab33c75ffd210ebc802599ae54a1553a48016462 |
|
MD5 | 9563e50e7cfa2aa62933f22356a72f0c |
|
BLAKE2b-256 | a462218267d95226b0bd921bfdd7e6706e726cb4b2aaa4c86129b44fd7516ba3 |