Contract 0xE0666D4ce7337E796F8d0D44E2e53a4aC7EDa4Ba 2

Contract Overview

Balance:
0 BNB

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x43ba625ccdfe1b8c3ae6241c0adfdf81fda0946811890082ea154d8da0a0834cSet Ghostdai Rat...158506122022-01-14 7:46:223 days 18 hrs ago0x7805fa0360110ea6deb508b00e3d19290c9fd0e5 IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.00027332
0x243a27edc7fd3710e2bea8b3d9cef839e9a2b75685dad0a6f9129c6553315326Set DAI Rate Per...158505682022-01-14 7:44:103 days 18 hrs ago0x7805fa0360110ea6deb508b00e3d19290c9fd0e5 IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.00027333
0x607378ba87acdd4cf0a30d64fc2670914c1d0df4033ec043a121011d693450b4Swap To155830672022-01-05 0:37:4913 days 1 hr ago0x6082bcb75b7ac5eab352f3941990e1a59308e958 IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.00077735
0x4e1772cbfc4ddcd367764d54b8b6230c45bf55fa3732c327d7031a430d03c81dSwap From155830612022-01-05 0:37:3113 days 1 hr ago0x6082bcb75b7ac5eab352f3941990e1a59308e958 IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.0007828
0x70f7f3cb39e3a62b6984e0644d3e2e78a3575011b5586eb09deef30257fc47b0Swap From155830422022-01-05 0:36:3413 days 1 hr ago0x6082bcb75b7ac5eab352f3941990e1a59308e958 IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.0007828
0x185b6008e3179117540eb40633ddabfbe907f409b03719cf2a7741c187b02f32Swap From155830302022-01-05 0:35:5813 days 1 hr ago0x6082bcb75b7ac5eab352f3941990e1a59308e958 IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.0007828
0x08512359a183b3642ce3c95e00b7d4ef03c627545b2585717b9d8998305f3e2dSwap To155830112022-01-05 0:35:0113 days 1 hr ago0x6082bcb75b7ac5eab352f3941990e1a59308e958 IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.00092735
0x89b439286d3e273ed73c259ae9b40e36a375edbcbe2ae982633b80d7872e893fSwap From140257602021-11-11 17:16:4367 days 8 hrs ago0xb2a76f09adfeac59419d336037b848c061efd8d8 IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.0007828
0x5648ab41449d713b33cc104f73710ac9b062d2d1a21b5c3467c15125202f1511Swap From140257372021-11-11 17:15:3467 days 8 hrs ago0xb2a76f09adfeac59419d336037b848c061efd8d8 IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.0007828
0xb539ea75b1b54803ff87601e52063718ed0289b04be489fa68f1a53a3cfb41a7Swap To135654332021-10-26 15:15:2483 days 10 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.00077723
0x0639a7a8a98b990ef6977e00522a4b1ca74b9fa445702274c1ec385f18f93cb5Swap From135653052021-10-26 15:09:0083 days 10 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.0004828
0x549c33781a26e36328cd2d01fd034169ada3520b5ab2fea59525930d2b4afbaeSwap From135652262021-10-26 15:05:0383 days 10 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.00063268
0xc6d96189d7c1b60dd0679688ecbe83026934d6b24cc38954f0a8f42581547719Swap To135651072021-10-26 14:59:0683 days 11 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.00062723
0x59733ef8d96313d0d35cd1758390ae8c40d4d8c01f1d4f76b4119a193f0a9982Swap To135650542021-10-26 14:56:2783 days 11 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.00092723
0x2cd054bccbe379e94eadbd87f7b335cd938e79be512941705b21b36523f99b84Swap From135547982021-10-26 6:22:5483 days 19 hrs ago0x7805fa0360110ea6deb508b00e3d19290c9fd0e5 IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.0006328
0x4eee04d37b4f76b7616f5cb62c2c5b404a7feaf7c1f14810ca2a172a4f8354f5Swap To135547072021-10-26 6:18:2183 days 19 hrs ago0x7805fa0360110ea6deb508b00e3d19290c9fd0e5 IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.00062735
0x8a7357967a3f1c22073280a573144758286d7ab19e9c8e36d8e02a59c1efb13aSwap From135545002021-10-26 6:08:0083 days 19 hrs ago0x7805fa0360110ea6deb508b00e3d19290c9fd0e5 IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.00063292
0x9822a45f43d3a1c4d957f89b1b1d2577a3876aa9d146422f5cb6de656b760d1aSwap To135442622021-10-25 21:32:4884 days 4 hrs ago0x68d641560e7e50ce40e7ecb799ae1fc197236e28 IN  0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba0 BNB0.00062735
0x31b422380a72fbeb9acd0d9ec4b0e68cffcda8d26d3c8185b7e2607d6f6e485d0x60806040135270392021-10-25 7:11:3384 days 18 hrs ago0x7805fa0360110ea6deb508b00e3d19290c9fd0e5 IN  Create: daiSwap0 BNB0.0092535
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x607378ba87acdd4cf0a30d64fc2670914c1d0df4033ec043a121011d693450b4155830672022-01-05 0:37:4913 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0x38a86032e1f0d852a0e40b16849a0909ea74b28c0 BNB
0x607378ba87acdd4cf0a30d64fc2670914c1d0df4033ec043a121011d693450b4155830672022-01-05 0:37:4913 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x607378ba87acdd4cf0a30d64fc2670914c1d0df4033ec043a121011d693450b4155830672022-01-05 0:37:4913 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0x38a86032e1f0d852a0e40b16849a0909ea74b28c0 BNB
0x607378ba87acdd4cf0a30d64fc2670914c1d0df4033ec043a121011d693450b4155830672022-01-05 0:37:4913 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0x38a86032e1f0d852a0e40b16849a0909ea74b28c0 BNB
0x4e1772cbfc4ddcd367764d54b8b6230c45bf55fa3732c327d7031a430d03c81d155830612022-01-05 0:37:3113 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x4e1772cbfc4ddcd367764d54b8b6230c45bf55fa3732c327d7031a430d03c81d155830612022-01-05 0:37:3113 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0x38a86032e1f0d852a0e40b16849a0909ea74b28c0 BNB
0x4e1772cbfc4ddcd367764d54b8b6230c45bf55fa3732c327d7031a430d03c81d155830612022-01-05 0:37:3113 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x4e1772cbfc4ddcd367764d54b8b6230c45bf55fa3732c327d7031a430d03c81d155830612022-01-05 0:37:3113 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x70f7f3cb39e3a62b6984e0644d3e2e78a3575011b5586eb09deef30257fc47b0155830422022-01-05 0:36:3413 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x70f7f3cb39e3a62b6984e0644d3e2e78a3575011b5586eb09deef30257fc47b0155830422022-01-05 0:36:3413 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0x38a86032e1f0d852a0e40b16849a0909ea74b28c0 BNB
0x70f7f3cb39e3a62b6984e0644d3e2e78a3575011b5586eb09deef30257fc47b0155830422022-01-05 0:36:3413 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x70f7f3cb39e3a62b6984e0644d3e2e78a3575011b5586eb09deef30257fc47b0155830422022-01-05 0:36:3413 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x185b6008e3179117540eb40633ddabfbe907f409b03719cf2a7741c187b02f32155830302022-01-05 0:35:5813 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x185b6008e3179117540eb40633ddabfbe907f409b03719cf2a7741c187b02f32155830302022-01-05 0:35:5813 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0x38a86032e1f0d852a0e40b16849a0909ea74b28c0 BNB
0x185b6008e3179117540eb40633ddabfbe907f409b03719cf2a7741c187b02f32155830302022-01-05 0:35:5813 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x185b6008e3179117540eb40633ddabfbe907f409b03719cf2a7741c187b02f32155830302022-01-05 0:35:5813 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x08512359a183b3642ce3c95e00b7d4ef03c627545b2585717b9d8998305f3e2d155830112022-01-05 0:35:0113 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0x38a86032e1f0d852a0e40b16849a0909ea74b28c0 BNB
0x08512359a183b3642ce3c95e00b7d4ef03c627545b2585717b9d8998305f3e2d155830112022-01-05 0:35:0113 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x08512359a183b3642ce3c95e00b7d4ef03c627545b2585717b9d8998305f3e2d155830112022-01-05 0:35:0113 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0x38a86032e1f0d852a0e40b16849a0909ea74b28c0 BNB
0x08512359a183b3642ce3c95e00b7d4ef03c627545b2585717b9d8998305f3e2d155830112022-01-05 0:35:0113 days 1 hr ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0x38a86032e1f0d852a0e40b16849a0909ea74b28c0 BNB
0x89b439286d3e273ed73c259ae9b40e36a375edbcbe2ae982633b80d7872e893f140257602021-11-11 17:16:4367 days 8 hrs ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x89b439286d3e273ed73c259ae9b40e36a375edbcbe2ae982633b80d7872e893f140257602021-11-11 17:16:4367 days 8 hrs ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0x38a86032e1f0d852a0e40b16849a0909ea74b28c0 BNB
0x89b439286d3e273ed73c259ae9b40e36a375edbcbe2ae982633b80d7872e893f140257602021-11-11 17:16:4367 days 8 hrs ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x89b439286d3e273ed73c259ae9b40e36a375edbcbe2ae982633b80d7872e893f140257602021-11-11 17:16:4367 days 8 hrs ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x5648ab41449d713b33cc104f73710ac9b062d2d1a21b5c3467c15125202f1511140257372021-11-11 17:15:3467 days 8 hrs ago 0xe0666d4ce7337e796f8d0d44e2e53a4ac7eda4ba 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
daiSwap

