Skip to content

Commit a8d26f3

Browse files
added _disableInitializers() in Bridge's constructor (#254)
* did the needed constructor function change and added the corresponding test * added comments
1 parent 455aba1 commit a8d26f3

File tree

4 files changed

+43
-8
lines changed

4 files changed

+43
-8
lines changed

.gitmodules

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
[submodule "apps/blockchain/contracts/ethereum/lib/forge-std"]
2-
path = apps/blockchain/ethereum/lib/forge-std
3-
url = https://github.com/foundry-rs/forge-std
4-
[submodule "apps/blockchain/contracts/ethereum/lib/openzeppelin-contracts"]
5-
path = apps/blockchain/ethereum/lib/openzeppelin-contracts
6-
url = https://github.com/OpenZeppelin/openzeppelin-contracts
1+
[submodule "apps/blockchain/contracts/ethereum/lib/forge-std"]
2+
path = apps/blockchain/ethereum/lib/forge-std
3+
url = https://github.com/foundry-rs/forge-std
4+
[submodule "apps/blockchain/contracts/ethereum/lib/openzeppelin-contracts"]
5+
path = apps/blockchain/ethereum/lib/openzeppelin-contracts
6+
url = https://github.com/OpenZeppelin/openzeppelin-contracts
7+
[submodule "apps/blockchain/ethereum/lib/openzeppelin-contracts-upgradeable"]
8+
path = apps/blockchain/ethereum/lib/openzeppelin-contracts-upgradeable
9+
url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable

apps/blockchain/ethereum/src/Bridge.sol

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import "./UUPSProxied.sol";
1515
import "starknet/IStarknetMessaging.sol";
1616

1717
import "./IStarklaneEvent.sol";
18+
import "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol";
1819

1920
error NotSupportedYetError();
2021
error CollectionMappingError();
@@ -36,7 +37,8 @@ contract Starklane is
3637
StarklaneState,
3738
StarklaneEscrow,
3839
StarklaneMessaging,
39-
CollectionManager
40+
CollectionManager,
41+
Initializable
4042
{
4143
// Mapping (collectionAddress => bool)
4244
mapping(address => bool) _whiteList;
@@ -47,19 +49,29 @@ contract Starklane is
4749
// Using an arbitrary gas value here for L1-L2 messaging fees, adjustable as network conditions evolve.
4850
// This value serves as a flexible baseline, allowing for real-time adjustments to reflect gas changes.
4951
uint256 _minimumGasFee = 5e13;// 0.00005 ETH
52+
/**
53+
* @notice Starklane contract constructor.
54+
*
55+
* @dev Makes the contract initializable only once
56+
*/
57+
58+
constructor() {
59+
_disableInitializers();
60+
}
5061

5162
/**
5263
* @notice Initializes the implementation, only callable once.
5364
*
5465
* @param data Data to init the implementation.
5566
*/
56-
function initialize(bytes calldata data) public onlyInit {
67+
function initialize(bytes calldata data) public initializer {
5768
(
5869
address owner,
5970
IStarknetMessaging starknetCoreAddress,
6071
uint256 starklaneL2Address,
6172
uint256 starklaneL2Selector
6273
) = abi.decode(data, (address, IStarknetMessaging, uint256, uint256));
74+
6375
_enabled = false;
6476
_starknetCoreAddress = starknetCoreAddress;
6577

apps/blockchain/ethereum/test/Bridge.t.sol

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ pragma solidity ^0.8.0;
33

44
import "openzeppelin-contracts/contracts/token/ERC721/IERC721.sol";
55
import "openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol";
6+
import "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol";
67

78
import "forge-std/Test.sol";
89
import "../src/IStarklane.sol";
@@ -55,6 +56,24 @@ contract BridgeTest is Test, IStarklaneEvent {
5556
IStarklane(bridge).enableBridge(true);
5657
}
5758

59+
//
60+
function test_initializersDisabled() public {
61+
// Deploy a new instance of Starklane
62+
Starklane newStarklane = new Starklane();
63+
64+
// Try to initialize the contract directly
65+
bytes memory initData = abi.encode(
66+
address(this),
67+
address(0), // Mock Starknet Core address
68+
uint256(0), // Mock Starklane L2 address
69+
uint256(0) // Mock Starklane L2 selector
70+
);
71+
72+
// Expect the initialization to revert
73+
vm.expectRevert(Initializable.InvalidInitialization.selector);
74+
newStarklane.initialize(initData);
75+
}
76+
5877
//
5978
function testFail_invalidIds() public {
6079
uint256[] memory ids = new uint256[](0);

0 commit comments

Comments
 (0)