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 #2302
- Remove timeout by @bdemann in #2298
- break up longer steps into smaller steps by @bdemann in #2301
- Release finishing touches by @bdemann in #2290
- Certified data prop test by @bdemann in #2181
- Workflow checks by @bdemann in #2296
- Fix PR checks by @bdemann in #2310
- Test workflow dispatch by @bdemann in #2297
- add error message to markdown if benchmarks failed by @bdemann in #2300
- refactored type tests to always be imported, fixed some type errors by @lastmjs in #2316
- ICP API prop test types by @bdemann in #2305
- don't run on drafts by @bdemann in #2318
- first attempt at fuzz testing by @lastmjs in #2274
- update versions by @bdemann in #2317
- Missing benchmarks by @bdemann in #2328
- Reorg examples by @bdemann in #2326
- Benchmark analysis by @bdemann in #2293
- try dependabot by @bdemann in #2334
- update workflow to build template on dependabot prs by @bdemann in #2347
- add tokens and signing keys to the env by @bdemann in #2356
- Dep bot troubleshooting by @bdemann in #2358
- remove print by @bdemann in #2359
- deps: bump chokidar from 4.0.1 to 4.0.3 by @dependabot in #2353
- Bump elliptic from 6.5.6 to 6.6.1 in /examples/stable/demo/hello_world by @dependabot in #2348
- Bump cross-spawn from 7.0.3 to 7.0.6 in /examples/experimental/test/end_to_end/http_server/http_outcall_fetch by @dependabot in #2349
- Prop_test_idl by @bdemann in #2369
- deps: bump the serde group with 2 updates by @dependabot in #2339
- deps: bump proptest from 1.5.0 to 1.6.0 by @dependabot in #2341
- deps: bump the ic-dependencies group with 6 updates by @dependabot in #2338
- deps: bump slotmap from 1.0.6 to 1.0.7 by @dependabot in #2345
- shorten main from feature pr merge tests by @bdemann in #2377
- deps(dev): bump puppeteer from 23.10.3 to 23.11.1 by @dependabot in #2362
- add ic by @bdemann in #2371
- add check for tasks in linked issues by @bdemann in #2373
- make stable b tree map a class by @bdemann in #2363
- All prop tests use getCanisterActor by @bdemann in #2361
- deps: bump the dfinity group with 3 updates by @dependabot in #2337
- deps: bump anyhow from 1.0.86 to 1.0.95 by @dependabot in #2385
- deps: bump serde_json from 1.0.133 to 1.0.134 in the serde group by @dependabot in #2383
- add maintenance workflow by @bdemann in #2386
- Example/test maintenance: update dependencies, formatting, and linting by @lastmjs in #2391
- Example/test maintenance: update dependencies, formatting, and linting by @lastmjs in #2388
- deps: bump the ic-dependencies group with 2 updates by @dependabot in #2382
- update cuzz and fix small issue by @lastmjs in #2323
- deps(dev): bump fast-check from 3.23.1 to 3.23.2 by @dependabot in #2343
- deps: bump esbuild from 0.24.0 to 0.24.2 by @dependabot in #2381
- deps(dev): bump lint-staged from 15.2.11 to 15.3.0 by @dependabot in #2392
- Bump vite from 4.4.10 to 4.5.5 in /examples/experimental/demo/ckbtc/wallet/frontend by @dependabot in #2395
- Bump rollup from 3.29.4 to 3.29.5 in /examples/experimental/demo/ckbtc/wallet/frontend by @dependabot in #2394
- deps(dev): bump the eslint group across 1 directory with 5 updates by @dependabot in #2399
- deps: bump serde from 1.0.216 to 1.0.217 in the serde group by @dependabot in #2393
- add requirement to link related issues to pr by @bdemann in #2405
- update rust by @bdemann in #2398
- Default decorators need not be invoked by @lastmjs in #2400
- Update dfx by @bdemann in #2407
- remove direct array accesses in experimental stable structures by @lastmjs in #2409
- deps: bump rquickjs from 0.6.2 to 0.8.1 by @dependabot in #2384
- deps: bump wasmi from 0.31.2 to 0.40.0 by @dependabot in #2340
- Example/test maintenance: update dependencies, formatting, and linting by @lastmjs in #2417
- Canister methods only from export by @lastmjs in #2415
- memory leak and already borrowed fixes are in experimental now by @lastmjs in #2424
- Update canister bindings by @lastmjs in #2425
- remove test dir by @bdemann in #2426
- deps: bump uuid from 11.0.3 to 11.0.4 by @dependabot in #2440
- deps: bump ethers from 6.13.4 to 6.13.5 by @dependabot in #2441
- Fix examples for release by @bdemann in #2443
- use npm exec --offline for tsc and cuzz to attempt a solution that wi… by @lastmjs in #2428
- Globals versioning by @lastmjs in #2444
- update new examples by @bdemann in #2456
- Revert "update unstable tests" by @bdemann in #2449
- remove instructionCounter and fix performanceCounter tests by @lastmjs in #2459
- completely remove the global index for the canister methods, combine … by @lastmjs in #2461
- move psbt to unstable by @bdemann in #2469
- Stable b tree map prop test fix by @lastmjs in #2472
- update the disclaimer, add sections on stable and experimental modes,… by @lastmjs in #2474
New Contributors
- @dependabot made their first contribution in #2353
Full Changelog: 0.24.1...0.25.0