Contract 0x05ad1094eb6cde564d732196f6754ee464896031

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc66e32ac5edff18e29d484ba86e3a9ec04409c408425a04312bb34f89b2e4341Cancel Order384840602022-05-18 3:15:173 mins ago0x2090428ff606a479f88f7052365781c8712c60d2 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.193767124214
0x7ca17108e568e2ea433da788693e58203a891d8d5f61066c78d6f7671bac3ef4Cancel Order384838872022-05-18 3:12:007 mins ago0x3701e45b9f76080f2f4de2dabdd478d3b7c9cfe5 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.215945022686
0x3ba3343eea3fea5387d57f78a3b01b7299e6f24c28f57745e0c9cdc591698a6bCancel Order384837132022-05-18 3:08:3910 mins ago0x8efea4475ded9a1b41f862cbfc9956a428507315 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.193977040006
0x575ff41778b3742a1cab4e9d7be1ba045b9cdbd8444b49ae712fe390e3b86898Cancel Order384836842022-05-18 3:08:0611 mins ago0x8efea4475ded9a1b41f862cbfc9956a428507315 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.194985897523
0xbce8a93d435d5879d3b116076af266fa6751254b3beab4a1cc9752c9fdf9563aCancel Order384828612022-05-18 2:50:5428 mins ago0x6deee474d9569011b1df327f27a8238061f8a79c IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.253207726437
0x423a02e7eb6c288082a6bd3a9b0b9cb16b832a402a14529a49736bd198f9d75fCancel Order384827792022-05-18 2:48:3230 mins ago0xb9a3eee1bb0b6743e0115a5eaeb2011b57beb6a2 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.259980579991
0xed0fcc2005204e48bf5e23017892a3bba82b9eeaf4dc69d58ad1244b13c494faCancel Order384827762022-05-18 2:48:2930 mins ago0x6deee474d9569011b1df327f27a8238061f8a79c IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.238128765533
0x9f684fbeca703b97effde3d0afa4c2369ede681a36d11c544967a8ee13343ccdCancel Order384827572022-05-18 2:48:0831 mins ago0x6deee474d9569011b1df327f27a8238061f8a79c IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.250787008003
0x42ed9a6d0d9f38c297e138eff58d33a7b3f376ed9e8da71b17a95573b42f4957Cancel Order384824872022-05-18 2:40:0539 mins ago0xc0877f592fb9edbd7818c15d2ff31ff0184b97ae IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.19094463319
0x45b06002c059239399ee3d62851ad530f30bfc5c8d273a2dba1ad768f188c03fDeposit Eth384824402022-05-18 2:38:4540 mins ago0xc0877f592fb9edbd7818c15d2ff31ff0184b97ae IN  0x05ad1094eb6cde564d732196f6754ee464896031250 FTM0.038072019369
0x6155bd6098ab62be8a9aa7ddacf298bc363479c90871eeb4a65048fb9693182eCancel Order384808802022-05-18 1:55:471 hr 23 mins ago0x59ceebaab9647fda9cfd950fbfd87e72d16eb7ff IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.075984756747
0xf47994e12d4c8fb017b981bd2c2f1933466edee94f9a6958776dac29677c1f37Cancel Order384808492022-05-18 1:55:191 hr 23 mins ago0x59ceebaab9647fda9cfd950fbfd87e72d16eb7ff IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.079738198232
0xff1e4bf68de9cb6476fdc42ad84eb246e663302041deed45195821ba375117aeCancel Order384806542022-05-18 1:51:161 hr 27 mins ago0xc509222d1fc69a7d3e4552f21f3f500fc68d8a09 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.074716618355
0xd2e53b950e3f8ac201167a8a3aab2869512c11a46a07aa63e923704b9faa4dabCancel Order384799952022-05-18 1:38:331 hr 40 mins ago0x558e7aa8b9fab79274786c571cb76346d85ffb6c IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.070586701751
0xc551408324ccc7ef3bf56782cfea51566075c6842a2a17e163f58e7ca475b170Cancel Order384786372022-05-18 1:12:472 hrs 6 mins ago0x558e7aa8b9fab79274786c571cb76346d85ffb6c IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.072905579339
0x5960fc250387598a55e8a6ad304b4e343ea4190901aaaf088b817cfb6b63c40bCancel Order384783982022-05-18 1:08:482 hrs 10 mins ago0xf5c581fa38c1d5fc455c38a43ef2b0be3c4d9962 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.059703250496
0x9b5b3083dfca224bc2c4b3546b896dabe43e6b661bb4dc01ebd218cd5f114287Deposit Eth384781922022-05-18 1:04:442 hrs 14 mins ago0xf5c581fa38c1d5fc455c38a43ef2b0be3c4d9962 IN  0x05ad1094eb6cde564d732196f6754ee46489603110 FTM0.014309346447
0x135014349674fe4256967c26984b790a6a855f10f468221a777e7309319617feDeposit Eth384779032022-05-18 0:58:352 hrs 20 mins ago0x852c0947b55b489dc9bb42f85f625bad5f740ffc IN  0x05ad1094eb6cde564d732196f6754ee4648960311,000 FTM0.010987716596
0xe29c5de0f0506edbe5f95341adde487b3443d4830c5199ac8cb611afecba094cCancel Order384778832022-05-18 0:58:092 hrs 20 mins ago0x17ea69d1c1b079cdfed261082a1d9e08c9535610 IN  0x05ad1094eb6cde564d732196f6754ee4648960310 FTM0.058816335066
0xf7e799aa83c39a7bf10b6f81b306ca1766f248a600d30a7fd1d2f6affdd7ef48Deposit Eth384778832022-05-18 0:58:092 hrs 20 mins ago0x852c0947b55b489dc9bb42f85f625bad5f740ffc IN  0x05ad1094eb6cde564d732196f6754ee4648960311,000 FTM0.011030936845
0xb50956941e5566e59bd8b3221229b2645b4069e37ea45fcb089ff0743f391b6aDeposit Eth384778662022-05-18 0:57:512 hrs 21 mins ago0x852c0947b55b489dc9bb42f85f625bad5f740ffc IN  0x05ad1094eb6cde564d732196f6754ee4648960311,000 FTM0.011050940858
0x54e6684d64363e8fae543a11f83dab6bfb198dbe885da89556f8ec04dc505de2Deposit Eth384778522022-05-18 0:57:362 hrs 21 mins ago0x852c0947b55b489dc9bb42f85f625bad5f740ffc IN  0x05ad1094eb6cde564d732196f6754ee4648960311,000 FTM0.011612995709
0x1092948dfc888f123f7ceb30e17dc800ebfbfd06b7426debf38e90f7a828bf67Deposit Eth384778382022-05-18 0:57:142 hrs 21 mins ago0x852c0947b55b489dc9bb42f85f625bad5f740ffc IN  0x05ad1094eb6cde564d732196f6754ee4648960311,000 FTM0.01174062595
0x1d0f55aa103172ef95bfc2f00ba842d56a1f5c2333d171d5c286413cafebfff6Deposit Eth384778142022-05-18 0:56:432 hrs 22 mins ago0x852c0947b55b489dc9bb42f85f625bad5f740ffc IN  0x05ad1094eb6cde564d732196f6754ee4648960311,000 FTM0.011781964151
0x0a0703ad851a45278afedffa04aa4f87d7a4fe33218cb677fced857c367aa509Deposit Eth384776982022-05-18 0:54:512 hrs 24 mins ago0x852c0947b55b489dc9bb42f85f625bad5f740ffc IN  0x05ad1094eb6cde564d732196f6754ee464896031200 FTM0.012308213014
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xc66e32ac5edff18e29d484ba86e3a9ec04409c408425a04312bb34f89b2e4341384840602022-05-18 3:15:173 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x1548f38813cc9a699cb1fa9d99afa6ab4af25e8ad423a024087f7d9aa2d8be7a384840412022-05-18 3:14:584 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x7ca17108e568e2ea433da788693e58203a891d8d5f61066c78d6f7671bac3ef4384838872022-05-18 3:12:007 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x29fadbc13e18d3e7a06e430719a0d7a8964887de8b40b89f689c0fbcc2cccdbb384837752022-05-18 3:09:509 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x3ba3343eea3fea5387d57f78a3b01b7299e6f24c28f57745e0c9cdc591698a6b384837132022-05-18 3:08:3910 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x575ff41778b3742a1cab4e9d7be1ba045b9cdbd8444b49ae712fe390e3b86898384836842022-05-18 3:08:0611 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xbce8a93d435d5879d3b116076af266fa6751254b3beab4a1cc9752c9fdf9563a384828612022-05-18 2:50:5428 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x423a02e7eb6c288082a6bd3a9b0b9cb16b832a402a14529a49736bd198f9d75f384827792022-05-18 2:48:3230 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xed0fcc2005204e48bf5e23017892a3bba82b9eeaf4dc69d58ad1244b13c494fa384827762022-05-18 2:48:2930 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x9f684fbeca703b97effde3d0afa4c2369ede681a36d11c544967a8ee13343ccd384827572022-05-18 2:48:0831 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x42ed9a6d0d9f38c297e138eff58d33a7b3f376ed9e8da71b17a95573b42f4957384824872022-05-18 2:40:0539 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xdfa670f7286f57556b49f5b45972a5fbfa09b7305fbe2be16bfd6f8bcd5b5cb8384813622022-05-18 2:08:541 hr 10 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x6155bd6098ab62be8a9aa7ddacf298bc363479c90871eeb4a65048fb9693182e384808802022-05-18 1:55:471 hr 23 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xf47994e12d4c8fb017b981bd2c2f1933466edee94f9a6958776dac29677c1f37384808492022-05-18 1:55:191 hr 23 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xff1e4bf68de9cb6476fdc42ad84eb246e663302041deed45195821ba375117ae384806542022-05-18 1:51:161 hr 27 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xd2e53b950e3f8ac201167a8a3aab2869512c11a46a07aa63e923704b9faa4dab384799952022-05-18 1:38:331 hr 40 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xc551408324ccc7ef3bf56782cfea51566075c6842a2a17e163f58e7ca475b170384786372022-05-18 1:12:472 hrs 6 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x5960fc250387598a55e8a6ad304b4e343ea4190901aaaf088b817cfb6b63c40b384783982022-05-18 1:08:482 hrs 10 mins ago 0x05ad1094eb6cde564d732196f6754ee4648960310xf5c581fa38c1d5fc455c38a43ef2b0be3c4d996210 FTM
0xe29c5de0f0506edbe5f95341adde487b3443d4830c5199ac8cb611afecba094c384778832022-05-18 0:58:092 hrs 20 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x65c9b6bb09e0f15723148c2367198d3bf4d30ee9c9af520c8c890376d1662793384771622022-05-18 0:45:022 hrs 34 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x2d8ffdd13e661e62b5eb420e9c18fbcbfe3b8825eab5eb08b5cdba7348fea214384767732022-05-18 0:37:352 hrs 41 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xf027701f77ec242c97b1c44c5fc3c2949a4f3ecd621a7fb3ea5b767247345407384764762022-05-18 0:32:022 hrs 47 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xab83e2daa468998a36baaaf0817fb54301f3cff44f67681fad62b92c8da24462384761382022-05-18 0:25:322 hrs 53 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0x4f62ee5fc1a69fbe9f326b675080475b58ba872e9de180c57f44b4c0d0c3009b384758302022-05-18 0:19:292 hrs 59 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
0xbc4a748ca7a04273d46f25b9bdca6475e51b159fae63b36e589b9a0f765d906d384758122022-05-18 0:19:122 hrs 59 mins ago 0x05ad1094eb6cde564d732196f6754ee464896031  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GelatoPineCore

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity Multiple files format)

