diff --git a/docs/developers/meta/rust-nightly.md b/docs/developers/meta/rust-version.md similarity index 55% rename from docs/developers/meta/rust-nightly.md rename to docs/developers/meta/rust-version.md index 913943227..050d3bac1 100644 --- a/docs/developers/meta/rust-nightly.md +++ b/docs/developers/meta/rust-version.md @@ -1,6 +1,6 @@ --- -id: rust-nightly -title: Stable vs. Nightly Rust +id: rust-version +title: Rust Version --- [comment]: # (mx-abstract) @@ -17,22 +17,54 @@ Before this version, nightly Rust was required. For everything after v0.50.0 we recommend running the latest stable version of Rust. Older versions have had compatibility issues with certain framework dependencies, on certain versions of the compiler. -Nightly Rust is still allowed, but not recommended. We will still be supporting nightly builds and running continuous integration on `nightly-2024-05-22`. - Also, everything on versions older than v0.50.0 needs to run on nightly Rust. -So, to summarize: -- Before `v0.50`: `nightly-2023-12-11` and `nightly-2024-05-22` are both known to be running fine; -- On `v0.50` (use `v0.50.6`): any version of `stable` Rust; -- Starting with `v0.51`: `stable`, Rust >= 1.78 required. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Application VersionRequired Rust ChannelVersion Requirements
Prior to `v0.50`Nightly`nightly-2023-12-11` or `nightly-2024-05-22`
`v0.50` to `v0.56`**Stable (recommended)** or Nightly≥`1.78` and ≤`1.86`
`v0.57`**Stable (recommended)** or Nightly≥`1.83` and ≤`1.86`
`v0.58` and Higher**Stable (recommended)** or Nightly≥`1.83`*
+ +\* Starting with Rust version `1.89` and higher, there are known runtime issues when using **wasmer 6.0** (`wasmer-experimental`) exclusively on the **Linux platform**. + +:::note +If you are using **wasmer 6.0** on Linux, we recommend pinning your Rust version below `1.89`. +::: [comment]: # (mx-context-auto) -## Why Nighly for the older versions? +## Why Nightly for the older versions? There were several nightly features that the framework was using, which we had hoped to see stabilized sooner. These are of little relevance to the average developer, but for the record, let's mention a few of them and how we managed to circumvent their usage: + - `never_type` - avoided by using slightly different syntax; - `auto_traits` and `negative_impls` - avoided by redesigning the `CodecFrom`/`TypeAbiFrom` trait systems; - `generic_const_exprs` - replaced with massive amounts of macros; diff --git a/docs/developers/toolchain-setup.md b/docs/developers/toolchain-setup.md new file mode 100644 index 000000000..dee54d32e --- /dev/null +++ b/docs/developers/toolchain-setup.md @@ -0,0 +1,99 @@ +--- +id: toolchain-setup +title: Toolchain Setup +--- + +[comment]: # (mx-context-auto) + +## Installing Rust and sc-meta + +:::note +`sc-meta` is universal smart contract management tool. Please follow [this](/developers/meta/sc-meta) for more information. +::: + +[comment]: # (mx-context-auto) + +For systems running Ubuntu or Windows with WSL, you should first ensure the following system-level dependencies required by Rust and sc-meta are in place: + +```bash +sudo apt-get install build-essential pkg-config libssl-dev +``` + +Install Rust as recommended on [rust-lang.org](https://www.rust-lang.org/tools/install): + +```bash +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +Then, choose **Proceed with installation (default)**. + +:::tip +Generally speaking, you should install Rust `v1.85.0` (stable channel) or later. +::: + +```bash +rustup update +rustup default stable +``` + +Afterwards, open a new terminal (shell) and install `sc-meta`: + +```bash +cargo install multiversx-sc-meta --locked +``` + +Once `sc-meta` is ready, install the `wasm32` target (for the Rust compiler), `wasm-opt`, and others dependencies as follows: + +```bash +# Installs `wasm32`, `wasm-opt`, and others in one go: +sc-meta install all + +cargo install twiggy +``` + +[comment]: # (mx-context-auto) + +### Within Continuous Integration / Continuous Delivery + +For automated environments like CI/CD pipelines, start by installing the necessary foundational libraries. On platforms such as Ubuntu (or WSL), this means installing: + +```bash +sudo apt-get install build-essential pkg-config libssl-dev +``` + +For CI / CD, install Rust as follows: + +```bash +wget -O rustup.sh https://sh.rustup.rs && \ + chmod +x rustup.sh && \ + ./rustup.sh --verbose --default-toolchain stable -y + +cargo install multiversx-sc-meta --locked + +sc-meta install wasm32 +``` + +[comment]: # (mx-context-auto) + +## Check your Rust installation + +You can check your Rust installation by invoking `rustup show`: + +```sh +$ rustup show + +Default host: x86_64-unknown-linux-gnu +rustup home: /home/ubuntu/.rustup + +installed toolchains +-------------------- +stable-x86_64-unknown-linux-gnu (default) +[...] + +active toolchain +---------------- +name: stable-x86_64-unknown-linux-gnu +installed targets: + wasm32-unknown-unknown + wasm32v1-none + x86_64-unknown-linux-gnu diff --git a/docs/developers/tutorials/chain-simulator-adder.md b/docs/developers/tutorials/chain-simulator-adder.md index f09a156cb..f1a4ad532 100644 --- a/docs/developers/tutorials/chain-simulator-adder.md +++ b/docs/developers/tutorials/chain-simulator-adder.md @@ -5,20 +5,22 @@ title: Chain Simulator in Adder - SpaceCraft interactors [comment]: # (mx-abstract) -This tutorial will guide you to interact with **Chain Simulator** using the SpaceCraft interactors in _Adder_ smart contract. +This tutorial will guide you to interact with **Chain Simulator** using the SpaceCraft interactors in _Adder_ smart contract. [comment]: # (mx-context-auto) ## Introduction -[Chain Simulator](../../sdk-and-tools/chain-simulator.md) mimics the functionality of a local blockchain test network. It offers a convenient, faster, and realistic way to test smart contracts. +[Chain Simulator](../../sdk-and-tools/chain-simulator.md) mimics the functionality of a local blockchain test network. It offers a convenient, faster, and realistic way to test smart contracts. [SpaceCraft interactor](../meta/interactor/interactors-overview.md) allows testing any complex scenario defined in a smart contract using **Chain Simulator**. Rather than going through the full setup of a local testnet, you can get straight to developing and debugging in a streamlined environment. This tool handles the setup details so you can focus on what matters most: **building and testing your contracts**. :::important Before we dive in and explore how easy it can be, make sure you have the following: -- `stable` Rust version `≥ 1.78.0` (install via [rustup](https://docs.multiversx.com/sdk-and-tools/troubleshooting/rust-setup/#without-mxpy)): -- `multiversx-sc-meta` version `≥ 0.54.0` (cargo install [multiversx-sc-meta](https://docs.multiversx.com/developers/meta/sc-meta-cli/#introduction)) + +- `stable` Rust version `≥ 1.85.0` (install via [rustup](/docs/developers/toolchain-setup.md#installing-rust-and-sc-meta)): +- `multiversx-sc-meta` version `≥ 0.54.0` (cargo install [multiversx-sc-meta](/docs/developers/meta/sc-meta-cli.md)) + ::: [comment]: # (mx-context-auto) @@ -54,7 +56,7 @@ After running the command, you’ll see that the contract `my-adder` has been ge Our main focus will be the `interactor` directory. Let’s take a closer look: -The directory that makes the connection with Chain Simulator contains the following structures: +The directory that makes the connection with Chain Simulator contains the following structures: ```bash . @@ -84,10 +86,11 @@ gateway_uri = 'http://localhost:8085' ``` You can customize two settings in the configuration: + - **Type of blockchain**; - **Gateway URI**. -To use a simulator for your blockchain, set `chain_type` as shown in the example above. +To use a simulator for your blockchain, set `chain_type` as shown in the example above. By default, the simulator runs on `http://localhost:8085`. However, depending on your Docker image settings, the simulator's URI **might have a different port or name**. @@ -96,6 +99,7 @@ Make sure to set both `chain_type` and `gateway_uri` for the interactor to work. ::: The configuration is parsed by `basic_interactor_config.rs`. This file contains **two** functions that will be important for interacting with Chain Simulator: + - `use_chain_simulator()`: returns if the chain type is real or simulator; - `chain_simulator_config()`: initialize the proper configuration for simulator environment; this function is useful for **continuous integration tests**. @@ -172,11 +176,12 @@ pub async fn new(config: Config) -> Self { } ``` -Let's find out what is mandatory for initializing the Chain Simulator interactor. +Let's find out what is mandatory for initializing the Chain Simulator interactor. ```rust let adder_owner_address = interactor.register_wallet(test_wallets::heidi()).await; ``` + Every time you initialize an interactor, you’ll need to register a wallet. When a wallet is registered in the Chain Simulator, its associated account is automatically credited with a generous amount of EGLD. This way, you don’t have to worry about running out of tokens while testing! :::tip @@ -190,13 +195,14 @@ Whenever the Chain Simulator stops, the account will be dissolved. ```rust interactor.generate_blocks_until_epoch(1).await.unwrap(); ``` + Node enables `ESDTSystemSCAddress` in **epoch number one**. If you want to use functionality like issuing or minting tokens, it is necessary to generate blocks until the simulator chain reaches **epoch number one**. [comment]: # (mx-context-auto) ## Step 4: Create tests that run on Chain Simulator -One of the best parts about using the Chain Simulator with your interactor is that it lets you create **continuous integration tests in an environment that mirrors the real blockchain**. +One of the best parts about using the Chain Simulator with your interactor is that it lets you create **continuous integration tests in an environment that mirrors the real blockchain**. `tests/` holds all your test suites, where you are able to verify your contract’s behaviour effectively. @@ -277,6 +283,7 @@ async fn simulator_adder_test() {} ### 1. Deploy the contract **Deploy** on Chain Simulator _MyAdder_ contract which sets the initial sum with **zero**. + ```rust use basic_interactor::{Config, MyAdderInteract}; @@ -369,6 +376,7 @@ async fn simulator_upgrade_test() { [comment]: # (mx-context-auto) ### 5. Unauthorized Upgrade + Attempt to upgrade the contract with an unauthorized user to confirm that it results in a failed transaction. To ensure no changes occur, you need to query the storage again to check that the number remains unchanged. ```rust @@ -417,6 +425,7 @@ async fn simulator_upgrade_test() { [comment]: # (mx-context-auto) ### Install + To run the test provided, you will need to install the Docker image that includes the Chain Simulator. ```bash @@ -427,21 +436,26 @@ Successfully pulled the latest Chain Simulator image. :::note If you encounter the following error while installing: + ```bash Attempting to install prerequisites for the Chain Simulator... Error: Failed to execute command: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock ``` You will need to run the command with root privileges due to Docker usage: + ```bash my-adder/interactor$ sudo sc-meta cs install ``` If you get this error: + ```bash sudo: sc-meta: command not found ``` + You can find the sc-meta path and choose one of these solutions: + ```bash my-adder/interactor$ which sc-meta my-path/.cargo/bin/sc-meta @@ -449,9 +463,11 @@ my-path/.cargo/bin/sc-meta 1. Add the sc-meta path to root privileges: 2. Run sc-meta directly using the full path: + ```bash sudo my-path/.cargo/bin/sc-meta cs install ``` + ::: [comment]: # (mx-context-auto) @@ -459,6 +475,7 @@ sudo my-path/.cargo/bin/sc-meta cs install ### Start Once you’ve successfully installed the Docker image, you can start the Chain Simulator. + ```bash my-adder/interactor$ sudo my-path/.cargo/bin/sc-meta cs start Attempting to start the Chain Simulator... @@ -477,6 +494,7 @@ INFO [2024-11-11 13:09:15.699] updated config value file = [comment]: # (mx-context-auto) ### Run + While Chain Simulator is running, open a new terminal window in parallel. In this new terminal, you will run the test provided in [Step 4](./chain-simulator-adder.md#step-4-create-tests-that-run-on-chain-simulator). ```bash @@ -489,17 +507,22 @@ test simulator_upgrade_test ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.09s ``` + [comment]: # (mx-context-auto) ### Stop + In the **same** terminal window you ran the tests, **stop** Chain Simulator using the next command: + ```bash my-adder/interactor$ sc-meta cs stop Attempting to close the Chain Simulator... Successfully stopped the Chain Simulator. ``` + :::note If you encounter the following error while stopping: + ```bash Attempting to close the Chain Simulator... Error: Failed to execute command: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock @@ -508,4 +531,4 @@ Error: Failed to execute command: permission denied while trying to connect to t Solution is presented in [Run](./chain-simulator-adder.md#install) section. ::: -By following these steps, you've mastered the basics of smart contract development and testing. Now, it's time to explore more advanced techniques and create innovative applications :sparkles: :rocket: \ No newline at end of file +By following these steps, you've mastered the basics of smart contract development and testing. Now, it's time to explore more advanced techniques and create innovative applications :sparkles: :rocket: diff --git a/docs/developers/tutorials/crowdfunding-p1.md b/docs/developers/tutorials/crowdfunding-p1.md index 2052114be..d3f83f53f 100644 --- a/docs/developers/tutorials/crowdfunding-p1.md +++ b/docs/developers/tutorials/crowdfunding-p1.md @@ -52,8 +52,8 @@ Automated testing is exceptionally important for the development of smart contra :::important Before starting this tutorial, make sure you have the following: -- `stable` **Rust** version `≥ 1.83.0` (install via [rustup](/docs/sdk-and-tools/troubleshooting/rust-setup.md#installing-rust-and-sc-meta)) -- `sc-meta` (install [multiversx-sc-meta](/docs/sdk-and-tools/troubleshooting/rust-setup.md#installing-rust-and-sc-meta)) +- `stable` **Rust** version `≥ 1.85.0` (install via [rustup](/docs/developers/toolchain-setup.md#installing-rust-and-sc-meta)) +- `sc-meta` (install [multiversx-sc-meta](/docs/developers/meta/sc-meta-cli.md)) ::: diff --git a/docs/developers/tutorials/interactors-guide.md b/docs/developers/tutorials/interactors-guide.md index a229c7392..17011b49e 100644 --- a/docs/developers/tutorials/interactors-guide.md +++ b/docs/developers/tutorials/interactors-guide.md @@ -21,8 +21,9 @@ In order to make sure that the smart contract works as expected, there are at le In this tutorial we will focus on integration testing using the interactors made available by the SpaceCraft smart contract framework. ::::important Prerequisites -- `stable` Rust version `1.78.0 or above` (install via [rustup](https://docs.multiversx.com/sdk-and-tools/troubleshooting/rust-setup/#without-mxpy)): -- `multiversx-sc-meta` version `0.50.0 or above` (cargo install [multiversx-sc-meta](https://docs.multiversx.com/developers/meta/sc-meta-cli/#introduction)) + +- `stable` Rust version `1.78.0 or above` (install via [rustup](/docs/developers/toolchain-setup.md#installing-rust-and-sc-meta)): +- `multiversx-sc-meta` version `0.50.0 or above` (cargo install [multiversx-sc-meta](/docs/developers/meta/sc-meta-cli.md)) :::: [comment]: # (mx-context-auto) @@ -110,7 +111,7 @@ sc-meta all snippets This command compiled the contract and generated a new folder called `interactor`. The interactor is by default a Rust CLI program that uses the smart contract proxy to send calls to the contract. -Inside the source folder *(interactor/src)*, we should find the newly generated proxy of the contract *(proxy.rs)* and the `interactor_main.rs` file, which is the main file of the project. A *sc-config.toml* file has also been created (if not existent) containing the path of the proxy file. +Inside the source folder *(interactor/src)*, we should find the newly generated proxy of the contract *(proxy.rs)* and the `interactor_main.rs` file, which is the main file of the project. A *sc-config.toml* file has also been created (if not existent) containing the path of the proxy file. If we navigate to *interactor/src/interactor_main.rs*, inside the `main` function, we can find all the CLI command available to us: @@ -170,7 +171,7 @@ By default, the testing environment is `devnet`, specified by the `GATEWAY` cons ```rust title=interactor_main.rs const GATEWAY: &str = sdk::blockchain::DEVNET_GATEWAY; ``` -Changing the value of this constant will change the testing environment for a quick setup (other options are `TESTNET_GATEWAY` and `MAINNET_GATEWAY`). +Changing the value of this constant will change the testing environment for a quick setup (other options are `TESTNET_GATEWAY` and `MAINNET_GATEWAY`). Each command has some waiting time and returns the result inside a variable in the function, but also prints it in the console for easy tracking. @@ -267,11 +268,11 @@ test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; fini This setup can be used for extensive testing, but also as a tool for live deployment on mainnet, tracking and interaction. In a multi-contract setup, one can, for example, create different modules for specific interactions with each contract and development environment and further structure all the interactions into different integration tests. -Let’s take the example of the [DEX smart contract interactors](https://github.com/multiversx/mx-exchange-sc/tree/feat/unified/dex/interactor). Here, all the proxy files are organized in a different crate for easier access. +Let’s take the example of the [DEX smart contract interactors](https://github.com/multiversx/mx-exchange-sc/tree/feat/unified/dex/interactor). Here, all the proxy files are organized in a different crate for easier access. ![img](/img/dex_interactor_file_structure.jpeg) -Furthermore, all the contracts that are part of the DEX flow have separate interaction modules, so we can easily keep track of the flow when writing complex tests. +Furthermore, all the contracts that are part of the DEX flow have separate interaction modules, so we can easily keep track of the flow when writing complex tests. This is the `energy_factory` file, containing only interactions with the `energy factory smart contract`, using the specific proxy and contract address: ```rust title=energy_factory.rs @@ -302,7 +303,7 @@ pub(crate) async fn get_energy_amount_for_user( } ``` -After having implemented this structure, writing integration test is a smooth process, even though the logic gets complicated: +After having implemented this structure, writing integration test is a smooth process, even though the logic gets complicated: ```rust title=dex_interact.rs impl DexInteract { @@ -354,7 +355,7 @@ pub mod integration_tests { } ``` -Organizing the code this way streamlines the process even further. Now, it is just a matter of using a different datatype or a different module in order to keep track of the various contracts and development environments and be able to rerun everything quickly if needed. +Organizing the code this way streamlines the process even further. Now, it is just a matter of using a different datatype or a different module in order to keep track of the various contracts and development environments and be able to rerun everything quickly if needed. [comment]: # (mx-context-auto) diff --git a/docs/developers/tutorials/staking-contract.md b/docs/developers/tutorials/staking-contract.md index 813449f63..262f5694d 100644 --- a/docs/developers/tutorials/staking-contract.md +++ b/docs/developers/tutorials/staking-contract.md @@ -20,8 +20,8 @@ If you find anything not answered here, feel free to ask further questions on th :::important Before starting this tutorial, make sure you have the following: -- `stable` **Rust** version `≥ 1.83.0` (install via [rustup](/docs/sdk-and-tools/troubleshooting/rust-setup.md#installing-rust-and-sc-meta)) -- `sc-meta` (install [multiversx-sc-meta](/docs/sdk-and-tools/troubleshooting/rust-setup.md#installing-rust-and-sc-meta)) +- `stable` **Rust** version `≥ 1.85.0` (install via [rustup](/docs/developers/toolchain-setup.md#installing-rust-and-sc-meta)) +- `sc-meta` (install [multiversx-sc-meta](/docs/developers/meta/sc-meta-cli.md)) ::: diff --git a/docs/developers/tutorials/your-first-dapp.md b/docs/developers/tutorials/your-first-dapp.md index e0734bbdb..169e1587f 100644 --- a/docs/developers/tutorials/your-first-dapp.md +++ b/docs/developers/tutorials/your-first-dapp.md @@ -12,8 +12,8 @@ Let's build your first decentralized application(dApp) on the MultiversX Blockch :::important Before starting this tutorial, make sure you have the following: -- `stable` Rust version `≥ 1.78.0` (install via [rustup](https://docs.multiversx.com/sdk-and-tools/troubleshooting/rust-setup/#without-mxpy)) -- `multiversx-sc-meta` (cargo install [multiversx-sc-meta](https://docs.multiversx.com/developers/meta/sc-meta-cli/#introduction)) +- `stable` Rust version `≥ 1.85.0` (install via [rustup](/docs/developers/toolchain-setup.md#installing-rust-and-sc-meta)) +- `multiversx-sc-meta` (cargo install [multiversx-sc-meta](/docs/developers/meta/sc-meta-cli.md)) - `Node.js` with version `≥ 20`(guide [here](https://nodejs.org/en/download/package-manager)) - `yarn` ([npm install --global yarn](https://classic.yarnpkg.com/lang/en/docs/install/#debian-stable) ) diff --git a/docs/sdk-and-tools/mxpy/smart-contract-interactions.md b/docs/sdk-and-tools/mxpy/smart-contract-interactions.md index 4e1f4e0b4..72caa0589 100644 --- a/docs/sdk-and-tools/mxpy/smart-contract-interactions.md +++ b/docs/sdk-and-tools/mxpy/smart-contract-interactions.md @@ -34,8 +34,7 @@ We're going to use [**mxpy**](/sdk-and-tools/mxpy/mxpy-cli) to deploy the contra ### Rust -Install **Rust** and [**sc-meta**](/developers/meta/sc-meta) as depicted [here](/sdk-and-tools/troubleshooting/rust-setup). They are required to build smart contracts. - +Install **Rust** and [**sc-meta**](/developers/meta/sc-meta) as depicted [here](/docs/developers/toolchain-setup.md#installing-rust-and-sc-meta). They are required to build smart contracts. ## Deploy & Upgrade @@ -139,6 +138,7 @@ mxpy facilitates us with some encoding conventions, including: - The values **true** or **false** are automatically converted to **boolean** values - Values that are identified as **numbers** are hex encoded by default - Arguments like **0x...** are left unchanged, as they are interpreted as already encoded hex values + ::: So, in case of our **myNonPayableEndpoint** interaction, we can write it like so: diff --git a/docs/sdk-and-tools/troubleshooting/ide-setup.md b/docs/sdk-and-tools/troubleshooting/ide-setup.md index b2c79d95b..21a317793 100644 --- a/docs/sdk-and-tools/troubleshooting/ide-setup.md +++ b/docs/sdk-and-tools/troubleshooting/ide-setup.md @@ -19,6 +19,6 @@ If `rust-analyzer` is not working properly on VSCode, you might see (one of) the - error: rustup could not choose a version of cargo to run, because one wasn't specified explicitly, and no default is configured. ``` -If so, **[make sure Rust is properly installed](/sdk-and-tools/troubleshooting/rust-setup)**. +If so, **[make sure Rust is properly installed](/docs/developers/toolchain-setup.md#installing-rust-and-sc-meta)**. Then, restart VSCode. Now, `rust-analyzer` should work properly. If the problem persists, please [contact us](/developers/overview). diff --git a/docs/sdk-and-tools/troubleshooting/rust-setup.md b/docs/sdk-and-tools/troubleshooting/rust-setup.md index 665ff7a1d..40f7a5983 100644 --- a/docs/sdk-and-tools/troubleshooting/rust-setup.md +++ b/docs/sdk-and-tools/troubleshooting/rust-setup.md @@ -1,5 +1,5 @@ --- -id: rust-setup +id: fix-rust-setup title: Fix Rust installation --- @@ -37,7 +37,7 @@ We never recommend installing Rust using `brew`, especially because it makes it ::: If you've installed Rust using `snap`: - + ```bash snap remove rustup ``` @@ -54,113 +54,6 @@ If you've installed Rust using `mxpy v9` or later: rustup self uninstall ``` -[comment]: # (mx-context-auto) - -## Installing Rust and sc-meta - -:::note -`sc-meta` is universal smart contract management tool. Please follow [this](/developers/meta/sc-meta) for more information. -::: - -[comment]: # (mx-context-auto) - -On Ubuntu (or Windows with WSL), you might need to install the following dependencies of Rust and `sc-meta` first: - -```bash -sudo apt-get install build-essential pkg-config libssl-dev -``` - -Install Rust as recommended on [rust-lang.org](https://www.rust-lang.org/tools/install): - -```bash -curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -``` - -Then, choose **Proceed with installation (default)**. +## Reinstall Toolchain Setup -:::tip -Generally speaking, you should install Rust `v1.78.0` (stable channel) or later, or `nightly-2024-05-22` (nightly channel) or later. -::: - -```bash -rustup update -rustup default stable -``` - -Afterwards, open a new terminal (shell) and install `sc-meta`: - -```bash -cargo install multiversx-sc-meta --locked -``` - -Once `sc-meta` is ready, install the `wasm32` target (for the Rust compiler), `wasm-opt`, and others dependencies as follows: - -```bash -# Installs `wasm32`, `wasm-opt`, and others in one go: -sc-meta install all - -cargo install twiggy -``` - -[comment]: # (mx-context-auto) - -### Within CI / CD - -On Ubuntu (or Windows with WSL), you might need to install the following dependencies of Rust and `sc-meta` first: - -```bash -sudo apt-get install build-essential pkg-config libssl-dev -``` - -For CI / CD, install Rust as follows: - -```bash -wget -O rustup.sh https://sh.rustup.rs && \ - chmod +x rustup.sh && \ - ./rustup.sh --verbose --default-toolchain stable --target wasm32-unknown-unknown -y - -cargo install multiversx-sc-meta --locked -``` - -[comment]: # (mx-context-auto) - -### Handle missing dependencies - -On Ubuntu (or Windows with WSL), you might need to install the following dependencies of Rust and `sc-meta` before installing Rust: - -```bash -sudo apt-get install build-essential pkg-config libssl-dev -``` - -Also see this [GitHub issue](https://github.com/multiversx/mx-sdk-py-cli/issues/338). - -[comment]: # (mx-context-auto) - -## Check your Rust installation - -You can check your Rust installation by invoking `rustup show`: - -``` -$ rustup show - -Default host: x86_64-unknown-linux-gnu -rustup home: /home/ubuntu/.rustup - -installed toolchains --------------------- - -[...] -stable-x86_64-unknown-linux-gnu (default) - -installed targets for active toolchain --------------------------------------- - -[...] -wasm32-unknown-unknown - -active toolchain ----------------- - -[...] -stable-x86_64-unknown-linux-gnu (default) -``` +After successfully uninstalling your current toolchain, you can follow the [setup guide](/docs/developers/toolchain-setup.md) to reinstall the environment from scratch. diff --git a/docs/sdk-and-tools/troubleshooting/troubleshooting.md b/docs/sdk-and-tools/troubleshooting/troubleshooting.md index 427a67976..8e507b000 100644 --- a/docs/sdk-and-tools/troubleshooting/troubleshooting.md +++ b/docs/sdk-and-tools/troubleshooting/troubleshooting.md @@ -7,5 +7,5 @@ title: Overview Here you can find some common issues and their solutions, in the context of [MultiversX SDKs and Tools](/sdk-and-tools/overview). -1. [Fix Rust installation](/sdk-and-tools/troubleshooting/rust-setup) +1. [Fix Rust installation](/sdk-and-tools/troubleshooting/fix-rust-setup) 2. [Fix IDEs configuration](/sdk-and-tools/troubleshooting/ide-setup) diff --git a/docusaurus.config.js b/docusaurus.config.js index 5cc328f1d..e506f8458 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -458,6 +458,10 @@ const config = { from: "/developers/log-events/system-delegation-events", to: "/developers/event-logs/system-delegation-events", }, + { + from: "/developers/meta/rust-stable-vs-nightly", + to: "/developers/meta/rust-version", + }, ], createRedirects(existingPath) { return undefined; // Return a falsy value: no redirect created diff --git a/sidebars.js b/sidebars.js index 6020656fa..7fb5b32c9 100644 --- a/sidebars.js +++ b/sidebars.js @@ -76,6 +76,7 @@ const sidebars = { label: "Rust Development Framework", items: [ "developers/smart-contracts", + "developers/toolchain-setup", { type: "category", label: "Rust Developer reference", @@ -142,7 +143,7 @@ const sidebars = { "developers/meta/sc-config", "developers/meta/sc-meta-cli", "developers/meta/sc-allocator", - "developers/meta/rust-nightly", + "developers/meta/rust-version", ], }, { @@ -333,7 +334,7 @@ const sidebars = { label: "Troubleshooting", items: [ "sdk-and-tools/troubleshooting/troubleshooting", - "sdk-and-tools/troubleshooting/rust-setup", + "sdk-and-tools/troubleshooting/fix-rust-setup", "sdk-and-tools/troubleshooting/ide-setup", "sdk-and-tools/troubleshooting/multiplatform", ],