This document tracks changes, versions, and migration notes for each of the smart contracts in the Remitwise suite.
- Summary: Removed orphaned
RemittanceSchedulePagecontracttype that had no producer, shrinking the exported ABI. - Breaking Changes:
RemittanceSchedulePageremoved from the type surface. Consumers usingSchedulePageare unaffected. - Migration Notes: No migration needed unless a consumer was referencing the never-produced
RemittanceSchedulePage.
- Summary: Added owner-indexed schedule pagination with ordering guarantees.
- New Features:
get_remittance_schedules_paginated(): Paginated schedule queries with stable cursors- Deterministic ID-ascending ordering for all schedule queries
- Enhanced pagination support with limit clamping and cursor stability
- Breaking Changes: None (new function added).
- Migration Notes: Existing
get_remittance_schedules()now returns results in ID-ascending order for consistency.
- Summary: Initial release of the Remittance Split contract.
- Breaking Changes: None.
- Migration Notes: Baseline deployment.
- Summary: Aligned bill event emissions with declared
BillEventenum variants. - Breaking Changes:
cancel_billaction symbol changed from"canceled"to"cancelled"to matchBillEvent::Cancelledset_external_refaction symbol changed from"ext_ref"to"ext_upd"to matchBillEvent::ExternalRefUpdated
- Migration Notes: Indexers must update action symbol filters to match the new symbols above.
- Event Alignment: This change aligns emitted bill events with
EVENTS.mdand removes ad-hoc event symbols.
- Summary: Initial release of the Bill Payments contract.
- Breaking Changes: None.
- Migration Notes: Baseline deployment.
- Summary: Initial release of the Insurance contract.
- Breaking Changes: None.
- Migration Notes: Baseline deployment.
- Summary: Default
create_goalto unlocked; explicit locked path for commitment devices. - Changes:
create_goalnow defaults tolocked: false(immediately withdrawable). Added explicitlocked: boolparameter to support commitment-device use cases.GoalCreatedEventincludes resultinglockedstate.- Updated tests (including large-amount stress tests) to cover both default and explicit locked paths.
- Breaking Changes: Yes — ABI and default behaviour change for
create_goal. Callers that relied on locked-by-default must now passfalseexplicitly for normal goals. - Migration Notes:
- Update all integrator calls to
create_goalto pass the newlockedparameter (defaultfalse). - No storage migration required (existing goals unaffected).
- Bump contract version and re-deploy.
- Update all integrator calls to
...
- Summary: Initial release of the Savings Goals contract.
- Breaking Changes: None.
- Migration Notes: Baseline deployment.
- Summary: Initial release of the Family Wallet contract.
- Breaking Changes: None.
- Migration Notes: Baseline deployment.
- Summary: Bounded legacy
get_archived_reportsto prevent host-budget reverts and promotedget_archived_reports_pageas the supported archive reader (Issue #832). - Changes:
get_archived_reportsis deprecated (marked#[deprecated]). It now delegates toget_archived_reports_page(0, DEFAULT_PAGE_LIMIT)internally, so it returns at most the firstDEFAULT_PAGE_LIMIT(20) entries instead of the entireARCH_IDX(user)list. Signature preserved for back-compat.get_archived_reports_pagenow uses the canonical terminator convention: out-of-range cursors (cursor >= count) and empty archives both returnnext_cursor == 0instead of echoing the cursor back.get_archived_reports_pagenow normalizeslimitthroughremitwise_common::clamp_limit:0maps toDEFAULT_PAGE_LIMIT(20); values aboveMAX_PAGE_LIMIT(50) clamp toMAX_PAGE_LIMIT. This matches every other paginated read in the Remitwise suite.
- Breaking Changes: None at the ABI/type level. Behaviour change:
get_archived_reportspreviously returned an unboundedVec<ArchivedReport>; it is now bounded toDEFAULT_PAGE_LIMIT(20) and may truncate users with very long archive histories. Callers that need the full archive should migrate toget_archived_reports_pageand walk untilnext_cursor == 0. - Migration Notes:
- Replace
get_archived_reports(user)with a paged walk: start withget_archived_reports_page(user, 0, DEFAULT_PAGE_LIMIT)and continue untilnext_cursor == 0. - No storage migration required.
- Compatibility: signatures are unchanged. Existing callers that only inspect the first page are unaffected.
- Replace
- Tests: Added
reporting/src/tests_archived_pagination_bound.rscovering bound enforcement, first-page equivalence (deprecated reader vs paged reader), full archival traversal with termination, out-of-range cursor, empty archive,limit=0normalization,limit=u32::MAXclamping, and user isolation under bound.
- Summary: Initial release of the Reporting contract.
- Breaking Changes: None.
- Migration Notes: Baseline deployment.