Contract 0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c

Contract Overview

Balance:
0 FTM

FTM Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x89218a0191f0fcd4db7db5908aa10a399e15918462481fb85d76d9dfeaf0d9e2Convert Multiple190361532021-10-13 23:58:232 days 50 mins ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.7399778736
0xc2641301d06d4a2a551dc99cb5b1b65b51cf23f3fc439c11b1cee7b7bf48b504Convert190360972021-10-13 23:57:112 days 51 mins ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.0642941368
0xa3f2878cb1955f023228d6a521f1731387f56632096edff4c50e9dcaff863cafConvert Multiple190353622021-10-13 23:44:392 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.172308966911
0xe1a173cb0e56189e9314bba91f25250b33df4aa52100d506001f24b654020546Convert Multiple190352042021-10-13 23:42:212 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.376217121704
0x81c2eff3c049a8b7ef244d4f28246c2e9406d3e2b05107bdc26b8172e6c1d2d8Convert190340872021-10-13 23:25:462 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.062918311673
0xd9711c4d208fa5ba4a4c8e950304b5a70226739d595920a24d25bd0c181eb817Convert Multiple190336382021-10-13 23:18:562 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.425431056473
0xb7d4541718d8ccb5287f81d546026c090f4b81b34173d3decc014a9c29af9729Convert Multiple190336192021-10-13 23:18:392 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.652691063543
0x23786c24561c0a4c0a6d343ffad4c42f33b031ad0d35048f843bf629e73b641eConvert Multiple190335912021-10-13 23:18:182 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.603582537968
0x42f4bea9d0bea235202bb3b29b4809b5ef330f556a2ba1b8dd77025f15271ed3Convert Multiple190335812021-10-13 23:18:102 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.552596687271
0x5a42ac90b17f2e085f075808e723c8480c25d0150084db40143e9842c419e221Convert Multiple190335532021-10-13 23:17:482 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.537330346798
0xa817f52595c3ff5affbaf69e75c227761e6726491fc6c695d66a4c864eac3d07Convert Multiple186165122021-10-08 18:49:477 days 5 hrs ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.791699305377
0x46804cd9f347b4bc1ed329e939b6d906e95eb255a8274e4e4cbe1d2365badb53Convert Multiple184705302021-10-06 23:02:159 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM1.700784971654
0xb47a4a632c9029147e7ff22be4ee511512ab4c1d4ed568662b0c49335f7937ffConvert Multiple184705022021-10-06 23:01:349 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM2.535473117894
0xf88d72768ba79d8c0bee3596d5927781b3febda6616b6946408f24fa4bee34b9Convert Multiple184704852021-10-06 23:01:139 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM2.342703395577
0x1cb0cebb2b82e56dda51a165655dbd775de12bf1cce58f91f0425d38c7e61cd4Convert Multiple184704592021-10-06 23:00:499 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM2.133507176121
0x2a4bdeda27db295f940a4e99d51b52e80fd14562da5a3b9e2bfcd9e18becca4eConvert Multiple184704342021-10-06 23:00:279 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM1.969283070897
0xd1355fd2d8da046b93e5ddf01d545232f4a77683e64e004f70a68d335edf9f2cConvert Multiple179572662021-09-29 23:19:4616 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.20236135932
0x0521368e804650e1051f1bf6d4a01bf2b1770cb8876255e46b769c6e29e9e184Convert Multiple179572522021-09-29 23:19:1716 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.308101813656
0xa8624f58f49eea34e6b877541953756e406b8dda113ae644f250835cbd7322e0Convert Multiple179572392021-09-29 23:19:0016 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.276349493803
0x56d3b6294492467e8eabcbf067525ede74c7c17f769cbb98c7b7ca093edd6ad0Convert Multiple179572162021-09-29 23:18:2616 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.251157081265
0xa5873d8f6ba9b80462a8167e7f5b692a0f9da30e6259125f4b6041995f61bb48Convert Multiple179571992021-09-29 23:18:0716 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.266079768481
0xd16d0d7de0a8d264b69f71b8885dace920c83bd510fc52690d0ed136860e7cb2Convert Multiple175125242021-09-22 23:10:0123 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.446282451592
0x540d68b03659e9f6eeeeb7a2d5d34d24dfb15fd29516cfcaa633831148a57f7cConvert Multiple175120172021-09-22 22:58:1723 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.630694826381
0xc3ede918bc0779aa9e99d8651a9a6f561b954e2e0d68aae2643b168277e83a60Convert Multiple175120012021-09-22 22:58:0223 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.580808581621
0x414fd288ab81f5218a68ce5376a8e75b3b3f026459564565aedd297fe9d94fb8Convert Multiple175119832021-09-22 22:57:3623 days 1 hr ago0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5 IN  0x5cec66f552b1d3406f65eb1a4a4914f448f98e9c0 FTM0.545111263556
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x80371c802f31e9b318da695075e9e883747e7068a89dbd35af538b837c366439155456332021-08-26 5:33:5650 days 19 hrs ago 0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SpiritMaker

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 8: BuyBackSpirit.sol
// SPDX-License-Identifier: MIT

