@@ -9,17 +9,19 @@ struct CairoFactRegistryModuleStorage {
99 // It is stored here so that it can be storage proven between satellites.
1010 mapping (bytes32 => bool ) facts;
1111 mapping (bytes32 => bool ) mockedFacts;
12- IFactsRegistry fallbackContract ;
12+ IFactsRegistry externalFactRegistry ;
1313 bool isMockedForInternal;
14+ IFactsRegistry fallbackMockedContract;
1415}
1516
1617contract CairoFactRegistryModule is ICairoFactRegistryModule , AccessController {
1718 bytes32 constant MODULE_STORAGE_POSITION = keccak256 ("diamond.standard.satellite.module.storage.cairo-fact-registry-module " );
1819
19- event MockedForInternalSet (bool isMocked );
20- event CairoFactRegistryExternalContractSet (address fallbackContract );
2120 event CairoFactSet (bytes32 factHash );
21+ event CairoFactRegistryExternalContractSet (address externalFactRegistry );
2222 event CairoMockedFactSet (bytes32 factHash );
23+ event CairoMockedFactRegistryFallbackContractSet (address fallbackMockedContract );
24+ event IsMockedForInternalSet (bool isMocked );
2325
2426 function moduleStorage () internal pure returns (CairoFactRegistryModuleStorage storage s ) {
2527 bytes32 position = MODULE_STORAGE_POSITION;
@@ -28,10 +30,12 @@ contract CairoFactRegistryModule is ICairoFactRegistryModule, AccessController {
2830 }
2931 }
3032
33+ // ========= Fact registry with real verification ========= //
34+
3135 /// @inheritdoc ICairoFactRegistryModule
3236 function isCairoFactValid (bytes32 factHash ) public view returns (bool ) {
3337 CairoFactRegistryModuleStorage storage ms = moduleStorage ();
34- return ms.facts[factHash] || ms.fallbackContract .isValid (factHash);
38+ return ms.facts[factHash] || ms.externalFactRegistry .isValid (factHash);
3539 }
3640
3741 /// @inheritdoc ICairoFactRegistryModule
@@ -41,34 +45,52 @@ contract CairoFactRegistryModule is ICairoFactRegistryModule, AccessController {
4145
4246 /// @inheritdoc ICairoFactRegistryModule
4347 function getCairoFactRegistryExternalContract () external view returns (address ) {
44- return address (moduleStorage ().fallbackContract );
48+ return address (moduleStorage ().externalFactRegistry );
4549 }
4650
4751 /// @inheritdoc ICairoFactRegistryModule
48- function setCairoFactRegistryExternalContract (address fallbackContract ) external onlyOwner {
49- moduleStorage ().fallbackContract = IFactsRegistry (fallbackContract );
50- emit CairoFactRegistryExternalContractSet (fallbackContract );
52+ function setCairoFactRegistryExternalContract (address externalFactRegistry ) external onlyOwner {
53+ moduleStorage ().externalFactRegistry = IFactsRegistry (externalFactRegistry );
54+ emit CairoFactRegistryExternalContractSet (externalFactRegistry );
5155 }
5256
5357 /// @inheritdoc ICairoFactRegistryModule
5458 function storeCairoFact (bytes32 factHash ) external {
5559 CairoFactRegistryModuleStorage storage ms = moduleStorage ();
56- require (ms.fallbackContract .isValid (factHash), "Fact hash not registered " );
60+ require (ms.externalFactRegistry .isValid (factHash), "Fact hash not registered " );
5761 ms.facts[factHash] = true ;
5862 emit CairoFactSet (factHash);
5963 }
6064
65+ // ========= Mocked fact registry ========= //
66+
6167 /// @inheritdoc ICairoFactRegistryModule
6268 function isCairoMockedFactValid (bytes32 factHash ) external view returns (bool ) {
63- return moduleStorage ().mockedFacts[factHash];
69+ CairoFactRegistryModuleStorage storage ms = moduleStorage ();
70+ return ms.mockedFacts[factHash] || address (ms.fallbackMockedContract) != address (0 ) && ms.fallbackMockedContract.isValid (factHash);
6471 }
6572
6673 /// @inheritdoc ICairoFactRegistryModule
6774 function setCairoMockedFact (bytes32 factHash ) external onlyAdmin {
68- moduleStorage ().mockedFacts[factHash] = true ;
75+ CairoFactRegistryModuleStorage storage ms = moduleStorage ();
76+ ms.mockedFacts[factHash] = true ;
77+ if (address (ms.fallbackMockedContract) != address (0 )) {
78+ ms.fallbackMockedContract.setValid (factHash);
79+ }
6980 emit CairoMockedFactSet (factHash);
7081 }
7182
83+ /// @inheritdoc ICairoFactRegistryModule
84+ function getCairoMockedFactRegistryFallbackContract () external view returns (address ) {
85+ return address (moduleStorage ().fallbackMockedContract);
86+ }
87+
88+ /// @inheritdoc ICairoFactRegistryModule
89+ function setCairoMockedFactRegistryFallbackContract (address fallbackMockedContract ) external onlyOwner {
90+ moduleStorage ().fallbackMockedContract = IFactsRegistry (fallbackMockedContract);
91+ emit CairoMockedFactRegistryFallbackContractSet (fallbackMockedContract);
92+ }
93+
7294 // ========= For internal use in grower and data processor ========= //
7395
7496 /// @inheritdoc ICairoFactRegistryModule
@@ -89,6 +111,6 @@ contract CairoFactRegistryModule is ICairoFactRegistryModule, AccessController {
89111 /// @inheritdoc ICairoFactRegistryModule
90112 function setIsMockedForInternal (bool isMocked ) external onlyOwner {
91113 moduleStorage ().isMockedForInternal = isMocked;
92- emit MockedForInternalSet (isMocked);
114+ emit IsMockedForInternalSet (isMocked);
93115 }
94116}
0 commit comments