Skip to content

Commit 59d57b1

Browse files
committed
Setters and getters for program hash and facts registry
1 parent 605bdb2 commit 59d57b1

File tree

4 files changed

+73
-19
lines changed

4 files changed

+73
-19
lines changed

src/interfaces/modules/growing/IEvmSharpMmrGrowingModule.sol

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,19 @@ interface IEvmSharpMmrGrowingModule is ISharpMmrGrowingCommon {
3939
struct EvmSharpMmrGrowingModuleStorage {
4040
IFactsRegistry factsRegistry;
4141
uint256 aggregatedChainId;
42+
// Cairo program hash calculated with Poseidon (i.e., the off-chain block headers accumulator program)
43+
uint256 programHash;
4244
}
4345

44-
function initEvmSharpMmrGrowingModule(IFactsRegistry factsRegistry) external;
46+
function initEvmSharpMmrGrowingModule() external;
47+
48+
function setEvmSharpMmrGrowingModuleProgramHash(uint256 programHash) external;
49+
50+
function setEvmSharpMmrGrowingModuleFactsRegistry(address factsRegistry) external;
51+
52+
function getEvmSharpMmrGrowingModuleProgramHash() external view returns (uint256);
53+
54+
function getEvmSharpMmrGrowingModuleFactsRegistry() external view returns (address);
4555

4656
function createEvmSharpMmr(uint256 newMmrId, uint256 originalMmrId, uint256 mmrSize) external;
4757

src/interfaces/modules/growing/IStarknetSharpMmrGrowingModule.sol

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,19 @@ interface IStarknetSharpMmrGrowingModule is ISharpMmrGrowingCommon {
2222
IFactsRegistry factsRegistry;
2323
// Either Starknet or Starknet Sepolia chain ID
2424
uint256 aggregatedChainId;
25+
// Cairo program hash calculated with Poseidon (i.e., the off-chain block headers accumulator program)
26+
uint256 programHash;
2527
}
2628

27-
function initStarknetSharpMmrGrowingModule(IFactsRegistry factsRegistry, uint256 chainId) external;
29+
function initStarknetSharpMmrGrowingModule(uint256 starknetChainId) external;
30+
31+
function setStarknetSharpMmrGrowingModuleFactsRegistry(address factsRegistry) external;
32+
33+
function setStarknetSharpMmrGrowingModuleProgramHash(uint256 programHash) external;
34+
35+
function getStarknetSharpMmrGrowingModuleFactsRegistry() external view returns (address);
36+
37+
function getStarknetSharpMmrGrowingModuleProgramHash() external view returns (uint256);
2838

2939
function createStarknetSharpMmr(uint256 newMmrId, uint256 originalMmrId, uint256 mmrSize) external;
3040

src/modules/growing/EvmSharpMmrGrowingModule.sol

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@ contract EvmSharpMmrGrowingModule is IEvmSharpMmrGrowingModule, AccessController
1313
// Using inline library for efficient splitting and joining of uint256 values
1414
using Uint256Splitter for uint256;
1515

16-
// Cairo program hash calculated with Poseidon (i.e., the off-chain block headers accumulator program)
17-
bytes32 public constant PROGRAM_HASH = bytes32(uint256(0x1eca36d586f5356fba096edbf7414017d51cd0ed24b8fde80f78b61a9216ed2));
18-
1916
bytes32 public constant KECCAK_HASHING_FUNCTION = keccak256("keccak");
2017
bytes32 public constant POSEIDON_HASHING_FUNCTION = keccak256("poseidon");
2118

@@ -39,12 +36,32 @@ contract EvmSharpMmrGrowingModule is IEvmSharpMmrGrowingModule, AccessController
3936

4037
// ========================= Core Functions ========================= //
4138

42-
function initEvmSharpMmrGrowingModule(IFactsRegistry factsRegistry) external onlyOwner {
39+
function initEvmSharpMmrGrowingModule() external onlyOwner {
4340
EvmSharpMmrGrowingModuleStorage storage ms = moduleStorage();
44-
ms.factsRegistry = factsRegistry;
4541
ms.aggregatedChainId = block.chainid;
4642
}
4743

44+
function setEvmSharpMmrGrowingModuleFactsRegistry(address factsRegistry) external onlyOwner {
45+
EvmSharpMmrGrowingModuleStorage storage ms = moduleStorage();
46+
ms.factsRegistry = IFactsRegistry(factsRegistry);
47+
}
48+
49+
// Cairo program hash calculated with Poseidon (i.e., the off-chain block headers accumulator program)
50+
function setEvmSharpMmrGrowingModuleProgramHash(uint256 programHash) external onlyOwner {
51+
EvmSharpMmrGrowingModuleStorage storage ms = moduleStorage();
52+
ms.programHash = programHash;
53+
}
54+
55+
function getEvmSharpMmrGrowingModuleFactsRegistry() external view returns (address) {
56+
EvmSharpMmrGrowingModuleStorage storage ms = moduleStorage();
57+
return address(ms.factsRegistry);
58+
}
59+
60+
function getEvmSharpMmrGrowingModuleProgramHash() external view returns (uint256) {
61+
EvmSharpMmrGrowingModuleStorage storage ms = moduleStorage();
62+
return ms.programHash;
63+
}
64+
4865
function createEvmSharpMmr(uint256 newMmrId, uint256 originalMmrId, uint256 mmrSize) external {
4966
bytes32[] memory hashingFunctions = new bytes32[](2);
5067
hashingFunctions[0] = KECCAK_HASHING_FUNCTION;
@@ -189,11 +206,11 @@ contract EvmSharpMmrGrowingModule is IEvmSharpMmrGrowingModule, AccessController
189206
// We hash the outputs
190207
bytes32 outputHash = keccak256(abi.encodePacked(outputs));
191208

192-
// We compute the deterministic fact bytes32 value
193-
bytes32 fact = keccak256(abi.encode(PROGRAM_HASH, outputHash));
194-
195209
EvmSharpMmrGrowingModuleStorage storage ms = moduleStorage();
196210

211+
// We compute the deterministic fact bytes32 value
212+
bytes32 fact = keccak256(abi.encode(ms.programHash, outputHash));
213+
197214
// We ensure this fact has been registered on SHARP Facts Registry
198215
if (!ms.factsRegistry.isValid(fact)) {
199216
revert InvalidFact();

src/modules/growing/StarknetSharpMmrGrowingModule.sol

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ import {IMmrCoreModule, RootForHashingFunction, GrownBy} from "src/interfaces/mo
1010
import {AccessController} from "src/libraries/AccessController.sol";
1111

1212
contract StarknetSharpMmrGrowingModule is IStarknetSharpMmrGrowingModule, AccessController {
13-
// Cairo program hash calculated with Poseidon (i.e., the off-chain block headers accumulator program)
14-
bytes32 public constant PROGRAM_HASH = bytes32(uint256(0x4ebb807bacec9cf6202e6482d8f7f74a531b067571dba2ccf118b0328df8295));
15-
1613
bytes32 public constant POSEIDON_HASHING_FUNCTION = keccak256("poseidon");
1714

1815
// Default roots for new aggregators:
@@ -30,10 +27,30 @@ contract StarknetSharpMmrGrowingModule is IStarknetSharpMmrGrowingModule, Access
3027
}
3128
}
3229

33-
function initStarknetSharpMmrGrowingModule(IFactsRegistry factsRegistry, uint256 chainId) external onlyOwner {
30+
function initStarknetSharpMmrGrowingModule(uint256 starknetChainId) external onlyOwner {
31+
StarknetSharpMmrGrowingModuleStorage storage ms = moduleStorage();
32+
ms.aggregatedChainId = starknetChainId;
33+
}
34+
35+
function setStarknetSharpMmrGrowingModuleFactsRegistry(address factsRegistry) external onlyOwner {
3436
StarknetSharpMmrGrowingModuleStorage storage ms = moduleStorage();
35-
ms.factsRegistry = factsRegistry;
36-
ms.aggregatedChainId = chainId;
37+
ms.factsRegistry = IFactsRegistry(factsRegistry);
38+
}
39+
40+
// Cairo program hash calculated with Poseidon (i.e., the off-chain block headers accumulator program)
41+
function setStarknetSharpMmrGrowingModuleProgramHash(uint256 programHash) external onlyOwner {
42+
StarknetSharpMmrGrowingModuleStorage storage ms = moduleStorage();
43+
ms.programHash = programHash;
44+
}
45+
46+
function getStarknetSharpMmrGrowingModuleFactsRegistry() external view returns (address) {
47+
StarknetSharpMmrGrowingModuleStorage storage ms = moduleStorage();
48+
return address(ms.factsRegistry);
49+
}
50+
51+
function getStarknetSharpMmrGrowingModuleProgramHash() external view returns (uint256) {
52+
StarknetSharpMmrGrowingModuleStorage storage ms = moduleStorage();
53+
return ms.programHash;
3754
}
3855

3956
function createStarknetSharpMmr(uint256 newMmrId, uint256 originalMmrId, uint256 mmrSize) external {
@@ -135,11 +152,11 @@ contract StarknetSharpMmrGrowingModule is IStarknetSharpMmrGrowingModule, Access
135152
// We hash the outputs
136153
bytes32 outputHash = keccak256(abi.encodePacked(outputs));
137154

138-
// We compute the deterministic fact bytes32 value
139-
bytes32 fact = keccak256(abi.encode(PROGRAM_HASH, outputHash));
140-
141155
StarknetSharpMmrGrowingModuleStorage storage ms = moduleStorage();
142156

157+
// We compute the deterministic fact bytes32 value
158+
bytes32 fact = keccak256(abi.encode(ms.programHash, outputHash));
159+
143160
// We ensure this fact has been registered on SHARP Facts Registry
144161
if (!ms.factsRegistry.isValid(fact)) revert InvalidFact();
145162
}

0 commit comments

Comments
 (0)