Contract 0xdef1c0ded9bec7f1a1670819833240f027b25eff 29

 
Txn Hash Method
Block
From
To
Value
0x53b6b04ec9d3de6efa02cacb204343cb751c8ea246c804327e0f95f0fc93e21dTransform ERC20132306522024-04-16 6:57:3117 secs ago0xebc60c9a9744477bdb0f928bc2f680928e3fa070 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0.000323882968128 ETH0.0000075675220.01773469
0x769b2e9a28f0dc20ce57455727f64d82000f2c8425435c7571a43d12a01e868aTransform ERC20132306522024-04-16 6:57:3117 secs ago0x5817867f67bfa40f51146f60813352ce50b61d0a IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0.080970742032074 ETH0.0000062549510.01773469
0x144de07d1cb5d713ee72c32a2b00b4597ede013b589d0e00f9578911c02f1ca3Transform ERC20132306512024-04-16 6:57:2919 secs ago0x0ee0338201ca580b6cb547e3ac6575c34ed8666b IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0.000971648904384 ETH0.0000051075620.017633282
0x5ebebabf003750e94623b8638917c7e31e905a51fe2ad4eac8b46ba39ed9a97fTransform ERC20132306432024-04-16 6:57:1335 secs ago0x0af08c98b0451bd43f7d5c800a41c3e2d368ff08 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0.009213174911377 ETH0.0000115088430.017683336
0x01e744661d28b7b7de263462d977863bf9c1d5bcb40c33df7c276ed2a9673b8fTransform ERC20132306412024-04-16 6:57:0939 secs ago0xa11766f065ce5d8a1a195f7b9208870963edafb5 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0.003241601415931 ETH0.0000081967060.017705959
0x80bd5d8c80a7be95332d1cdbe722c7502df60cfe00170af39ce43436478aa05bTransform ERC20132306412024-04-16 6:57:0939 secs ago0x6179585e45fc2900cc9e9e9dd26d494ffb12a2b1 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0 ETH0.0000045770710.01783
0x9c0c8ecbf46cbdc3a8ffa59c25d3110de91cca4d212d7446f7eda37091103bc2Transform ERC20132306402024-04-16 6:57:0741 secs ago0xb6a8468dc74615c123972c8da77e970bef14429e IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0 ETH0.0000013340170.017721764
0x09aa731b7bade2f52e39ea180b778378dc05200df3bb4c742cf2b3e0dbb78803Transform ERC20132306362024-04-16 6:56:5949 secs ago0xb69bff554358b940d621221af1b1b9059d38685d IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0.000469203426034 ETH0.0000054506540.017767481
0xd0be0808862a7f5c08cc5ee05fb35b841c85eac3d5e75f03684196e5948c05feTransform ERC20132306352024-04-16 6:56:5751 secs ago0xeba72fb951366d7d70f70c16d6ce527b04cb3220 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0 ETH0.0000080804280.017788794
0x68d8e3257170f0b06aaf1b310a4a01c7526693aa2081780b9b947a9e6fd148aaTransform ERC20132306342024-04-16 6:56:5553 secs ago0xa433b748da1ec4372f079d3122396dd6afdfd8d7 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0.002494125572665 ETH0.0000042785610.017814919
0x2dd79b6e2ba1b35e7df7ff666b808267b3ca55c8d57f0b5e4ab0b2b659b5f343Transform ERC20132306312024-04-16 6:56:4959 secs ago0x6179585e45fc2900cc9e9e9dd26d494ffb12a2b1 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0.000003244498952 ETH0.0000044069680.01791
0x834ebcae168ac66dccc7c5e482e5f28d0d4fef39480895fe002b84a126703b8cTransform ERC20132306292024-04-16 6:56:451 min ago0xad9ce19613f67876105f1d617fba2dc07adb25a5 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0 ETH0.0000066539920.01783355
0xaa67fab72deb9aee7905e7d04d3bf6d85397384adb8527d5e998b23953ce981aTransform ERC20132306272024-04-16 6:56:411 min ago0x106cc068dd5cec13db80825c93202839f40f82c3 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0.000647765936256 ETH0.000004384820.017874601
0xf651569c9ef0e7d53697c888271ab5118e5087dd982a2d9356f81a91937712a4Transform ERC20132306192024-04-16 6:56:251 min ago0x9d2940f2d68116ad54ae5295904ea5fc5940892b IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0.08363834480775 ETH0.0000077915290.017975783
0xf43ad2e0f77305bc89fa72105fdb6352faf2d0987d6a483ced272864828db59fTransform ERC20132306152024-04-16 6:56:171 min ago0x6179585e45fc2900cc9e9e9dd26d494ffb12a2b1 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0 ETH0.0000039401940.01817
0x25333a17723b5a877325140599b8f9c233682078d403b99059602dd540722a6cTransform ERC20132306132024-04-16 6:56:131 min ago0xd34d97c857d1c77ff4a21015213d8d09d5563501 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0 ETH0.0000039564460.018101747
0x95301c647e300aa024328b2edd215b35a43040b098dea97c9a3fc63856a07e9cTransform ERC20132306052024-04-16 6:55:571 min ago0x88acbf2acacd5857c9f1b7d9657bec18084c1c7b IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0 ETH0.0000048879240.018238535
0xae8a28d232d75314c5cf02e71aca7d8caf489844ee519e3c7d2303e0cfb18119Transform ERC20132306052024-04-16 6:55:571 min ago0x6179585e45fc2900cc9e9e9dd26d494ffb12a2b1 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0.000003239674347 ETH0.0000043571610.01824
0x849ef6800635f0f3d621cfcf0a12946fece3700bd3fcd5972dc4e82c2fedf31aTransform ERC20132306022024-04-16 6:55:511 min ago0x2f6ff5461861fcf77582608bfc80f6cfeb094b3c IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0 ETH0.0000015787450.01814436
0xef5e4ae9c40802602a0485a3c1c7ffdf84bee71af80e2441a47f0b9f333482d3Transform ERC20132306022024-04-16 6:55:511 min ago0x2c3b2144453aa60fe231ede4486975deb41c2f34 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0 ETH0.00000779340.01814436
0x7665c0e1179deaa658761fe80545748a2a147bb5c0429359628ff1659eb33222Transform ERC20132305912024-04-16 6:55:292 mins ago0xad9861587e61512fd9c39abe6035025f47c8bec8 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0 ETH0.0000044163650.0205
0xf124ac8ee4aa4895737e17a94f9b02ee3c4fef1ccf78d03b2de51dda483ed666Transform ERC20132305872024-04-16 6:55:212 mins ago0x69e7d1658373c2a82136820a01d39cccc4cfe531 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0 ETH0.0000076910420.018429527
0x93a41ad6f7a7179c78b4a7ee33eac1c04b15f4639bc938208decac48c75210c9Transform ERC20132305852024-04-16 6:55:172 mins ago0x88acbf2acacd5857c9f1b7d9657bec18084c1c7b IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0.006483202831862 ETH0.0000055641170.01847044
0xb8ae0243f262e29acd8ac2b65d65e60e181094ec577b8011a3b4c0eabf96af8fTransform ERC20132305812024-04-16 6:55:092 mins ago0xbfcd2c8b8df7794529ae1fab698eab63c269b36d IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0.004862402123897 ETH0.0000056765440.018531245
0x04e1ffaa344bca4667b0cbacb2b588647c226c1948de65c7b0a8ad22f78d005cTransform ERC20132305762024-04-16 6:54:592 mins ago0x3d1c2ddbc4dff5f562af01e7ce171ec2550e7e56 IN  0xdef1c0ded9bec7f1a1670819833240f027b25eff0 ETH0.0000076316870.018466177
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x53b6b04ec9d3de6efa02cacb204343cb751c8ea246c804327e0f95f0fc93e21d132306522024-04-16 6:57:3117 secs ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.000323882968128297 ETH
0x769b2e9a28f0dc20ce57455727f64d82000f2c8425435c7571a43d12a01e868a132306522024-04-16 6:57:3117 secs ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.08097074203207413 ETH
0x144de07d1cb5d713ee72c32a2b00b4597ede013b589d0e00f9578911c02f1ca3132306512024-04-16 6:57:2919 secs ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.00097164890438489 ETH
0x5ebebabf003750e94623b8638917c7e31e905a51fe2ad4eac8b46ba39ed9a97f132306432024-04-16 6:57:1335 secs ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.009213174911377523 ETH
0x01e744661d28b7b7de263462d977863bf9c1d5bcb40c33df7c276ed2a9673b8f132306412024-04-16 6:57:0939 secs ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.003241601415931499 ETH
0x09aa731b7bade2f52e39ea180b778378dc05200df3bb4c742cf2b3e0dbb78803132306362024-04-16 6:56:5949 secs ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.000469203426034037 ETH
0x68d8e3257170f0b06aaf1b310a4a01c7526693aa2081780b9b947a9e6fd148aa132306342024-04-16 6:56:5553 secs ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.002494125572665573 ETH
0x2dd79b6e2ba1b35e7df7ff666b808267b3ca55c8d57f0b5e4ab0b2b659b5f343132306312024-04-16 6:56:4959 secs ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.000003244498952026 ETH
0xaa67fab72deb9aee7905e7d04d3bf6d85397384adb8527d5e998b23953ce981a132306272024-04-16 6:56:411 min ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.000647765936256593 ETH
0xf651569c9ef0e7d53697c888271ab5118e5087dd982a2d9356f81a91937712a4132306192024-04-16 6:56:251 min ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.083638344807750382 ETH
0xae8a28d232d75314c5cf02e71aca7d8caf489844ee519e3c7d2303e0cfb18119132306052024-04-16 6:55:571 min ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.000003239674347934 ETH
0xa0be7413be30da6958b8428ffbf2ee59a56d865997e52bc1e03e899f9b00b48c132305972024-04-16 6:55:412 mins ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.02 ETH
0xa0be7413be30da6958b8428ffbf2ee59a56d865997e52bc1e03e899f9b00b48c132305972024-04-16 6:55:412 mins ago Socket: Bungee Bridge 0xdef1c0ded9bec7f1a1670819833240f027b25eff0.02 ETH
0x93a41ad6f7a7179c78b4a7ee33eac1c04b15f4639bc938208decac48c75210c9132305852024-04-16 6:55:172 mins ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.006483202831862997 ETH
0xb8ae0243f262e29acd8ac2b65d65e60e181094ec577b8011a3b4c0eabf96af8f132305812024-04-16 6:55:092 mins ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.004862402123897248 ETH
0xd11cb2350c62bcec6245ed190fa490a442c0fd8db779bf99b341acfb86b0c64f132305692024-04-16 6:54:453 mins ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.029174412743383487 ETH
0xbcba03c8cec18f85c023d7b09db3ccb62b802d26be9eb8fd15424a93d2da061d132305672024-04-16 6:54:413 mins ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.04965 ETH
0xbcba03c8cec18f85c023d7b09db3ccb62b802d26be9eb8fd15424a93d2da061d132305672024-04-16 6:54:413 mins ago Socket: Bungee Bridge 0xdef1c0ded9bec7f1a1670819833240f027b25eff0.04965 ETH
0xc0c030bffc3eca801e429bd4d5f39b9a34cdbccbc18ce2f5d7d7cfeb1d89b249132305592024-04-16 6:54:253 mins ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.000008197608743531 ETH
0x7538a8c7f841819d6bebfa468d27b549bab1642d4ff5edfc4b7f0dc5164281d3132305492024-04-16 6:54:053 mins ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.016208007079657492 ETH
0x6a10092b263765e3953e293c8af7c540c0b52f334110463c25b607a6c1916375132305392024-04-16 6:53:454 mins ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.048724716540634129 ETH
0x505f8d6ce267d230fb68baded8a883ce77d53211e74c37c69bad445a6843e60b132305372024-04-16 6:53:414 mins ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.000003244498952026 ETH
0xdfb6af4caed85b785aba9b5b8e2bb05abd4031fc558d40637ae9243cefe5a0eb132305332024-04-16 6:53:334 mins ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.09724804247794495 ETH
0x0768ace40828745668d23835a1291f5e71d4b422b4834a5b3d7ab09c2f7a62ce132305252024-04-16 6:53:174 mins ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.0001 ETH
0x397aaa51bcdbb875732ebc1ec61dbb86f53d025edca1db8ea1289e95a8d3ffef132305222024-04-16 6:53:114 mins ago 0xdef1c0ded9bec7f1a1670819833240f027b25eff 0xdb6f1920a889355780af7570773609bd8cb1f4980.016266716108867729 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZeroEx

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
istanbul EvmVersion, Apache-2.0 license
File 1 of 10 : ZeroEx.sol
// SPDX-License-Identifier: Apache-2.0
/*
  Copyright 2023 ZeroEx Intl.
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/

pragma solidity ^0.6.5;
pragma experimental ABIEncoderV2;

import "@0x/contracts-utils/contracts/src/v06/LibBytesV06.sol";
import "./migrations/LibBootstrap.sol";
import "./features/BootstrapFeature.sol";
import "./storage/LibProxyStorage.sol";
import "./errors/LibProxyRichErrors.sol";

/// @dev An extensible proxy contract that serves as a universal entry point for
///      interacting with the 0x protocol.
contract ZeroEx {
    using LibBytesV06 for bytes;

    /// @dev Construct this contract and register the `BootstrapFeature` feature.
    ///      After constructing this contract, `bootstrap()` should be called
    ///      by `bootstrap()` to seed the initial feature set.
    /// @param bootstrapper Who can call `bootstrap()`.
    constructor(address bootstrapper) public {
        // Temporarily create and register the bootstrap feature.
        // It will deregister itself after `bootstrap()` has been called.
        BootstrapFeature bootstrap = new BootstrapFeature(bootstrapper);
        LibProxyStorage.getStorage().impls[bootstrap.bootstrap.selector] = address(bootstrap);
    }

    /// @dev Forwards calls to the appropriate implementation contract.
    fallback() external payable {
        bytes4 selector = msg.data.readBytes4(0);
        address impl = getFunctionImplementation(selector);
        if (impl == address(0)) {
            _revertWithData(LibProxyRichErrors.NotImplementedError(selector));
        }

        (bool success, bytes memory resultData) = impl.delegatecall(msg.data);
        if (!success) {
            _revertWithData(resultData);
        }
        _returnWithData(resultData);
    }

    /// @dev Fallback for just receiving ether.
    receive() external payable {}

    /// @dev Get the implementation contract of a registered function.
    /// @param selector The function selector.
    /// @return impl The implementation contract address.
    function getFunctionImplementation(bytes4 selector) public view returns (address impl) {
        return LibProxyStorage.getStorage().impls[selector];
    }

    /// @dev Revert with arbitrary bytes.
    /// @param data Revert data.
    function _revertWithData(bytes memory data) private pure {
        assembly {
            revert(add(data, 32), mload(data))
        }
    }

    /// @dev Return with arbitrary bytes.
    /// @param data Return data.
    function _returnWithData(bytes memory data) private pure {
        assembly {
            return(add(data, 32), mload(data))
        }
    }
}

File 2 of 10 : LibBytesV06.sol
// SPDX-License-Identifier: Apache-2.0
/*

  Copyright 2020 ZeroEx Intl.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

pragma solidity ^0.6.5;

import "./errors/LibBytesRichErrorsV06.sol";
import "./errors/LibRichErrorsV06.sol";

library LibBytesV06 {
    using LibBytesV06 for bytes;

    /// @dev Gets the memory address for a byte array.
    /// @param input Byte array to lookup.
    /// @return memoryAddress Memory address of byte array. This
    ///         points to the header of the byte array which contains
    ///         the length.
    function rawAddress(bytes memory input) internal pure returns (uint256 memoryAddress) {
        assembly {
            memoryAddress := input
        }
        return memoryAddress;
    }

    /// @dev Gets the memory address for the contents of a byte array.
    /// @param input Byte array to lookup.
    /// @return memoryAddress Memory address of the contents of the byte array.
    function contentAddress(bytes memory input) internal pure returns (uint256 memoryAddress) {
        assembly {
            memoryAddress := add(input, 32)
        }
        return memoryAddress;
    }

    /// @dev Copies `length` bytes from memory location `source` to `dest`.
    /// @param dest memory address to copy bytes to.
    /// @param source memory address to copy bytes from.
    /// @param length number of bytes to copy.
    function memCopy(uint256 dest, uint256 source, uint256 length) internal pure {
        if (length < 32) {
            // Handle a partial word by reading destination and masking
            // off the bits we are interested in.
            // This correctly handles overlap, zero lengths and source == dest
            assembly {
                let mask := sub(exp(256, sub(32, length)), 1)
                let s := and(mload(source), not(mask))
                let d := and(mload(dest), mask)
                mstore(dest, or(s, d))
            }
        } else {
            // Skip the O(length) loop when source == dest.
            if (source == dest) {
                return;
            }

            // For large copies we copy whole words at a time. The final
            // word is aligned to the end of the range (instead of after the
            // previous) to handle partial words. So a copy will look like this:
            //
            //  ####
            //      ####
            //          ####
            //            ####
            //
            // We handle overlap in the source and destination range by
            // changing the copying direction. This prevents us from
            // overwriting parts of source that we still need to copy.
            //
            // This correctly handles source == dest
            //
            if (source > dest) {
                assembly {
                    // We subtract 32 from `sEnd` and `dEnd` because it
                    // is easier to compare with in the loop, and these
                    // are also the addresses we need for copying the
                    // last bytes.
                    length := sub(length, 32)
                    let sEnd := add(source, length)
                    let dEnd := add(dest, length)

                    // Remember the last 32 bytes of source
                    // This needs to be done here and not after the loop
                    // because we may have overwritten the last bytes in
                    // source already due to overlap.
                    let last := mload(sEnd)

                    // Copy whole words front to back
                    // Note: the first check is always true,
                    // this could have been a do-while loop.
                    for {

                    } lt(source, sEnd) {

                    } {
                        mstore(dest, mload(source))
                        source := add(source, 32)
                        dest := add(dest, 32)
                    }

                    // Write the last 32 bytes
                    mstore(dEnd, last)
                }
            } else {
                assembly {
                    // We subtract 32 from `sEnd` and `dEnd` because those
                    // are the starting points when copying a word at the end.
                    length := sub(length, 32)
                    let sEnd := add(source, length)
                    let dEnd := add(dest, length)

                    // Remember the first 32 bytes of source
                    // This needs to be done here and not after the loop
                    // because we may have overwritten the first bytes in
                    // source already due to overlap.
                    let first := mload(source)

                    // Copy whole words back to front
                    // We use a signed comparisson here to allow dEnd to become
                    // negative (happens when source and dest < 32). Valid
                    // addresses in local memory will never be larger than
                    // 2**255, so they can be safely re-interpreted as signed.
                    // Note: the first check is always true,
                    // this could have been a do-while loop.
                    for {

                    } slt(dest, dEnd) {

                    } {
                        mstore(dEnd, mload(sEnd))
                        sEnd := sub(sEnd, 32)
                        dEnd := sub(dEnd, 32)
                    }

                    // Write the first 32 bytes
                    mstore(dest, first)
                }
            }
        }
    }

    /// @dev Returns a slices from a byte array.
    /// @param b The byte array to take a slice from.
    /// @param from The starting index for the slice (inclusive).
    /// @param to The final index for the slice (exclusive).
    /// @return result The slice containing bytes at indices [from, to)
    function slice(bytes memory b, uint256 from, uint256 to) internal pure returns (bytes memory result) {
        // Ensure that the from and to positions are valid positions for a slice within
        // the byte array that is being used.
        if (from > to) {
            LibRichErrorsV06.rrevert(
                LibBytesRichErrorsV06.InvalidByteOperationError(
                    LibBytesRichErrorsV06.InvalidByteOperationErrorCodes.FromLessThanOrEqualsToRequired,
                    from,
                    to
                )
            );
        }
        if (to > b.length) {
            LibRichErrorsV06.rrevert(
                LibBytesRichErrorsV06.InvalidByteOperationError(
                    LibBytesRichErrorsV06.InvalidByteOperationErrorCodes.ToLessThanOrEqualsLengthRequired,
                    to,
                    b.length
                )
            );
        }

        // Create a new bytes structure and copy contents
        result = new bytes(to - from);
        memCopy(result.contentAddress(), b.contentAddress() + from, result.length);
        return result;
    }

    /// @dev Returns a slice from a byte array without preserving the input.
    ///      When `from == 0`, the original array will match the slice.
    ///      In other cases its state will be corrupted.
    /// @param b The byte array to take a slice from. Will be destroyed in the process.
    /// @param from The starting index for the slice (inclusive).
    /// @param to The final index for the slice (exclusive).
    /// @return result The slice containing bytes at indices [from, to)
    function sliceDestructive(bytes memory b, uint256 from, uint256 to) internal pure returns (bytes memory result) {
        // Ensure that the from and to positions are valid positions for a slice within
        // the byte array that is being used.
        if (from > to) {
            LibRichErrorsV06.rrevert(
                LibBytesRichErrorsV06.InvalidByteOperationError(
                    LibBytesRichErrorsV06.InvalidByteOperationErrorCodes.FromLessThanOrEqualsToRequired,
                    from,
                    to
                )
            );
        }
        if (to > b.length) {
            LibRichErrorsV06.rrevert(
                LibBytesRichErrorsV06.InvalidByteOperationError(
                    LibBytesRichErrorsV06.InvalidByteOperationErrorCodes.ToLessThanOrEqualsLengthRequired,
                    to,
                    b.length
                )
            );
        }

        // Create a new bytes structure around [from, to) in-place.
        assembly {
            result := add(b, from)
            mstore(result, sub(to, from))
        }
        return result;
    }

    /// @dev Pops the last byte off of a byte array by modifying its length.
    /// @param b Byte array that will be modified.
    /// @return result The byte that was popped off.
    function popLastByte(bytes memory b) internal pure returns (bytes1 result) {
        if (b.length == 0) {
            LibRichErrorsV06.rrevert(
                LibBytesRichErrorsV06.InvalidByteOperationError(
                    LibBytesRichErrorsV06.InvalidByteOperationErrorCodes.LengthGreaterThanZeroRequired,
                    b.length,
                    0
                )
            );
        }

        // Store last byte.
        result = b[b.length - 1];

        assembly {
            // Decrement length of byte array.
            let newLen := sub(mload(b), 1)
            mstore(b, newLen)
        }
        return result;
    }

    /// @dev Tests equality of two byte arrays.
    /// @param lhs First byte array to compare.
    /// @param rhs Second byte array to compare.
    /// @return equal True if arrays are the same. False otherwise.
    function equals(bytes memory lhs, bytes memory rhs) internal pure returns (bool equal) {
        // Keccak gas cost is 30 + numWords * 6. This is a cheap way to compare.
        // We early exit on unequal lengths, but keccak would also correctly
        // handle this.
        return lhs.length == rhs.length && keccak256(lhs) == keccak256(rhs);
    }

    /// @dev Reads an address from a position in a byte array.
    /// @param b Byte array containing an address.
    /// @param index Index in byte array of address.
    /// @return result address from byte array.
    function readAddress(bytes memory b, uint256 index) internal pure returns (address result) {
        if (b.length < index + 20) {
            LibRichErrorsV06.rrevert(
                LibBytesRichErrorsV06.InvalidByteOperationError(
                    LibBytesRichErrorsV06.InvalidByteOperationErrorCodes.LengthGreaterThanOrEqualsTwentyRequired,
                    b.length,
                    index + 20 // 20 is length of address
                )
            );
        }

        // Add offset to index:
        // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)
        // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)
        index += 20;

        // Read address from array memory
        assembly {
            // 1. Add index to address of bytes array
            // 2. Load 32-byte word from memory
            // 3. Apply 20-byte mask to obtain address
            result := and(mload(add(b, index)), 0xffffffffffffffffffffffffffffffffffffffff)
        }
        return result;
    }

    /// @dev Writes an address into a specific position in a byte array.
    /// @param b Byte array to insert address into.
    /// @param index Index in byte array of address.
    /// @param input Address to put into byte array.
    function writeAddress(bytes memory b, uint256 index, address input) internal pure {
        if (b.length < index + 20) {
            LibRichErrorsV06.rrevert(
                LibBytesRichErrorsV06.InvalidByteOperationError(
                    LibBytesRichErrorsV06.InvalidByteOperationErrorCodes.LengthGreaterThanOrEqualsTwentyRequired,
                    b.length,
                    index + 20 // 20 is length of address
                )
            );
        }

        // Add offset to index:
        // 1. Arrays are prefixed by 32-byte length parameter (add 32 to index)
        // 2. Account for size difference between address length and 32-byte storage word (subtract 12 from index)
        index += 20;

        // Store address into array memory
        assembly {
            // The address occupies 20 bytes and mstore stores 32 bytes.
            // First fetch the 32-byte word where we'll be storing the address, then
            // apply a mask so we have only the bytes in the word that the address will not occupy.
            // Then combine these bytes with the address and store the 32 bytes back to memory with mstore.

            // 1. Add index to address of bytes array
            // 2. Load 32-byte word from memory
            // 3. Apply 12-byte mask to obtain extra bytes occupying word of memory where we'll store the address
            let neighbors := and(
                mload(add(b, index)),
                0xffffffffffffffffffffffff0000000000000000000000000000000000000000
            )

            // Make sure input address is clean.
            // (Solidity does not guarantee this)
            input := and(input, 0xffffffffffffffffffffffffffffffffffffffff)

            // Store the neighbors and address into memory
            mstore(add(b, index), xor(input, neighbors))
        }
    }

    /// @dev Reads a bytes32 value from a position in a byte array.
    /// @param b Byte array containing a bytes32 value.
    /// @param index Index in byte array of bytes32 value.
    /// @return result bytes32 value from byte array.
    function readBytes32(bytes memory b, uint256 index) internal pure returns (bytes32 result) {
        if (b.length < index + 32) {
            LibRichErrorsV06.rrevert(
                LibBytesRichErrorsV06.InvalidByteOperationError(
                    LibBytesRichErrorsV06.InvalidByteOperationErrorCodes.LengthGreaterThanOrEqualsThirtyTwoRequired,
                    b.length,
                    index + 32
                )
            );
        }

        // Arrays are prefixed by a 256 bit length parameter
        index += 32;

        // Read the bytes32 from array memory
        assembly {
            result := mload(add(b, index))
        }
        return result;
    }

    /// @dev Writes a bytes32 into a specific position in a byte array.
    /// @param b Byte array to insert <input> into.
    /// @param index Index in byte array of <input>.
    /// @param input bytes32 to put into byte array.
    function writeBytes32(bytes memory b, uint256 index, bytes32 input) internal pure {
        if (b.length < index + 32) {
            LibRichErrorsV06.rrevert(
                LibBytesRichErrorsV06.InvalidByteOperationError(
                    LibBytesRichErrorsV06.InvalidByteOperationErrorCodes.LengthGreaterThanOrEqualsThirtyTwoRequired,
                    b.length,
                    index + 32
                )
            );
        }

        // Arrays are prefixed by a 256 bit length parameter
        index += 32;

        // Read the bytes32 from array memory
        assembly {
            mstore(add(b, index), input)
        }
    }

    /// @dev Reads a uint256 value from a position in a byte array.
    /// @param b Byte array containing a uint256 value.
    /// @param index Index in byte array of uint256 value.
    /// @return result uint256 value from byte array.
    function readUint256(bytes memory b, uint256 index) internal pure returns (uint256 result) {
        result = uint256(readBytes32(b, index));
        return result;
    }

    /// @dev Writes a uint256 into a specific position in a byte array.
    /// @param b Byte array to insert <input> into.
    /// @param index Index in byte array of <input>.
    /// @param input uint256 to put into byte array.
    function writeUint256(bytes memory b, uint256 index, uint256 input) internal pure {
        writeBytes32(b, index, bytes32(input));
    }

    /// @dev Reads an unpadded bytes4 value from a position in a byte array.
    /// @param b Byte array containing a bytes4 value.
    /// @param index Index in byte array of bytes4 value.
    /// @return result bytes4 value from byte array.
    function readBytes4(bytes memory b, uint256 index) internal pure returns (bytes4 result) {
        if (b.length < index + 4) {
            LibRichErrorsV06.rrevert(
                LibBytesRichErrorsV06.InvalidByteOperationError(
                    LibBytesRichErrorsV06.InvalidByteOperationErrorCodes.LengthGreaterThanOrEqualsFourRequired,
                    b.length,
                    index + 4
                )
            );
        }

        // Arrays are prefixed by a 32 byte length field
        index += 32;

        // Read the bytes4 from array memory
        assembly {
            result := mload(add(b, index))
            // Solidity does not require us to clean the trailing bytes.
            // We do it anyway
            result := and(result, 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000)
        }
        return result;
    }

    /// @dev Writes a new length to a byte array.
    ///      Decreasing length will lead to removing the corresponding lower order bytes from the byte array.
    ///      Increasing length may lead to appending adjacent in-memory bytes to the end of the byte array.
    /// @param b Bytes array to write new length to.
    /// @param length New length of byte array.
    function writeLength(bytes memory b, uint256 length) internal pure {
        assembly {
            mstore(b, length)
        }
    }
}

File 3 of 10 : LibBytesRichErrorsV06.sol
// SPDX-License-Identifier: Apache-2.0
/*

  Copyright 2020 ZeroEx Intl.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

pragma solidity ^0.6.5;

library LibBytesRichErrorsV06 {
    enum InvalidByteOperationErrorCodes {
        FromLessThanOrEqualsToRequired,
        ToLessThanOrEqualsLengthRequired,
        LengthGreaterThanZeroRequired,
        LengthGreaterThanOrEqualsFourRequired,
        LengthGreaterThanOrEqualsTwentyRequired,
        LengthGreaterThanOrEqualsThirtyTwoRequired,
        LengthGreaterThanOrEqualsNestedBytesLengthRequired,
        DestinationLengthGreaterThanOrEqualSourceLengthRequired
    }

    // bytes4(keccak256("InvalidByteOperationError(uint8,uint256,uint256)"))
    bytes4 internal constant INVALID_BYTE_OPERATION_ERROR_SELECTOR = 0x28006595;

    function InvalidByteOperationError(
        InvalidByteOperationErrorCodes errorCode,
        uint256 offset,
        uint256 required
    ) internal pure returns (bytes memory) {
        return abi.encodeWithSelector(INVALID_BYTE_OPERATION_ERROR_SELECTOR, errorCode, offset, required);
    }
}

File 4 of 10 : LibRichErrorsV06.sol
// SPDX-License-Identifier: Apache-2.0
/*

  Copyright 2020 ZeroEx Intl.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

pragma solidity ^0.6.5;

library LibRichErrorsV06 {
    // bytes4(keccak256("Error(string)"))
    bytes4 internal constant STANDARD_ERROR_SELECTOR = 0x08c379a0;

    /// @dev ABI encode a standard, string revert error payload.
    ///      This is the same payload that would be included by a `revert(string)`
    ///      solidity statement. It has the function signature `Error(string)`.
    /// @param message The error string.
    /// @return The ABI encoded error.
    function StandardError(string memory message) internal pure returns (bytes memory) {
        return abi.encodeWithSelector(STANDARD_ERROR_SELECTOR, bytes(message));
    }

    /// @dev Reverts an encoded rich revert reason `errorData`.
    /// @param errorData ABI encoded error data.
    function rrevert(bytes memory errorData) internal pure {
        assembly {
            revert(add(errorData, 0x20), mload(errorData))
        }
    }
}

File 5 of 10 : LibBootstrap.sol
// SPDX-License-Identifier: Apache-2.0
/*
  Copyright 2023 ZeroEx Intl.
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/

pragma solidity ^0.6.5;
pragma experimental ABIEncoderV2;

import "@0x/contracts-utils/contracts/src/v06/errors/LibRichErrorsV06.sol";
import "../errors/LibProxyRichErrors.sol";

library LibBootstrap {
    /// @dev Magic bytes returned by the bootstrapper to indicate success.
    ///      This is `keccack('BOOTSTRAP_SUCCESS')`.
    bytes4 internal constant BOOTSTRAP_SUCCESS = 0xd150751b;

    using LibRichErrorsV06 for bytes;

    /// @dev Perform a delegatecall and ensure it returns the magic bytes.
    /// @param target The call target.
    /// @param data The call data.
    function delegatecallBootstrapFunction(address target, bytes memory data) internal {
        (bool success, bytes memory resultData) = target.delegatecall(data);
        if (!success || resultData.length != 32 || abi.decode(resultData, (bytes4)) != BOOTSTRAP_SUCCESS) {
            LibProxyRichErrors.BootstrapCallFailedError(target, resultData).rrevert();
        }
    }
}

File 6 of 10 : LibProxyRichErrors.sol
// SPDX-License-Identifier: Apache-2.0
/*
  Copyright 2023 ZeroEx Intl.
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/

pragma solidity ^0.6.5;

library LibProxyRichErrors {
    function NotImplementedError(bytes4 selector) internal pure returns (bytes memory) {
        return abi.encodeWithSelector(bytes4(keccak256("NotImplementedError(bytes4)")), selector);
    }

    function InvalidBootstrapCallerError(address actual, address expected) internal pure returns (bytes memory) {
        return
            abi.encodeWithSelector(bytes4(keccak256("InvalidBootstrapCallerError(address,address)")), actual, expected);
    }

    function InvalidDieCallerError(address actual, address expected) internal pure returns (bytes memory) {
        return abi.encodeWithSelector(bytes4(keccak256("InvalidDieCallerError(address,address)")), actual, expected);
    }

    function BootstrapCallFailedError(address target, bytes memory resultData) internal pure returns (bytes memory) {
        return abi.encodeWithSelector(bytes4(keccak256("BootstrapCallFailedError(address,bytes)")), target, resultData);
    }
}

File 7 of 10 : BootstrapFeature.sol
// SPDX-License-Identifier: Apache-2.0
/*
  Copyright 2023 ZeroEx Intl.
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/

pragma solidity ^0.6.5;
pragma experimental ABIEncoderV2;

import "@0x/contracts-utils/contracts/src/v06/errors/LibRichErrorsV06.sol";
import "../migrations/LibBootstrap.sol";
import "../storage/LibProxyStorage.sol";
import "./interfaces/IBootstrapFeature.sol";

/// @dev Detachable `bootstrap()` feature.
contract BootstrapFeature is IBootstrapFeature {
    /// @dev The ZeroEx contract.
    ///      This has to be immutable to persist across delegatecalls.
    address private immutable _deployer;
    /// @dev The implementation address of this contract.
    ///      This has to be immutable to persist across delegatecalls.
    address private immutable _implementation;
    /// @dev The deployer.
    ///      This has to be immutable to persist across delegatecalls.
    address private immutable _bootstrapCaller;

    using LibRichErrorsV06 for bytes;

    /// @dev Construct this contract and set the bootstrap migration contract.
    ///      After constructing this contract, `bootstrap()` should be called
    ///      to seed the initial feature set.
    /// @param bootstrapCaller The allowed caller of `bootstrap()`.
    constructor(address bootstrapCaller) public {
        _deployer = msg.sender;
        _implementation = address(this);
        _bootstrapCaller = bootstrapCaller;
    }

    /// @dev Bootstrap the initial feature set of this contract by delegatecalling
    ///      into `target`. Before exiting the `bootstrap()` function will
    ///      deregister itself from the proxy to prevent being called again.
    /// @param target The bootstrapper contract address.
    /// @param callData The call data to execute on `target`.
    function bootstrap(address target, bytes calldata callData) external override {
        // Only the bootstrap caller can call this function.
        if (msg.sender != _bootstrapCaller) {
            LibProxyRichErrors.InvalidBootstrapCallerError(msg.sender, _bootstrapCaller).rrevert();
        }
        // Deregister.
        LibProxyStorage.getStorage().impls[this.bootstrap.selector] = address(0);
        // Self-destruct.
        BootstrapFeature(_implementation).die();
        // Call the bootstrapper.
        LibBootstrap.delegatecallBootstrapFunction(target, callData);
    }

    /// @dev Self-destructs this contract.
    ///      Can only be called by the deployer.
    function die() external {
        assert(address(this) == _implementation);
        if (msg.sender != _deployer) {
            LibProxyRichErrors.InvalidDieCallerError(msg.sender, _deployer).rrevert();
        }
        selfdestruct(msg.sender);
    }
}

File 8 of 10 : LibProxyStorage.sol
// SPDX-License-Identifier: Apache-2.0
/*
  Copyright 2023 ZeroEx Intl.
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/

pragma solidity ^0.6.5;
pragma experimental ABIEncoderV2;

import "./LibStorage.sol";

/// @dev Storage helpers for the proxy contract.
library LibProxyStorage {
    /// @dev Storage bucket for proxy contract.
    struct Storage {
        // Mapping of function selector -> function implementation
        mapping(bytes4 => address) impls;
        // The owner of the proxy contract.
        address owner;
    }

    /// @dev Get the storage bucket for this contract.
    function getStorage() internal pure returns (Storage storage stor) {
        uint256 storageSlot = LibStorage.getStorageSlot(LibStorage.StorageId.Proxy);
        // Dip into assembly to change the slot pointed to by the local variable `stor`.
        // solhint-disable-next-line max-line-length
        // See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries
        assembly {
            stor_slot := storageSlot
        }
    }
}

File 9 of 10 : LibStorage.sol
// SPDX-License-Identifier: Apache-2.0
/*
  Copyright 2023 ZeroEx Intl.
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/

pragma solidity ^0.6;
pragma experimental ABIEncoderV2;

/// @dev Common storage helpers
library LibStorage {
    /// @dev What to bit-shift a storage ID by to get its slot.
    /// This gives us a maximum of 2**128 inline fields in each bucket.
    uint256 private constant STORAGE_SLOT_EXP = 128;

    /// @dev Storage IDs for feature storage buckets.
    /// WARNING: APPEND-ONLY.
    enum StorageId {
        Proxy,
        SimpleFunctionRegistry,
        Ownable,
        TokenSpender,
        TransformERC20,
        MetaTransactions,
        ReentrancyGuard,
        NativeOrders,
        OtcOrders,
        ERC721Orders,
        ERC1155Orders,
        MetaTransactionsV2
    }

    /// @dev Get the storage slot given a storage ID. We assign unique, well-spaced slots to storage bucket variables
    /// to ensure they do not overlap.
    // solhint-disable-next-line max-line-length
    /// See: https://solidity.readthedocs.io/en/v0.6.6/assembly.html#access-to-external-variables-functions-and-libraries
    /// @param storageId An entry in `StorageId`
    /// @return slot The storage slot.
    function getStorageSlot(StorageId storageId) internal pure returns (uint256 slot) {
        // This should never overflow with a reasonable `STORAGE_SLOT_EXP`
        // because Solidity will do a range check on `storageId` during the cast.
        return (uint256(storageId) + 1) << STORAGE_SLOT_EXP;
    }
}

File 10 of 10 : IBootstrapFeature.sol
// SPDX-License-Identifier: Apache-2.0
/*
  Copyright 2023 ZeroEx Intl.
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/

pragma solidity ^0.6.5;
pragma experimental ABIEncoderV2;

/// @dev Detachable `bootstrap()` feature.
interface IBootstrapFeature {
    /// @dev Bootstrap the initial feature set of this contract by delegatecalling
    ///      into `target`. Before exiting the `bootstrap()` function will
    ///      deregister itself from the proxy to prevent being called again.
    /// @param target The bootstrapper contract address.
    /// @param callData The call data to execute on `target`.
    function bootstrap(address target, bytes calldata callData) external;
}

Settings
{
  "remappings": [
    "@0x/contracts-utils=/home/user/Documents/git-repos/0x/protocol/node_modules/@0x/contracts-utils",
    "@0x/contracts-erc20=/home/user/Documents/git-repos/0x/protocol/node_modules/@0x/contracts-erc20"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 1000000,
    "details": {
      "yul": true,
      "deduplicate": true,
      "cse": true,
      "constantOptimizer": true
    }
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "istanbul"
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"bootstrapper","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getFunctionImplementation","outputs":[{"internalType":"address","name":"impl","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50604051610db8380380610db883398101604081905261002f916100fc565b60008160405161003e906100ef565b610048919061012a565b604051809103906000f080158015610064573d6000803e3d6000fd5b5090508061007a6100b760201b6102db1760201c565b6373f208d560e01b60009081526020919091526040902080546001600160a01b0319166001600160a01b03929092169190911790555061013e9050565b6000806100ce60006100d460201b6102ee1760201c565b92915050565b6000608082600b8111156100e457fe5b600101901b92915050565b6107c0806105f883390190565b60006020828403121561010d578081fd5b81516001600160a01b0381168114610123578182fd5b9392505050565b6001600160a01b0391909116815260200190565b6104ab8061014d6000396000f3fe6080604052600436106100225760003560e01c8063972fdd261461013857610029565b3661002957005b600061006f600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061016e9050565b9050600061007c826101ba565b905073ffffffffffffffffffffffffffffffffffffffff81166100aa576100aa6100a583610213565b6102cb565b600060608273ffffffffffffffffffffffffffffffffffffffff166000366040516100d69291906103f5565b600060405180830381855af49150503d8060008114610111576040519150601f19603f3d011682016040523d82523d6000602084013e610116565b606091505b50915091508161012957610129816102cb565b610132816102d3565b50505050005b34801561014457600080fd5b506101586101533660046103ae565b6101ba565b6040516101659190610405565b60405180910390f35b6000816004018351101561018f5761018f6100a56003855185600401610309565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b60006101c46102db565b7fffffffff0000000000000000000000000000000000000000000000000000000092909216600090815260209290925250604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60607f734e6e1c6ec3f883cac8d13d3e7390b280f5e94424662aa29e27394ed56586c9826040516024016102479190610426565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b805160208201f35b6000806102e860006102ee565b92915050565b6000608082600b8111156102fe57fe5b600101901b92915050565b6060632800659560e01b84848460405160240161032893929190610453565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b6000602082840312156103bf578081fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146103ee578182fd5b9392505050565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b606081016008851061046157fe5b93815260208101929092526040909101529056fea264697066735822122023f1e53ce43d070227f0a12f0d590d84761f462e18ff19138726a8ebfef52a9564736f6c634300060c003360e060405234801561001057600080fd5b506040516107c03803806107c083398101604081905261002f91610051565b33606090811b60805230811b60a0521b6001600160601b03191660c05261007f565b600060208284031215610062578081fd5b81516001600160a01b0381168114610078578182fd5b9392505050565b60805160601c60a05160601c60c05160601c6107006100c060003980610121528061014f5250806070528061021652508060af528060dd52506107006000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806335f469941461003b57806373f208d514610045575b600080fd5b610043610058565b005b61004361005336600461050e565b610109565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461009757fe5b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461010657610106610101337f00000000000000000000000000000000000000000000000000000000000000006102ba565b610375565b33ff5b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461017357610173610101337f000000000000000000000000000000000000000000000000000000000000000061037d565b600061017d6103b3565b7f73f208d5000000000000000000000000000000000000000000000000000000006000908152602091909152604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff94851617905580517f35f4699400000000000000000000000000000000000000000000000000000000815290517f0000000000000000000000000000000000000000000000000000000000000000909316926335f469949260048084019391929182900301818387803b15801561025d57600080fd5b505af1158015610271573d6000803e3d6000fd5b505050506102b58383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103c692505050565b505050565b60607fabeb420c997af2b939cfae9ef422a08b8467cc0cf89064c140b7edf8a22cedc283836040516024016102f0929190610609565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b805160208201fd5b60607fb84f6d63d81ee2a3bc5c6658be21fc96c31d7cdc4dc460ea0d6f7b7218b5b4b383836040516024016102f0929190610609565b6000806103c060006104bd565b92915050565b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516103ef91906105ed565b600060405180830381855af49150503d806000811461042a576040519150601f19603f3d011682016040523d82523d6000602084013e61042f565b606091505b509150915081158061044357508051602014155b806104a5575080517fd150751b000000000000000000000000000000000000000000000000000000009061048090830160209081019084016105a6565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b156104b7576104b761010185836104d8565b50505050565b6000608082600b8111156104cd57fe5b600101901b92915050565b60607fd19d65df6830e3cb0da1e12b8e9738e2dc473f830d8af813bcc031eb5a1675d183836040516024016102f0929190610630565b600080600060408486031215610522578283fd5b833573ffffffffffffffffffffffffffffffffffffffff81168114610545578384fd5b9250602084013567ffffffffffffffff80821115610561578384fd5b818601915086601f830112610574578384fd5b813581811115610582578485fd5b876020828501011115610593578485fd5b6020830194508093505050509250925092565b6000602082840312156105b7578081fd5b81517fffffffff00000000000000000000000000000000000000000000000000000000811681146105e6578182fd5b9392505050565b600082516105ff81846020870161069e565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8416825260406020830152825180604084015261066b81606085016020870161069e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b60005b838110156106b95781810151838201526020016106a1565b838111156104b7575050600091015256fea264697066735822122034b4677fcc6b206547ab3f2298bcbb212a32e5d8350c7fe9785eed97300b01ab64736f6c634300060c003300000000000000000000000027a688d1f6d2794d0580f04dfc0fcafd0a40c59d

Deployed Bytecode

0x6080604052600436106100225760003560e01c8063972fdd261461013857610029565b3661002957005b600061006f600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061016e9050565b9050600061007c826101ba565b905073ffffffffffffffffffffffffffffffffffffffff81166100aa576100aa6100a583610213565b6102cb565b600060608273ffffffffffffffffffffffffffffffffffffffff166000366040516100d69291906103f5565b600060405180830381855af49150503d8060008114610111576040519150601f19603f3d011682016040523d82523d6000602084013e610116565b606091505b50915091508161012957610129816102cb565b610132816102d3565b50505050005b34801561014457600080fd5b506101586101533660046103ae565b6101ba565b6040516101659190610405565b60405180910390f35b6000816004018351101561018f5761018f6100a56003855185600401610309565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b60006101c46102db565b7fffffffff0000000000000000000000000000000000000000000000000000000092909216600090815260209290925250604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60607f734e6e1c6ec3f883cac8d13d3e7390b280f5e94424662aa29e27394ed56586c9826040516024016102479190610426565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b805160208201f35b6000806102e860006102ee565b92915050565b6000608082600b8111156102fe57fe5b600101901b92915050565b6060632800659560e01b84848460405160240161032893929190610453565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b6000602082840312156103bf578081fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146103ee578182fd5b9392505050565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b606081016008851061046157fe5b93815260208101929092526040909101529056fea264697066735822122023f1e53ce43d070227f0a12f0d590d84761f462e18ff19138726a8ebfef52a9564736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000027a688d1f6d2794d0580f04dfc0fcafd0a40c59d

-----Decoded View---------------
Arg [0] : bootstrapper (address): 0x27a688d1F6D2794D0580F04DfC0fcafD0a40c59D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000027a688d1f6d2794d0580f04dfc0fcafd0a40c59d


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.