File 1 of 2: GelatoPineCore.sol
// SPDX-License-Identifier: GPL-3.0

//
// Original work by Pine.Finance
//  - https://github.com/pine-finance
//
// Authors:
//  - Ignacio Mazzara <@nachomazzara>
//  - Agustin Aguilar <@agusx1211>

// solhint-disable-next-line
pragma solidity 0.6.12;

import {PineCore, IModule, IERC20} from "./PineCore.sol";

contract GelatoPineCore is PineCore {
    // solhint-disable-next-line var-name-mixedcase
    address public immutable GELATO;

    constructor(address _gelato) public {
        GELATO = _gelato;
    }

    modifier onlyGelato {
        require(GELATO == msg.sender, "GelatoPineCore: onlyGelato");
        _;
    }

    function executeOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        bytes calldata _data,
        bytes calldata _signature,
        bytes calldata _auxData
    ) public override onlyGelato {
        super.executeOrder(
            _module,
            _inputToken,
            _owner,
            _data,
            _signature,
            _auxData
        );
    }
}

File 2 of 2: PineCore.sol
/**
 *Submitted for verification at Etherscan.io on 2020-08-30
 */

/**
 *Submitted for verification at Etherscan.io on 2020-08-30
 */

// SPDX-License-Identifier: GPL-3.0
//
// Original work by Pine.Finance
//  - https://github.com/pine-finance
//
// Authors:
//  - Ignacio Mazzara <@nachomazzara>
//  - Agustin Aguilar <@agusx1211>

