Important
Because of the many changes, upgrading to this new version takes a lot of work to do by hand. Fortunately, this will not be necessary, for we have created an automated contract upgrade tool. The tool will do all the renames and will move some files around.
To perform the update, call the following (where you keep the contracts). It can handle multiple contracts at once and will discover them automatically.
It should be able to the migration entirely without assistance, but do let us know if you encounter problems. It did manage to upgrade all the DEX contracts by itself.
A note on notation
From here on, releases will be notated using the short names of crates, since they have become quite many. To quote from the changelog:
For instance in this release, the first 9 crates all get version 0.39, the 2 codec crates 0.17, etc.
All crates renamed and reorganized
Crates were renamed as follows:
elrond-codec
→multiversx-sc-codec
elrond-codec-derive
→multiversx-sc-codec-derive
elrond-wasm
→multiversx-sc
elrond-wasm-derive
→multiversx-sc-derive
elrond-wasm-node
→multiversx-sc-wasm-adapter
elrond-wasm-interactor-snippets
→multiversx-sc-snippets
mandos
→multiversx-chain-scenario-format
elrond-wasm-modules
→multiversx-sc-modules
Crate elron-wasm-output
was completely removed. Its logic is now injected directly into the individual contract wasm
crates, via several macros.
Crate elrond-wasm-debug
was split into several crates:
multiversx-sc-meta
handles ABIs, contract builds, snippet generation, and is also a standalone tool that can be installed viacargo install
.multiversx-sc-scenario
is the base of all contract tests. TheScenarioWorld
object is the facade for running both programatic and JSON scenario tests.multiversx-chain-vm
is aiming to become replica of the VM written in Go. It currently still contains some leftover mandos code, but this will all be refactored in the next release. The contracts should not be aware of the existence of this crate.
There is a completely new crate: multiversx-sdk
. This is a tool for interacting with the blockchain. It is used by multiversx-sc-snippets
to interact with the blockchain. It is still only a prototype, but more development is coming to it soon.
Also made some re-exports more concise:
elrond-wasm::elrond_codec
is now simplymultiversx_sc::codec
elrond_codec::elrond_codec_derive
is now simplymultiversx_sc_codec::derive
The meta crate
There is a full documentation of the current features available at https://docs.multiversx.com/developers/developer-reference/sc-meta
In short, it is two tools in one:
- the old contract ABI & build tool
- a standalone tool that can upgrade contracts, etc.
The scenario testing facade
The ScenarioWorld
object is supposed to become the unique facade required to write scenarios and either test them locally (the former “Mandos” scenario tests), or use them to interact with a blockchain.
The Rust SDK crate
As mentioned above, the multiversx-sdk
is able to interact with the blockchain: query contracts, sign transactions, get network statistics, etc.
It was originally started by the community, now it is an official tool. There are examples of everything that it can currently do: https://github.com/multiversx/mx-sdk-rs/tree/master/sdk/core/examples.
Twiggy post-processing
Twiggy is a very handy tool for analyzing smart contract size and hunting down bloat. We have been using it for years. Read more about it here:
It is now extremely easy to generate twiggy reports for contracts.
ManagedVec supports sorting and deduplication
A long awaited feature, there are sort and deduplicate methods available now for ManagedVec.
migrateUserName
builtin function mock
A new builtin function being now under development is now available in the framework.
Github Release Link:
- sc: v0.39.0, codec: v0.17.0, vm: v0.1.0, scenario-format v0.19.0, sdk: v0.1.0
- sc: v0.39.1, codec: v0.17.1, vm: v0.1.1, scenario-format: v0.19.1, sdk: v0.1.1
- sc: v0.39.2, vm: v0.1.2
- sc: v0.39.3, vm: v0.1.3
- sc: v0.39.4, vm: v0.1.4
- sc: v0.39.5, vm: 0.1.5.
Feel free to send us feedback or open a topic in our Github Discussions tab and share your thoughts so that the entire MultiversX community can hear you. If you have a great idea, share it with us and let's make it happen by implementing and integrating it in our ecosystem.
Stay Hungry! Stay Foolish!