// P1 - P3: OK
pragma solidity 0.6.12;
import "./SafeMath.sol";
import "./SafeERC20.sol";

import "./IUniswapV2ERC20.sol";
import "./IUniswapV2Pair.sol";
import "./IUniswapV2Factory.sol";

import "./Ownable.sol";

// SpiritMaker is MasterChef's left hand and kinda a wizard. He can cook up Spirit from pretty much anything!
// This contract handles "serving up" rewards for inSpirit holders by trading tokens collected from fees for Spirit.

// T1 - T4: OK
contract SpiritMaker is Ownable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    // V1 - V5: OK
    IUniswapV2Factory public immutable factory;
    // 0xEF45d134b73241eDa7703fa787148D9C9F4950b0
    // V1 - V5: OK
    address public immutable dest;
    // 0xD5A2a2d1d35724396bBB547554AD73b52C0f4993   -- Fee Distributor contract for inSPIRIT holders
    // V1 - V5: OK
    address private immutable spirit;
    // 0x5cc61a78f164885776aa610fb0fe1257df78e59b
    // V1 - V5: OK
    address private immutable wftm;
    // 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83

    // V1 - V5: OK
    mapping(address => address) internal _bridges;

    // E1: OK
    event LogBridgeSet(address indexed token, address indexed bridge);
    // E1: OK
    event LogConvert(
        address indexed server,
        address indexed token0,
        address indexed token1,
        uint256 amount0,
        uint256 amount1,
        uint256 amountSPIRIT
    );

    constructor(
        address _factory,
        address _dest,
        address _spirit,
        address _wftm
    ) public {
        factory = IUniswapV2Factory(_factory);
        dest = _dest;
        spirit = _spirit;
        wftm = _wftm;
    }

    // F1 - F10: OK
    // C1 - C24: OK
    function bridgeFor(address token) public view returns (address bridge) {
        bridge = _bridges[token];
        if (bridge == address(0)) {
            bridge = wftm;
        }
    }

    // F1 - F10: OK
    // C1 - C24: OK
    function setBridge(address token, address bridge) external onlyOwner {
        // Checks
        require(
            token != spirit && token != wftm && token != bridge,
            "SpiritMaker: Invalid bridge"
        );

        // Effects
        _bridges[token] = bridge;
        emit LogBridgeSet(token, bridge);
    }

    // M1 - M5: OK
    // C1 - C24: OK
    // C6: It's not a fool proof solution, but it prevents flash loans, so here it's ok to use tx.origin
    modifier onlyEOA() {
        // Try to make flash-loan exploit harder to do by only allowing externally owned addresses.
        require(msg.sender == tx.origin, "SpiritMaker: must use EOA");
        _;
    }

    // F1 - F10: OK
    // F3: _convert is separate to save gas by only checking the 'onlyEOA' modifier once in case of convertMultiple
    // F6: There is an exploit to add lots of SPIRIT to the dest, run convert, then remove the SPIRIT again.
    //     As the size of the SpiritDest has grown, this requires large amounts of funds and isn't super profitable anymore
    //     The onlyEOA modifier prevents this being done with a flash loan.
    // C1 - C24: OK
    function convert(address token0, address token1) external onlyEOA {
        _convert(token0, token1);
    }

    // F1 - F10: OK, see convert
    // C1 - C24: OK
    // C3: Loop is under control of the caller
    function convertMultiple(
        address[] calldata token0,
        address[] calldata token1
    ) external onlyEOA {
        // TODO: This can be optimized a fair bit, but this is safer and simpler for now
        uint256 len = token0.length;
        for (uint256 i = 0; i < len; i++) {
            _convert(token0[i], token1[i]);
        }
    }

    // F1 - F10: OK
    // C1- C24: OK
    function _convert(address token0, address token1) internal {
        // Interactions
        // S1 - S4: OK
        IUniswapV2Pair pair = IUniswapV2Pair(factory.getPair(token0, token1));
        require(address(pair) != address(0), "SpiritMaker: Invalid pair");
        // balanceOf: S1 - S4: OK
        // transfer: X1 - X5: OK
        IERC20(address(pair)).safeTransfer(
            address(pair),
            pair.balanceOf(address(this))
        );
        // X1 - X5: OK
        (uint256 amount0, uint256 amount1) = pair.burn(address(this));
        if (token0 != pair.token0()) {
            (amount0, amount1) = (amount1, amount0);
        }
        emit LogConvert(
            msg.sender,
            token0,
            token1,
            amount0,
            amount1,
            _convertStep(token0, token1, amount0, amount1)
        );
    }

    // F1 - F10: OK
    // C1 - C24: OK
    // All safeTransfer, _swap, _toSPIRIT, _convertStep: X1 - X5: OK
    function _convertStep(
        address token0,
        address token1,
        uint256 amount0,
        uint256 amount1
    ) internal returns (uint256 spiritOut) {
        // Interactions
        if (token0 == token1) {
            uint256 amount = amount0.add(amount1);
            if (token0 == spirit) {
                IERC20(spirit).safeTransfer(dest, amount);
                spiritOut = amount;
            } else if (token0 == wftm) {
                spiritOut = _toSPIRIT(wftm, amount);
            } else {
                address bridge = bridgeFor(token0);
                amount = _swap(token0, bridge, amount, address(this));
                spiritOut = _convertStep(bridge, bridge, amount, 0);
            }
        } else if (token0 == spirit) {
            // eg. SPIRIT - ETH
            IERC20(spirit).safeTransfer(dest, amount0);
            spiritOut = _toSPIRIT(token1, amount1).add(amount0);
        } else if (token1 == spirit) {
            // eg. USDT - SPIRIT
            IERC20(spirit).safeTransfer(dest, amount1);
            spiritOut = _toSPIRIT(token0, amount0).add(amount1);
        } else if (token0 == wftm) {
            // eg. ETH - USDC
            spiritOut = _toSPIRIT(
                wftm,
                _swap(token1, wftm, amount1, address(this)).add(amount0)
            );
        } else if (token1 == wftm) {
            // eg. USDT - ETH
            spiritOut = _toSPIRIT(
                wftm,
                _swap(token0, wftm, amount0, address(this)).add(amount1)
            );
        } else {
            // eg. MIC - USDT
            address bridge0 = bridgeFor(token0);
            address bridge1 = bridgeFor(token1);
            if (bridge0 == token1) {
                // eg. MIC - USDT - and bridgeFor(MIC) = USDT
                spiritOut = _convertStep(
                    bridge0,
                    token1,
                    _swap(token0, bridge0, amount0, address(this)),
                    amount1
                );
            } else if (bridge1 == token0) {
                // eg. WBTC - DSD - and bridgeFor(DSD) = WBTC
                spiritOut = _convertStep(
                    token0,
                    bridge1,
                    amount0,
                    _swap(token1, bridge1, amount1, address(this))
                );
            } else {
                spiritOut = _convertStep(
                    bridge0,
                    bridge1, // eg. USDT - DSD - and bridgeFor(DSD) = WBTC
                    _swap(token0, bridge0, amount0, address(this)),
                    _swap(token1, bridge1, amount1, address(this))
                );
            }
        }
    }

    // F1 - F10: OK
    // C1 - C24: OK
    // All safeTransfer, swap: X1 - X5: OK
    function _swap(
        address fromToken,
        address toToken,
        uint256 amountIn,
        address to
    ) internal returns (uint256 amountOut) {
        // Checks
        // X1 - X5: OK
        IUniswapV2Pair pair = IUniswapV2Pair(
            factory.getPair(fromToken, toToken)
        );
        require(address(pair) != address(0), "SpiritMaker: Cannot convert");

        // Interactions
        // X1 - X5: OK
        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();
        uint256 amountInWithFee = amountIn.mul(997);
        if (fromToken == pair.token0()) {
            amountOut =
                amountInWithFee.mul(reserve1) /
                reserve0.mul(1000).add(amountInWithFee);
            IERC20(fromToken).safeTransfer(address(pair), amountIn);
            pair.swap(0, amountOut, to, new bytes(0));
            // TODO: Add maximum slippage?
        } else {
            amountOut =
                amountInWithFee.mul(reserve0) /
                reserve1.mul(1000).add(amountInWithFee);
            IERC20(fromToken).safeTransfer(address(pair), amountIn);
            pair.swap(amountOut, 0, to, new bytes(0));
            // TODO: Add maximum slippage?
        }
    }

    // F1 - F10: OK
    // C1 - C24: OK
    function _toSPIRIT(address token, uint256 amountIn)
        internal
        returns (uint256 amountOut)
    {
        // X1 - X5: OK
        amountOut = _swap(token, spirit, amountIn, dest);
    }
}

