{
  "address": "0x6258e4d2950757A749a4d4683A7342261ce12471",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newaddr",
          "type": "address"
        }
      ],
      "name": "contractAddress",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "creationCode",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "deploy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        }
      ],
      "name": "getAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "transactionHash": "0x3ada4885ee284a5aca80583ccb9d89f52267a518426c706a88330f2d1140d81e",
  "receipt": {
    "to": null,
    "from": "0xA8caef9AcC2244a1505e7bDdE84578102A8C7f41",
    "contractAddress": "0x6258e4d2950757A749a4d4683A7342261ce12471",
    "transactionIndex": 0,
    "gasUsed": "302883",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "blockHash": "0xc1be020db838cba888476e7dc75c7c89ae0fa25c059eac18e3652f81bc362875",
    "transactionHash": "0x3ada4885ee284a5aca80583ccb9d89f52267a518426c706a88330f2d1140d81e",
    "logs": [],
    "blockNumber": 88921915,
    "cumulativeGasUsed": "0",
    "status": 1,
    "byzantium": true
  },
  "args": [],
  "solcInputHash": "41e6a11adeeca49258d9a7529df7b45b",
  "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newaddr\",\"type\":\"address\"}],\"name\":\"contractAddress\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"creationCode\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"deploy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/DeployFactory.sol\":\"DeployFactory\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/DeployFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./interface/IDeployFactory.sol\\\";\\nimport \\\"./utils/CREATE3.sol\\\";\\n\\ncontract DeployFactory is IDeployFactory {\\n\\n    event contractAddress(address indexed newaddr);\\n\\n    function deploy(\\n        bytes32 salt,\\n        bytes memory creationCode,\\n        uint256 value) external override {\\n        address newContract = CREATE3.deploy(salt, creationCode, value);\\n\\n        emit contractAddress(newContract);\\n    }\\n\\n    function getAddress(bytes32 salt) public view override returns (address) {\\n        return CREATE3.getDeployed(salt);\\n    }\\n}\\n\",\"keccak256\":\"0x54d0bcf344930ba3d3493c1316472316137de51b602a3b214348e3394102b182\",\"license\":\"MIT\"},\"contracts/interface/IDeployFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.7;\\n\\n/// @notice DeployFactory address: 0x6258e4d2950757A749a4d4683A7342261ce12471\\n///          Support chains: - Ethereum (1), Goerli Testnet (5)\\n///                          - BNB Smart Chain (56), BNB Smart Chain Testnet (97)\\n///                          - Polygon (137), Mumbai Testnet (80001)\\n///                          - MAP Relay Chain (22776), Makalu Testnet (212)\\n/// @author MAP Protocol (https://github.com/mapprotocol/map-contracts/blob/main/protocol/contracts/interface/IDeployFactory.sol)\\n/// @author Import CREATE3 library from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/CREATE3.sol)\\ninterface IDeployFactory {\\n\\n    // @notice Deploy to deterministic addresses without an initcode factor.\\n    // @param salt - the bytes to deterministic address\\n    // @param creationCode - code to be deployed, include the init parameters.\\n    // @param value - native value when calling to deploy\\n    function deploy(bytes32 salt, bytes memory creationCode, uint256 value) external;\\n\\n    // @notice Get the deterministic addresses.\\n    // @param salt - the bytes to deterministic address\\n    function getAddress(bytes32 salt) external view returns (address);\\n\\n}\",\"keccak256\":\"0x15f5966132a261e58503da3bc2592200ae6201c0f567914c866115ad07088e74\",\"license\":\"MIT\"},\"contracts/utils/CREATE3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nlibrary Bytes32AddressLib {\\n    function fromLast20Bytes(bytes32 bytesValue) internal pure returns (address) {\\n        return address(uint160(uint256(bytesValue)));\\n    }\\n\\n    function fillLast12Bytes(address addressValue) internal pure returns (bytes32) {\\n        return bytes32(bytes20(addressValue));\\n    }\\n}\\n\\n//import {Bytes32AddressLib} from \\\"./Bytes32AddressLib.sol\\\";\\n\\n/// @notice Deploy to deterministic addresses without an initcode factor.\\n/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/CREATE3.sol)\\n/// @author Modified from 0xSequence (https://github.com/0xSequence/create3/blob/master/contracts/Create3.sol)\\nlibrary CREATE3 {\\n    using Bytes32AddressLib for bytes32;\\n\\n    //--------------------------------------------------------------------------------//\\n    // Opcode     | Opcode + Arguments    | Description      | Stack View             //\\n    //--------------------------------------------------------------------------------//\\n    // 0x36       |  0x36                 | CALLDATASIZE     | size                   //\\n    // 0x3d       |  0x3d                 | RETURNDATASIZE   | 0 size                 //\\n    // 0x3d       |  0x3d                 | RETURNDATASIZE   | 0 0 size               //\\n    // 0x37       |  0x37                 | CALLDATACOPY     |                        //\\n    // 0x36       |  0x36                 | CALLDATASIZE     | size                   //\\n    // 0x3d       |  0x3d                 | RETURNDATASIZE   | 0 size                 //\\n    // 0x34       |  0x34                 | CALLVALUE        | value 0 size           //\\n    // 0xf0       |  0xf0                 | CREATE           | newContract            //\\n    //--------------------------------------------------------------------------------//\\n    // Opcode     | Opcode + Arguments    | Description      | Stack View             //\\n    //--------------------------------------------------------------------------------//\\n    // 0x67       |  0x67XXXXXXXXXXXXXXXX | PUSH8 bytecode   | bytecode               //\\n    // 0x3d       |  0x3d                 | RETURNDATASIZE   | 0 bytecode             //\\n    // 0x52       |  0x52                 | MSTORE           |                        //\\n    // 0x60       |  0x6008               | PUSH1 08         | 8                      //\\n    // 0x60       |  0x6018               | PUSH1 18         | 24 8                   //\\n    // 0xf3       |  0xf3                 | RETURN           |                        //\\n    //--------------------------------------------------------------------------------//\\n    bytes internal constant PROXY_BYTECODE = hex\\\"67_36_3d_3d_37_36_3d_34_f0_3d_52_60_08_60_18_f3\\\";\\n\\n    bytes32 internal constant PROXY_BYTECODE_HASH = keccak256(PROXY_BYTECODE);\\n\\n    function deploy(\\n        bytes32 salt,\\n        bytes memory creationCode,\\n        uint256 value\\n    ) internal returns (address deployed) {\\n        bytes memory proxyChildBytecode = PROXY_BYTECODE;\\n\\n        address proxy;\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n        // Deploy a new contract with our pre-made bytecode via CREATE2.\\n        // We start 32 bytes into the code to avoid copying the byte length.\\n            proxy := create2(0, add(proxyChildBytecode, 32), mload(proxyChildBytecode), salt)\\n        }\\n        require(proxy != address(0), \\\"DEPLOYMENT_FAILED\\\");\\n\\n        deployed = getDeployed(salt);\\n        (bool success, ) = proxy.call{value: value}(creationCode);\\n        require(success && deployed.code.length != 0, \\\"INITIALIZATION_FAILED\\\");\\n    }\\n\\n    function getDeployed(bytes32 salt) internal view returns (address) {\\n        address proxy = keccak256(\\n            abi.encodePacked(\\n            // Prefix:\\n                bytes1(0xFF),\\n            // Creator:\\n                address(this),\\n            // Salt:\\n                salt,\\n            // Bytecode hash:\\n                PROXY_BYTECODE_HASH\\n            )\\n        ).fromLast20Bytes();\\n\\n        return\\n        keccak256(\\n            abi.encodePacked(\\n            // 0xd6 = 0xc0 (short RLP prefix) + 0x16 (length of: 0x94 ++ proxy ++ 0x01)\\n            // 0x94 = 0x80 + 0x14 (0x14 = the length of an address, 20 bytes, in hex)\\n                hex\\\"d6_94\\\",\\n                proxy,\\n                hex\\\"01\\\" // Nonce of the proxy contract (1)\\n            )\\n        ).fromLast20Bytes();\\n    }\\n}\",\"keccak256\":\"0x1a6eeedb3ac15b0b8d679d68c3557a394f5316c428afd4d34806c3ededd37ff0\",\"license\":\"MIT\"}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50610484806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806321f8a7211461003b578063c7aeef0f1461006a575b600080fd5b61004e610049366004610320565b61007f565b6040516001600160a01b03909116815260200160405180910390f35b61007d610078366004610339565b610090565b005b600061008a826100da565b92915050565b600061009d8484846101c5565b6040519091506001600160a01b038216907f09a33d4bab4675cb825f2573b9e26b970e379a59fed351ad1d92e1af6291a8ba90600090a250505050565b604080518082018252601081526f67363d3d37363d34f03d5260086018f360801b60209182015290516001600160f81b0319918101919091526bffffffffffffffffffffffff193060601b166021820152603581018290527f21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f6055820152600090819061017e906075015b6040516020818303038152906040528051906020012090565b6040516135a560f21b60208201526bffffffffffffffffffffffff19606083901b166022820152600160f81b60368201529091506101be90603701610165565b9392505050565b6000806040518060400160405280601081526020016f67363d3d37363d34f03d5260086018f360801b81525090506000858251602084016000f590506001600160a01b0381166102505760405162461bcd60e51b81526020600482015260116024820152701111541313d65351539517d19052531151607a1b60448201526064015b60405180910390fd5b610259866100da565b92506000816001600160a01b0316858760405161027691906103fd565b60006040518083038185875af1925050503d80600081146102b3576040519150601f19603f3d011682016040523d82523d6000602084013e6102b8565b606091505b505090508080156102d257506001600160a01b0384163b15155b6103165760405162461bcd60e51b815260206004820152601560248201527412539255125053125690551253d397d19052531151605a1b6044820152606401610247565b5050509392505050565b60006020828403121561033257600080fd5b5035919050565b60008060006060848603121561034e57600080fd5b83359250602084013567ffffffffffffffff8082111561036d57600080fd5b818601915086601f83011261038157600080fd5b81358181111561039357610393610438565b604051601f8201601f19908116603f011681019083821181831017156103bb576103bb610438565b816040528281528960208487010111156103d457600080fd5b826020860160208301376000602084830101528096505050505050604084013590509250925092565b6000825160005b8181101561041e5760208186018101518583015201610404565b8181111561042d576000828501525b509190910192915050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220237470a5cd1b9fa71758d5d5ecd1a7431a1852f7c6713a7de102e84d8bbbcea164736f6c63430008070033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806321f8a7211461003b578063c7aeef0f1461006a575b600080fd5b61004e610049366004610320565b61007f565b6040516001600160a01b03909116815260200160405180910390f35b61007d610078366004610339565b610090565b005b600061008a826100da565b92915050565b600061009d8484846101c5565b6040519091506001600160a01b038216907f09a33d4bab4675cb825f2573b9e26b970e379a59fed351ad1d92e1af6291a8ba90600090a250505050565b604080518082018252601081526f67363d3d37363d34f03d5260086018f360801b60209182015290516001600160f81b0319918101919091526bffffffffffffffffffffffff193060601b166021820152603581018290527f21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f6055820152600090819061017e906075015b6040516020818303038152906040528051906020012090565b6040516135a560f21b60208201526bffffffffffffffffffffffff19606083901b166022820152600160f81b60368201529091506101be90603701610165565b9392505050565b6000806040518060400160405280601081526020016f67363d3d37363d34f03d5260086018f360801b81525090506000858251602084016000f590506001600160a01b0381166102505760405162461bcd60e51b81526020600482015260116024820152701111541313d65351539517d19052531151607a1b60448201526064015b60405180910390fd5b610259866100da565b92506000816001600160a01b0316858760405161027691906103fd565b60006040518083038185875af1925050503d80600081146102b3576040519150601f19603f3d011682016040523d82523d6000602084013e6102b8565b606091505b505090508080156102d257506001600160a01b0384163b15155b6103165760405162461bcd60e51b815260206004820152601560248201527412539255125053125690551253d397d19052531151605a1b6044820152606401610247565b5050509392505050565b60006020828403121561033257600080fd5b5035919050565b60008060006060848603121561034e57600080fd5b83359250602084013567ffffffffffffffff8082111561036d57600080fd5b818601915086601f83011261038157600080fd5b81358181111561039357610393610438565b604051601f8201601f19908116603f011681019083821181831017156103bb576103bb610438565b816040528281528960208487010111156103d457600080fd5b826020860160208301376000602084830101528096505050505050604084013590509250925092565b6000825160005b8181101561041e5760208186018101518583015201610404565b8181111561042d576000828501525b509190910192915050565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220237470a5cd1b9fa71758d5d5ecd1a7431a1852f7c6713a7de102e84d8bbbcea164736f6c63430008070033",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  },
  "storageLayout": {
    "storage": [],
    "types": null
  }
}