Compiler Version
v0.5.5+commit.47a71e8f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-10-25
*/

pragma solidity ^0.5.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @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: @openzeppelin/contracts/math/SafeMath.sol

pragma solidity ^0.5.0;

/**
 * @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.
     *
     * _Available since v2.4.0._
     */
    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.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        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.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol

pragma solidity ^0.5.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20Mintable}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See {_burn} and {_approve}.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }
}

// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol

pragma solidity ^0.5.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 *
 * _Since v2.5.0:_ this module is now much more gas efficient, given net gas
 * metering changes introduced in the Istanbul hardfork.
 */
contract ReentrancyGuard {
    bool private _notEntered;

    constructor () internal {
        // Storing an initial non-zero value makes deployment a bit more
        // expensive, but in exchange the refund on every call to nonReentrant
        // will be lower in amount. Since refunds are capped to a percetange of
        // the total transaction's gas, it is best to keep them low in cases
        // like this one, to increase the likelihood of the full refund coming
        // into effect.
        _notEntered = true;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_notEntered, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _notEntered = false;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _notEntered = true;
    }
}

// File: contracts/daiSwap.sol

// contracts/daiSwap.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.5.5;




contract daiSwap is ReentrancyGuard {
    using SafeMath for uint256;

    address public admin;

    ERC20 dai;
    ERC20 ghostdai;

    uint256 public daiRate;
    uint256 public ghostdaiRate;
    
    constructor(address _dai, address _ghostdai) public {
        admin = msg.sender;
        dai = ERC20(_dai);
        ghostdai = ERC20(_ghostdai);
        ghostdaiRate = 98;
        daiRate = 102;
    }

    function setDAIRatePerGhostdai(uint256 _rate) public {
        require(admin==msg.sender, "ser pls no hack");
        daiRate = _rate;
    }

    function setGhostdaiRatePerDAI(uint256 _rate) public {
        require(admin==msg.sender, "ser pls no hack");
        ghostdaiRate = _rate;
    }
    
    function setAdmin(address _admin) public {
        require(admin==msg.sender, "ser pls no hack");
        admin=_admin;
    }

    function transferToken(address token, uint256 amountToken) public {
        require(admin==msg.sender, "ser pls no hack");
        ERC20(token).transfer(admin, amountToken);
    }

    // this returns the reserves in the contract

    function getReserves() public view returns(uint256, uint256) {
        return ( ghostdai.balanceOf(address(this)), dai.balanceOf(address(this)) );
    }
    
    // the user must approve the balance so the contract can take it out of the user's account
    // else this will fail.

    function swapFrom(uint256 amount) public nonReentrant {
        require(amount!=0, "swapFrom: invalid amount");
        require(ghostdai.balanceOf(address(this))!=0, "swapFrom: Not enough ghostDai in reserves");

        // for every 1.02 dai we get 1.00 ghostdai
            // 1020000 we get 1000000000000000000

        uint256 amountToSend = amount.mul(daiRate).div(100);

        require(ghostdai.balanceOf(address(this)) >= amountToSend, "swapFrom: Not enough ghostDai in reserves");

        // Transfer DAI to contract
        dai.transferFrom(msg.sender, address(this), amount);
        // Transfer ghostDai to sender
        ghostdai.transfer(msg.sender, amountToSend);
    }

    function swapTo(uint256 amount) public nonReentrant {
        require(amount!=0, "swapTo: invalid amount");
        require(dai.balanceOf(address(this))!=0, "swapTo: Not enough DAI in reserves");
        // for every 1.00 ghostdai we get 0.98 dai
            // 1000000000000000000 we get 980000 (bc decimals)
        uint256 amountToSend = amount.mul(ghostdaiRate).div(100);

        require(dai.balanceOf(address(this)) >= amountToSend, "swapTo: Not enough ghostDai in reserves");

        // Tranfer tokens from sender to this contract
        ghostdai .transferFrom(msg.sender, address(this), amount);
        // Transfer amount minus fees to sender
        dai.transfer(msg.sender, amountToSend);
    }
}

