From ab406fb017e3e85c3f91fd08cbc612db3e6cab0b Mon Sep 17 00:00:00 2001 From: MoD Date: Sat, 3 Aug 2024 16:10:11 +0300 Subject: [PATCH 1/2] Example BrokerFactory stub WIP --- src/factory/BrokerFactory.sol | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/factory/BrokerFactory.sol diff --git a/src/factory/BrokerFactory.sol b/src/factory/BrokerFactory.sol new file mode 100644 index 0000000..aec50e3 --- /dev/null +++ b/src/factory/BrokerFactory.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract BrokerFactory { + address public vaultImplementation; + address[] public deployedBrokers; + + event BrokerCreated(address vaultAddress); + + constructor(address _vaultImplementation) { + vaultImplementation = _vaultImplementation; + } + + function setBrokerImplementation(address _vaultImplementation) public { + vaultImplementation = _vaultImplementation; + } + + function createBroker() public { + address vault = deployClone(vaultImplementation); + deployedBrokers.push(vault); + emit BrokerCreated(vault); + } + + function getDeployedBrokers() public view returns (address[] memory) { + return deployedBrokers; + } + + function deployClone(address implementation) internal returns (address instance) { + bytes20 targetBytes = bytes20(implementation); + assembly { + let clone := mload(0x40) + mstore(clone, 0x3d602d80600a3d3981f3) + mstore(add(clone, 0x14), targetBytes) + mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf3) + instance := create(0, clone, 0x37) + } + } +} + From 6ba550548208e8b0ac03c076cd2597d83e1e2b58 Mon Sep 17 00:00:00 2001 From: MoD Date: Sat, 3 Aug 2024 16:12:42 +0300 Subject: [PATCH 2/2] Forge fmt --- src/factory/BrokerFactory.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/src/factory/BrokerFactory.sol b/src/factory/BrokerFactory.sol index aec50e3..bedfa82 100644 --- a/src/factory/BrokerFactory.sol +++ b/src/factory/BrokerFactory.sol @@ -36,4 +36,3 @@ contract BrokerFactory { } } } -