The following patterns were implemented in the solution:
- Circuit breaker with activate/deactivate via the OwnerManagedLite contract
- Withdrawal pattern when owners take funds (allocated in a separate call)
- Restricting access via the OwnerManagedLite contract
- Small state machine for multi-sig changes to the contract owning state
- Shops are created via a factory (not the current EIP Factory pattern) and are accessed directly not via ShopKeeper - ShopKeeper is merely a lookup to it
- An initial upgradable contract was used, but was removed as I had some issues with it
- Circuit breaker with activate/deactivate via the OwnerManagedLite contract
- Withdrawal pattern when owners take funds (allocated in a separate call)
- Restricting access via the OwnerManagedLite contract
- Small state machine for multi-sig changes to the contract owning state