Skip to content

Releases: multiversx/mx-sdk-rs

elrond-wasm 0.20.0, elrond-codec 0.7.0, mandos 0.10.0

02 Oct 20:54
v0.20.0
f06544b
Compare
Choose a tag to compare
  • 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

10 Sep 18:42
v0.19.0
cdc851d
Compare
Choose a tag to compare
  • 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 ManagedAddresses now. They rely on another managed type, the ManagedByteArray, 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 and ManagedInto.
    • There are now 2 types of SCError: StaticSCError for static messages and ManagedSCError, 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

20 Aug 15:31
v0.18.2
750ed81
Compare
Choose a tag to compare

Crypto API: ripemd160 function, custom secp256k1 signature verification (verify_custom_secp256k1) and signature generation (encode_secp256k1_der_signature).

elrond-wasm 0.18.1

05 Aug 12:53
v0.18.1
25e0c20
Compare
Choose a tag to compare
  • 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

28 Jul 16:27
v0.18.0
5fb9a23
Compare
Choose a tag to compare
  • New math hooks exposed from Arwen:
    • pow, log2, sqrt
    • cryptography: elliptic curves
  • deploy_contract now returns Option<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 of elrond-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

05 Jun 20:26
af6da82
Compare
Choose a tag to compare

callbacks can now declared in modules only

elrond-wasm 0.17.0

28 May 18:07
df1e3de
Compare
Choose a tag to compare
  • 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

19 May 17:49
Compare
Choose a tag to compare

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

14 May 07:21
98eb701
Compare
Choose a tag to compare

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 just BigUint. Although more verbose, this might be more intuitive for the developer.
  • ContractCalls, AsyncCalls and all other call & transfer result types now contain a reference to the Send API. This also means the execute_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> becomes T and AsyncCall<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

14 May 07:20
d7a81f4
Compare
Choose a tag to compare

Mitigating nested sync calls with Send API execute_on_dest_context_raw_custom_result_range