Releases: demergent-labs/azle
0.25.0
This release focuses on many tasks in preparation for Azle's release candidate to 1.0. We expect version 0.25.0
to be the last before the release candidate.
Azle 0.25.0
greatly improves our confidence in the stability and security of Azle's stable mode. We have integrated rquickjs
as our Rust bindings to QuickJS in stable mode. Stable mode and experimental mode are now two entirely separate binaries.
We have greatly improved our automated testing and dependency update processes. We have automatically generated the IDL and TypeScript types for Azle's automatically-included canisters, such as the management canister, ICP ledger, and ICRC canisters.
Benchmarks have been introduced to give developers a feel for Azle's instruction usage and cycle and USD costs.
Azle in stable mode has now been subjected to fuzz testing, uncovering a major memory leak and already borrowed
error. These issues have been fixed in Azle stable and experimental modes.
Azle's stable mode is now more battle-tested than ever before, and we are becoming more and more confident in Azle's stability and security.
Features
stable/experimental binary bifurcation (rquickjs)
Azle now ships two pre-compiled Wasm binaries, one for the stable mode and one for the experimental mode. The stable mode Wasm binary uses rquickjs as the Rust bindings to QuickJS. We believe that rquickjs
is much more stable and generally robust than wasmedge-quickjs. wasmedge-quickjs
is still used in the experimental mode's Wasm binary.
Fuzz tests with cuzz
We have implemented a basic canister fuzz testing framework called cuzz. We uncovered a number of errors and fixed all of them in at least stable mode.
Beautiful errors for stable
We have greatly improved the error reporting for stable mode, from the build process to the canister runtime.
cyclesBurn
We have implemented the cyclesBurn
System API.
Automatically-generated IDL and TypeScript types
We have begun to auto-generate the IDL and TypeScript types for the management canister, ICP ledger canister, and the standardized ICRC canisters. These automatically generated types can be imported from azle/canisters/[canister_name]
. We are working on a PR to didc that will allow you to generate the IDL and TypeScript types for any arbitrary canister as long as you have access to its did
file.
Benchmarks
The root of the repo now has a benchmarks.md
file with aggregated information from many examples and tests. Many of the examples and tests now also have their own benchmarks.md
file. These benchmarks are designed to give you a feel for instruction, cycle, and final USD usage costs for Azle canisters.
Tests for stable APIs in experimental mode
We now run an extensive test suite for the stable API running in experimental mode.
Various new property tests for ICP APIs
We have imporoved property testing for some of the ICP System APIs.
Massive improvements to testing framework/github actions
Our custom continuous integration framework has been overhauled and improved in many ways. This will mostly result in better core development of Azle.
Dependabot automatic dependency updates
Dependabot is now automatically updating most of Azle's JavaScript and Rust dependencies.
Nicer decorator syntax for empty signatures
When using the @query
and @update
decorators, you can now leave off any invocation or options object (@query([])
) if your method takes no parameters and does not return a value.
Double canister method registration issues fixed
Previously Azle would register canister methods in any class in the import tree of the main
Azle file. This behavior has been removed, and you can only register canister methods from the main default exported canister class in stable mode. This behavior has also been fixed for experimental mode.
Major memory leak fix
We found a major memory leak that occurs in certain inter-canister call failure cases. This memory leak has been fixed in both stable and experimental mode.
Already borrowed fix
We found a trapping error case that only occurs in certain inter-canister call failure cases. This has been fixed in both stable and experimental mode.
Breaking Changes
payment
is now calledcycles
in thecall
options object- the management canister, ICP ledger, and ICRC canisters now use new auto-generated IDL and TypeScript types. The path is still
azle/canisters
, but the name of the canister may have changed slightly and the types now match more exactly the types in thedid
file - dataCertificate return type changed, it now returns a
Uint8Array | undefined
- StableBTreeMap is now a class and must be instantiated with
new
candidCompiler
has been entirely removed from stableazle
- the
toBytes
andfromBytes
methods on theempty
Candid type have been removed fromazle
experimental mode - You must now use .raw in URLs even locally for HTTP server canisters as of dfx 0.24.1
- The only supported incoming HTTP methods are POST, GET, HEAD, PUT, and DELETE
- If you relied on decorators registering methods in multiple classes or files, that now doesn't work. You must only register methods in the default exported class
- Some new fields have been added to
azle
's management canisteric.did
file, so some cross canister calls might fail without those updated properties being provided values at runtime instructionCounter
has been removed in favor ofperformanceCounter
What's Changed
- last minute updates to The Azle Book for Azle 0.24.x by @lastmjs in #2082
- Burn by @lastmjs in #2084
- attempt to use class variables in most places in the class api, remov… by @lastmjs in #2083
- Update GitHub workflows by @bdemann in #2031
- automatically generate the management canister idl objects and types … by @lastmjs in #2105
- Quick tests by @bdemann in #2081
- Install global dependencies by @bdemann in #2098
- Auto generate icrcs by @lastmjs in #2108
- Update release process by @bdemann in #2136
- Use reusable workflows to break up tests by @bdemann in #2152
- adding first MVP of benchmarks, they will run on tests now, but will … by @lastmjs in #2138
- Parallel release by @bdemann in #2161
- add delete branches workflow by @bdemann in #2250
- Parallel benchmarking by @bdemann in #2238
- Benchmark Results for benchmark--0.25.0-pre-bifurcation by @github-actions in #2259
- Initial benchmark run by @bdemann in #2256
- Rquickjs move crates by @lastmjs in #2193
- stable/experimental binary bifurcation (rquickjs) by @lastmjs in #2150
- Beautiful errors for Rust by @lastmjs in #2197
- Beautiful errors build by @lastmjs in #2247
- Remove unnecessary experimental by @lastmjs in #2249
- Dynamic main path by @lastmjs in #2251
- Progressive writing by @lastmjs in #2252
- Manual error testing by @lastmjs in #2253
- Rename payment to cycles by @lastmjs in #2254
- Make benchmarks work again by @lastmjs in #2257
- restore quite fail for commit by @bdemann in #2263
- Run stable on experimental by @bdemann in #2191
- Benchmark Results for benchmark--0.25.0-dev by @github-actions in #2264
- Canister version prop test by @bdemann in #2176
- Fix stable in experimental tests by @lastmjs in #2268
- Battle testing by @lastmjs in #2269
- Run tests manually by @bdemann in #2273
- update puppeteer to use new html by @bdemann in #2275
- Cycles prop tests by @bdemann in #2178
- Candid prop tests by @bdemann in #2179
- Arg data raw prop test by @bdemann in #2182
- Workflow updates by @bdemann in #2281
- add a custom fuzz testing workflow by @lastmjs in #2287
- remove all dev dependencies by @bdemann in #2278
- add responses prop test by @bdemann in #2180
- Read me prop tests by @bdemann in #2177
- remove fallback token by @bdemann in #2299
- filter any out of js name arb by @bdemann in http...
0.25.0-rc.15
Merge pull request #2474 from demergent-labs/remove_disclaimer_and_df…
0.25.0-rc.14
Merge pull request #2472 from demergent-labs/stable_b_tree_map_prop_t…
0.25.0-rc.13
Merge pull request #2469 from demergent-labs/unstable_psbt move psbt to unstable
0.25.0-rc.9
Merge pull request #2444 from demergent-labs/globals_versioning Globals versioning
0.25.0-rc.12
Merge pull request #2461 from demergent-labs/experimental_globals completely remove the global index for the canister methods, combine …
0.25.0-rc.11
Merge pull request #2459 from demergent-labs/fix_performance_counter remove instructionCounter and fix performanceCounter tests
0.25.0-rc.10
Merge pull request #2456 from demergent-labs/fix_examples_for_release update new examples
0.25.0-rc.7
use ts-ignore
0.25.0-rc.6
forgot to add modules.d.ts to the .npmignore