UNPKG

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

Version:
1 lines 3.23 kB
{"contractName":"ConstructedCloneFactory","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\":{\"@gnosis.pm/util-contracts/contracts/ConstructedCloneFactory.sol\":\"ConstructedCloneFactory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@gnosis.pm/util-contracts/contracts/ConstructedCloneFactory.sol\":{\"keccak256\":\"0xd07c04b6aea8ff41993cb0179120bb7c2416476311d992633578f6084b4f783a\",\"urls\":[\"bzzr://da18076e9777db71f6068039ed24a9c3171e272d87cb3090b0036fc5a64d97e8\",\"dweb:/ipfs/QmPXGzL5oMwUJSPxsD3L2bXxsaVqw88cGn6JzU6hskpL7U\"]}},\"version\":1}","bytecode":"0x","deployedBytecode":"0x","sourceMap":"","deployedSourceMap":"","source":"pragma solidity >=0.4.24 ^0.5.1;\n\ncontract ConstructedCloneFactory {\n\n event CloneCreated(address indexed target, address clone);\n \n function cloneConstructor(bytes calldata) external;\n\n function createClone(address target, 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 assembly {\n let len := mload(clone)\n let data := add(clone, 0x20)\n result := create(0, data, len)\n }\n \n require(result != address(0));\n }\n}\n","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.0.16","updatedAt":"2020-03-16T19:03:53.167Z","devdoc":{"methods":{}},"userdoc":{"methods":{}}}