Context & Goal
Issues #98, #100, #105, #107 collectively request account freeze/unfreeze in InvoiceToken. A frozen account must be rejected on all transfer, burn, and transfer_from operations via StorageKey::FrozenAccount(Address).
Work Required
storage.rs: add FrozenAccount(Address) and is_frozen/set_frozen helpers.
lib.rs: add set_frozen(address, frozen) (admin-only). Add frozen check to transfer, transfer_from, burn, burn_from.
errors.rs: add AccountFrozen with unique discriminant.
- Tests: freeze blocks transfer/burn, unfreeze restores, non-admin freeze rejection, frozen as recipient (succeeds).
Acceptance Criteria
Target Branch: dev
Estimated Effort: 5–12 hours | Delivery: 3–5 days
Context & Goal
Issues #98, #100, #105, #107 collectively request account freeze/unfreeze in
InvoiceToken. A frozen account must be rejected on all transfer, burn, and transfer_from operations viaStorageKey::FrozenAccount(Address).Work Required
storage.rs: addFrozenAccount(Address)andis_frozen/set_frozenhelpers.lib.rs: addset_frozen(address, frozen)(admin-only). Add frozen check totransfer,transfer_from,burn,burn_from.errors.rs: addAccountFrozenwith unique discriminant.Acceptance Criteria
cargo test -p invoice-tokenpasses with no regressions. PR targetsdev.Target Branch:
devEstimated Effort: 5–12 hours | Delivery: 3–5 days