//
//
//                                                /
//                                                @,
//                                               /&&
//                                              &&%%&/
//                                            &%%%%&%%,..
//                                         */%&,*&&&&&&%%&*
//                                           /&%%%%%%%#.
//                                    ./%&%%%&#/%%%%&#&%%%&#(*.
//                                         .%%%%%%%&&%&/ ..,...
//                                       .*,%%%%%%%%%&&%%%%(
//                                     ,&&%%%&&*%%%%%%%%.*(#%&/
//                                  ./,(*,*,#%%%%%%%%%%%%%%%(,
//                                 ,(%%%%%%%%%%%%&%%%%%%%%%#&&%%%#/(*
//                                     *#%%%%%%%&%%%&%%#%%%%%%(
//                              .(####%%&%&#*&%%##%%%%%%%%%%%#.,,
//                                      ,&%%%%%###%%%%%%%%%%%%#&&.
//                             ..,(&%%%%%%%%%%%%%%%%%%&&%%%%#%&&%&%%%%&&#,
//                           ,##//%((#*/#%%%%%%%%%%%%%%%%%%%%%&(.
//                                  (%%%%%%%%%%%%%%%%%%%#%%%%%%%%%&&&&#(*,
//                                   ./%%%%&%%%%#%&%%%%%%##%%&&&&%%(*,
//                                #%%%%%%&&%%%#%%%%%%%%%%%%%%%&#,*&&#.
//                            /%##%(%&/ #%%%%%%%%%%%%%%%%%%%%%%%%%&%%%.
//                                 *&%%%%&%%%%%%%%#%%%%%%%%%%%%%%%%%&%%%#%#%%,
//                        .*(#&%%%%%%%%&&%%%%%%%%%%#%%%%%%%%%%%%%%%(,
//                    ./#%%%%%%%%%%%%%%%%%%%%%%%#%&%#%%%%%%%%%%%%%%%%%%%%&%%%#####(.
//                          .,,*#%%%%%%%%%%%%%##%%&&%#%%%%%%%%&&%%%%%%(&*#&**/(*
//                        .,(&%%%%%#((%%%%%%#%%%%%%%%%#%%%%%%%&&&&&%%%%&%*
//                         ,,,,,..*&%%%%%%%%%%%%%%%%%%%%%%%&%%%%%%%%%#/*.
//                           ,#&%%%%%%%%%%%%%%%%%%%%%%%%&%%%%%%%%%%%%%%%%%%/,
//           .     .,*(#%%%%%%%%%&&&&%%%%%%&&&%%%%%%%%%&&%##%%%%%#,(%%%%%%%%%%%(((*
//             ,/((%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%&#  . . ...
//                      .,.,,**(%%%%%%%%&%##%%%%%%%%%%%%%%%%%%###%%%%%%%%%&*
//                       ,%&%%%%%&&%%%%%%%#%%%%%%%%%%%%%%%%%%&%%%%##%%%%%%%%%%%%%%%%&&#.
//              .(&&&%%%%%%&#&&%&%%%%%%%##%%%%&&%%%#%%%%%%&%%%%%%&&%%%%&&&/*(,(#(,,.
//                         ..&%%%%%%#%#%%%%%%%%%%%##%%%%%%%&%%%%%%%%%%%%%%%%&&(.
//                      ,%%%%%%%%%##%%%&%%%%%%%%&%%#%%&&%%%%&%%%%%%&%%%%%&(#%%%#,
//              ./%&%%%%%%%%%%%%%%%%%%%%%%%%%&&&%%%##%%%%%%%%%%%%%&&&%%%%%%%%&#.//*/,..
//      ,#%%%%%%%%%%%%%%%%%%&&%%%%%&&&&%%%%%&&&%%%%%#%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%&&(,..
//            ,#* ,&&&%,.,*(%%%%%%%%%&%%%%&&&%%%%%&%%%%#%%%%##%%%%%%%&&%%%%%%%%%%%#%%%%%%%%&%(*.
//          .,,/((#%&%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&%#%%%%%%%%%%%%%%%%%#%%%%%%%((*
// *,//**,...,/#%%%%%%%%%%%&&&&%%%%%%%%%%%%%#%%%%%%&&&%%%%&&&&%%%#%%#%%%%%%%%%%%%%%%#*.       .,(#%&@*
//  .*%%(*(%%%%%%%%%%&&&&&&&&%%%%%%%&&%%%%%%%%%%%%%&&&%%%%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%&%%%/..
//      .,/%&%%%%%%@#(&%&%%%%%%%%%#&&%%##%#%%%#%%%%&&&%%%%%%%%###%%%%%&&&%%%%%%%%%%%%%%%%&(//%%/
//          ,..     .(%%%%##%%%#%%%%%%#%%%%%##%%%%%&&&&%%%%%%%#&%#%%%%%%&&&%%%%%##//  ,,.
//            .,(%#%%##%%%#%%%#%%%#%%*,.*%%%%%%%%%&.,/&%%%%%%% #&%%#%%%%%&%(&%((%&&&(*
//                        ,/#/(%%,    ,&%%#%/.//         %*&(%#    .(,(%%%.

pragma solidity 0.6.12;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: contracts/libs/ECDSA.sol

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature)
        internal
        pure
        returns (address)
    {
        // Check the signature length
        if (signature.length != 65) {
            revert("ECDSA: invalid signature length");
        }

        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;

        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }

        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (
            uint256(s) >
            0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0
        ) {
            revert("ECDSA: invalid signature 's' value");
        }

        if (v != 27 && v != 28) {
            revert("ECDSA: invalid signature 'v' value");
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0), "ECDSA: invalid signature");

        return signer;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * replicates the behavior of the
     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]
     * JSON-RPC method.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash)
        internal
        pure
        returns (bytes32)
    {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return
            keccak256(
                abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
            );
    }
}

// File: contracts/interfaces/IERC20.sol

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

// File: contracts/libs/Fabric.sol

/**
 * @title Fabric
 * @dev Create deterministics vaults.
 *
 * Original work by Pine.Finance
 * - https://github.com/pine-finance
 *
 * Authors:
 * - Agustin Aguilar <agusx1211>
 * - Ignacio Mazzara <nachomazzara>
 */
library Fabric {
    /*Vault bytecode

        def _fallback() payable:
            call cd[56] with:
                funct call.data[0 len 4]
                gas cd[56] wei
                args call.data[4 len 64]
            selfdestruct(tx.origin)

        // Constructor bytecode
        0x6012600081600A8239f3

        0x60 12 - PUSH1 12           // Size of the contract to return
        0x60 00 - PUSH1 00           // Memory offset to return stored code
        0x81    - DUP2  12           // Size of code to copy
        0x60 0a - PUSH1 0A           // Start of the code to copy
        0x82    - DUP3  00           // Dest memory for code copy
        0x39    - CODECOPY 00 0A 12  // Code copy to memory
        0xf3    - RETURN 00 12       // Return code to store

        // Deployed contract bytecode
        0x60008060448082803781806038355AF132FF

        0x60 00 - PUSH1 00                    // Size for the call output
        0x80    - DUP1  00                    // Offset for the call output
        0x60 44 - PUSH1 44                    // Size for the call input
        0x80    - DUP1  44                    // Size for copying calldata to memory
        0x82    - DUP3  00                    // Offset for calldata copy
        0x80    - DUP1  00                    // Offset for destination of calldata copy
        0x37    - CALLDATACOPY 00 00 44       // Execute calldata copy, is going to be used for next call
        0x81    - DUP2  00                    // Offset for call input
        0x80    - DUP1  00                    // Amount of ETH to send during call
        0x60 38 - PUSH1 38                    // calldata pointer to load value into stack
        0x35    - CALLDATALOAD 38 (A)         // Load value (A), address to call
        0x5a    - GAS                         // Remaining gas
        0xf1    - CALL (A) (A) 00 00 44 00 00 // Execute call to address (A) with calldata mem[0:64]
        0x32    - ORIGIN (B)                  // Dest funds for selfdestruct
        0xff    - SELFDESTRUCT (B)            // selfdestruct contract, end of execution
    */
    bytes public constant code =
        hex"6012600081600A8239F360008060448082803781806038355AF132FF";
    bytes32 public constant vaultCodeHash =
        bytes32(
            0xfa3da1081bc86587310fce8f3a5309785fc567b9b20875900cb289302d6bfa97
        );

    /**
     * @dev Get a deterministics vault.
     */
    function getVault(bytes32 _key) internal view returns (address) {
        return
            address(
                uint256(
                    keccak256(
                        abi.encodePacked(
                            bytes1(0xff),
                            address(this),
                            _key,
                            vaultCodeHash
                        )
                    )
                )
            );
    }

    /**
     * @dev Create deterministic vault.
     */
    function executeVault(
        bytes32 _key,
        IERC20 _token,
        address _to
    ) internal returns (uint256 value) {
        address addr;
        bytes memory slotcode = code;

        /* solium-disable-next-line */
        assembly {
            // Create the contract arguments for the constructor
            addr := create2(0, add(slotcode, 0x20), mload(slotcode), _key)
        }

        value = _token.balanceOf(addr);
        /* solium-disable-next-line */
        (bool success, ) =
            addr.call(
                abi.encodePacked(
                    abi.encodeWithSelector(
                        _token.transfer.selector,
                        _to,
                        value
                    ),
                    address(_token)
                )
            );

        require(success, "Error pulling tokens");
    }
}

// File: contracts/interfaces/IModule.sol

/**
 * Original work by Pine.Finance
 * - https://github.com/pine-finance
 *
 * Authors:
 * - Ignacio Mazzara <nachomazzara>
 * - Agustin Aguilar <agusx1211>
 */
interface IModule {
    /// @notice receive ETH
    receive() external payable;