File 2 of 8: IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    // EIP 2612
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
}

File 3 of 8: IUniswapV2ERC20.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface IUniswapV2ERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}

File 4 of 8: IUniswapV2Factory.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setMigrator(address) external;
}

File 5 of 8: IUniswapV2Pair.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

File 6 of 8: Ownable.sol
// SPDX-License-Identifier: MIT
// Audit on 5-Jan-2021 by Keno and BoringCrypto

// P1 - P3: OK
pragma solidity 0.6.12;

// Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol
// Edited by BoringCrypto

// T1 - T4: OK
contract OwnableData {
    // V1 - V5: OK
    address public owner;
    // V1 - V5: OK
    address public pendingOwner;
}

// T1 - T4: OK
contract Ownable is OwnableData {
    // E1: OK
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() internal {
        owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

    // F1 - F9: OK
    // C1 - C21: OK
    function transferOwnership(
        address newOwner,
        bool direct,
        bool renounce
    ) public onlyOwner {
        if (direct) {
            // Checks
            require(
                newOwner != address(0) || renounce,
                "Ownable: zero address"
            );

            // Effects
            emit OwnershipTransferred(owner, newOwner);
            owner = newOwner;
        } else {
            // Effects
            pendingOwner = newOwner;
        }
    }

    // F1 - F9: OK
    // C1 - C21: OK
    function claimOwnership() public {
        address _pendingOwner = pendingOwner;

        // Checks
        require(
            msg.sender == _pendingOwner,
            "Ownable: caller != pending owner"
        );

        // Effects
        emit OwnershipTransferred(owner, _pendingOwner);
        owner = _pendingOwner;
        pendingOwner = address(0);
    }

    // M1 - M5: OK
    // C1 - C21: OK
    modifier onlyOwner() {
        require(msg.sender == owner, "Ownable: caller is not the owner");
        _;
    }
}

File 7 of 8: SafeERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

import "./IERC20.sol";

library SafeERC20 {
    function safeSymbol(IERC20 token) internal view returns (string memory) {
        (bool success, bytes memory data) = address(token).staticcall(
            abi.encodeWithSelector(0x95d89b41)
        );
        return success && data.length > 0 ? abi.decode(data, (string)) : "???";
    }

    function safeName(IERC20 token) internal view returns (string memory) {
        (bool success, bytes memory data) = address(token).staticcall(
            abi.encodeWithSelector(0x06fdde03)
        );
        return success && data.length > 0 ? abi.decode(data, (string)) : "???";
    }

    function safeDecimals(IERC20 token) public view returns (uint8) {
        (bool success, bytes memory data) = address(token).staticcall(
            abi.encodeWithSelector(0x313ce567)
        );
        return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;
    }

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 amount
    ) internal {
        (bool success, bytes memory data) = address(token).call(
            abi.encodeWithSelector(0xa9059cbb, to, amount)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "SafeERC20: Transfer failed"
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        uint256 amount
    ) internal {
        (bool success, bytes memory data) = address(token).call(
            abi.encodeWithSelector(0x23b872dd, from, address(this), amount)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "SafeERC20: TransferFrom failed"
        );
    }
}

File 8 of 8: SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

// a library for performing overflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a + b) >= b, "SafeMath: Add Overflow");
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a - b) <= a, "SafeMath: Underflow");
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require(b == 0 || (c = a * b) / b == a, "SafeMath: Mul Overflow");
    }

    function to128(uint256 a) internal pure returns (uint128 c) {
        require(a <= uint128(-1), "SafeMath: uint128 Overflow");
        c = uint128(a);
    }
}

