This file contains a centralizes a trace of all published crate versions, with their changes in short.
The mx-sdk-rs
repo contains many crates, grouped into several families. Crates in these families always have the same version with one another.
For brevity, the changelog will only mention a short version of their name.
They are:
multiversx-sc
, in shortsc
, the smart contract framework, 6 crates + 3 for contracts/modules:multiversx-sc
multiversx-sc-derive
multiversx-sc-meta
multiversx-sc-scenario
multiversx-sc-snippets
multiversx-sc-wasm-adapter
multiversx-sc-modules
- standard contract modulesmultiversx-price-aggregator-sc
- core contractmultiversx-wegld-swap-sc
- core contract
multiversx-sc-codec
, in shortcodec
, the serializer/deserializer, 2 crates:multiversx-sc-codec
multiversx-sc-codec-derive
multiversx-chain-vm
, in shortvm
, a Rust VM implementation, 1 crate.multiversx-chain-scenario-format
, in shortscenario-format
, scenario JSON serializer/deserializer, 1 crate.multiversx-sdk
, in shortsdk
, allows communication with the chain(s), 1 crate.
- Fixed an edge case for the token storage mappers (
FungibleTokenMapper
,NonFungibleTokenMapper
).
- Fixed compatibility with rustc v1.71.0.
- Allocator system:
- Contracts can now choose their own allocator. This works in multi-contract contexts.
- New allocators:
fail
(default),static64k
,leaking
. - Removed dependency to
wee_alloc
, but using it is still possible if the contract references it directly. - Contract call stack size is now configurable in
multicontract.toml
. - The 'panic with message' system now relies on managed buffers instead of on an allocator.
- Fixed BigUint bitwise operations in the debugger.
- When building contracts, an additional
.mxsc.json
file is created, which packs both the contract binary, the ABI, and some additional metadata. - Refactor: reorganized the meta crate.
- Deprecated some legacy methods in the API wrappers.
- Building contracts also triggers an EI check, which verifies compatibility with various VM versions. It currently only issues warnings.
ManagedVecItem
implementation for arrays.
- Call value
egld_value
andall_esdt_transfers
methods returnManagedRef
instead of owned objects, because they are cached (to avoid accidental corruption of the underlying cache).
multiversx-sc-meta
test-gen
command: generates Rust integration tests based on scenarios present in thescenarios
folder.UnorderedSetMapper
swap_indexes
method.
TokenIdentifier
ticker
method.ManagedBuffer
concat
method.
multiversx-sc-meta
improvements:- Bugfix: custom names in the main contract no longer crash the multi-contract build.
- Bugfix: the
--mir
flag works correctly insc-meta all build
; - Multi-contract configs can now specify separate cargo features for individual contracts, for conditional compilation.
multiversx-sc-meta
improvements:- Rust snippet generator fixes. The generator creates compilable code with appropriate argument types.
local-deps
command: generates a report on the local depedencies of contract crates. Will explore indirect depdencies too.- Upgrade tool minor fix.
multiversx-sc-meta
improvements:--locked
flag get passed to the build command, preserves dependencies in Cargo.lock.update
command updates Cargo.lock files without building the contracts.
- Backwards compatibility for running scenarios using the VM Go infrastructure.
multiversx-sc-meta
improvements:upgrade
can handle crates as early as0.28.0
;--ignore
flag for theall
command: will ignore folders with given names, by default set totarget
;info
command, shows contracts and contract library crates with their respective framework versions;--mir
flag when building, also emits MIR files;- printing to console the build command.
BigUint
fromu128
conversion.
multiversx-sc-meta
improvements:all
command that allows calling all contract meta crates in a folder;upgrade
also re-generates wasm crates after reaching 0.39.1.
- Cleaned up dependencies.
multiversx-sc-meta
can be installed as a standalone tool (sc-meta
), and used to automatically upgrade contracts.- Many depedencies updates across the repo.
- Updated readme files.
- All crates were renamed, in line with the MultiversX brand.
- New crate:
multiversx-chain-vm
, extracted from the old debug crate. - New crate:
multiversx-sdk
, adapted from a solution proposed by the community. - A
ScenarioWorld
facade, for contract tests. - The meta crate supports
twiggy
post-processing, this is a tool to analyze contract size and investigate bloat in the binaries. - Dropped crate:
elrond-wasm-output
. There is no equivalent crate, its job was passed to the individualwasm
crates. ManagedVec
supports sorting and deduplication.migrateUserName
builtin function mock.
ContractCall
refactor. Building a contract call comes with harder compile-time constraints. This also reduces compiled code size.ContractBase
supertrait can be now stated explicitly for contract and module traits.- Debugger:
- Callback payment is now set correctly.
- Function names are represented internally as strings instead of bytes, which aids debugging.
- Removed the
ei-1-2
feature, which was guarding the newer VM functions. These functions are in the mainnet, so this feature is no longer needed. - New utility functions:
self.send().esdt_local_burn_multi(...
,self.blockchain().get_token_attributes(...)
. - Updated all crates to Rust 2021.
- Multi-contract build system:
- build system refactor;
multicontract.toml
config system with labels,- eliminated monomorphization issue that was bloating some contracts;
- build post-processing:
wasm2wat
, imports viawasm-objdump
.
- Support for the new async call system (promises):
- new APIs;
- a new flavor of callbacks (
#[promises-callback]
); - callback optimizations.
elrond-codec
refactor: removedTopEncodeNoErr
,NestedEncodeNoErr
andTypeInfo
- System SC proxy: added support for
controlChanges
endpoint and transfer create role (from community). - Module updates:
MergedTokenInstances
module;- Governance module improvements;
set_if_empty
for FungibleTokenMapper and NonFungibleTokenMapper.
IntoMultiValue
trait.- Storage mapper improvements:
- Storage mappers can read from another contract.
BiDiMapper
improvements;- Fixed missing substitution rules for
FungibleTokenMapper
,NonFungibleTokenMapper
,UniqueIdMapper
,BiDiMapper
,WhitelistMapper
,RandomnessSource
; - Added
take
andreplace
methods forSingleValueMapper
; - Implemented
Extend
trait forUnorderedSetMapper
.
- Deprecated
ContractCall
execute_on_dest_context_ignore_result
method, since it is currently redundant.
EsdtTokenPayment
legacy decode: objects encoded by older versions of the framework can now also be decoded, if flagesdt-token-payment-legacy-decode
is active.- Codec
NestedDecodeInput
newpeek_into
method. FungibleTokenMapper
caches the token identifier.
- Rust interactor snippet generator.
- Added some missing substitution rules in the contract preprocessor.
- Allow single zero byte when top-decoding Option::None.
- Ongoing operations module.
- Claim developer rewards module.
FromIterator
trait forManagedVec
.- Mandos
"id"
accepted as synonym to"txId"
.
#[only_admin]
annotation- Safer BigUint/BigInt conversions
- Added and published
price-aggregator
andwegld-swap
core contracts.
[elrond-wasm 0.34.0, elrond-codec 0.12.0, mandos 0.16.0, elrond-interact-snippets 0.1.0] - 2022-07-08
- Major refactor of the mandos-rs infrastructure.
- High-level Mandos objects moved to elrond-wasm-debug;
- The
mandos
crate no longer depends onelrond-wasm-debug
(as originally intended and implemented); - Typed mandos contract call objects, for better call syntax.
- More syntactic sugar for writing mandos calls.
- The first version of elrond-interact-snippets, which can be used to write short blockchain interactor programs.
- The syntax relies on contract proxies to easily build calls.
- Some of the infrastructure is shared with Mandos.
- There is an example of such a interactor for the multisig contract.
- Refactor of managed type handles in all API traits. Eliminated undefined behavior when using the same handle in multiple contexts.
- Transfer role proxy module.
- NFT merge module.
#[only_user_account]
annotation. Only user accounts can call these endpoints.- ABI - fixed missing event logs from modules.
- CodecSelf for BigInt
- Removed the data field for direct EGLD & ESDT transfers.
- Testing and debugging environment aligned with VM version 1.4.53.
- Call value and token data infrastructure additional cleanup.
- VM new functionality added as part of the environment interface 1.2:
- Fully managed functionality for elliptic curves (no allocator);
- Fully managed cryptographic functions (no allocator);
- More efficient printing of big ints and hex;
- Functionality available by adding the
ei-1-2
flag to contracts.
BigFloat
functionality. Since the functionality is not yet deployed on mainnet, use flagbig-float
to use.- Major refactoring of the call value mechanism:
TokenIdentifier
now only refers to ESDT, for mixed EGLD+ESDT we haveEgldOrEsdtTokenIdentifier
.EsdtTokenPayment
now only refers to ESDT, for mixed EGLD+ESDT we haveEgldOrEsdtTokenPayment
.- Compact version for multi-transfer:
let [payment_a, payment_b, payment_c] = self.call_value().multi_esdt();
. - Explicit
single_esdt
vs.single_fungible_esdt
vs.egld_or_single_esdt
vs.egld_or_single_fungible_esdt
. - Payment arguments are still supported, although discouraged. They always assume the EGLD+ESDT scenario.
ManagedOption
provides some minor optimization for specific use-cases. Mostly for use in the framework.- Cleanup in the callback mechanism and in the
SendApi
. SparseArray
implementation.UniqueIdMapper
- efficient storage mapper for holding unique values.- The ABI also contains events.
- New standard module:
StakingModule
.
- Bugfix - formatter single char issue.
- Improved formatter. Strings can be formatted similarly to the standard Rust ones, but without allocator, using managed buffers. Macros
require!
,sc_panic!
,sc_format!
,sc_print!
use it. - Removed build flag
ei-1-1
, following mainnet updated and new VM endpoints being available. Among others, managedsha256
andkeccak256
APIs can be used freely. CodecFrom
andCodecInto
traits to define equivalent encodings and conversions via codec.- Generated smart contract proxies use the
CodecFrom
/CodecInto
traits to accept a wider range of types. - Mandos Rust testing framework v2, which uses contract proxies for composing calls and is capable of building and exporting mandos scenarios.
- Managed type handle management system in the contract, to reduce the number of API calls to the VM. General VM API refactor.
- Eliminated
#[var_args]
annotation. The framework can now distinguish between single-values and multi-values solely based on type. - Contract cleans up return data after performing synchronous calls. Getting return data by range is no longer needed and the respective methods have been removed.
- Fixed behavior of blockchain API
get_esdt_token_data
. - Git tag/commit info in ABI (fixed & reintroduced).
- Feature flags in
elrond-wasm
:alloc
allows contracts to use the heap allocator. It is not a hard restriction, there is still access to the implementations of the heap-allocated types, but they are not imported. Some methods are only available with this flag.ei-1-1
allows contracts to use VM endpoints that are not yet available on the mainnet.
- Fixes with async calls, smart contract deploy & upgrade.
- Refactoring regarding small number types in the API.
- Rust testing framework: Allow checking NFT balance without also checking attributes.
- View for
MapMapper
.
ManagedVec
backwards compatible implementation forset
.- Implemented
ManagedVecItem
forOption<T>
.
- Disabled git tag/commit info in ABI due to issue in standard modules.
- Cleaned up allocator from modules:
DnsModule
,EsdtModule
,FeaturesModule
,PauseModule
,UsersModule
. - Crypto API managed wrapper over legacy VM endpoints.
- Managed multi-value types refactor and rename.
ManagedVec
-remove
,contains
,find
.ManagedVecItem
derive for simple enums.- Feature
cb_closure_managed_deser
replaced bycb_closure_unmanaged_deser
, managed implementation is now the default. - Git tag/commit info in ABI.
- Major elrond-codec refactor:
- Redesigned the error handling for single value encoding
- Introduced multi-value encoding, which replaces the previous endpoint argument and result mechanisms
- Mandos improvements:
- Multi-values: out, topics, ESDT uri
- Logs "+" wildcard
- Builtin function mocks:
ESDTNFTUpdateAttributes
,ESDTNFTAddURI
- New storage mappers:
FungibleTokenMapper
,NonFungibleTokenMapper
,WhitelistMapper
- Call value wrapper avoids using invalid token index in requests
- Backwards compatibility fix.
- Backwards compatibility fix.
- Trailing commas are allowed in
sc_panic!
,require!
andsc_print!
. - EsdtTokenData
decode_attributes_or_exit
for easier error handling.
- Added missing non-specialized decode implementations for managed types.
- Deriving
PartialEq
now works on structs that contain managed types.
- Fixed certain compilation error messages. The previous implementation of the macro preprocessor would have concealed the location of many issues.
- Changed implementation of
require!
:require!
no longer returns aSCResult
type, when the condition is false it now stops the transaction immediately, viasignal_error
;require!
now accepts message formatting;require_old!
gives access to the old implementation.
- The Rust testing framework can now handle panics and async calls.
- ABI bugfix - an issue regarding nested types.
meta
crate build also attempts to callwasm-opt
after building the contracts.- Refactored
CodeMetadata
and added "payable by SC" field. - Empty contract template.
- Major VM API trait refactoring. All API methods can be accessed from a static context. Removed api instance variables from all objects.
- External view contracts
- Annotating one or more endpoints with
#[external_view]
triggers the framework to create a second "external view" contract where all these endpoints are placed. This is primarily to reduce the main contract size. - General
meta
crate functionality refactor to allow multiple contract generation.
- Annotating one or more endpoints with
ManagedRef
type- Provided as a more efficient alternative to regular references to managed types
- Has
Copy
semantics ManagedVec
iterators made safer by the proper use of lifetimesManagedVec
get_mut
offers a safe mutable reference, using lifetimes- Some initial optimizations in storage mappers
- First version of a message formatter based on
ManagedBuffer
s:sc_print!
macrosc_panic!
macro
- Random number generator wrapper over randomness source from the VM.
- Rust testing framework - mandos generation fixes and some more getters
- Standard modules moved to
elrond-wasm-modules
crates
- Rust testing framework
- Managed Crypto API - keccak256 and sha256
- New hook for ESDT local roles
- Only-owner module annotation
ArrayVec
serializationManagedAddress
additional conversions
- Static access to API. Static thread-local context stack in the debugger.
- Derive
ManagedVecItem
generics fix - Constructor can reside in module
ManagedMultiResultVec
push accepts multi result
ManagedVarArgsEager
implementationEsdtLocalRoleFlags
, no heap allocation inget_esdt_local_roles
- Optimized decode unsigned number from slice
- Optimized decode unsigned number from slice
- Optimized blockchain API: managed get token nonce, get esdt balance
ManagedVecItem
forManagedByteArray
- Optimized decode u64 from
ManagedBuffer
ManagedVecItem
inderive_imports
- Implemented
ManagedVecItem
forbool
. - Substitution for
ManagedMultiResultVec::new()
.
- Derive
ManagedVecItem
. - Nested encode and decode from ManagedBuffers cached in a static singleton buffer.
- Implemented
ExactSizeIterator
forManagedVecIterator
.
- Memory allocation optimisations.
- Callback endpoint automatically created empty for contracts that have no callbacks. This is determined by the
meta
crate, based on the ABI of the contract and its modules. UnorderedSetMapper
IgnoreVarArgs
variadic argument type that ignores input
- Made the generated code in
wasm/lib.rs
more compact with the use of macros.
- Mechanism for generating contract endpoints based on ABI. Previously, all endpoints from all modules from a crate were automaticaly included, now they can be filtered based on what modules are used.
- Contract
meta
crates are now capable of building the respective contracts and the ABIs without relying onerdpy
. - Renamed feature
arwen-tests
tomandos-go-tests
- Bugfix regarding contract upgrade args in
elrond-wasm-debug
- Relative path improvements and fixes in
elrond-wasm-debug
:- mandos-rs
file:
syntax now actually loads files and correctly unifies equivalent paths - debugging now works seamlessly, without needing to temporarily change paths in the tests
- mandos-rs
- SC proxy -
register_meta_esdt
- Debugger builtin function mocks check for ESDT roles
- ABI provides definitions for EsdtTokenPayment, EsdtTokenData, EsdtTokenType
- Mandos support for NFT syntax. Many more small improvements and some major refactoring.
- Major refactoring of the
elrond-wasm-debug
crate, which enables the debugger and the coverage tool. Many features added:- support for synchronous calls, also nested synchronous calls
- support for NFT simple transfers
- support for ESDT multitransfer (FT + NFT)
- builtin functions mocked in the debugger:
ESDTLocalMint
,ESDTLocalBurn
,MultiESDTNFTTransfer
,ESDTNFTTransfer
,ESDTNFTCreate
,ESDTNFTAddQuantity
,ESDTNFTBurn
,ESDTTransfer
,ChangeOwnerAddress
,SetUserName
- supports deploy/deploy from source/upgrade/upgrade from source from contracts
#[payment_multi]
annotationManagedRef
type, that allows easier handling of managed types- ABI contains endpoint mutability flag (mutable/readonly)
- reverse iteration for
ManagedVec
- Added missing managed methods in blockchain API:
is_smart_contract
,get_shard_of_address
,get_balance
. - Improved preprocessor substitutions:
ManagedAddress
,TokenIdentifier
.
- 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
- Legacy Send API implementation fix
- 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.
- Crypto API:
ripemd160
function, custom secp256k1 signature verification (verify_custom_secp256k1
) and signature generation (encode_secp256k1_der_signature
).
- 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.
- 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.
- conversions from big ints to small int:
BigUint::to_u64
,BigInt::to_i64
SingleValueMapper
set_if_empty
method
- callbacks can now declared in modules only (manual forwarding from the main contract no longer required)
legacy-nft-transfer
feature for interacting with older versions of Arwen
- 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
- New implementation for the
Try
trait forSCResult
, in accordance to featuretry_trait_v2
- Published DNS module, which helps contracts register usernames for themselves
ESDTLocalRole
more expressive type ABI
- Improvements in mandos-rs: username, contract owner, nested async calls
- 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-rs syntax synchronized with mandos-go (
sc:
syntax, new ESDT call value syntax, no NFTs yet).
- Mitigating nested sync calls with Send API
execute_on_dest_context_raw_custom_result_range
- ABI
- Constructor representation
- Simplified ABI syntax for tuples and fixed-size arrays
- Final cleanup for the contract APIs: split off blockchain and crypto APIs
- Small fixes in the send API
TokenIdentifier
validation- Minor refactoring in the elrond-codec
- Fixed contract call/callback logs in mandos-rs
- Unified variadic arguments with respective variadic results
- ESDT functionality:
- ESDT system smart contract proxy, though which it is possible to mint, burn, issue, freeze, pause, etc.
- Endpoints to handle NFTs. Also added NFT management in the ESDT system smart contract proxy
- Get balance, get token data, local mint/burn
- Contract calls:
- Low-level and high-level support for synchronous calls via
execute_on_dest_context
. - Callback bug fix
- Low-level and high-level support for synchronous calls via
- Improvements in storage mappers:
- VecMapper length is now lazy
- UserMapper more functionality
- Mandos
scQuery
step- fixed defaults: unspecified fields now check the default value instead of being ignored
- check logs
nested:
andbiguint:
syntax
elrond-codec-derive
dix -TopDecodeOrDefault
works with generics- Upgraded to Rust2021.
- Events revamped:
- any event name of any length is accepted. The event name is now expressed as ASCII instead of hex
- topics can have any length
- topics and data are serialized using the elrond-codec instead of the old macro-based solution
- old events are still allowed for now via the
#[legacy_event("0x...")]
syntax; might be removed in the future
- Major refactoring of elrond-wasm-derive. This doesn't change much of the functionality, though.
- SingleValueMapper redesigned for easier use. It no longer keeps the storage value cached.
- Reorganized ESDT and EGLD direct send api.
- New async call syntax
- redesigned contract proxies
- contract calls are communicated via objects returned from endpoint methods
- callbacks now specified programmatically
- got rid of the
#[callback_arg]
annotation
- Major refactoring of the contract API: split into smaller traits
- Storage mappers:
- LinkedListMapper
- SetMapper
- MapMapper
- SendApi
- created SendApi, which groups all functionality related to sending tokens and interactions with other contracts
- integrated the new TransferESDT hook from Arwen
- added an unsafe buffer for handling values before transfer
- mandos-rs fixes
- contracts now use the new API + more mandos tests
- Call Value API refactor and
#[payable]
updates:- Main features:
#[payable]
annotation more versatile:#[payable("EGLD")]
#[payable("TOKEN-ID")]
#[payable("*")]
#[payable]
still accepted but throws a warning, will become unsupported in the future.#[payment]
argument attribute now also provides ESDT payment where applicable- a new TokenIdentifier type that encodes the EGLD special token and any ESDT token
- a new
#[token_identifier]
argument attribute provides the token id. Similar to#[payment]
it is a fake argument, not exported. - ABI updated ("payableInTokens" is no longer restricted to "EGLD")
- all new features covered by mandos tests
- async proxies still only accept
#[payable("EGLD")]
, but that is for future updates
- Less visible changes:
- all call value hooks now grouped in a new CallValueApi
- for low-level access, developers now need to write self.call_value().egld_value(), etc.
- some optimizations in the handling of call value hooks
- Refactoring:
- parse_attr mod was split into a proper folder with many files, since it had grown too large
- an extensive refactoring of elrond-wasm-derive not yet performed, will come soon
- Main features:
- ABI enum discriminants generation
- Crypto API fixes:
keccak256:
prefix also supported in mandos- reorganized crypto mandos tests in basic-features
- mandos-rs was accidentally providing keccak256 instead of sha256
- Temporary fix: callbacks allow error message argument to be missing
- Codec derive with defaults
- Storage mapper infrastructure
- ABI generation of endpoint output names
- Codec type hygene
- Minor fixes, support for strings
- Codec derive
- ABI generation framework
- New example contracts
- SC deploy API
- Monomorphization via codec trait instead of TypeInfo for arguments and storage
- Reorganized all contracts in the
contracts
folder
- H256 & BoxedBytes fixes
- H256 is_zero, minor fixes
- BoxedBytes
- optimized allocation, used in hooks
- used for error messages
- Optimized Address/H256 hooks
- Allow slices as arguments
storage_is_empty
annotation
- BigUint serialization bugfix
- Serialization completely refactored to use "fast exit" methods
- Storage/argument/result traits completely redesigned, simplified and optimized
- Completely ditched the approach from elrond-wasm 0.8.0.
- Was the first version to split Encode/Decode into TopEncode/NestedEncode/TopDecode/NestedDecode
- Attempted to optimize the serializer to use "fast exit" closures. It worked, but the resulting bytecode size was not satisfactory. Even though it was completely replaced and never got to be used, it historically remains the solution of this release.
- Some of the storage/argument/result trait refactorings, survived.
- small int EI
- minor refactors, serialization fixes
- Avoid function selector infinite loop
- Crowdfunding contract initial commit
- Code coverage now possible
- Mandos in Rust
- Modules properly integrated in the build process
- NonZeroUsize iterator and utils
- Integrated NonZeroUsize into the framework
- Specialized small int top encoding/decoding
only_owner!
macro
- Redesigned the entire build process with wasm crates
- Standard modules
- Moved all example contracts from sc-examples-rs to the framework
- H256 now boxed
- SCResult is_ok, is_err
- MultiResultVec - new, from_iter
- EncodeError type
- Extracted elrond-codec to separate crate
- Fixed non_snake_case endpoint handling
- Queue type
#[view]
attribute, same as#[endpoint]
#[init]
attributestorage get mut
annotation + BorrowedMutStorage- Encode for references
- Array serialization/deserialization
- Option serialization fix
- Arg name in error message
- Async call arguments based on traits
- EndpointResult trait, arg serialization trait, arg loader
- Variadic args/results: OptionalArg, OptionalResult, MultiResultX
- MultiResultVec implementation
- Callback varargs
storage_set
allows slices- H256 to_vec
- async call and callback argument fixes
- eliminate bloat when no callback
- the new elrond lightweight serializer (would later become elrond-codec)
- imports macro
- OtherContractHandle implementation
- Serialization fixes for small ints
get_cumulated_validator_rewards
hook
- Allow any (macro-based) serializable argument in async call
#[var_args]
- Call data serialization refactoring
- Tutorial setup (later abandoned)
- Direct storage conversion for simple types
- Block info hooks
- Serde-based serializer (later abandoned)
- Major storage improvements:
- Generate storage getters & setters
- Variable length storage keys
- Fixes in the macro-based argument handling
- Raw callback support
storage_load_len
hook- Multi args
- Multi args in async calls
- BigUint trait created, added operators (including bitwise)
- BigUint used for balances
- Async call contract proxy infrastructure
- Initial relase of the framework
- Main features at this time:
- contract main macro
- handling of arguments and results automagically using macros
- BigInt generic type, hooked directly to the Arwen big int heap
#[private]
attribute
- Early framework moved here from sc-examples
- 4 crates:
- elrond-wasm
- elrond-wasm-derive for macros
- elrond-wasm-node for wasm
- elrond-wasm-debug for debugging and early tests