What is this about?
Following the Wallet Framework team's OKRs for Q3 2024, we want to bring AccountTracker up to date with our latest controller patterns.
Scenario
No response
Design
No response
Technical Details
No response
Threat Modeling Framework
No response
Acceptance Criteria
- A constant called
controllerName exists which holds the name of the controller.
- A constant called
controllerMetadata exists which holds the metadata for the state.
- The default state object is extracted to a function called
getDefaultAccountTrackerControllerState.
- The class is renamed to
AccountTrackerController and relocated to app/scripts/controllers along with its test file.
AccountTrackerController inherits from BaseController.
- The
AccountTrackerController has a constructor which takes a partial state option (instead of initState) and a messenger option (instead of controllerMessenger), among other options.
- The default state passed to ObservableStore (
initState) is extracted and wrapped in a getDefaultAccountTrackerControllerState function.
- The constructor obtains the current chain ID from the NetworkController (
NetworkController:getState -> selectedNetworkClientId -> NetworkController:getNetworkClientById -> configuration.chainId) instead of taking a getCurrentChainId option.
- The constructor uses the
NetworkController:getNetworkClientById messenger action instead of taking a getNetworkClientById option.
- The constructor uses the
PreferencesController:getState messenger action instead of taking a preferencesController option.
- The constructor uses the
OnboardingController:getState messenger action and OnboardingController:stateChange messenger event instead of taking a onboardingController option.
this.state is used to access state instead of this.store.getState.
this.update is used to update state instead of this.store.updateState.
- Supporting types exist.
- The
AccountTrackerControllerState type exists and represents the current shape of the state object.
- The
AccountTrackerControllerGetStateAction and AccountTrackerControllerStateChangeEvent types exist.
- The
AccountTrackerControllerActions and AccountTrackerControllerEvents types exist.
- The
AllowedActions and AllowedEvents types exist.
- The
AccountTrackerControllerMessenger type exists and expects NetworkController:getState, NetworkController:getNetworkClientById, PreferencesController:getState, OnboardingController:getState, and OnboardingController:stateChange to be allowed.
- The tests are updated to follow suit.
buildAccountTracker is renamed to buildAccountTrackerController.
buildAccountTrackerController pre-registers action handlers using mock functions and returns those action handler mocks to be customized in tests.
accountTrackerController.state is used to access state instead of accountTrackerController.store.getState().
Stakeholder review needed before the work gets merged
References
What is this about?
Following the Wallet Framework team's OKRs for Q3 2024, we want to bring
AccountTrackerup to date with our latest controller patterns.Scenario
No response
Design
No response
Technical Details
No response
Threat Modeling Framework
No response
Acceptance Criteria
controllerNameexists which holds the name of the controller.controllerMetadataexists which holds the metadata for the state.getDefaultAccountTrackerControllerState.AccountTrackerControllerand relocated toapp/scripts/controllersalong with its test file.AccountTrackerControllerinherits fromBaseController.AccountTrackerControllerhas a constructor which takes a partialstateoption (instead ofinitState) and amessengeroption (instead ofcontrollerMessenger), among other options.initState) is extracted and wrapped in agetDefaultAccountTrackerControllerStatefunction.NetworkController:getState->selectedNetworkClientId->NetworkController:getNetworkClientById->configuration.chainId) instead of taking agetCurrentChainIdoption.NetworkController:getNetworkClientByIdmessenger action instead of taking agetNetworkClientByIdoption.PreferencesController:getStatemessenger action instead of taking apreferencesControlleroption.OnboardingController:getStatemessenger action andOnboardingController:stateChangemessenger event instead of taking aonboardingControlleroption.this.stateis used to access state instead ofthis.store.getState.this.updateis used to update state instead ofthis.store.updateState.AccountTrackerControllerStatetype exists and represents the current shape of the state object.AccountTrackerControllerGetStateActionandAccountTrackerControllerStateChangeEventtypes exist.AccountTrackerControllerActionsandAccountTrackerControllerEventstypes exist.AllowedActionsandAllowedEventstypes exist.AccountTrackerControllerMessengertype exists and expectsNetworkController:getState,NetworkController:getNetworkClientById,PreferencesController:getState,OnboardingController:getState, andOnboardingController:stateChangeto be allowed.buildAccountTrackeris renamed tobuildAccountTrackerController.buildAccountTrackerControllerpre-registers action handlers using mock functions and returns those action handler mocks to be customized in tests.accountTrackerController.stateis used to access state instead ofaccountTrackerController.store.getState().Stakeholder review needed before the work gets merged
References