Skip to content

Instantly share code, notes, and snippets.

@ItsShadowl
Forked from bjoveski/forwarder_factory.sol
Created November 12, 2022 22:42
Show Gist options
  • Save ItsShadowl/40e81c88be7ca39ecc6dd733bd3c5158 to your computer and use it in GitHub Desktop.
Save ItsShadowl/40e81c88be7ca39ecc6dd733bd3c5158 to your computer and use it in GitHub Desktop.
contract ForwarderFactory {
function cloneForwarder(address forwarder, uint256 salt)
public returns (Forwarder clonedForwarder) {
address clonedAddress = createClone(forwarder, salt);
Forwarder parentForwarder = Forwarder(forwarder);
clonedForwarder = Forwarder(clonedAddress);
clonedForwarder.init(parentForwarder.destination());
}
function createClone(address target, uint256 salt) private returns (address result) {
bytes20 targetBytes = bytes20(target);
assembly {
let clone := mload(0x40)
mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
mstore(add(clone, 0x14), targetBytes)
mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
result := create2(0, clone, 0x37, salt)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment