|
@@ -25,10 +25,10 @@ library Clones {
|
|
|
function clone(address implementation) internal returns (address instance) {
|
|
|
assembly {
|
|
|
let ptr := mload(0x40)
|
|
|
- mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
|
|
|
- mstore(add(ptr, 0x14), shl(0x60, implementation))
|
|
|
- mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
|
|
|
- instance := create(0, ptr, 0x37)
|
|
|
+ mstore(ptr, 0x602d8060093d393df3363d3d373d3d3d363d7300000000000000000000000000)
|
|
|
+ mstore(add(ptr, 0x13), shl(0x60, implementation))
|
|
|
+ mstore(add(ptr, 0x27), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
|
|
|
+ instance := create(0, ptr, 0x36)
|
|
|
}
|
|
|
require(instance != address(0), "ERC1167: create failed");
|
|
|
}
|
|
@@ -43,10 +43,10 @@ library Clones {
|
|
|
function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
|
|
|
assembly {
|
|
|
let ptr := mload(0x40)
|
|
|
- mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
|
|
|
- mstore(add(ptr, 0x14), shl(0x60, implementation))
|
|
|
- mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
|
|
|
- instance := create2(0, ptr, 0x37, salt)
|
|
|
+ mstore(ptr, 0x602d8060093d393df3363d3d373d3d3d363d7300000000000000000000000000)
|
|
|
+ mstore(add(ptr, 0x13), shl(0x60, implementation))
|
|
|
+ mstore(add(ptr, 0x27), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
|
|
|
+ instance := create2(0, ptr, 0x36, salt)
|
|
|
}
|
|
|
require(instance != address(0), "ERC1167: create2 failed");
|
|
|
}
|
|
@@ -61,13 +61,13 @@ library Clones {
|
|
|
) internal pure returns (address predicted) {
|
|
|
assembly {
|
|
|
let ptr := mload(0x40)
|
|
|
- mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
|
|
|
- mstore(add(ptr, 0x14), shl(0x60, implementation))
|
|
|
- mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)
|
|
|
- mstore(add(ptr, 0x38), shl(0x60, deployer))
|
|
|
- mstore(add(ptr, 0x4c), salt)
|
|
|
- mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))
|
|
|
- predicted := keccak256(add(ptr, 0x37), 0x55)
|
|
|
+ mstore(ptr, 0x602d8060093d393df3363d3d373d3d3d363d7300000000000000000000000000)
|
|
|
+ mstore(add(ptr, 0x13), shl(0x60, implementation))
|
|
|
+ mstore(add(ptr, 0x27), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)
|
|
|
+ mstore(add(ptr, 0x37), shl(0x60, deployer))
|
|
|
+ mstore(add(ptr, 0x4b), salt)
|
|
|
+ mstore(add(ptr, 0x6b), keccak256(ptr, 0x36))
|
|
|
+ predicted := keccak256(add(ptr, 0x36), 0x55)
|
|
|
}
|
|
|
}
|
|
|
|