    /**
     * @notice Executes an order
     * @param _inputToken - Address of the input token
     * @param _inputAmount - uint256 of the input token amount (order amount)
     * @param _owner - Address of the order's owner
     * @param _data - Bytes of the order's data
     * @param _auxData - Bytes of the auxiliar data used for the handlers to execute the order
     * @return bought - amount of output token bought
     */
    function execute(
        IERC20 _inputToken,
        uint256 _inputAmount,
        address payable _owner,
        bytes calldata _data,
        bytes calldata _auxData
    ) external returns (uint256 bought);

    /**
     * @notice Check whether an order can be executed or not
     * @param _inputToken - Address of the input token
     * @param _inputAmount - uint256 of the input token amount (order amount)
     * @param _data - Bytes of the order's data
     * @param _auxData - Bytes of the auxiliar data used for the handlers to execute the order
     * @return bool - whether the order can be executed or not
     */
    function canExecute(
        IERC20 _inputToken,
        uint256 _inputAmount,
        bytes calldata _data,
        bytes calldata _auxData
    ) external view returns (bool);
}

// File: contracts/commons/Order.sol

contract Order {
    address public constant ETH_ADDRESS =
        address(0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee);
}

// File: contracts/PineCore.sol

/**
 * Original work by Pine.Finance
 * - https://github.com/pine-finance
 *
 * Authors:
 * - Ignacio Mazzara <nachomazzara>
 * - Agustin Aguilar <agusx1211>
 */
