Releases: icdevsorg/icrc4.mo
Releases · icdevsorg/icrc4.mo
ReRelease
[0.2.0] - 2026-02-24
Added
- Mixin pattern (
mo:icrc4-mo/ICRC4/mixin) for automatic endpoint generation usingpersistent actor classand Class+ - Inspect module (
mo:icrc4-mo/ICRC4/Inspect) for cycle drain protection — critical for batch operations:inspect*functions (returnBool) for use insystem func inspect()guard*functions (trap on invalid) for inter-canister protection- Built-in guards in mixin for
icrc4_transfer_batchandicrc4_balance_of_batch - Validates batch size, individual transfer args, and each account in balance queries
configWithLedgerLimits(maxTransfers, maxBalances)for tighter validation from ledger config- Configurable limits via
Configtype andconfigWith()helper
- Interface module (
mo:icrc4-mo/ICRC4/Interface) with extensible before/after hooks for all ICRC-4 endpoints - ICRC-21 consent message support: consent builder for
icrc4_transfer_batch defaultMixinArgs()helper for ergonomic mixin configuration withwithsyntax- Complete README with mixin usage examples, inspect documentation, API reference tables, and migration guide
Changed
- Migrated to
mo:core(replacingmo:base,mo:map,mo:vector) - Migrated to Motoko 1.1.0 with Enhanced Orthogonal Persistence
- Added
v000_002_000migration for state types - Uses
Map.empty/Map.addwith compare functions instead of hash-based operations - Uses
Listfrom core instead ofVec - Uses
Runtime.trap/Debug.printinstead ofD.trap/D.print - Updated
mops.tomlto requiremoc = "1.1.0"toolchain
Technical Details
- Uses
persistent actor classsyntax (Motoko 1.1.0+) - ClassPlus async initialization with
ClassPlusInitializationManager - Star monad error handling for batch transfer operations
- Non-atomic batch semantics: each transfer succeeds or fails independently
- Batch size guards are the most critical defense against cycle drain attacks