Releases: multiversx/mx-sdk-rs
Releases · multiversx/mx-sdk-rs
elrond-wasm 0.20.0, elrond-codec 0.7.0, mandos 0.10.0
- Managed callback handling
- Managed async call result
- ManagedVec improvements, deserialization fix
- Better conversions between big numeric types
- Improved preprocessor substitutions: hidden generics for most managed types
- Build info in ABI - rustc version, framework version, crate version
elrond-wasm 0.19.0, elrond-codec 0.6.0, mandos 0.9.0
- Managed types used extensively. Because of this, the recommended Arwen minimum version is
v1.4.10
.- Redesigned parts of the elrond-codec, so as to allow custom type specializations. These specializations allow serializers and types to bypass the limitations of the codec traits to provide optimized implementations. Managed type serialization relies on this.
- Redesigned existing managed types:
BigInt
,BigUint
,EllipticCurve
. - Added the
ManagedBuffer
type, which can be used to store anything on the VM side. - Support for complex operations using managed buffers, such as storing lists of elements in a managed buffer via the
ManagedVec
type. - There are
ManagedAddress
es now. They rely on another managed type, theManagedByteArray
, which is a fixed size managed structure. TokenIdentifier
is now a managed type.- Serializer based on a managed buffer.
- Storage keys are now based on managed buffers.
- All error messages generated by the framework are assembled using a managed buffer.
- The blockchain API uses managed types for most interactions.
- The contract call API uses managed types for most interactions.
- The call value API supports multi transfer via managed
EsdtTokenPayment
objects. - Event logs are sent to the VM via managed types (
ManagedVec<ManagedBuffer>
for topics,ManagedBuffer
for data). - Type conversion traits for managed types:
ManagedFrom
andManagedInto
. - There are now 2 types of
SCError
:StaticSCError
for static messages andManagedSCError
, which is backed by a managed buffer. - Contract errors can now be triggered immediately, without the need to return them from an endpoint.
- Improved macro preprocessor: more complex patterns can now be substituted.
- Generic API parameter needs not be specified every time.
- Substitutions available for most managed types and storage mappers.
- Separated contract API into low-level VM API connectors and high-level utility objects to be used in the contracts.
- Mandos-rs improvements:
- Self tests synchronized with mandos-go. Some missing features needed to be added to make them pass.
- Support for ESDT tokens.
- Support for ESDT multi-transfer.
elrond-wasm 0.18.2
Crypto API: ripemd160
function, custom secp256k1 signature verification (verify_custom_secp256k1
) and signature generation (encode_secp256k1_der_signature
).
elrond-wasm 0.18.1
- Added "safe" storage mappers, which serialize keys using nested encoding instead of top. The old respective mappers only kept for backwards compatibility, are now deprecated.
elrond-wasm 0.18.0, mandos 0.8.0
- New math hooks exposed from Arwen:
pow
,log2
,sqrt
- cryptography: elliptic curves
deploy_contract
now returnsOption<Address>
deploy_from_source_contract
API- Send API refactored for more consistency and ease of use.
- High level proxies can be used to deploy contracts.
- Mandos log syntax updated, to match Arwen.
- A better
#[only_owner]
annotation, which can be applied directly to endoint methods. This annotation also shows up in the ABI. elrond-wasm-derive
now an optional dependency ofelrond-wasm
. Use#[elrond_wasm::contract]
instead of#[elrond_wasm_derive::contract]
now. Same for proxies and modules.- A zip with all the wasm outputs is now added to each release on Github.
elrond-wasm 0.17.2
callbacks can now declared in modules only
elrond-wasm 0.17.0
- Integration tests can now call Arwen-Mandos (mandos-go)
- Send API refactoring and cleanup
- ESDT builtin function calls no longer require explicit gas
- sync calls and transfer-execute no longer require explicit gas
#[payment_nonce]
endpoint argument annotation#[payable]
annotation no longer allowed without argument
elrond-wasm 0.16.1, mandos 0.7.1
Improvements in mandos-rs: username, contract owner, nested async calls.
Synchronized these features with mandos-go.
elrond-wasm 0.16.0, mandos 0.7.0, elrond-codec 0.5.3
Major redesign of important framework components:
- The arguments to contract/module/proxy annotations are gone. All items are generated in the same Rust module. Both submodule inclusion and contract calls are now Rust-module-aware.
- Submodule imports are now expressed as supertraits instead of the module getter annotated methods. Note: explicitly specifying the Rust module is required, in order for the framework to fetch generated types and functions from that module.
- Each contract now generates its own callable proxy to ease calling it. Caller contracts do no longer need to define a call interface, they can import it from the crate of the contract they want to call. Callable proxies contain the methods from the main contract, as well as from all the modules. Note: calling a contract requires the caller to specify the Rust module where it resides.
- We no longer have a separate syntax/parser/code generation for call proxies. They are just contracts with no implementations and annotated with
#[elrond_wasm_derive::proxy]
instead of#[elrond_wasm_derive::contract]
. - BigUint and BigInt are now associated types instead of generics in all API traits. Contracts need to specify them as
Self::BigUint
instead of justBigUint
. Although more verbose, this might be more intuitive for the developer. ContractCall
s,AsyncCall
s and all other call & transfer result types now contain a reference to the Send API. This also means theexecute_on_dest_context
method no longer requires an api argument.execute_on_dest_context
can now deserialize the call results automatically and provide them to the calling contract. There is a mechanism in place to deconstruct non-serialized types, e.g.SCResult<T>
becomesT
andAsyncCall<Self::BigUint>
becomes()
.- Callbacks and callback proxies needed to be adapted to the new system, but work similar to how they did in the past.
- Contracts can define proxy getter methods using the
#[proxy]
annotation. - Callbacks can now have names, just like endpoints. This name gets saved in the callback closure in storage, but has no other impact on the contract. The reason I needed it was to help me with defining callback forwarders and avoiding some name collisions there. Callback forwarders are still needed for a little longer, until module callbacks are properly implemented.
Mandos
- mandos-rs syntax synchronized with mandos-go (
sc:
syntax, new ESDT call value syntax, no NFTs yet).
elrond-wasm 0.15.1
Mitigating nested sync calls with Send API execute_on_dest_context_raw_custom_result_range