Skip to content

Commit 979b7ba

Browse files
committed
Implement CairoFactRegistry fallback for mocked facts
1 parent a8740cd commit 979b7ba

File tree

2 files changed

+44
-12
lines changed

2 files changed

+44
-12
lines changed

solidity/src/interfaces/modules/ICairoFactRegistryModule.sol

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ pragma solidity ^0.8.20;
44
// This module stores fact hashes for verified or mocked facts.
55

66
interface ICairoFactRegistryModule {
7+
// ========= Fact registry with real verification ========= //
8+
79
/// Whether given fact was verified (not necessarily stored locally).
810
function isCairoFactValid(bytes32 factHash) external view returns (bool);
911

@@ -20,12 +22,20 @@ interface ICairoFactRegistryModule {
2022
/// Moves verified fact from external (fallback) contract to local storage.
2123
function storeCairoFact(bytes32 factHash) external;
2224

25+
// ========= Mocked fact registry ========= //
26+
2327
/// Whether given fact was mocked.
2428
function isCairoMockedFactValid(bytes32 factHash) external view returns (bool);
2529

2630
/// Mocks given fact. Caller must be an admin.
2731
function setCairoMockedFact(bytes32 factHash) external;
2832

33+
/// Returns address of the contract that stores mocked facts.
34+
function getCairoMockedFactRegistryFallbackContract() external view returns (address);
35+
36+
/// Sets address of the contract that stores mocked facts.
37+
function setCairoMockedFactRegistryFallbackContract(address fallbackMockedContract) external;
38+
2939
// ========= For internal use in grower and data processor ========= //
3040

3141
function isCairoFactValidForInternal(bytes32 factHash) external view returns (bool);

solidity/src/modules/CairoFactRegistryModule.sol

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

1617
contract 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

Comments
 (0)