abstract contract PineCore is Order {
    using SafeMath for uint256;
    using Fabric for bytes32;

    // ETH orders
    mapping(bytes32 => uint256) public ethDeposits;

    // Events
    event DepositETH(
        bytes32 indexed _key,
        address indexed _caller,
        uint256 _amount,
        bytes _data
    );

    event OrderExecuted(
        bytes32 indexed _key,
        address _inputToken,
        address _owner,
        address _witness,
        bytes _data,
        bytes _auxData,
        uint256 _amount,
        uint256 _bought
    );

    event OrderCancelled(
        bytes32 indexed _key,
        address _inputToken,
        address _owner,
        address _witness,
        bytes _data,
        uint256 _amount
    );

    /**
     * @dev Prevent users to send Ether directly to this contract
     */
    receive() external payable {
        require(
            msg.sender != tx.origin,
            "PineCore#receive: NO_SEND_ETH_PLEASE"
        );
    }

    /**
     * @notice Create an ETH to token order
     * @param _data - Bytes of an ETH to token order. See `encodeEthOrder` for more info
     */
    function depositEth(bytes calldata _data) external payable {
        require(msg.value > 0, "PineCore#depositEth: VALUE_IS_0");

        (
            address module,
            address inputToken,
            address payable owner,
            address witness,
            bytes memory data,

        ) = decodeOrder(_data);

        require(
            inputToken == ETH_ADDRESS,
            "PineCore#depositEth: WRONG_INPUT_TOKEN"
        );

        bytes32 key =
            keyOf(
                IModule(uint160(module)),
                IERC20(inputToken),
                owner,
                witness,
                data
            );

        ethDeposits[key] = ethDeposits[key].add(msg.value);
        emit DepositETH(key, msg.sender, msg.value, _data);
    }

    /**
     * @notice Cancel order
     * @dev The params should be the same used for the order creation
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     */
    function cancelOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        address _witness,
        bytes calldata _data
    ) external {
        require(msg.sender == _owner, "PineCore#cancelOrder: INVALID_OWNER");
        bytes32 key = keyOf(_module, _inputToken, _owner, _witness, _data);

        uint256 amount = _pullOrder(_inputToken, key, msg.sender);

        emit OrderCancelled(
            key,
            address(_inputToken),
            _owner,
            _witness,
            _data,
            amount
        );
    }

    /**
     * @notice Get the calldata needed to create a token to token/ETH order
     * @dev Returns the input data that the user needs to use to create the order
     * The _secret is used to prevent a front-running at the order execution
     * The _amount is used as the param `_value` for the ERC20 `transfer` function
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     * @param _secret - Private key of the _witness
     * @param _amount - uint256 of the order amount
     * @return bytes - input data to send the transaction
     */
    function encodeTokenOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        address _witness,
        bytes calldata _data,
        bytes32 _secret,
        uint256 _amount
    ) external view returns (bytes memory) {
        return
            abi.encodeWithSelector(
                _inputToken.transfer.selector,
                vaultOfOrder(_module, _inputToken, _owner, _witness, _data),
                _amount,
                abi.encode(
                    _module,
                    _inputToken,
                    _owner,
                    _witness,
                    _data,
                    _secret
                )
            );
    }

    /**
     * @notice Get the calldata needed to create a ETH to token order
     * @dev Returns the input data that the user needs to use to create the order
     * The _secret is used to prevent a front-running at the order execution
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     * @param _secret -  Private key of the _witness
     * @return bytes - input data to send the transaction
     */
    function encodeEthOrder(
        address _module,
        address _inputToken,
        address payable _owner,
        address _witness,
        bytes calldata _data,
        bytes32 _secret
    ) external pure returns (bytes memory) {
        return
            abi.encode(_module, _inputToken, _owner, _witness, _data, _secret);
    }

    /**
     * @notice Get order's properties
     * @param _data - Bytes of the order
     * @return module - Address of the module to use for the order execution
     * @return inputToken - Address of the input token
     * @return owner - Address of the order's owner
     * @return witness - Address of the witness
     * @return data - Bytes of the order's data
     * @return secret -  Private key of the _witness
     */
    function decodeOrder(bytes memory _data)
        public
        pure
        returns (
            address module,
            address inputToken,
            address payable owner,
            address witness,
            bytes memory data,
            bytes32 secret
        )
    {
        (module, inputToken, owner, witness, data, secret) = abi.decode(
            _data,
            (address, address, address, address, bytes, bytes32)
        );
    }

    /**
     * @notice Get the vault's address of a token to token/ETH order
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     * @return address - The address of the vault
     */
    function vaultOfOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        address _witness,
        bytes memory _data
    ) public view returns (address) {
        return keyOf(_module, _inputToken, _owner, _witness, _data).getVault();
    }

    /**
     * @notice Executes an order
     * @dev The sender should use the _secret to sign its own address
     * to prevent front-runnings
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _data - Bytes of the order's data
     * @param _signature - Signature to calculate the witness
     * @param _auxData - Bytes of the auxiliar data used for the handlers to execute the order
     */
    function executeOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        bytes calldata _data,
        bytes calldata _signature,
        bytes calldata _auxData
    ) public virtual {
        // Calculate witness using signature
        address witness =
            ECDSA.recover(keccak256(abi.encodePacked(msg.sender)), _signature);

        bytes32 key = keyOf(_module, _inputToken, _owner, witness, _data);

        // Pull amount
        uint256 amount = _pullOrder(_inputToken, key, address(_module));
        require(amount > 0, "PineCore#executeOrder: INVALID_ORDER");

        uint256 bought =
            _module.execute(_inputToken, amount, _owner, _data, _auxData);

        emit OrderExecuted(
            key,
            address(_inputToken),
            _owner,
            witness,
            _data,
            _auxData,
            amount,
            bought
        );
    }

    /**
     * @notice Check whether an order exists or not
     * @dev Check the balance of the order
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     * @return bool - whether the order exists or not
     */
    function existOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        address _witness,
        bytes calldata _data
    ) external view returns (bool) {
        bytes32 key = keyOf(_module, _inputToken, _owner, _witness, _data);

        if (address(_inputToken) == ETH_ADDRESS) {
            return ethDeposits[key] != 0;
        } else {
            return _inputToken.balanceOf(key.getVault()) != 0;
        }
    }

    /**
     * @notice Check whether an order can be executed or not
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     * @param _auxData - Bytes of the auxiliar data used for the handlers to execute the order
     * @return bool - whether the order can be executed or not
     */
    function canExecuteOrder(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        address _witness,
        bytes calldata _data,
        bytes calldata _auxData
    ) external view returns (bool) {
        bytes32 key = keyOf(_module, _inputToken, _owner, _witness, _data);

        // Pull amount
        uint256 amount;
        if (address(_inputToken) == ETH_ADDRESS) {
            amount = ethDeposits[key];
        } else {
            amount = _inputToken.balanceOf(key.getVault());
        }

        return _module.canExecute(_inputToken, amount, _data, _auxData);
    }

    /**
     * @notice Transfer the order amount to a recipient.
     * @dev For an ETH order, the ETH will be transferred from this contract
     * For a token order, its vault will be executed transferring the amount of tokens to
     * the recipient
     * @param _inputToken - Address of the input token
     * @param _key - Order's key
     * @param _to - Address of the recipient
     * @return amount - amount transferred
     */
    function _pullOrder(
        IERC20 _inputToken,
        bytes32 _key,
        address payable _to
    ) private returns (uint256 amount) {
        if (address(_inputToken) == ETH_ADDRESS) {
            amount = ethDeposits[_key];
            ethDeposits[_key] = 0;
            (bool success, ) = _to.call{value: amount}("");
            require(success, "PineCore#_pullOrder: PULL_ETHER_FAILED");
        } else {
            amount = _key.executeVault(_inputToken, _to);
        }
    }

    /**
     * @notice Get the order's key
     * @param _module - Address of the module to use for the order execution
     * @param _inputToken - Address of the input token
     * @param _owner - Address of the order's owner
     * @param _witness - Address of the witness
     * @param _data - Bytes of the order's data
     * @return bytes32 - order's key
     */
    function keyOf(
        IModule _module,
        IERC20 _inputToken,
        address payable _owner,
        address _witness,
        bytes memory _data
    ) public pure returns (bytes32) {
        return
            keccak256(
                abi.encode(_module, _inputToken, _owner, _witness, _data)
            );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_gelato","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_key","type":"bytes32"},{"indexed":true,"internalType":"address","name":"_caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"}],"name":"DepositETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_key","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_inputToken","type":"address"},{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"address","name":"_witness","type":"address"},{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_key","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_inputToken","type":"address"},{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"address","name":"_witness","type":"address"},{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"_auxData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_bought","type":"uint256"}],"name":"OrderExecuted","type":"event"},{"inputs":[],"name":"ETH_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GELATO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_auxData","type":"bytes"}],"name":"canExecuteOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"decodeOrder","outputs":[{"internalType":"address","name":"module","type":"address"},{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"address payable","name":"owner","type":"address"},{"internalType":"address","name":"witness","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"secret","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"depositEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_module","type":"address"},{"internalType":"address","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes32","name":"_secret","type":"bytes32"}],"name":"encodeEthOrder","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes32","name":"_secret","type":"bytes32"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"encodeTokenOrder","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"ethDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"bytes","name":"_auxData","type":"bytes"}],"name":"executeOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"existOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"keyOf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IModule","name":"_module","type":"address"},{"internalType":"contract IERC20","name":"_inputToken","type":"address"},{"internalType":"address payable","name":"_owner","type":"address"},{"internalType":"address","name":"_witness","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"vaultOfOrder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405234801561001057600080fd5b506040516120443803806120448339818101604052602081101561003357600080fd5b5051606081901b6001600160601b0319166080526001600160a01b0316611fd861006c600039806113ce528061158a5250611fd86000f3fe6080604052600436106100c55760003560e01c8063b4c075471161007f578063e55060c511610059578063e55060c51461084e578063e8ecb1301461098a578063ebd9c39c14610a2d578063eff557a714610a575761010b565b8063b4c0754714610534578063d6fc0263146106a4578063d7665a48146107ab5761010b565b806286f48f146101105780630d7cf2ad1461020557806313a76c4c146102f05780632bd470d31461035e57806345d0508b14610476578063a734f06e1461051f5761010b565b3661010b57333214156101095760405162461bcd60e51b8152600401808060200182810382526024815260200180611f7f6024913960400191505060405180910390fd5b005b600080fd5b34801561011c57600080fd5b506101e9600480360360a081101561013357600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b81111561017557600080fd5b82018360208201111561018757600080fd5b803590602001918460018302840111600160201b831117156101a857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a6c945050505050565b604080516001600160a01b039092168252519081900360200190f35b34801561021157600080fd5b506102de600480360360a081101561022857600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b81111561026a57600080fd5b82018360208201111561027c57600080fd5b803590602001918460018302840111600160201b8311171561029d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a8d945050505050565b60408051918252519081900360200190f35b6101096004803603602081101561030657600080fd5b810190602081018135600160201b81111561032057600080fd5b82018360208201111561033257600080fd5b803590602001918460018302840111600160201b8311171561035357600080fd5b509092509050610b67565b34801561036a57600080fd5b50610401600480360360c081101561038157600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b8111156103c357600080fd5b8201836020820111156103d557600080fd5b803590602001918460018302840111600160201b831117156103f657600080fd5b919350915035610d24565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561043b578181015183820152602001610423565b50505050905090810190601f1680156104685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561048257600080fd5b50610401600480360360e081101561049957600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b8111156104db57600080fd5b8201836020820111156104ed57600080fd5b803590602001918460018302840111600160201b8311171561050e57600080fd5b919350915080359060200135610dc9565b34801561052b57600080fd5b506101e9610f78565b34801561054057600080fd5b506105e56004803603602081101561055757600080fd5b810190602081018135600160201b81111561057157600080fd5b82018360208201111561058357600080fd5b803590602001918460018302840111600160201b831117156105a457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f90945050505050565b60405180876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b0316815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561066457818101518382015260200161064c565b50505050905090810190601f1680156106915780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b3480156106b057600080fd5b50610797600480360360c08110156106c757600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b81111561070957600080fd5b82018360208201111561071b57600080fd5b803590602001918460018302840111600160201b8311171561073c57600080fd5b919390929091602081019035600160201b81111561075957600080fd5b82018360208201111561076b57600080fd5b803590602001918460018302840111600160201b8311171561078c57600080fd5b509092509050611091565b604080519115158252519081900360200190f35b3480156107b757600080fd5b50610109600480360360a08110156107ce57600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b81111561081057600080fd5b82018360208201111561082257600080fd5b803590602001918460018302840111600160201b8311171561084357600080fd5b509092509050611289565b34801561085a57600080fd5b50610109600480360360c081101561087157600080fd5b6001600160a01b0382358116926020810135821692604082013590921691810190608081016060820135600160201b8111156108ac57600080fd5b8201836020820111156108be57600080fd5b803590602001918460018302840111600160201b831117156108df57600080fd5b919390929091602081019035600160201b8111156108fc57600080fd5b82018360208201111561090e57600080fd5b803590602001918460018302840111600160201b8311171561092f57600080fd5b919390929091602081019035600160201b81111561094c57600080fd5b82018360208201111561095e57600080fd5b803590602001918460018302840111600160201b8311171561097f57600080fd5b5090925090506113cc565b34801561099657600080fd5b50610797600480360360a08110156109ad57600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013516919081019060a081016080820135600160201b8111156109ef57600080fd5b820183602082011115610a0157600080fd5b803590602001918460018302840111600160201b83111715610a2257600080fd5b509092509050611465565b348015610a3957600080fd5b506102de60048036036020811015610a5057600080fd5b5035611576565b348015610a6357600080fd5b506101e9611588565b6000610a83610a7e8787878787610a8d565b6115ac565b9695505050505050565b6000858585858560405160200180866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b10578181015183820152602001610af8565b50505050905090810190601f168015610b3d5780820380516001836020036101000a031916815260200191505b50965050505050505060405160208183030381529060405280519060200120905095945050505050565b60003411610bbc576040805162461bcd60e51b815260206004820152601f60248201527f50696e65436f7265236465706f7369744574683a2056414c55455f49535f3000604482015290519081900360640190fd5b6000806000806060610c0387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f9092505050565b509450945094509450945073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0316846001600160a01b031614610c725760405162461bcd60e51b8152600401808060200182810382526026815260200180611eee6026913960400191505060405180910390fd5b6000610c818686868686610a8d565b600081815260208190526040902054909150610c9d9034611617565b60008281526020818152604091829020929092558051348082529281018281529181018a9052339284927f294738b98bcebacf616fd72532d3d8d8d229807bf03b68b25681bfbbdb3d3fe5928d918d919060608201848480828437600083820152604051601f909101601f1916909201829003965090945050505050a35050505050505050565b60608787878787878760405160200180886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b0316815260200180602001838152602001828103825285858281815260200192508082843760008382015260408051601f909201601f19908116909401828103909401825292909252509950505050505050505050979650505050505050565b606063a9059cbb60e01b610e168a8a8a8a8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a6c92505050565b838b8b8b8b8b8b8b60405160200180886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b03168152602001806020018381526020018281038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509850505050505050505060405160208183030381529060405260405160240180846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610f04578181015183820152602001610eec565b50505050905090810190601f168015610f315780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990981697909717909652509394505050505098975050505050505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b600080600080606060008680602001905160c0811015610faf57600080fd5b8151602083015160408085015160608601516080870180519351959794969295919491939282019284600160201b821115610fe957600080fd5b908301906020820185811115610ffe57600080fd5b8251600160201b81118282018810171561101757600080fd5b82525081516020918201929091019080838360005b8381101561104457818101518382015260200161102c565b50505050905090810190601f1680156110715780820380516001836020036101000a031916815260200191505b5060405260200151969e959d50939b509199509750929550909350505050565b6000806110d78a8a8a8a8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a8d92505050565b905060006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156111155750600081815260208190526040902054611199565b896001600160a01b03166370a0823161112d846115ac565b6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561116a57600080fd5b505afa15801561117e573d6000803e3d6000fd5b505050506040513d602081101561119457600080fd5b505190505b8a6001600160a01b031663fd516dab8b838a8a8a8a6040518763ffffffff1660e01b815260040180876001600160a01b0316815260200186815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f8201169050808301925050509850505050505050505060206040518083038186803b15801561124e57600080fd5b505afa158015611262573d6000803e3d6000fd5b505050506040513d602081101561127857600080fd5b50519b9a5050505050505050505050565b336001600160a01b038516146112d05760405162461bcd60e51b8152600401808060200182810382526023815260200180611f3a6023913960400191505060405180910390fd5b60006113158787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a8d92505050565b90506000611324878333611678565b9050817f2063eea53914d2615730712acb14000b23d3e8ae6ab97b9beff35f05b7bba15188888888888760405180876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b03168152602001806020018381526020018281038252858582818152602001925080828437600083820152604051601f909101601f1916909201829003995090975050505050505050a25050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314611449576040805162461bcd60e51b815260206004820152601a60248201527f47656c61746f50696e65436f72653a206f6e6c7947656c61746f000000000000604482015290519081900360640190fd5b61145a89898989898989898961175d565b505050505050505050565b6000806114ab8888888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a8d92505050565b90506001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156114ea5760009081526020819052604090205415159050610a83565b866001600160a01b03166370a08231611502836115ac565b6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561153f57600080fd5b505afa158015611553573d6000803e3d6000fd5b505050506040513d602081101561156957600080fd5b505115159150610a839050565b60006020819052908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516001600160f81b03196020808301919091523060601b602183015260358201939093527ffa3da1081bc86587310fce8f3a5309785fc567b9b20875900cb289302d6bfa97605580830191909152825180830390910181526075909101909152805191012090565b600082820183811015611671576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561174a575060008281526020819052604080822080549083905590519091906001600160a01b0384169083908381818185875af1925050503d80600081146116ff576040519150601f19603f3d011682016040523d82523d6000602084013e611704565b606091505b50509050806117445760405162461bcd60e51b8152600401808060200182810382526026815260200180611f146026913960400191505060405180910390fd5b50611671565b611755838584611a4e565b949350505050565b60006117d13360405160200180826001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cc692505050565b905060006118188b8b8b858c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a8d92505050565b905060006118278b838e611678565b9050600081116118685760405162461bcd60e51b8152600401808060200182810382526024815260200180611ea86024913960400191505060405180910390fd5b60008c6001600160a01b031663e7ed35e38d848e8e8e8c8c6040518863ffffffff1660e01b815260040180886001600160a01b03168152602001878152602001866001600160a01b0316815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f8201169050808301925050509950505050505050505050602060405180830381600087803b15801561193257600080fd5b505af1158015611946573d6000803e3d6000fd5b505050506040513d602081101561195c57600080fd5b81019080805190602001909291905050509050827f56afc5839271b796eaa6426e31b9ad823d483abb96183586e52970a9602b39058d8d878e8e8c8c8a8a604051808a6001600160a01b03168152602001896001600160a01b03168152602001886001600160a01b0316815260200180602001806020018581526020018481526020018381038352898982818152602001925080828437600083820152601f01601f191690910184810383528781526020019050878780828437600083820152604051601f909101601f19169092018290039d50909b505050505050505050505050a250505050505050505050505050565b60008060606040518060400160405280601c81526020017f6012600081600a8239f360008060448082803781806038355af132ff000000008152509050858151602083016000f59150846001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611ae457600080fd5b505afa158015611af8573d6000803e3d6000fd5b505050506040513d6020811015611b0e57600080fd5b5051604080516001600160a01b03878116602483015260448083018590528351808403909101815260649092018352602082810180516001600160e01b031663a9059cbb60e01b17815293518351959850600095928816948b93919092019182918083835b60208310611b925780518252601f199092019160209182019101611b73565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310611c085780518252601f199092019160209182019101611be9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611c6a576040519150601f19603f3d011682016040523d82523d6000602084013e611c6f565b606091505b5050905080611cbc576040805162461bcd60e51b81526020600482015260146024820152734572726f722070756c6c696e6720746f6b656e7360601b604482015290519081900360640190fd5b5050509392505050565b60008151604114611d1e576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611d8f5760405162461bcd60e51b8152600401808060200182810382526022815260200180611ecc6022913960400191505060405180910390fd5b8060ff16601b14158015611da757508060ff16601c14155b15611de35760405162461bcd60e51b8152600401808060200182810382526022815260200180611f5d6022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611e3f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610a83576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fdfe50696e65436f726523657865637574654f726465723a20494e56414c49445f4f5244455245434453413a20696e76616c6964207369676e6174757265202773272076616c756550696e65436f7265236465706f7369744574683a2057524f4e475f494e5055545f544f4b454e50696e65436f7265235f70756c6c4f726465723a2050554c4c5f45544845525f4641494c454450696e65436f72652363616e63656c4f726465723a20494e56414c49445f4f574e455245434453413a20696e76616c6964207369676e6174757265202776272076616c756550696e65436f726523726563656976653a204e4f5f53454e445f4554485f504c45415345a264697066735822122039c94aae189c78d2bbe1139a3c9dcaf0c37268b05ac68626127e715bf1466ab564736f6c634300060c0033000000000000000000000000eba27a2301975ff5bf7864b99f55a4f7a457ed10

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

