Contract 0x757dd1dcc4546e949cbf4369df13ebc768bfa0b2

Contract Overview

Balance:
0 AVAX

AVAX Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf8fb05fb21e6ab7dd81b90bafbd14bf94fab28660dba6d06559ed663ec091f83Transfer92884652022-01-08 7:43:29444 days 4 hrs ago0x7a79564cbb4c8cad1a8309f1123893009b61f14d IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.000742675 25
0x3634f620a276184edea05d32ee147d1553ef585c4b6d17faa60147d9ffb24d60Transfer90656152022-01-03 3:32:02449 days 8 hrs ago0x726656fc68dfbe94222b7681dd5e5192cf25308a IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.000743275 25
0x13c85880853976cc6199885ee738df3da2a817996aa71d6f0953433e8d83e02fTransfer90308192022-01-02 8:03:34450 days 4 hrs ago0x7a79564cbb4c8cad1a8309f1123893009b61f14d IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.000720875 25
0x583db5a19e1fc00d91b14bcdc4b08d01760daf2488dfe573843016a3f732199cTransfer89969212022-01-01 13:04:16450 days 23 hrs ago0x33ddd244f1c8893c7cd52f1e8bc14fe91af4f287 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00074297525
0x46a27fc1e6de9da357dd3f2976601f9dcbeab8232eb18b7e1ca42947b42906b2Wrap89306442021-12-30 23:52:18452 days 12 hrs ago0x46d4545c2f389cd7f707276033a018aa417ffbde IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00246099 30
0x95fed87f2b9456ac3c2c969bd05ffb26fb8ad5a3ceec93990f95004d37a80c0eUnwrap89210112021-12-30 18:27:40452 days 17 hrs ago0x6e868846b2182235c16fd122fcd44739e55a58e4 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00173205 30
0x2c38b0c150f6250a70b62bbbc18cdeb49ceb7941e7d1fa8253e885d9ca38d8f5Unwrap89177782021-12-30 16:38:45452 days 19 hrs ago0xc39313fff502aa14494622c337dd75361a0812b0 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00173205 30
0x686fafe94f4181f2c305a87b5b2715e05b33b43b1a9b893249422099868703c5Unwrap89171252021-12-30 16:16:47452 days 19 hrs ago0x93cd192e3a3331641adc25f5ffa7df3c75d8b111 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00224541 30
0x0f2bcc3bcc9a8319625c100a42861214fa47d7db8e745a5ac052e1ddb4bb6168Wrap89168172021-12-30 16:06:15452 days 20 hrs ago0x088fcf4a4645a9d4bd169368fc0117f9e146e1cc IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00246243 30
0xa3ea2175517536e21f1dd8f497ae137479ad029dd972dfafc98ddf2ba1d04782Unwrap89002472021-12-30 6:48:59453 days 5 hrs ago0xe3c614119168d8835114b9fc0654728401d46ee6 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.0017320530
0x46f55d737e6c6ed46866a264cf543c8d9a1977d236dd19dd3f8e57ac09f2242aUnwrap88927602021-12-30 2:36:49453 days 9 hrs ago0x91feec76848b9df252dd7eb6f159b6d8751f7194 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00224505 30
0x85a470edebaf55bcbae7d6d263dd33d3bfeccccb4e9ef197ccca04a2c6023b7bUnwrap88917732021-12-30 2:04:02453 days 10 hrs ago0xee31e72916ab9ba88c0b9300d0832446aeff5998 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00224469 30
0x91d6f3cfa393b7fad1be0afb23cf0fed35e2c7588e04cdeb871f97684cc54fa9Unwrap88865242021-12-29 23:08:30453 days 13 hrs ago0x98f2e36e916e43f521a5656f62ddddabd24c4091 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00173205 30
0xc518f6a412cbecf5081155ddc9b8b5262fc28e7be8cbbdc396ff66ce050ed28aUnwrap88854902021-12-29 22:33:56453 days 13 hrs ago0x2024f95d610053136d379b6bdeddf40bd4a8cf00 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00173205 30
0x942127f2318348071446a1aaee4de51b490018584c801b74d0532946c1213b55Unwrap88801502021-12-29 19:37:41453 days 16 hrs ago0x34bc5edb8428cef3968953faf27eeb6817f7f569 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00224505 30
0x1deac7aa548c4cc33541035d5ae6913f7c24d487867a561e8f7a564da6add435Unwrap88770242021-12-29 17:52:33453 days 18 hrs ago0xc24a06e22f93f3f8fce648db307220ac86e458a5 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00173205 30
0x1c37902c30627708dc2ded26e2c304684f32c5022c30dbaf99d9c7c3aa72fad3Wrap88758912021-12-29 17:13:27453 days 19 hrs ago0x7bf276333ebfbb532753e3c93764f310d9eac836 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00194907 30
0xe64f2ab008aae1e064f6ae87a5ff72dd5a80523b56ebf26678ee583af5182da1Unwrap88747822021-12-29 16:36:12453 days 19 hrs ago0x4b63fff1eacb6daa7d819194a583ecde5fb073b5 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00173241 30
0x89bd98300f394a6dbce320a761e04a2290276f45e41eee5c7e2958250dbeb344Unwrap88747192021-12-29 16:34:06453 days 19 hrs ago0x98c02c575e6195969232d47c8f65d1caabe1a20d IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00173205 30
0x24e450f03b448411eef91efaaae4ed4ce4975860549633ac117fb7d38b79b6b3Unwrap88740312021-12-29 16:11:10453 days 20 hrs ago0x0d081d72cc3ffae81d7539acec1fab1f65364e93 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00173205 30
0x1a8e4c3702d91322d25193fffe9b0b7833b35707f680afd12a8f34c2d743fdccUnwrap88738412021-12-29 16:04:53453 days 20 hrs ago0x274160d29bef4989579465b12697d673c2798487 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00173205 30
0xc960206411cad83e14fa14e3ad1ad967d70d54c0abf7b772627a052bc2b40d15Unwrap88719012021-12-29 15:03:02453 days 21 hrs ago0xc909855fc24e07535244a5f5f101b1caaaf57f48 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00173205 30
0x7946c970d5a20048fb67ce5508e16052cef646c35842d52989a279a21f0c89b1Wrap88709682021-12-29 14:32:03453 days 21 hrs ago0x4f419ea4c356aeb6e8ea33d3fc646d25d651d3b3 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00246207 30
0x263290acc9c44a661f216f5d675587dbfaa6b9f24cf5d40c1a70d04dd5a67e4fUnwrap88704842021-12-29 14:15:36453 days 22 hrs ago0x04e71c0684c2daca12a82456f55e7c181caeca20 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.0017320530
0x2483d309d51925aab60117758e851b8abe133f0489339ad9b75a55aa8bfea681Unwrap88696272021-12-29 13:46:52453 days 22 hrs ago0xbe7c3ce42bb976c6ea064a5cc9601e722a1cc267 IN  0x757dd1dcc4546e949cbf4369df13ebc768bfa0b20 AVAX0.00173205 30
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
wsGG

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-11-25
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.7.5;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @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 {ERC20PresetMinterPauser}.
 *
 * 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 IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name, string memory symbol) {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override 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 virtual override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(msg.sender, 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 virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].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 virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][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 virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][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 virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _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 virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _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 virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _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 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 virtual {
        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 Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface IsGG {
    function index() external view returns ( uint );
}

contract wsGG is ERC20 {
    using SafeERC20 for ERC20;
    using Address for address;
    using SafeMath for uint;

    address public immutable sGG;

    constructor( address _sGG ) ERC20( 'Wrapped sGG', 'wsGG' ) {
        require( _sGG != address(0) );
        sGG = _sGG;
    }

    /**
        @notice wrap sGG
        @param _amount uint
        @return uint
     */
    function wrap( uint _amount ) external returns ( uint ) {
        IERC20( sGG ).transferFrom( msg.sender, address(this), _amount );
        
        uint value = sGGTowsGG( _amount );
        _mint( msg.sender, value );
        return value;
    }

    /**
        @notice unwrap sGG
        @param _amount uint
        @return uint
     */
    function unwrap( uint _amount ) external returns ( uint ) {
        _burn( msg.sender, _amount );

        uint value = wsGGTosGG( _amount );
        IERC20( sGG ).transfer( msg.sender, value );
        return value;
    }

    /**
        @notice converts wsSB amount to sGG
        @param _amount uint
        @return uint
     */
    function wsGGTosGG( uint _amount ) public view returns ( uint ) {
        return _amount.mul( IsGG( sGG ).index() ).div( 10 ** decimals() );
    }

    /**
        @notice converts sGG amount to wsGG
        @param _amount uint
        @return uint
     */
    function sGGTowsGG( uint _amount ) public view returns ( uint ) {
        return _amount.mul( 10 ** decimals() ).div( IsGG( sGG                                                ).index() );
    }

}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_sGG","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sGG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sGGTowsGG","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unwrap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"wrap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"wsGGTosGG","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60a06040523480156200001157600080fd5b50604051620012cf380380620012cf833981810160405260208110156200003757600080fd5b5051604080518082018252600b81526a577261707065642073474760a81b6020828101918252835180850190945260048452637773474760e01b9084015281519192916200008891600391620000d8565b5080516200009e906004906020840190620000d8565b50506005805460ff19166012179055506001600160a01b038116620000c257600080fd5b60601b6001600160601b03191660805262000184565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200011057600085556200015b565b82601f106200012b57805160ff19168380011785556200015b565b828001600101855582156200015b579182015b828111156200015b5782518255916020019190600101906200013e565b50620001699291506200016d565b5090565b5b808211156200016957600081556001016200016e565b60805160601c611119620001b66000398061050a52806105c3528061064f528061078f528061088052506111196000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80635d33589211610097578063a9059cbb11610066578063a9059cbb14610314578063dd62ed3e14610340578063de0e9a3e1461036e578063ea598cb01461038b57610100565b80635d3358921461029657806370a08231146102ba57806395d89b41146102e0578063a457c2d7146102e857610100565b8063313ce567116100d3578063313ce5671461021257806339509351146102305780634112057a1461025c5780634566e8aa1461027957610100565b806306fdde0314610105578063095ea7b31461018257806318160ddd146101c257806323b872dd146101dc575b600080fd5b61010d6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014757818101518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101ae6004803603604081101561019857600080fd5b506001600160a01b03813516906020013561043e565b604080519115158252519081900360200190f35b6101ca610455565b60408051918252519081900360200190f35b6101ae600480360360608110156101f257600080fd5b506001600160a01b0381358116916020810135909116906040013561045b565b61021a6104c4565b6040805160ff9092168252519081900360200190f35b6101ae6004803603604081101561024657600080fd5b506001600160a01b0381351690602001356104cd565b6101ca6004803603602081101561027257600080fd5b5035610503565b6101ca6004803603602081101561028f57600080fd5b50356105ab565b61029e61064d565b604080516001600160a01b039092168252519081900360200190f35b6101ca600480360360208110156102d057600080fd5b50356001600160a01b0316610671565b61010d61068c565b6101ae600480360360408110156102fe57600080fd5b506001600160a01b0381351690602001356106ed565b6101ae6004803603604081101561032a57600080fd5b506001600160a01b03813516906020013561073c565b6101ca6004803603604081101561035657600080fd5b506001600160a01b0381358116916020013516610749565b6101ca6004803603602081101561038457600080fd5b5035610774565b6101ca600480360360208110156103a157600080fd5b5035610837565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104345780601f1061040957610100808354040283529160200191610434565b820191906000526020600020905b81548152906001019060200180831161041757829003601f168201915b5050505050905090565b600061044b33848461090c565b5060015b92915050565b60025490565b60006104688484846109f8565b6104ba84336104b58560405180606001604052806028815260200161102d602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190610b53565b61090c565b5060019392505050565b60055460ff1690565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161044b9185906104b59086610bea565b600061044f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632986c0e56040518163ffffffff1660e01b815260040160206040518083038186803b15801561056157600080fd5b505afa158015610575573d6000803e3d6000fd5b505050506040513d602081101561058b57600080fd5b50516105a56105986104c4565b859060ff16600a0a610c4b565b90610ca4565b600061044f6105b86104c4565b60ff16600a0a6105a57f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632986c0e56040518163ffffffff1660e01b815260040160206040518083038186803b15801561061a57600080fd5b505afa15801561062e573d6000803e3d6000fd5b505050506040513d602081101561064457600080fd5b50518590610c4b565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104345780601f1061040957610100808354040283529160200191610434565b600061044b33846104b5856040518060600160405280602581526020016110bf602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190610b53565b600061044b3384846109f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006107803383610ce6565b600061078b836105ab565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb33836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561080457600080fd5b505af1158015610818573d6000803e3d6000fd5b505050506040513d602081101561082e57600080fd5b50909392505050565b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810183905290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916323b872dd9160648082019260209290919082900301818787803b1580156108c857600080fd5b505af11580156108dc573d6000803e3d6000fd5b505050506040513d60208110156108f257600080fd5b506000905061090083610503565b905061044f3382610de2565b6001600160a01b0383166109515760405162461bcd60e51b815260040180806020018281038252602481526020018061109b6024913960400191505060405180910390fd5b6001600160a01b0382166109965760405162461bcd60e51b8152600401808060200182810382526022815260200180610fc46022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610a3d5760405162461bcd60e51b81526004018080602001828103825260258152602001806110766025913960400191505060405180910390fd5b6001600160a01b038216610a825760405162461bcd60e51b8152600401808060200182810382526023815260200180610f7f6023913960400191505060405180910390fd5b610a8d838383610ed2565b610aca81604051806060016040528060268152602001610fe6602691396001600160a01b0386166000908152602081905260409020549190610b53565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610af99082610bea565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610be25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ba7578181015183820152602001610b8f565b50505050905090810190601f168015610bd45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610c44576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082610c5a5750600061044f565b82820282848281610c6757fe5b0414610c445760405162461bcd60e51b815260040180806020018281038252602181526020018061100c6021913960400191505060405180910390fd5b6000610c4483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610ed7565b6001600160a01b038216610d2b5760405162461bcd60e51b81526004018080602001828103825260218152602001806110556021913960400191505060405180910390fd5b610d3782600083610ed2565b610d7481604051806060016040528060228152602001610fa2602291396001600160a01b0385166000908152602081905260409020549190610b53565b6001600160a01b038316600090815260208190526040902055600254610d9a9082610f3c565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038216610e3d576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e4960008383610ed2565b600254610e569082610bea565b6002556001600160a01b038216600090815260208190526040902054610e7c9082610bea565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b60008183610f265760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ba7578181015183820152602001610b8f565b506000838581610f3257fe5b0495945050505050565b6000610c4483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610b5356fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d9e07d3c6405e1443679ec7a216ceb5101ce673040efafaa63d67cbe5a2f693e64736f6c634300070500330000000000000000000000002482ec3928adf1718caa5956608684f5a54e14d0

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

0000000000000000000000002482ec3928adf1718caa5956608684f5a54e14d0

-----Decoded View---------------
Arg [0] : _sGG (address): 0x2482ec3928adf1718caa5956608684f5a54e14d0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002482ec3928adf1718caa5956608684f5a54e14d0


Deployed ByteCode Sourcemap

28621:1572:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16113:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18217:167;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18217:167:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;17188:100;;;:::i;:::-;;;;;;;;;;;;;;;;18858:317;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18858:317:0;;;;;;;;;;;;;;;;;:::i;17040:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19584:214;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19584:214:0;;;;;;;;:::i;29993:195::-;;;;;;;;;;;;;;;;-1:-1:-1;29993:195:0;;:::i;29723:148::-;;;;;;;;;;;;;;;;-1:-1:-1;29723:148:0;;:::i;28747:28::-;;;:::i;:::-;;;;-1:-1:-1;;;;;28747:28:0;;;;;;;;;;;;;;17351:119;;;;;;;;;;;;;;;;-1:-1:-1;17351:119:0;-1:-1:-1;;;;;17351:119:0;;:::i;16315:87::-;;;:::i;20301:265::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20301:265:0;;;;;;;;:::i;17683:173::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17683:173:0;;;;;;;;:::i;17919:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17919:151:0;;;;;;;;;;:::i;29373:228::-;;;;;;;;;;;;;;;;-1:-1:-1;29373:228:0;;:::i;29015:253::-;;;;;;;;;;;;;;;;-1:-1:-1;29015:253:0;;:::i;16113:83::-;16183:5;16176:12;;;;;;;;-1:-1:-1;;16176:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16150:13;;16176:12;;16183:5;;16176:12;;16183:5;16176:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16113:83;:::o;18217:167::-;18300:4;18317:37;18326:10;18338:7;18347:6;18317:8;:37::i;:::-;-1:-1:-1;18372:4:0;18217:167;;;;;:::o;17188:100::-;17268:12;;17188:100;:::o;18858:317::-;18964:4;18981:36;18991:6;18999:9;19010:6;18981:9;:36::i;:::-;19028:117;19037:6;19045:10;19057:87;19093:6;19057:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19057:19:0;;;;;;:11;:19;;;;;;;;19077:10;19057:31;;;;;;;;;:87;:35;:87::i;:::-;19028:8;:117::i;:::-;-1:-1:-1;19163:4:0;18858:317;;;;;:::o;17040:83::-;17106:9;;;;17040:83;:::o;19584:214::-;19698:10;19672:4;19719:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;19719:32:0;;;;;;;;;;19672:4;;19689:79;;19710:7;;19719:48;;19756:10;19719:36;:48::i;29993:195::-;30050:4;30075:105;30118:3;-1:-1:-1;;;;;30112:64:0;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30112:66:0;30075:31;30094:10;:8;:10::i;:::-;30075:7;;30088:16;;:2;:16;30075:11;:31::i;:::-;:35;;:105::i;29723:148::-;29780:4;29805:58;29851:10;:8;:10::i;:::-;29845:16;;:2;:16;29805:34;29824:3;-1:-1:-1;;;;;29818:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29818:19:0;29805:7;;:11;:34::i;28747:28::-;;;:::o;17351:119::-;-1:-1:-1;;;;;17444:18:0;17417:7;17444:18;;;;;;;;;;;;17351:119::o;16315:87::-;16387:7;16380:14;;;;;;;;-1:-1:-1;;16380:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16354:13;;16380:14;;16387:7;;16380:14;;16387:7;16380:14;;;;;;;;;;;;;;;;;;;;;;;;20301:265;20394:4;20411:125;20420:10;20432:7;20441:94;20478:15;20441:94;;;;;;;;;;;;;;;;;20453:10;20441:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20441:32:0;;;;;;;;;;;:94;:36;:94::i;17683:173::-;17769:4;17786:40;17796:10;17808:9;17819:6;17786:9;:40::i;17919:151::-;-1:-1:-1;;;;;18035:18:0;;;18008:7;18035:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17919:151::o;29373:228::-;29424:4;29442:28;29449:10;29461:7;29442:5;:28::i;:::-;29483:10;29496:20;29507:7;29496:9;:20::i;:::-;29483:33;;29535:3;-1:-1:-1;;;;;29527:22:0;;29551:10;29563:5;29527:43;;;;;;;;;;;;;-1:-1:-1;;;;;29527:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29588:5:0;;29373:228;-1:-1:-1;;;29373:228:0:o;29015:253::-;29082:64;;;;;;29110:10;29082:64;;;;29130:4;29082:64;;;;;;;;;;;;29064:4;;-1:-1:-1;;;;;29090:3:0;29082:26;;;;:64;;;;;;;;;;;;;;;29064:4;29082:26;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29167:10:0;;-1:-1:-1;29180:20:0;29191:7;29180:9;:20::i;:::-;29167:33;;29211:26;29218:10;29230:5;29211;:26::i;23442:346::-;-1:-1:-1;;;;;23544:19:0;;23536:68;;;;-1:-1:-1;;;23536:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23623:21:0;;23615:68;;;;-1:-1:-1;;;23615:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23696:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23748:32;;;;;;;;;;;;;;;;;23442:346;;;:::o;21056:539::-;-1:-1:-1;;;;;21162:20:0;;21154:70;;;;-1:-1:-1;;;21154:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21243:23:0;;21235:71;;;;-1:-1:-1;;;21235:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21319:47;21340:6;21348:9;21359:6;21319:20;:47::i;:::-;21399:71;21421:6;21399:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21399:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;21379:17:0;;;:9;:17;;;;;;;;;;;:91;;;;21504:20;;;;;;;:32;;21529:6;21504:24;:32::i;:::-;-1:-1:-1;;;;;21481:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;21552:35;;;;;;;21481:20;;21552:35;;;;;;;;;;;;;21056:539;;;:::o;4515:192::-;4601:7;4637:12;4629:6;;;;4621:29;;;;-1:-1:-1;;;4621:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4673:5:0;;;4515:192::o;3612:181::-;3670:7;3702:5;;;3726:6;;;;3718:46;;;;;-1:-1:-1;;;3718:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3784:1;3612:181;-1:-1:-1;;;3612:181:0:o;4966:471::-;5024:7;5269:6;5265:47;;-1:-1:-1;5299:1:0;5292:8;;5265:47;5336:5;;;5340:1;5336;:5;:1;5360:5;;;;;:10;5352:56;;;;-1:-1:-1;;;5352:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5913:132;5971:7;5998:39;6002:1;6005;5998:39;;;;;;;;;;;;;;;;;:3;:39::i;22586:418::-;-1:-1:-1;;;;;22670:21:0;;22662:67;;;;-1:-1:-1;;;22662:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22742:49;22763:7;22780:1;22784:6;22742:20;:49::i;:::-;22825:68;22848:6;22825:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22825:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;22804:18:0;;:9;:18;;;;;;;;;;:89;22919:12;;:24;;22936:6;22919:16;:24::i;:::-;22904:12;:39;22959:37;;;;;;;;22985:1;;-1:-1:-1;;;;;22959:37:0;;;;;;;;;;;;22586:418;;:::o;21876:378::-;-1:-1:-1;;;;;21960:21:0;;21952:65;;;;;-1:-1:-1;;;21952:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22030:49;22059:1;22063:7;22072:6;22030:20;:49::i;:::-;22107:12;;:24;;22124:6;22107:16;:24::i;:::-;22092:12;:39;-1:-1:-1;;;;;22163:18:0;;:9;:18;;;;;;;;;;;:30;;22186:6;22163:22;:30::i;:::-;-1:-1:-1;;;;;22142:18:0;;:9;:18;;;;;;;;;;;:51;;;;22209:37;;;;;;;22142:18;;:9;;22209:37;;;;;;;;;;21876:378;;:::o;24813:92::-;;;;:::o;6541:278::-;6627:7;6662:12;6655:5;6647:28;;;;-1:-1:-1;;;6647:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6686:9;6702:1;6698;:5;;;;;;;6541:278;-1:-1:-1;;;;;6541:278:0:o;4076:136::-;4134:7;4161:43;4165:1;4168;4161:43;;;;;;;;;;;;;;;;;:3;:43::i

Swarm Source

ipfs://d9e07d3c6405e1443679ec7a216ceb5101ce673040efafaa63d67cbe5a2f693e
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.