UNPKG

@gnosis.pm/conditional-tokens-market-makers

Version:
1 lines 3.38 kB
{"contractName":"Create2CloneFactory","abi":[{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"clone","type":"address"}],"name":"CloneCreated","type":"event"},{"constant":false,"inputs":[{"name":"","type":"bytes"}],"name":"cloneConstructor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"cloneConstructor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"clone\",\"type\":\"address\"}],\"name\":\"CloneCreated\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/alan/src/github.com/gnosis/conditional-tokens-market-makers/contracts/Create2CloneFactory.sol\":\"Create2CloneFactory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/alan/src/github.com/gnosis/conditional-tokens-market-makers/contracts/Create2CloneFactory.sol\":{\"keccak256\":\"0x7fc87f62575ade148e41001fd3029f2fb85b9928a3941eb06a9e3bcb6ccfe43f\",\"urls\":[\"bzzr://01815e1a0e940e9a18b998e304fc29edd20292d7a8a1c96c711f3761d9d4a0ad\",\"dweb:/ipfs/QmeLjvm5GuuZFoYsuGaHX7vqNCZDQpqiDDTrWBzBDoV6dB\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity >=0.4.24 ^0.5.1;\n\ncontract Create2CloneFactory {\n\n event CloneCreated(address indexed target, address clone);\n \n function cloneConstructor(bytes calldata) external;\n\n function create2Clone(address target, uint saltNonce, bytes memory consData) internal returns (address result) {\n bytes memory consPayload = abi.encodeWithSignature(\"cloneConstructor(bytes)\", consData);\n bytes memory clone = new bytes(consPayload.length + 99);\n\n assembly {\n mstore(add(clone, 0x20),\n 0x3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe)\n mstore(add(clone, 0x2d),\n mul(address, 0x01000000000000000000000000))\n mstore(add(clone, 0x41),\n 0x5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be)\n mstore(add(clone, 0x60),\n mul(target, 0x01000000000000000000000000))\n mstore(add(clone, 116),\n 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n }\n\n for(uint i = 0; i < consPayload.length; i++) {\n clone[99 + i] = consPayload[i];\n }\n\n bytes32 salt = keccak256(abi.encode(msg.sender, saltNonce));\n\n assembly {\n let len := mload(clone)\n let data := add(clone, 0x20)\n result := create2(0, data, len, salt)\n }\n \n require(result != address(0), \"create2 failed\");\n }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.0.16","updatedAt":"2020-03-16T19:03:52.998Z","devdoc":{"methods":{}},"userdoc":{"methods":{}}}