Contract ABI

[{"constant":true,"inputs":[],"name":"getReserves","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amountToken","type":"uint256"}],"name":"transferToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"swapTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_admin","type":"address"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_rate","type":"uint256"}],"name":"setDAIRatePerGhostdai","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"swapFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ghostdaiRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"daiRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rate","type":"uint256"}],"name":"setGhostdaiRatePerDAI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_dai","type":"address"},{"name":"_ghostdai","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]

608060405234801561001057600080fd5b50604051604080610e828339810180604052604081101561003057600080fd5b50805160209091015160008054600160ff199091168117610100600160a81b031916610100330217825580546001600160a01b03199081166001600160a01b0395861617909155600280549091169390921692909217905560626004556066600355610de09081906100a290396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806393516c561161006657806393516c5614610152578063bf484b231461016f578063d9c522ec14610189578063f851a44014610191578063fa492996146101b55761009e565b80630902f1ac146100a35780631072cbea146100c45780632793b707146100f2578063704b6c021461010f5780638c80d3d814610135575b600080fd5b6100ab6101d2565b6040805192835260208301919091528051918290030190f35b6100f0600480360360408110156100da57600080fd5b506001600160a01b0381351690602001356102d4565b005b6100f06004803603602081101561010857600080fd5b50356103bf565b6100f06004803603602081101561012557600080fd5b50356001600160a01b031661073a565b6100f06004803603602081101561014b57600080fd5b50356107be565b6100f06004803603602081101561016857600080fd5b503561081f565b610177610b51565b60408051918252519081900360200190f35b610177610b57565b610199610b5d565b604080516001600160a01b039092168252519081900360200190f35b6100f0600480360360208110156101cb57600080fd5b5035610b71565b60025460408051600160e01b6370a08231028152306004820152905160009283926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561022557600080fd5b505afa158015610239573d6000803e3d6000fd5b505050506040513d602081101561024f57600080fd5b505160015460408051600160e01b6370a0823102815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561029f57600080fd5b505afa1580156102b3573d6000803e3d6000fd5b505050506040513d60208110156102c957600080fd5b505190925090509091565b60005461010090046001600160a01b031633146103305760408051600160e51b62461bcd02815260206004820152600f6024820152600160881b6e73657220706c73206e6f206861636b02604482015290519081900360640190fd5b6000805460408051600160e01b63a9059cbb0281526001600160a01b03610100909304831660048201526024810185905290519185169263a9059cbb926044808401936020939083900390910190829087803b15801561038f57600080fd5b505af11580156103a3573d6000803e3d6000fd5b505050506040513d60208110156103b957600080fd5b50505050565b60005460ff16151561041b5760408051600160e51b62461bcd02815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff1916905580151561047c5760408051600160e51b62461bcd02815260206004820152601660248201527f73776170546f3a20696e76616c696420616d6f756e7400000000000000000000604482015290519081900360640190fd5b60015460408051600160e01b6370a0823102815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156104ca57600080fd5b505afa1580156104de573d6000803e3d6000fd5b505050506040513d60208110156104f457600080fd5b5051151561053657604051600160e51b62461bcd028152600401808060200182810382526022815260200180610d226022913960400191505060405180910390fd5b600061055e606461055260045485610bd290919063ffffffff16565b9063ffffffff610c3b16565b60015460408051600160e01b6370a08231028152306004820152905192935083926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156105b157600080fd5b505afa1580156105c5573d6000803e3d6000fd5b505050506040513d60208110156105db57600080fd5b5051101561061d57604051600160e51b62461bcd028152600401808060200182810382526027815260200180610d446027913960400191505060405180910390fd5b60025460408051600160e01b6323b872dd0281523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561067a57600080fd5b505af115801561068e573d6000803e3d6000fd5b505050506040513d60208110156106a457600080fd5b505060015460408051600160e01b63a9059cbb0281523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156106fd57600080fd5b505af1158015610711573d6000803e3d6000fd5b505050506040513d602081101561072757600080fd5b50506000805460ff191660011790555050565b60005461010090046001600160a01b031633146107965760408051600160e51b62461bcd02815260206004820152600f6024820152600160881b6e73657220706c73206e6f206861636b02604482015290519081900360640190fd5b600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60005461010090046001600160a01b0316331461081a5760408051600160e51b62461bcd02815260206004820152600f6024820152600160881b6e73657220706c73206e6f206861636b02604482015290519081900360640190fd5b600355565b60005460ff16151561087b5760408051600160e51b62461bcd02815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690558015156108dc5760408051600160e51b62461bcd02815260206004820152601860248201527f7377617046726f6d3a20696e76616c696420616d6f756e740000000000000000604482015290519081900360640190fd5b60025460408051600160e01b6370a0823102815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561092a57600080fd5b505afa15801561093e573d6000803e3d6000fd5b505050506040513d602081101561095457600080fd5b5051151561099657604051600160e51b62461bcd028152600401808060200182810382526029815260200180610d8c6029913960400191505060405180910390fd5b60006109b2606461055260035485610bd290919063ffffffff16565b60025460408051600160e01b6370a08231028152306004820152905192935083926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610a0557600080fd5b505afa158015610a19573d6000803e3d6000fd5b505050506040513d6020811015610a2f57600080fd5b50511015610a7157604051600160e51b62461bcd028152600401808060200182810382526029815260200180610d8c6029913960400191505060405180910390fd5b60015460408051600160e01b6323b872dd0281523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610ace57600080fd5b505af1158015610ae2573d6000803e3d6000fd5b505050506040513d6020811015610af857600080fd5b505060025460408051600160e01b63a9059cbb0281523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156106fd57600080fd5b60045481565b60035481565b60005461010090046001600160a01b031681565b60005461010090046001600160a01b03163314610bcd5760408051600160e51b62461bcd02815260206004820152600f6024820152600160881b6e73657220706c73206e6f206861636b02604482015290519081900360640190fd5b600455565b6000821515610be357506000610c35565b828202828482811515610bf257fe5b0414610c3257604051600160e51b62461bcd028152600401808060200182810382526021815260200180610d6b6021913960400191505060405180910390fd5b90505b92915050565b6000610c3283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081831515610d0957604051600160e51b62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cce578181015183820152602001610cb6565b50505050905090810190601f168015610cfb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385811515610d1757fe5b049594505050505056fe73776170546f3a204e6f7420656e6f7567682044414920696e20726573657276657373776170546f3a204e6f7420656e6f7567682067686f737444616920696e207265736572766573536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777377617046726f6d3a204e6f7420656e6f7567682067686f737444616920696e207265736572766573a165627a7a72305820bd50346988c3629126c9535219879ab6cd202d8a39c5d205a21c62d0cbf8f116002900000000000000000000000038a86032e1f0d852a0e40b16849a0909ea74b28c000000000000000000000000c9f654d481e79d01448030b08516b7f9fcf71e13

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

00000000000000000000000038a86032e1f0d852a0e40b16849a0909ea74b28c000000000000000000000000c9f654d481e79d01448030b08516b7f9fcf71e13

-----Decoded View---------------
Arg [0] : _dai (address): 0x38a86032e1f0d852a0e40b16849a0909ea74b28c
Arg [1] : _ghostdai (address): 0xc9f654d481e79d01448030b08516b7f9fcf71e13

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000038a86032e1f0d852a0e40b16849a0909ea74b28c
Arg [1] : 000000000000000000000000c9f654d481e79d01448030b08516b7f9fcf71e13


Deployed ByteCode Sourcemap

20330:2843:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20330:2843:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21449:154;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21207:182;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21207:182:0;;;;;;;;:::i;:::-;;22450:720;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22450:720:0;;:::i;21071:128::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21071:128:0;-1:-1:-1;;;;;21071:128:0;;:::i;20760:143::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20760:143:0;;:::i;21742:700::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21742:700:0;;:::i;20505:27::-;;;:::i;:::-;;;;;;;;;;;;;;;;20476:22;;;:::i;20408:20::-;;;:::i;:::-;;;;-1:-1:-1;;;;;20408:20:0;;;;;;;;;;;;;;20911:148;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20911:148:0;;:::i;21449:154::-;21530:8;;:33;;;-1:-1:-1;;;;;21530:33:0;;21557:4;21530:33;;;;;;21492:7;;;;-1:-1:-1;;;;;21530:8:0;;;;:18;;:33;;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;21530:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21530:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21530:33:0;21565:3;;:28;;;-1:-1:-1;;;;;21565:28:0;;21587:4;21565:28;;;;;;-1:-1:-1;;;;;21565:3:0;;;;:13;;:28;;;;;21530:33;;21565:28;;;;;;;;:3;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;21565:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21565:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21565:28:0;21521:74;;-1:-1:-1;21565:28:0;-1:-1:-1;21449:154:0;;:::o;21207:182::-;21292:5;;;;;-1:-1:-1;;;;;21292:5:0;21299:10;21292:17;21284:45;;;;;-1:-1:-1;;;;;21284:45:0;;;;;;;;;;;;-1:-1:-1;;;;;21284:45:0;;;;;;;;;;;;;;;21362:5;;;21340:41;;;-1:-1:-1;;;;;21340:41:0;;-1:-1:-1;;;;;21362:5:0;;;;;;21340:41;;;;;;;;;;;;:21;;;;;;:41;;;;;;;;;;;;;;;;;:21;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;21340:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21340:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;21207:182:0:o;22450:720::-;19867:11;;;;19859:55;;;;;;;-1:-1:-1;;;;;19859:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20006:5;19992:19;;-1:-1:-1;;19992:19:0;;;22521:9;;;22513:44;;;;;-1:-1:-1;;;;;22513:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22576:3;;:28;;;-1:-1:-1;;;;;22576:28:0;;22598:4;22576:28;;;;;;-1:-1:-1;;;;;22576:3:0;;;;:13;;:28;;;;;;;;;;;;;;;:3;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;22576:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22576:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22576:28:0;:31;;22568:78;;;;-1:-1:-1;;;;;22568:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22773:20;22796:33;22825:3;22796:24;22807:12;;22796:6;:10;;:24;;;;:::i;:::-;:28;:33;:28;:33;:::i;:::-;22850:3;;:28;;;-1:-1:-1;;;;;22850:28:0;;22872:4;22850:28;;;;;;22773:56;;-1:-1:-1;22773:56:0;;-1:-1:-1;;;;;22850:3:0;;;;:13;;:28;;;;;;;;;;;;;;;:3;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;22850:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22850:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22850:28:0;:44;;22842:96;;;;-1:-1:-1;;;;;22842:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23007:8;;:57;;;-1:-1:-1;;;;;23007:57:0;;23030:10;23007:57;;;;23050:4;23007:57;;;;;;;;;;;;-1:-1:-1;;;;;23007:8:0;;;;:22;;:57;;;;;;;;;;;;;;;:8;;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;23007:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23007:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;23124:3:0;;:38;;;-1:-1:-1;;;;;23124:38:0;;23137:10;23124:38;;;;;;;;;;;;-1:-1:-1;;;;;23124:3:0;;;;:12;;:38;;;;;23007:57;;23124:38;;;;;;;;:3;;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;23124:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23124:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;20172:11:0;:18;;-1:-1:-1;;20172:18:0;20186:4;20172:18;;;-1:-1:-1;;22450:720:0:o;21071:128::-;21131:5;;;;;-1:-1:-1;;;;;21131:5:0;21138:10;21131:17;21123:45;;;;;-1:-1:-1;;;;;21123:45:0;;;;;;;;;;;;-1:-1:-1;;;;;21123:45:0;;;;;;;;;;;;;;;21179:5;:12;;-1:-1:-1;;;;;21179:12:0;;;;;-1:-1:-1;;;;;;21179:12:0;;;;;;;;;21071:128::o;20760:143::-;20832:5;;;;;-1:-1:-1;;;;;20832:5:0;20839:10;20832:17;20824:45;;;;;-1:-1:-1;;;;;20824:45:0;;;;;;;;;;;;-1:-1:-1;;;;;20824:45:0;;;;;;;;;;;;;;;20880:7;:15;20760:143::o;21742:700::-;19867:11;;;;19859:55;;;;;;;-1:-1:-1;;;;;19859:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20006:5;19992:19;;-1:-1:-1;;19992:19:0;;;21815:9;;;21807:46;;;;;-1:-1:-1;;;;;21807:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21872:8;;:33;;;-1:-1:-1;;;;;21872:33:0;;21899:4;21872:33;;;;;;-1:-1:-1;;;;;21872:8:0;;;;:18;;:33;;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;21872:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21872:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21872:33:0;:36;;21864:90;;;;-1:-1:-1;;;;;21864:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22072:20;22095:28;22119:3;22095:19;22106:7;;22095:6;:10;;:19;;;;:::i;:28::-;22144:8;;:33;;;-1:-1:-1;;;;;22144:33:0;;22171:4;22144:33;;;;;;22072:51;;-1:-1:-1;22072:51:0;;-1:-1:-1;;;;;22144:8:0;;;;:18;;:33;;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;22144:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22144:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22144:33:0;:49;;22136:103;;;;-1:-1:-1;;;;;22136:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22289:3;;:51;;;-1:-1:-1;;;;;22289:51:0;;22306:10;22289:51;;;;22326:4;22289:51;;;;;;;;;;;;-1:-1:-1;;;;;22289:3:0;;;;:16;;:51;;;;;;;;;;;;;;;:3;;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;22289:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22289:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;22391:8:0;;:43;;;-1:-1:-1;;;;;22391:43:0;;22409:10;22391:43;;;;;;;;;;;;-1:-1:-1;;;;;22391:8:0;;;;:17;;:43;;;;;22289:51;;22391:43;;;;;;;;:8;;:43;;;5:2:-1;;;;30:1;27;20:12;20505:27:0;;;;:::o;20476:22::-;;;;:::o;20408:20::-;;;;;;-1:-1:-1;;;;;20408:20:0;;:::o;20911:148::-;20983:5;;;;;-1:-1:-1;;;;;20983:5:0;20990:10;20983:17;20975:45;;;;;-1:-1:-1;;;;;20975:45:0;;;;;;;;;;;;-1:-1:-1;;;;;20975:45:0;;;;;;;;;;;;;;;21031:12;:20;20911:148::o;6309:471::-;6367:7;6612:6;;6608:47;;;-1:-1:-1;6642:1:0;6635:8;;6608:47;6679:5;;;6683:1;6679;:5;6703;;;;;;;;:10;6695:56;;;;-1:-1:-1;;;;;6695:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6771:1;-1:-1:-1;6309:471:0;;;;;:::o;7248:132::-;7306:7;7333:39;7337:1;7340;7333:39;;;;;;;;;;;;;;;;;7996:7;8098:12;8091:5;;;8083:28;;;;-1:-1:-1;;;;;8083:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8083:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8122:9;8138:1;8134;:5;;;;;;;;;7910:345;-1:-1:-1;;;;;7910:345:0:o

Swarm Source

bzzr://bd50346988c3629126c9535219879ab6cd202d8a39c5d205a21c62d0cbf8f116
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading