Skip to content

Commit d33ce9d

Browse files
committed
fix: update deployment and tests to use interface initializers
- Update DeployDiamond to use MultiInit with DiamondInit, ERC165Init, and OwnableInit - Ensure all required interfaces are registered during diamond initialization - Update InitializableTester to deploy all initializers and test interface registration - Fix testMultiInitSetsOwnerAndInterfaces to properly verify all interface support
1 parent fbc6ca9 commit d33ce9d

2 files changed

Lines changed: 39 additions & 7 deletions

File tree

script/DeployDiamond.s.sol

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import {DiamondCutFacet} from "@diamond/facets/DiamondCutFacet.sol";
77
import {DiamondLoupeFacet} from "@diamond/facets/DiamondLoupeFacet.sol";
88
import {ERC165Facet} from "@diamond/facets/ERC165Facet.sol";
99
import {OwnableFacet} from "@diamond/facets/OwnableFacet.sol";
10+
import {DiamondInit} from "@diamond/initializers/DiamondInit.sol";
11+
import {ERC165Init} from "@diamond/initializers/ERC165Init.sol";
1012
import {MultiInit} from "@diamond/initializers/MultiInit.sol";
1113
import {OwnableInit} from "@diamond/initializers/OwnableInit.sol";
1214
import {ContextLib} from "@diamond/libraries/ContextLib.sol";
@@ -33,6 +35,8 @@ contract DeployDiamond is Script, GetSelectors {
3335

3436
// Deploy initializer contracts
3537
address multiInit = address(new MultiInit());
38+
address diamondInit = address(new DiamondInit());
39+
address erc165Init = address(new ERC165Init());
3640
address ownableInit = address(new OwnableInit());
3741

3842
// Create an array of FacetCut entries for standard facets
@@ -67,11 +71,17 @@ contract DeployDiamond is Script, GetSelectors {
6771
});
6872

6973
// Build MultiInit arrays for granular initialization
70-
address[] memory initAddresses = new address[](1);
71-
bytes[] memory initData = new bytes[](1);
74+
address[] memory initAddresses = new address[](3);
75+
bytes[] memory initData = new bytes[](3);
7276

73-
initAddresses[0] = ownableInit;
74-
initData[0] = abi.encodeWithSignature("initOwner(address)", ContextLib.msgSender());
77+
initAddresses[0] = diamondInit;
78+
initData[0] = abi.encodeWithSignature("init()");
79+
80+
initAddresses[1] = erc165Init;
81+
initData[1] = abi.encodeWithSignature("init()");
82+
83+
initAddresses[2] = ownableInit;
84+
initData[2] = abi.encodeWithSignature("init(address)", ContextLib.msgSender());
7585

7686
// Deploy the Diamond contract with the facets and initialization args
7787
MockDiamond diamond = new MockDiamond();

test/InitializableTester.t.sol

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import {DiamondCutFacet} from "@diamond/facets/DiamondCutFacet.sol";
77
import {DiamondLoupeFacet} from "@diamond/facets/DiamondLoupeFacet.sol";
88
import {ERC165Facet} from "@diamond/facets/ERC165Facet.sol";
99
import {OwnableFacet} from "@diamond/facets/OwnableFacet.sol";
10+
import {DiamondInit} from "@diamond/initializers/DiamondInit.sol";
11+
import {ERC165Init} from "@diamond/initializers/ERC165Init.sol";
12+
import {MultiInit} from "@diamond/initializers/MultiInit.sol";
1013
import {OwnableInit} from "@diamond/initializers/OwnableInit.sol";
1114
import {ContextLib} from "@diamond/libraries/ContextLib.sol";
1215
import {FacetCut, FacetCutAction} from "@diamond/libraries/DiamondLib.sol";
@@ -20,6 +23,9 @@ contract InitializableTester is GetSelectors {
2023
DiamondLoupeFacet diamondLoupeFacet;
2124
ERC165Facet erc165Facet;
2225
OwnableFacet ownableFacet;
26+
MultiInit multiInit;
27+
DiamondInit diamondInit;
28+
ERC165Init erc165Init;
2329
OwnableInit ownableInit;
2430

2531
FacetCut[] cuts;
@@ -31,7 +37,10 @@ contract InitializableTester is GetSelectors {
3137
erc165Facet = new ERC165Facet();
3238
ownableFacet = new OwnableFacet();
3339

34-
// Deploy initializer
40+
// Deploy initializers
41+
multiInit = new MultiInit();
42+
diamondInit = new DiamondInit();
43+
erc165Init = new ERC165Init();
3544
ownableInit = new OwnableInit();
3645

3746
// Build facet cuts
@@ -235,7 +244,20 @@ contract InitializableTester is GetSelectors {
235244
facetCuts_[i] = cuts[i];
236245
}
237246

238-
init_ = address(ownableInit);
239-
initCalldata_ = abi.encodeWithSignature("initOwner(address)", _owner);
247+
// Build MultiInit arrays for granular initialization
248+
address[] memory initAddresses = new address[](3);
249+
bytes[] memory initData = new bytes[](3);
250+
251+
initAddresses[0] = address(diamondInit);
252+
initData[0] = abi.encodeWithSignature("init()");
253+
254+
initAddresses[1] = address(erc165Init);
255+
initData[1] = abi.encodeWithSignature("init()");
256+
257+
initAddresses[2] = address(ownableInit);
258+
initData[2] = abi.encodeWithSignature("init(address)", _owner);
259+
260+
init_ = address(multiInit);
261+
initCalldata_ = abi.encodeWithSignature("multiInit(address[],bytes[])", initAddresses, initData);
240262
}
241263
}

0 commit comments

Comments
 (0)