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.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 177483f05d90ca90947430ec4d4b24e7dc14086ae25c0a5617612ec5f86e0f7e |
|
MD5 | ace3fefaae9b2033e14c19a0d78e754a |
|
BLAKE2b-256 | 4b0359579ea1c49fde60a03b4cb3cd800641c5a790debb40be0be581995e4971 |
Hashes for multiversx_sdk_rust_contract_builder-4.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 499e140010a78f1ce7f6c4a96af1ece41170d2e1558cabbae287b1a41fa17500 |
|
MD5 | b61d5ce29d2213b8ac6eb121b321c1ba |
|
BLAKE2b-256 | 1eee9f24c691cf018b8b02fc4184f382597cb3ef73994b8545f6e8dda6618247 |