library SafeMath128 {
    function add(uint128 a, uint128 b) internal pure returns (uint128 c) {
        require((c = a + b) >= b, "SafeMath: Add Overflow");
    }

    function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {
        require((c = a - b) <= a, "SafeMath: Underflow");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_dest","type":"address"},{"internalType":"address","name":"_spirit","type":"address"},{"internalType":"address","name":"_wftm","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bridge","type":"address"}],"name":"LogBridgeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"server","type":"address"},{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountSPIRIT","type":"uint256"}],"name":"LogConvert","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"bridgeFor","outputs":[{"internalType":"address","name":"bridge","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"convert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"token0","type":"address[]"},{"internalType":"address[]","name":"token1","type":"address[]"}],"name":"convertMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dest","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bridge","type":"address"}],"name":"setBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61010060405234801561001157600080fd5b506040516125453803806125458339818101604052608081101561003457600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508173ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050505060805160601c60a05160601c60c05160601c60e05160601c6122b861028d60003980610aa15280610d11528061158d52806115e452806118095280611860528061188952806118cb5280611922528061194b525080610a4a52806114c6528061153f528061164552806116be528061172752806117a05280611b09525080610941528061151d528061169c528061177e5280611b2b525080610de95280610e355280611b5c52506122b86000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80639d22ae8c116100665780639d22ae8c1461023f578063a761a939146102a3578063bd1b820c14610311578063c45a015514610375578063e30c3978146103a95761009e565b8063078dfbe7146100a3578063303e6aa4146100ff5780634e71e0c8146101cd57806384b366dc146101d75780638da5cb5b1461020b575b600080fd5b6100fd600480360360608110156100b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291908035151590602001909291905050506103dd565b005b6101cb6004803603604081101561011557600080fd5b810190808035906020019064010000000081111561013257600080fd5b82018360208201111561014457600080fd5b8035906020019184602083028401116401000000008311171561016657600080fd5b90919293919293908035906020019064010000000081111561018757600080fd5b82018360208201111561019957600080fd5b803590602001918460208302840111640100000000831117156101bb57600080fd5b9091929391929390505050610655565b005b6101d5610778565b005b6101df61093f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610213610963565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102a16004803603604081101561025557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610987565b005b6102e5600480360360208110156102b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c76565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103736004803603604081101561032757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d38565b005b61037d610de7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103b1610e0b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461049e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b811561060e57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415806104dd5750805b61054f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4f776e61626c653a207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610650565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5370697269744d616b65723a206d7573742075736520454f410000000000000081525060200191505060405180910390fd5b600084849050905060005b818110156107705761076386868381811061071857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1685858481811061074157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16610e31565b8080600101915050610701565b505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610840576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610af057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015610b2857508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b610b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5370697269744d616b65723a20496e76616c696420627269646765000000000081525060200191505060405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f2e103aa707acc565f9a1547341914802b2bfe977fd79c595209f248ae4b0061360405160405180910390a35050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d33577f000000000000000000000000000000000000000000000000000000000000000090505b919050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dd9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5370697269744d616b65723a206d7573742075736520454f410000000000000081525060200191505060405180910390fd5b610de38282610e31565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6a4390584846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610ed857600080fd5b505afa158015610eec573d6000803e3d6000fd5b505050506040513d6020811015610f0257600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5370697269744d616b65723a20496e76616c696420706169720000000000000081525060200191505060405180910390fd5b611084818273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561102357600080fd5b505afa158015611037573d6000803e3d6000fd5b505050506040513d602081101561104d57600080fd5b81019080805190602001909291905050508373ffffffffffffffffffffffffffffffffffffffff166112949092919063ffffffff16565b6000808273ffffffffffffffffffffffffffffffffffffffff166389afcb44306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b1580156110ef57600080fd5b505af1158015611103573d6000803e3d6000fd5b505050506040513d604081101561111957600080fd5b810190808051906020019092919080519060200190929190505050915091508273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561117e57600080fd5b505afa158015611192573d6000803e3d6000fd5b505050506040513d60208110156111a857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146111f657808280925081935050505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd06b1d7ed79b664d17472c6f6997b929f1abe463ccccb4e5b6a0038f2f730c15858561126a8b8b8a8a611477565b60405180848152602001838152602001828152602001935050505060405180910390a45050505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106113575780518252602082019150602081019050602083039250611334565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146113b9576040519150601f19603f3d011682016040523d82523d6000602084013e6113be565b606091505b50915091508180156113fe57506000815114806113fd57508080602001905160208110156113eb57600080fd5b81019080805190602001909291905050505b5b611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5361666545524332303a205472616e73666572206661696c656400000000000081525060200191505060405180910390fd5b5050505050565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156116435760006114c28385611a7e90919063ffffffff16565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561158b576115837f0000000000000000000000000000000000000000000000000000000000000000827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166112949092919063ffffffff16565b80915061163d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611610576116097f000000000000000000000000000000000000000000000000000000000000000082611b01565b915061163c565b600061161b87610c76565b905061162987828430611b57565b91506116388182846000611477565b9250505b5b50611a76565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611725576117027f0000000000000000000000000000000000000000000000000000000000000000847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166112949092919063ffffffff16565b61171e836117108685611b01565b611a7e90919063ffffffff16565b9050611a75565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611807576117e47f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166112949092919063ffffffff16565b611800826117f28786611b01565b611a7e90919063ffffffff16565b9050611a74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156118c9576118c27f00000000000000000000000000000000000000000000000000000000000000006118bd856118af887f00000000000000000000000000000000000000000000000000000000000000008830611b57565b611a7e90919063ffffffff16565b611b01565b9050611a73565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561198b576119847f000000000000000000000000000000000000000000000000000000000000000061197f84611971897f00000000000000000000000000000000000000000000000000000000000000008930611b57565b611a7e90919063ffffffff16565b611b01565b9050611a72565b600061199686610c76565b905060006119a386610c76565b90508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119f7576119f082876119ea8a868a30611b57565b87611477565b9250611a6f565b8673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a4957611a42878287611a3d8a868a30611b57565b611477565b9250611a6e565b611a6b8282611a5a8a868a30611b57565b611a668a868a30611b57565b611477565b92505b5b50505b5b5b5b5b949350505050565b6000818284019150811015611afb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f536166654d6174683a20416464204f766572666c6f770000000000000000000081525060200191505060405180910390fd5b92915050565b6000611b4f837f0000000000000000000000000000000000000000000000000000000000000000847f0000000000000000000000000000000000000000000000000000000000000000611b57565b905092915050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6a4390587876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611bff57600080fd5b505afa158015611c13573d6000803e3d6000fd5b505050506040513d6020811015611c2957600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5370697269744d616b65723a2043616e6e6f7420636f6e76657274000000000081525060200191505060405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611d2857600080fd5b505afa158015611d3c573d6000803e3d6000fd5b505050506040513d6060811015611d5257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000611db36103e5886121ed90919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611dfb57600080fd5b505afa158015611e0f573d6000803e3d6000fd5b505050506040513d6020811015611e2557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16141561202757611e9081611e826103e8866121ed90919063ffffffff16565b611a7e90919063ffffffff16565b611ea383836121ed90919063ffffffff16565b81611eaa57fe5b049450611ed884888b73ffffffffffffffffffffffffffffffffffffffff166112949092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff1663022c0d9f60008789600067ffffffffffffffff81118015611f1057600080fd5b506040519080825280601f01601f191660200182016040528015611f435781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611fbb578082015181840152602081019050611fa0565b50505050905090810190601f168015611fe85780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561200a57600080fd5b505af115801561201e573d6000803e3d6000fd5b505050506121e1565b61204e816120406103e8856121ed90919063ffffffff16565b611a7e90919063ffffffff16565b61206184836121ed90919063ffffffff16565b8161206857fe5b04945061209684888b73ffffffffffffffffffffffffffffffffffffffff166112949092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff1663022c0d9f86600089600067ffffffffffffffff811180156120ce57600080fd5b506040519080825280601f01601f1916602001820160405280156121015781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561217957808201518184015260208101905061215e565b50505050905090810190601f1680156121a65780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156121c857600080fd5b505af11580156121dc573d6000803e3d6000fd5b505050505b50505050949350505050565b60008082148061220a575082828385029250828161220757fe5b04145b61227c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f536166654d6174683a204d756c204f766572666c6f770000000000000000000081525060200191505060405180910390fd5b9291505056fea2646970667358221220d8e8c842c9d8e2f353b9141879df19a157f1142c1515f55aeb570cff7230d24964736f6c634300060c0033000000000000000000000000ef45d134b73241eda7703fa787148d9c9f4950b000000000000000000000000018cef75c2b032d7060e9cf96f29adf74a9a17ce60000000000000000000000005cc61a78f164885776aa610fb0fe1257df78e59b00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83

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