000000000000000000000000eba27a2301975ff5bf7864b99f55a4f7a457ed10

-----Decoded View---------------
Arg [0] : _gelato (address): 0xeba27a2301975ff5bf7864b99f55a4f7a457ed10

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000eba27a2301975ff5bf7864b99f55a4f7a457ed10


Deployed ByteCode Sourcemap

313:736:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22457:10:1;22471:9;22457:23;;22436:106;;;;-1:-1:-1;;;22436:106:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;313:736:0;;;;;28236:284:1;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28236:284:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28236:284:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28236:284:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28236:284:1;;-1:-1:-1;28236:284:1;;-1:-1:-1;;;;;28236:284:1:i;:::-;;;;-1:-1:-1;;;;;28236:284:1;;;;;;;;;;;;;;33362:324;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33362:324:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33362:324:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33362:324:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33362:324:1;;-1:-1:-1;33362:324:1;;-1:-1:-1;;;;;33362:324:1:i;:::-;;;;;;;;;;;;;;;;22704:778;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22704:778:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22704:778:1;;;;;;;;;;-1:-1:-1;22704:778:1;;-1:-1:-1;22704:778:1;-1:-1:-1;22704:778:1;:::i;26587:336::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26587:336:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26587:336:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26587:336:1;;;;;;;;;;;;-1:-1:-1;26587:336:1;-1:-1:-1;26587:336:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25242:703;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25242:703:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25242:703:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25242:703:1;;;;;;;;;;;;-1:-1:-1;25242:703:1;-1:-1:-1;25242:703:1;;;;;;;:::i;21266:99::-;;;;;;;;;;;;;:::i;27357:458::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27357:458:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27357:458:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27357:458:1;;-1:-1:-1;27357:458:1;;-1:-1:-1;;;;;27357:458:1:i;:::-;;;;;-1:-1:-1;;;;;27357:458:1;;;;;;-1:-1:-1;;;;;27357:458:1;;;;;;-1:-1:-1;;;;;27357:458:1;;;;;;-1:-1:-1;;;;;27357:458:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31441:616;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31441:616:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31441:616:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31441:616:1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31441:616:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31441:616:1;;;;;;;;;;-1:-1:-1;31441:616:1;;-1:-1:-1;31441:616:1;-1:-1:-1;31441:616:1;:::i;:::-;;;;;;;;;;;;;;;;;;23882:578;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23882:578:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23882:578:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23882:578:1;;;;;;;;;;-1:-1:-1;23882:578:1;;-1:-1:-1;23882:578:1;-1:-1:-1;23882:578:1;:::i;633:414:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;633:414:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;633:414:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;633:414:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;633:414:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;633:414:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;633:414:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;633:414:0;;;;;;;;;;-1:-1:-1;633:414:0;;-1:-1:-1;633:414:0;-1:-1:-1;633:414:0;:::i;30457:463:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30457:463:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30457:463:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30457:463:1;;;;;;;;;;-1:-1:-1;30457:463:1;;-1:-1:-1;30457:463:1;-1:-1:-1;30457:463:1;:::i;21688:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21688:46:1;;:::i;407:31:0:-;;;;;;;;;;;;;:::i;28236:284:1:-;28424:7;28450:63;:52;28456:7;28465:11;28478:6;28486:8;28496:5;28450;:52::i;:::-;:61;:63::i;:::-;28443:70;28236:284;-1:-1:-1;;;;;;28236:284:1:o;33362:324::-;33543:7;33619;33628:11;33641:6;33649:8;33659:5;33608:57;;;;;;-1:-1:-1;;;;;33608:57:1;;;;;;-1:-1:-1;;;;;33608:57:1;;;;;;-1:-1:-1;;;;;33608:57:1;;;;;;-1:-1:-1;;;;;33608:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33581:98;;;;;;33562:117;;33362:324;;;;;;;:::o;22704:778::-;22793:1;22781:9;:13;22773:57;;;;;-1:-1:-1;;;22773:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;22855:14;22883:18;22915:21;22950:15;22979:17;23011:18;23023:5;;23011:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23011:11:1;;-1:-1:-1;;;23011:18:1:i;:::-;22841:188;;;;;;;;;;;21320:44;-1:-1:-1;;;;;23061:25:1;:10;-1:-1:-1;;;;;23061:25:1;;23040:110;;;;-1:-1:-1;;;23040:110:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23161:11;23187:167;23226:6;23259:10;23288:5;23311:7;23336:4;23187:5;:167::i;:::-;23384:11;:16;;;;;;;;;;;23161:193;;-1:-1:-1;23384:31:1;;23405:9;23384:20;:31::i;:::-;23365:11;:16;;;;;;;;;;;;:50;;;;23430:45;;23458:9;23430:45;;;;;;;;;;;;;;;23446:10;;23377:3;;23430:45;;23469:5;;;;23430:45;;;;23469:5;;;;23430:45;;;;;;;;;;;;;-1:-1:-1;;23430:45:1;;;;;;;;-1:-1:-1;23430:45:1;;-1:-1:-1;;;;;23430:45:1;22704:778;;;;;;;;:::o;26587:336::-;26807:12;26861:7;26870:11;26883:6;26891:8;26901:5;;26908:7;26850:66;;;;;;-1:-1:-1;;;;;26850:66:1;;;;;;-1:-1:-1;;;;;26850:66:1;;;;;;-1:-1:-1;;;;;26850:66:1;;;;;;-1:-1:-1;;;;;26850:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26850:66:1;;;;;;;;;;;;;;;;;;-1:-1:-1;26850:66:1;-1:-1:-1;;;;;;;;;;26587:336:1;;;;;;;;;:::o;25242:703::-;25488:12;25571:29;;;25618:59;25631:7;25640:11;25653:6;25661:8;25671:5;;25618:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25618:12:1;;-1:-1:-1;;;25618:59:1:i;:::-;25695:7;25752;25781:11;25814:6;25842:8;25872:5;;25899:7;25720:204;;;;;;-1:-1:-1;;;;;25720:204:1;;;;;;-1:-1:-1;;;;;25720:204:1;;;;;;-1:-1:-1;;;;;25720:204:1;;;;;;-1:-1:-1;;;;;25720:204:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25531:407;;;;;;-1:-1:-1;;;;;25531:407:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25531:407:1;;;-1:-1:-1;;25531:407:1;;;;;;;;;;;;;;-1:-1:-1;;;;;25531:407:1;-1:-1:-1;;;;;;25531:407:1;;;;;;;;;;-1:-1:-1;25531:407:1;;-1:-1:-1;;;;;25242:703:1;;;;;;;;;;:::o;21266:99::-;21320:44;21266:99;:::o;27357:458::-;27456:14;27484:18;27516:21;27551:15;27580:17;27611:14;27727:5;27703:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27703:105:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27703:105:1;;;;;;-1:-1:-1;27703:105:1;;;;;;;;;;-1:-1:-1;27703:105:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27703:105:1;;;;;27650:158;;;;-1:-1:-1;27650:158:1;;-1:-1:-1;27650:158:1;;-1:-1:-1;27650:158:1;-1:-1:-1;27703:105:1;;-1:-1:-1;27357:458:1;;-1:-1:-1;;;;27357:458:1:o;31441:616::-;31669:4;31685:11;31699:52;31705:7;31714:11;31727:6;31735:8;31745:5;;31699:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31699:5:1;;-1:-1:-1;;;31699:52:1:i;:::-;31685:66;-1:-1:-1;31785:14:1;-1:-1:-1;;;;;31813:35:1;;21320:44;31813:35;31809:168;;;-1:-1:-1;31873:11:1;:16;;;;;;;;;;;31809:168;;;31929:11;-1:-1:-1;;;;;31929:21:1;;31951:14;:3;:12;:14::i;:::-;31929:37;;;;;;;;;;;;;-1:-1:-1;;;;;31929:37:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31929:37:1;;-1:-1:-1;31809:168:1;31994:7;-1:-1:-1;;;;;31994:18:1;;32013:11;32026:6;32034:5;;32041:8;;31994:56;;;;;;;;;;;;;-1:-1:-1;;;;;31994:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31994:56:1;;;;;;;;;;;;;;;-1:-1:-1;31994:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31994:56:1;;31441:616;-1:-1:-1;;;;;;;;;;;31441:616:1:o;23882:578::-;24077:10;-1:-1:-1;;;;;24077:20:1;;;24069:68;;;;-1:-1:-1;;;24069:68:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24147:11;24161:52;24167:7;24176:11;24189:6;24197:8;24207:5;;24161:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24161:5:1;;-1:-1:-1;;;24161:52:1:i;:::-;24147:66;;24224:14;24241:40;24252:11;24265:3;24270:10;24241;:40::i;:::-;24224:57;;24325:3;24297:156;24350:11;24376:6;24396:8;24418:5;;24437:6;24297:156;;;;-1:-1:-1;;;;;24297:156:1;;;;;;-1:-1:-1;;;;;24297:156:1;;;;;;-1:-1:-1;;;;;24297:156:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24297:156:1;;;;;;;;-1:-1:-1;24297:156:1;;-1:-1:-1;;;;;;;;24297:156:1;23882:578;;;;;;;;:::o;633:414:0:-;558:6;-1:-1:-1;;;;;558:20:0;568:10;558:20;550:59;;;;;-1:-1:-1;;;550:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;881:159:::1;913:7;934:11;959:6;979:5;;998:10;;1022:8;;881:18;:159::i;:::-;633:414:::0;;;;;;;;;:::o;30457:463:1:-;30647:4;30663:11;30677:52;30683:7;30692:11;30705:6;30713:8;30723:5;;30677:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30677:5:1;;-1:-1:-1;;;30677:52:1:i;:::-;30663:66;-1:-1:-1;;;;;;30744:35:1;;21320:44;30744:35;30740:174;;;30802:11;:16;;;;;;;;;;;:21;;;-1:-1:-1;30795:28:1;;30740:174;30861:11;-1:-1:-1;;;;;30861:21:1;;30883:14;:3;:12;:14::i;:::-;30861:37;;;;;;;;;;;;;-1:-1:-1;;;;;30861:37:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30861:37:1;:42;;;-1:-1:-1;30854:49:1;;-1:-1:-1;30854:49:1;21688:46;;;;;;;;;;;;;;:::o;407:31:0:-;;;:::o;18298:447:1:-;18480:204;;;-1:-1:-1;;;;;;18480:204:1;;;;;;;;18576:4;18480:204;;;;;;;;;;;;;18159:66;18480:204;;;;;;;;;;;;;;;;;;;;;;;;;18445:261;;;;;;18298:447::o;4618:176::-;4676:7;4707:5;;;4730:6;;;;4722:46;;;;;-1:-1:-1;;;4722:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;4786:1;4618:176;-1:-1:-1;;;4618:176:1:o;32500:488::-;32622:14;-1:-1:-1;;;;;32652:35:1;;21320:44;32652:35;32648:334;;;-1:-1:-1;32712:11:1;:17;;;;;;;;;;;;;32743:21;;;;32797:27;;32712:17;;:11;-1:-1:-1;;;;;32797:8:1;;;32712:17;;:11;32797:27;32712:11;32797:27;32712:17;32797:8;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32778:46;;;32846:7;32838:58;;;;-1:-1:-1;;;32838:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32648:334;;;;32936:35;:4;32954:11;32967:3;32936:17;:35::i;:::-;32927:44;32500:488;-1:-1:-1;;;;32500:488:1:o;29067:939::-;29348:15;29378:66;29419:10;29402:28;;;;;;-1:-1:-1;;;;;29402:28:1;;;;;;;;;;;;;;;;;;;;;;29392:39;;;;;;29433:10;;29378:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29378:13:1;;-1:-1:-1;;;29378:66:1:i;:::-;29348:96;;29455:11;29469:51;29475:7;29484:11;29497:6;29505:7;29514:5;;29469:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29469:5:1;;-1:-1:-1;;;29469:51:1:i;:::-;29455:65;;29554:14;29571:46;29582:11;29595:3;29608:7;29571:10;:46::i;:::-;29554:63;;29644:1;29635:6;:10;29627:59;;;;-1:-1:-1;;;29627:59:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29697:14;29726:7;-1:-1:-1;;;;;29726:15:1;;29742:11;29755:6;29763;29771:5;;29778:8;;29726:61;;;;;;;;;;;;;-1:-1:-1;;;;;29726:61:1;;;;;;;;;;;-1:-1:-1;;;;;29726:61:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29726:61:1;;;;;;;;;;;;;;;-1:-1:-1;29726:61:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29697:90;;29830:3;29803:196;29855:11;29881:6;29901:7;29922:5;;29941:8;;29963:6;29983;29803:196;;;;-1:-1:-1;;;;;29803:196:1;;;;;;-1:-1:-1;;;;;29803:196:1;;;;;;-1:-1:-1;;;;;29803:196:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29803:196:1;;;;;;;;;;;;;;;-1:-1:-1;29803:196:1;;;;;;;;;;;;;;;;;-1:-1:-1;;29803:196:1;;;;;;;;-1:-1:-1;29803:196:1;;-1:-1:-1;;;;;;;;;;;;29803:196:1;29067:939;;;;;;;;;;;;;:::o;18807:863::-;18919:13;18944:12;18966:21;18990:4;;;;;;;;;;;;;;;;;18966:28;;19189:4;19178:8;19172:15;19165:4;19155:8;19151:19;19148:1;19140:54;19132:62;;19222:6;-1:-1:-1;;;;;19222:16:1;;19239:4;19222:22;;;;;;;;;;;;;-1:-1:-1;;;;;19222:22:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19222:22:1;19389:154;;;-1:-1:-1;;;;;19389:154:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19222:22;19389:154;;;;;-1:-1:-1;;;;;19389:154:1;-1:-1:-1;;;19389:154:1;;;19351:247;;;;19222:22;;-1:-1:-1;19294:12:1;;19324:9;;;;19573:6;;19351:247;;;;;;;;;19389:154;19351:247;;;;;;;;;;-1:-1:-1;;19351:247:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19351:247:1;;;;;;;;;;;;;;;;;;;;;;;19324:288;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19324:288:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19293:319;;;19631:7;19623:40;;;;;-1:-1:-1;;;19623:40:1;;;;;;;;;;;;-1:-1:-1;;;19623:40:1;;;;;;;;;;;;;;;18807:863;;;;;;;;:::o;10028:2130::-;10130:7;10195:9;:16;10215:2;10195:22;10191:94;;10233:41;;;-1:-1:-1;;;10233:41:1;;;;;;;;;;;;;;;;;;;;;;;;;;;10191:94;10635:4;10620:20;;10614:27;10680:4;10665:20;;10659:27;10733:4;10718:20;;10712:27;10351:9;10704:36;11676:66;11651:91;;11634:188;;;11767:44;;-1:-1:-1;;;11767:44:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11634:188;11836:1;:7;;11841:2;11836:7;;:18;;;;;11847:1;:7;;11852:2;11847:7;;11836:18;11832:93;;;11870:44;;-1:-1:-1;;;11870:44:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11832:93;12019:14;12036:24;12046:4;12052:1;12055;12058;12036:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12036:24:1;;-1:-1:-1;;12036:24:1;;;-1:-1:-1;;;;;;;12078:20:1;;12070:57;;;;;-1:-1:-1;;;12070:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://39c94aae189c78d2bbe1139a3c9dcaf0c37268b05ac68626127e715bf1466ab5
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.