diff --git a/src/initializers/MultiInit.sol b/src/initializers/MultiInit.sol new file mode 100644 index 0000000..fe5c9dc --- /dev/null +++ b/src/initializers/MultiInit.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import {LibDiamond} from "@diamond/libraries/LibDiamond.sol"; +import {AddressAndCalldataLengthMismatch} from "@diamond/libraries/errors/DiamondErrors.sol"; + +contract MultiInit { + function multiInit(address[] memory _initAddresses, bytes[] memory _initData) public { + uint256 initAddressesLength = _initAddresses.length; + if (initAddressesLength != _initData.length) revert AddressAndCalldataLengthMismatch(); + + for (uint256 i; i < initAddressesLength; ++i) { + LibDiamond._initializeDiamondCut(_initAddresses[i], _initData[i]); + } + } +} diff --git a/src/libraries/errors/DiamondErrors.sol b/src/libraries/errors/DiamondErrors.sol index 71aafa8..11a0571 100644 --- a/src/libraries/errors/DiamondErrors.sol +++ b/src/libraries/errors/DiamondErrors.sol @@ -74,4 +74,4 @@ error FunctionDoesNotExist(bytes4 functionSelector); /// @notice Thrown when the length of the address array does not match the length of the calldata array. /// @dev Used in initializer logic to ensure one-to-one mapping between addresses and initialization calldata. -error AddressAndCalldataLengthDoNotMatch(); +error AddressAndCalldataLengthMismatch();