000000000000000000000000ef45d134b73241eda7703fa787148d9c9f4950b000000000000000000000000018cef75c2b032d7060e9cf96f29adf74a9a17ce60000000000000000000000005cc61a78f164885776aa610fb0fe1257df78e59b00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83

-----Decoded View---------------
Arg [0] : _factory (address): 0xef45d134b73241eda7703fa787148d9c9f4950b0
Arg [1] : _dest (address): 0x18cef75c2b032d7060e9cf96f29adf74a9a17ce6
Arg [2] : _spirit (address): 0x5cc61a78f164885776aa610fb0fe1257df78e59b
Arg [3] : _wftm (address): 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000ef45d134b73241eda7703fa787148d9c9f4950b0
Arg [1] : 00000000000000000000000018cef75c2b032d7060e9cf96f29adf74a9a17ce6
Arg [2] : 0000000000000000000000005cc61a78f164885776aa610fb0fe1257df78e59b
Arg [3] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83


Deployed ByteCode Sourcemap

507:8676:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;782:515:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3449:358:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1346:377:5;;;:::i;:::-;;754:29:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;344:20:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2048:335:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1808:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3229:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;634:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;391:27:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;782:515;1826:5;;;;;;;;;;1812:19;;:10;:19;;;1804:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;921:6:::1;917:373;;;1013:1;993:22;;:8;:22;;;;:34;;;;1019:8;993:34;967:117;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1158:8;1130:37;;1151:5;::::0;::::1;;;;;;;;1130:37;;;;;;;;;;;;1190:8;1182:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;917:373;;;1270:8;1255:12;;:23;;;;;;;;;;;;;;;;;;917:373;782:515:::0;;;:::o;3449:358:0:-;2691:9;2677:23;;:10;:23;;;2669:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3671:11:::1;3685:6;;:13;;3671:27;;3714:9;3709:91;3733:3;3729:1;:7;3709:91;;;3758:30;3767:6;;3774:1;3767:9;;;;;;;;;;;;;;;3778:6;;3785:1;3778:9;;;;;;;;;;;;;;;3758:8;:30::i;:::-;3738:3;;;;;;;3709:91;;;;2741:1;3449:358:::0;;;;:::o;1346:377:5:-;1390:21;1414:12;;;;;;;;;;;1390:36;;1494:13;1480:27;;:10;:27;;;1458:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1633:13;1605:42;;1626:5;;;;;;;;;;1605:42;;;;;;;;;;;;1666:13;1658:5;;:21;;;;;;;;;;;;;;;;;;1713:1;1690:12;;:25;;;;;;;;;;;;;;;;;;1346:377;:::o;754:29:0:-;;;:::o;344:20:5:-;;;;;;;;;;;;:::o;2048:335:0:-;1826:5:5;;;;;;;;;;1812:19;;:10;:19;;;1804:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2178:6:0::1;2169:15;;:5;:15;;;;:32;;;;;2197:4;2188:13;;:5;:13;;;;2169:32;:51;;;;;2214:6;2205:15;;:5;:15;;;;2169:51;2147:128;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2326:6;2308:8;:15;2317:5;2308:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;2368:6;2348:27;;2361:5;2348:27;;;;;;;;;;;;2048:335:::0;;:::o;1808:190::-;1863:14;1899:8;:15;1908:5;1899:15;;;;;;;;;;;;;;;;;;;;;;;;;1890:24;;1947:1;1929:20;;:6;:20;;;1925:66;;;1975:4;1966:13;;1925:66;1808:190;;;:::o;3229:109::-;2691:9;2677:23;;:10;:23;;;2669:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3306:24:::1;3315:6;3323;3306:8;:24::i;:::-;3229:109:::0;;:::o;634:42::-;;;:::o;391:27:5:-;;;;;;;;;;;;;:::o;3856:879:0:-;3975:19;4012:7;:15;;;4028:6;4036;4012:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3975:69;;4088:1;4063:27;;4071:4;4063:27;;;;4055:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4200:117;4257:4;4277;:14;;;4300:4;4277:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4215:4;4200:34;;;;:117;;;;;:::i;:::-;4353:15;4370;4389:4;:9;;;4407:4;4389:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4352:61;;;;4438:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4428:23;;:6;:23;;;4424:95;;4490:7;4499;4468:39;;;;;;;;4424:95;4605:6;4534:193;;4584:6;4534:193;;4559:10;4534:193;;;4626:7;4648;4670:46;4683:6;4691;4699:7;4708;4670:12;:46::i;:::-;4534:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:879;;;;;:::o;1002:397:6:-;1121:12;1135:17;1164:5;1156:19;;1213:10;1225:2;1229:6;1190:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1120:127;;;;1280:7;:57;;;;;1307:1;1292:4;:11;:16;:44;;;;1323:4;1312:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1292:44;1280:57;1258:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:397;;;;;:::o;4855:2729:0:-;5004:17;5073:6;5063:16;;:6;:16;;;5059:2518;;;5096:14;5113:20;5125:7;5113;:11;;:20;;;;:::i;:::-;5096:37;;5162:6;5152:16;;:6;:16;;;5148:448;;;5189:41;5217:4;5223:6;5196;5189:27;;;;:41;;;;;:::i;:::-;5261:6;5249:18;;5148:448;;;5303:4;5293:14;;:6;:14;;;5289:307;;;5340:23;5350:4;5356:6;5340:9;:23::i;:::-;5328:35;;5289:307;;;5404:14;5421:17;5431:6;5421:9;:17::i;:::-;5404:34;;5466:44;5472:6;5480;5488;5504:4;5466:5;:44::i;:::-;5457:53;;5541:39;5554:6;5562;5570;5578:1;5541:12;:39::i;:::-;5529:51;;5289:307;;5148:448;5059:2518;;;;5627:6;5617:16;;:6;:16;;;5613:1964;;;5683:42;5711:4;5717:7;5690:6;5683:27;;;;:42;;;;;:::i;:::-;5752:39;5783:7;5752:26;5762:6;5770:7;5752:9;:26::i;:::-;:30;;:39;;;;:::i;:::-;5740:51;;5613:1964;;;5823:6;5813:16;;:6;:16;;;5809:1768;;;5880:42;5908:4;5914:7;5887:6;5880:27;;;;:42;;;;;:::i;:::-;5949:39;5980:7;5949:26;5959:6;5967:7;5949:9;:26::i;:::-;:30;;:39;;;;:::i;:::-;5937:51;;5809:1768;;;6020:4;6010:14;;:6;:14;;;6006:1571;;;6084:122;6112:4;6135:56;6183:7;6135:43;6141:6;6149:4;6155:7;6172:4;6135:5;:43::i;:::-;:47;;:56;;;;:::i;:::-;6084:9;:122::i;:::-;6072:134;;6006:1571;;;6238:4;6228:14;;:6;:14;;;6224:1353;;;6302:122;6330:4;6353:56;6401:7;6353:43;6359:6;6367:4;6373:7;6390:4;6353:5;:43::i;:::-;:47;;:56;;;;:::i;:::-;6302:9;:122::i;:::-;6290:134;;6224:1353;;;6488:15;6506:17;6516:6;6506:9;:17::i;:::-;6488:35;;6538:15;6556:17;6566:6;6556:9;:17::i;:::-;6538:35;;6603:6;6592:17;;:7;:17;;;6588:978;;;6705:189;6740:7;6770:6;6799:46;6805:6;6813:7;6822;6839:4;6799:5;:46::i;:::-;6868:7;6705:12;:189::i;:::-;6693:201;;6588:978;;;6931:6;6920:17;;:7;:17;;;6916:650;;;7033:189;7068:6;7097:7;7127;7157:46;7163:6;7171:7;7180;7197:4;7157:5;:46::i;:::-;7033:12;:189::i;:::-;7021:201;;6916:650;;;7275:275;7310:7;7340;7416:46;7422:6;7430:7;7439;7456:4;7416:5;:46::i;:::-;7485;7491:6;7499:7;7508;7525:4;7485:5;:46::i;:::-;7275:12;:275::i;:::-;7263:287;;6916:650;6588:978;6224:1353;;;6006:1571;5809:1768;5613:1964;5059:2518;4855:2729;;;;;;:::o;211:139:7:-;269:9;314:1;308;304;:5;300:9;;;299:16;;291:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;211:139;;;;:::o;8977:203:0:-;9065:17;9136:36;9142:5;9149:6;9157:8;9167:4;9136:5;:36::i;:::-;9124:48;;8977:203;;;;:::o;7678:1249::-;7820:17;7893:19;7944:7;:15;;;7960:9;7971:7;7944:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7893:97;;8034:1;8009:27;;8017:4;8009:27;;;;8001:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8131:16;8149;8171:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8130:59;;;;;;;;;8200:23;8226:17;8239:3;8226:8;:12;;:17;;;;:::i;:::-;8200:43;;8271:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8258:26;;:9;:26;;;8254:666;;;8379:39;8402:15;8379:18;8392:4;8379:8;:12;;:18;;;;:::i;:::-;:22;;:39;;;;:::i;:::-;8330:29;8350:8;8330:15;:19;;:29;;;;:::i;:::-;:88;;;;;;8301:117;;8433:55;8472:4;8479:8;8440:9;8433:30;;;;:55;;;;;:::i;:::-;8503:4;:9;;;8513:1;8516:9;8527:2;8541:1;8531:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8503:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8254:666;;;8699:39;8722:15;8699:18;8712:4;8699:8;:12;;:18;;;;:::i;:::-;:22;;:39;;;;:::i;:::-;8650:29;8670:8;8650:15;:19;;:29;;;;:::i;:::-;:88;;;;;;8621:117;;8753:55;8792:4;8799:8;8760:9;8753:30;;;;:55;;;;;:::i;:::-;8823:4;:9;;;8833;8844:1;8847:2;8861:1;8851:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8823:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8254:666;7678:1249;;;;;;;;;;:::o;502:153:7:-;560:9;595:1;590;:6;:30;;;;619:1;614;609;605;:5;601:9;;;600:15;;;;;;:20;590:30;582:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;502:153;;;;:::o

Swarm Source

ipfs://d8e8c842c9d8e2f353b9141879df19a157f1142c1515f55aeb570cff7230d249
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.