ETH Price: $2,083.20 (-3.28%)
Gas: 0.04 Gwei

Contract

0x6c8f43e69830B4e9DDF4f0D57C5EDA82e2c3718C
 

Overview

ETH Balance

0.232868887430400321 ETH

Eth Value

$485.11 (@ $2,083.20/ETH)

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Dividen...209992032024-10-19 11:05:23518 days ago1729335923IN
MafiaBears: BMS Token
0 ETH0.000501267.51101011
Mint For Honey168480142023-03-17 14:05:591100 days ago1679061959IN
MafiaBears: BMS Token
0 ETH0.0038450138.7891223
Mint For Eth167801702023-03-08 1:06:591110 days ago1678237619IN
MafiaBears: BMS Token
0.0178 ETH0.0036051748.51071335
Withdraw Dividen...167088002023-02-26 0:18:351120 days ago1677370715IN
MafiaBears: BMS Token
0 ETH0.0010508721.17124142
Withdraw Dividen...166938462023-02-23 21:44:351122 days ago1677188675IN
MafiaBears: BMS Token
0 ETH0.0025517838.23636713
Withdraw Dividen...162871502022-12-29 1:31:351179 days ago1672277495IN
MafiaBears: BMS Token
0 ETH0.001032320.79707839
Withdraw Dividen...161500332022-12-09 22:09:231198 days ago1670623763IN
MafiaBears: BMS Token
0 ETH0.0009925119.99538921
Withdraw Dividen...160837842022-11-30 15:46:351207 days ago1669823195IN
MafiaBears: BMS Token
0 ETH0.0006377112.84766606
Mint For Honey160530462022-11-26 8:44:111212 days ago1669452251IN
MafiaBears: BMS Token
0 ETH0.0012781712.89286691
Withdraw Dividen...159558062022-11-12 18:44:111225 days ago1668278651IN
MafiaBears: BMS Token
0 ETH0.0006511813.11895433
Withdraw159557902022-11-12 18:40:591225 days ago1668278459IN
MafiaBears: BMS Token
0 ETH0.000392812.70343436
Distribute159557712022-11-12 18:37:111225 days ago1668278231IN
MafiaBears: BMS Token
0 ETH0.000596413.83665135
Mint For Eth159540792022-11-12 12:57:351225 days ago1668257855IN
MafiaBears: BMS Token
0.1 ETH0.0014591715.95965186
Withdraw Dividen...159517662022-11-12 5:12:351226 days ago1668229955IN
MafiaBears: BMS Token
0 ETH0.0011167716.73390488
Mint For Eth156216442022-09-27 2:14:591272 days ago1664244899IN
MafiaBears: BMS Token
0.005 ETH0.0007318212.79029897
Mint For Honey155955162022-09-23 10:41:351275 days ago1663929695IN
MafiaBears: BMS Token
0 ETH0.000460377.09205064
Mint For Eth155724162022-09-20 4:48:351279 days ago1663649315IN
MafiaBears: BMS Token
0.03 ETH0.000374346.54120063
Mint For Honey155192172022-09-12 5:44:511287 days ago1662961491IN
MafiaBears: BMS Token
0 ETH0.000583668.98971127
Mint For Honey154662912022-09-03 15:59:051295 days ago1662220745IN
MafiaBears: BMS Token
0 ETH0.000542948.36413061
Withdraw Dividen...153822922022-08-21 6:07:321309 days ago1661062052IN
MafiaBears: BMS Token
0 ETH0.000262725.29293544
Withdraw Dividen...153302632022-08-13 0:44:251317 days ago1660351465IN
MafiaBears: BMS Token
0 ETH0.0009558919.25778818
Mint For Eth152806522022-08-05 6:19:191325 days ago1659680359IN
MafiaBears: BMS Token
0.01 ETH0.0011378312.44666583
Withdraw Dividen...152390752022-07-29 18:39:491331 days ago1659119989IN
MafiaBears: BMS Token
0 ETH0.0009926619.99856888
Withdraw Dividen...152050602022-07-24 11:30:401336 days ago1658662240IN
MafiaBears: BMS Token
0 ETH0.00040938.24595311
Withdraw Dividen...151843542022-07-21 6:36:051340 days ago1658385365IN
MafiaBears: BMS Token
0 ETH0.0005888611.86352919
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer209992032024-10-19 11:05:23518 days ago1729335923
MafiaBears: BMS Token
0.03063757 ETH
Transfer167088002023-02-26 0:18:351120 days ago1677370715
MafiaBears: BMS Token
0.00073849 ETH
Transfer166938462023-02-23 21:44:351122 days ago1677188675
MafiaBears: BMS Token
0.05430346 ETH
Transfer162871502022-12-29 1:31:351179 days ago1672277495
MafiaBears: BMS Token
0.02461654 ETH
Transfer161500332022-12-09 22:09:231198 days ago1670623763
MafiaBears: BMS Token
0.00301552 ETH
Transfer160837842022-11-30 15:46:351207 days ago1669823195
MafiaBears: BMS Token
0.00160007 ETH
Transfer159558062022-11-12 18:44:111225 days ago1668278651
MafiaBears: BMS Token
0.03547805 ETH
Transfer159557902022-11-12 18:40:591225 days ago1668278459
MafiaBears: BMS Token
0.3155 ETH
Transfer159557682022-11-12 18:36:351225 days ago1668278195
MafiaBears: BMS Token
0.066 ETH
Transfer159517662022-11-12 5:12:351226 days ago1668229955
MafiaBears: BMS Token
0.04646004 ETH
Transfer159108652022-11-06 12:05:471231 days ago1667736347
MafiaBears: BMS Token
0.0019 ETH
Transfer153822922022-08-21 6:07:321309 days ago1661062052
MafiaBears: BMS Token
0.00081368 ETH
Transfer153302632022-08-13 0:44:251317 days ago1660351465
MafiaBears: BMS Token
0.00739981 ETH
Transfer152390752022-07-29 18:39:491331 days ago1659119989
MafiaBears: BMS Token
0.02219891 ETH
Transfer152050602022-07-24 11:30:401336 days ago1658662240
MafiaBears: BMS Token
0.00040684 ETH
Transfer151843542022-07-21 6:36:051340 days ago1658385365
MafiaBears: BMS Token
0.00904421 ETH
Transfer151842442022-07-21 6:13:131340 days ago1658383993
MafiaBears: BMS Token
0.00167009 ETH
Transfer151599332022-07-17 11:35:341343 days ago1658057734
MafiaBears: BMS Token
0.004646 ETH
Transfer151589582022-07-17 7:55:471344 days ago1658044547
MafiaBears: BMS Token
0.00406844 ETH
Transfer151325882022-07-13 6:05:041348 days ago1657692304
MafiaBears: BMS Token
0.0049332 ETH
Transfer151319312022-07-13 3:39:151348 days ago1657683555
MafiaBears: BMS Token
0.02137724 ETH
Transfer151316982022-07-13 2:43:121348 days ago1657680192
MafiaBears: BMS Token
0.002 ETH
Transfer151274042022-07-12 10:52:011348 days ago1657623121
MafiaBears: BMS Token
0.03457798 ETH
Transfer151252662022-07-12 2:51:091349 days ago1657594269
MafiaBears: BMS Token
0.002 ETH
Transfer151248462022-07-12 1:20:581349 days ago1657588858
MafiaBears: BMS Token
0.00264449 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BMShares

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

import "contracts/AbstractDividends.sol";
import "contracts/Killswitch.sol";

import "contracts/IBMShares.sol";
import "contracts/IHoney.sol";
import "contracts/CCMath.sol";

contract BMShares is IBMShares, ERC20, AbstractDividends, Killswitch {
    using CCMath for uint256;

    IHoney private _honey;

    uint256 private priceHoney = 0;
    uint256 private priceEth = 0;

    uint256 private constant MAX_SUPPLY = 500e6;
    uint256 private constant MINTABLE_FOR_ETH_SUPPLY = 100e6;
    uint256 private mintedForEth = 0;

    constructor(string memory name_, string memory symbol_, IHoney honey) ERC20(name_, symbol_) {
        require(address(honey) != address(0), "IHoney must be specified");
        _honey = honey;
        _mintInternal(msg.sender, 10000);

        setPriceEth(1e14);
        setPriceHoney(10e18);
    }

    function mintForHoney(address for_, uint256 amount, uint256 value) external override killswitch {
        require(value >= amount * priceHoney, "value doesn't match");
        address spender = msg.sender;
        _honey.burn(spender, priceHoney * amount);
        _mintInternal(for_, amount);
    }

    function mintForEth(address for_, uint256 amount) external override payable killswitch {
        require(mintedForEth + amount <= MINTABLE_FOR_ETH_SUPPLY, "can't mint above allowed");
        require(msg.value >= amount * priceEth, "value doesn't match");
        mintedForEth = mintedForEth.add(amount);
        _mintInternal(for_, amount);

        _increaseOwnerBalance(msg.value);
    }

    function _mintInternal(address for_, uint256 amount) private {
        require(amount > 0, "0 amount");
        require(totalSupply() + amount <= MAX_SUPPLY, "can't mint above MAX_SUPPLY");
        _mint(for_, amount);
    }

    function decimals() public pure override returns (uint8) {
        return 0;
    }

    function _sharesOf(address holder) internal override view returns (int256) {
        return int256(balanceOf(holder));
    }

    function _totalShares() internal override view returns (uint256)
    {
        return totalSupply();
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal override {
        if (from != address(0)) {
            _unstake(from, amount);
        }

        if (to != address(0)) {
            _stake(to, amount);
        }
    }

    function getPriceEth() external view override returns (uint256) {
        return priceEth;
    }

    function getPriceHoney() external view override returns (uint256) {
        return priceHoney;
    }

    function availableForEth() external view override returns (uint256) {
        return MINTABLE_FOR_ETH_SUPPLY.sub(mintedForEth);
    }

    function setPriceEth(uint256 price) public override onlyOwner {
        priceEth = price;
    }

    function setPriceHoney(uint256 price) public override onlyOwner {
        priceHoney = price;
    }

    function withdrawDividends() external override {
        _withdrawFor(payable(msg.sender));
    }

    function withdraw() external override onlyOwner {
        uint256 amount = _getOwnerBalance();
        _decreaseOwnerBalance(amount);
        address payable to_ = payable(owner());
        to_.transfer(amount);
    }

    // solhint-disable-next-line no-empty-blocks
    receive() external payable {
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @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 Contracts guidelines: functions revert
 * instead 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, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override 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 this function is
     * overridden;
     *
     * 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 virtual override returns (uint8) {
        return 18;
    }

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        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(_msgSender(), spender, _allowances[_msgSender()][spender] + 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This 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);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(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:
     *
     * - `account` 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 += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(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 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 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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

import "contracts/IDividends.sol";
import "contracts/CCMath.sol";

abstract contract AbstractDividends is IDividends {
    using CCMath for uint256;

    struct Account {
        uint256 withdrawn;
        int256 ptsCorrection;
    }

    mapping (address => Account) private _stakeHolders;

    uint256 constant private PM = type(uint128).max;
    uint256 private _pointsPerShare = 0;

    uint256 private _expectedBalance = 0;
    uint256 private _totalDistributed = 0;
    uint256 private _ownerBalance = 0;

    event PaymentDistributed(uint256 amount);
    event Withdrawn(address holder, uint256 amount);

    modifier correctPts(address holder, int256 shares) {
        _stakeHolders[holder].ptsCorrection += int256(_pointsPerShare) * shares;
        _;
    }

    function _sharesOf(address holder) internal virtual view returns (int256);
    function _totalShares() internal virtual view returns (uint256);

    function totalDistributed() external view override returns (uint256) {
        return _totalDistributed;
    }

    function withdrawableBy(address holder) public view override returns (uint256) {
        int256 correction = _stakeHolders[holder].ptsCorrection;
        int256 cumulative = (int256(_pointsPerShare) * _sharesOf(holder) + correction) / int256(PM);
        int256 withdrawn = int256(withdrawnBy(holder));
        uint256 r = cumulative > withdrawn ? uint256(cumulative - withdrawn) : 0;
        return r;
    }

    function withdrawnBy(address holder) public view override returns (uint256) {
        return _stakeHolders[holder].withdrawn;
    }

    function undistributedBalance() public view override returns (uint256) {
        uint256 contractBalance = address(this).balance.sub(_ownerBalance);
        uint256 undistributed = contractBalance > _expectedBalance ? contractBalance.sub(_expectedBalance) : 0;
        return undistributed;
    }

    function distribute() external override {
        _distribute(undistributedBalance());
    }

    function _distribute(uint256 amount) internal {
        require(_totalShares() > 0, "no stakeholders");
        if (amount > 0) {
            _totalDistributed += amount;
            _expectedBalance += amount;
            _pointsPerShare = amount.mul(PM).div(_totalShares()).add(_pointsPerShare);
            emit PaymentDistributed(amount);
        }
    }

    // solhint-disable-next-line no-empty-blocks
    function _stake(address holder, uint256 shares) internal correctPts(holder, -int256(shares)) {
    }

    // solhint-disable-next-line no-empty-blocks
    function _unstake(address holder, uint256 shares) internal correctPts(holder, int256(shares)) {
    }

    function _increaseOwnerBalance(uint256 amount) internal {
        _ownerBalance = _ownerBalance.add(amount);
    }

    function _decreaseOwnerBalance(uint256 amount) internal {
        _ownerBalance = _ownerBalance.sub(amount);
    }

    function _getOwnerBalance() internal view returns (uint256) {
        return _ownerBalance;
    }

    function _withdrawFor(address payable holder) internal {
        uint256 amount = withdrawableBy(holder);
        if (amount == 0) return;

        uint256 contractBalance = address(this).balance - _ownerBalance;
        require(contractBalance >= amount, "unexpected balance state");

        _stakeHolders[holder].withdrawn += amount;
        _expectedBalance -= amount;
        emit Withdrawn(holder, amount);
        holder.transfer(amount);
    }
}

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/access/Ownable.sol";
import "contracts/IKillswitch.sol";

contract Killswitch is Ownable, IKillswitch {
    bool private _enabled = false;

    modifier killswitch() {
        require(!!_enabled, "contract disabled");
        _;
    }

    function isEnabled() external view override returns (bool)
    {
        return _enabled;
    }

    function enableContract() public override onlyOwner {
        _enabled = true;
    }

    function disableContract() public override onlyOwner {
        _enabled = false;
    }
}

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "contracts/IDividends.sol";
import "contracts/IKillswitch.sol";

interface IBMShares is IDividends, IERC20, IKillswitch {
    function mintForHoney(address for_, uint256 amount, uint256 value) external;
    function mintForEth(address for_, uint256 amount) external payable;

    function getPriceEth() external view returns (uint256);
    function getPriceHoney() external view returns (uint256);

    function availableForEth() external view returns (uint256);

    function setPriceEth(uint256 price) external;
    function setPriceHoney(uint256 price) external;
}

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "contracts/IValidator.sol";

interface IHoney is IERC20, IValidator {
    function mint(address for_, uint256 amount) external;
    function burn(address for_, uint256 amount) external;
}

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

library CCMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "add overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(a >= b, "sub overflow");
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;

        uint256 c = a * b;
        require(c / a == b, "mul overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "division by zero");
        return a / b;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @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);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.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 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.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

interface IDividends {
    function withdrawableBy(address investor) external view returns (uint256);
    function withdrawnBy(address investor) external view returns (uint256);
    function totalDistributed() external view returns (uint256);
    function undistributedBalance() external view returns (uint256);

    function distribute() external;
    function withdrawDividends() external;
    function withdraw() external;
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

interface IKillswitch {
    function isEnabled() external view returns (bool);
    function enableContract() external;
    function disableContract() external;
}

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

interface IValidator {
    function allowValidator(address validatorAddress) external;
    function disallowValidator(address validatorAddress) external;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"contract IHoney","name":"honey","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentDistributed","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","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":[],"name":"availableForEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"pure","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":[],"name":"disableContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPriceEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceHoney","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"isEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"for_","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintForEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"for_","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mintForHoney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPriceEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPriceHoney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"undistributedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"withdrawableBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"withdrawnBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600781905560088190556009819055600a819055600b805460ff19169055600c819055600d819055600e553480156200003e57600080fd5b5060405162002298380380620022988339810160408190526200006191620005eb565b82826200006e3362000153565b81516200008390600490602085019062000492565b5080516200009990600590602084019062000492565b5050506001600160a01b038116620000f85760405162461bcd60e51b815260206004820152601860248201527f49486f6e6579206d75737420626520737065636966696564000000000000000060448201526064015b60405180910390fd5b600b8054610100600160a81b0319166101006001600160a01b038416021790556200012633612710620001a3565b62000137655af3107a40006200025c565b6200014a678ac7230489e80000620002ac565b505050620007eb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008111620001e05760405162461bcd60e51b81526020600482015260086024820152670c08185b5bdd5b9d60c21b6044820152606401620000ef565b631dcd650081620001f060035490565b620001fc9190620006bb565b11156200024c5760405162461bcd60e51b815260206004820152601b60248201527f63616e2774206d696e742061626f7665204d41585f535550504c5900000000006044820152606401620000ef565b620002588282620002fc565b5050565b6000546001600160a01b03163314620002a75760405162461bcd60e51b81526020600482018190526024820152600080516020620022788339815191526044820152606401620000ef565b600d55565b6000546001600160a01b03163314620002f75760405162461bcd60e51b81526020600482018190526024820152600080516020620022788339815191526044820152606401620000ef565b600c55565b6001600160a01b038216620003545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620000ef565b6200036260008383620003ef565b8060036000828254620003769190620006bb565b90915550506001600160a01b03821660009081526001602052604081208054839290620003a5908490620006bb565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038316156200040b576200040b83826200042c565b6001600160a01b03821615620004275762000427828262000476565b505050565b8181806007546200043e9190620006d6565b6001600160a01b038316600090815260066020526040812060010180549091906200046b90849062000674565b909155505050505050565b816200048282620007a2565b806007546200043e9190620006d6565b828054620004a09062000765565b90600052602060002090601f016020900481019282620004c457600085556200050f565b82601f10620004df57805160ff19168380011785556200050f565b828001600101855582156200050f579182015b828111156200050f578251825591602001919060010190620004f2565b506200051d92915062000521565b5090565b5b808211156200051d576000815560010162000522565b600082601f83011262000549578081fd5b81516001600160401b0380821115620005665762000566620007d5565b604051601f8301601f19908116603f01168101908282118183101715620005915762000591620007d5565b81604052838152602092508683858801011115620005ad578485fd5b8491505b83821015620005d05785820183015181830184015290820190620005b1565b83821115620005e157848385830101525b9695505050505050565b60008060006060848603121562000600578283fd5b83516001600160401b038082111562000617578485fd5b620006258783880162000538565b945060208601519150808211156200063b578384fd5b506200064a8682870162000538565b604086015190935090506001600160a01b038116811462000669578182fd5b809150509250925092565b600080821280156001600160ff1b0384900385131615620006995762000699620007bf565b600160ff1b8390038412811615620006b557620006b5620007bf565b50500190565b60008219821115620006d157620006d1620007bf565b500190565b60006001600160ff1b0381841382841380821686840486111615620006ff57620006ff620007bf565b600160ff1b84871282811687830589121615620007205762000720620007bf565b8587129250878205871284841616156200073e576200073e620007bf565b87850587128184161615620007575762000757620007bf565b505050929093029392505050565b600181811c908216806200077a57607f821691505b602082108114156200079c57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600160ff1b821415620007bb57620007bb620007bf565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b611a7d80620007fb6000396000f3fe6080604052600436106101dc5760003560e01c806370a0823111610102578063a9059cbb11610095578063e3f4420411610064578063e3f4420414610537578063e4fc6b6d14610557578063efca2eed1461056c578063f2fde38b1461058157600080fd5b8063a9059cbb146104a7578063c0a86a4a146104c7578063c6773224146104dc578063dd62ed3e146104f157600080fd5b80638da5cb5b116100d15780638da5cb5b14610435578063900c83181461045d57806395d89b4114610472578063a457c2d71461048757600080fd5b806370a08231146103b5578063715018a6146103eb578063813e943b14610400578063894ba8331461042057600080fd5b80632e92abdd1161017a5780633ccfd60b116101495780633ccfd60b146103605780635a8f8ab514610375578063603c2cb51461038a5780636aa633b61461039d57600080fd5b80632e92abdd146102fa578063313ce5671461030f578063367edd321461032b578063395093511461034057600080fd5b806318032e40116101b657806318032e401461026557806318160ddd1461028557806322052d07146102a457806323b872dd146102da57600080fd5b80630249d624146101e857806306fdde031461020a578063095ea7b31461023557600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611793565b6105a1565b005b34801561021657600080fd5b5061021f6105d9565b60405161022c91906117ab565b60405180910390f35b34801561024157600080fd5b50610255610250366004611738565b61066b565b604051901515815260200161022c565b34801561027157600080fd5b50610208610280366004611761565b610682565b34801561029157600080fd5b506003545b60405190815260200161022c565b3480156102b057600080fd5b506102966102bf3660046116b1565b6001600160a01b031660009081526006602052604090205490565b3480156102e657600080fd5b506102556102f53660046116fd565b6107b2565b34801561030657600080fd5b5061020861085c565b34801561031b57600080fd5b506040516000815260200161022c565b34801561033757600080fd5b50610208610867565b34801561034c57600080fd5b5061025561035b366004611738565b6108a0565b34801561036c57600080fd5b506102086108dc565b34801561038157600080fd5b50600c54610296565b610208610398366004611738565b61095d565b3480156103a957600080fd5b50600b5460ff16610255565b3480156103c157600080fd5b506102966103d03660046116b1565b6001600160a01b031660009081526001602052604090205490565b3480156103f757600080fd5b50610208610a7d565b34801561040c57600080fd5b5061020861041b366004611793565b610ab1565b34801561042c57600080fd5b50610208610ae0565b34801561044157600080fd5b506000546040516001600160a01b03909116815260200161022c565b34801561046957600080fd5b50610296610b16565b34801561047e57600080fd5b5061021f610b57565b34801561049357600080fd5b506102556104a2366004611738565b610b66565b3480156104b357600080fd5b506102556104c2366004611738565b610bff565b3480156104d357600080fd5b50600d54610296565b3480156104e857600080fd5b50610296610c0c565b3480156104fd57600080fd5b5061029661050c3660046116cb565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561054357600080fd5b506102966105523660046116b1565b610c2c565b34801561056357600080fd5b50610208610cc5565b34801561057857600080fd5b50600954610296565b34801561058d57600080fd5b5061020861059c3660046116b1565b610cd5565b6000546001600160a01b031633146105d45760405162461bcd60e51b81526004016105cb906117fe565b60405180910390fd5b600d55565b6060600480546105e8906119c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610614906119c6565b80156106615780601f1061063657610100808354040283529160200191610661565b820191906000526020600020905b81548152906001019060200180831161064457829003601f168201915b5050505050905090565b6000610678338484610d70565b5060015b92915050565b600b5460ff166106c85760405162461bcd60e51b815260206004820152601160248201527018dbdb9d1c9858dd08191a5cd8589b1959607a1b60448201526064016105cb565b600c546106d59083611951565b81101561071a5760405162461bcd60e51b81526020600482015260136024820152720ecc2d8eaca40c8decae6dc4ee840dac2e8c6d606b1b60448201526064016105cb565b600b54600c54339161010090046001600160a01b031690639dc29fac908390610744908790611951565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b505050506107ac8484610e94565b50505050565b60006107bf848484610f40565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156108445760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016105cb565b6108518533858403610d70565b506001949350505050565b61086533611119565b565b6000546001600160a01b031633146108915760405162461bcd60e51b81526004016105cb906117fe565b600b805460ff19166001179055565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106789185906108d7908690611874565b610d70565b6000546001600160a01b031633146109065760405162461bcd60e51b81526004016105cb906117fe565b6000610911600a5490565b905061091c8161124f565b600080546040516001600160a01b039091169182916108fc85150291859190818181858888f19350505050158015610958573d6000803e3d6000fd5b505050565b600b5460ff166109a35760405162461bcd60e51b815260206004820152601160248201527018dbdb9d1c9858dd08191a5cd8589b1959607a1b60448201526064016105cb565b6305f5e10081600e546109b69190611874565b1115610a045760405162461bcd60e51b815260206004820152601860248201527f63616e2774206d696e742061626f766520616c6c6f776564000000000000000060448201526064016105cb565b600d54610a119082611951565b341015610a565760405162461bcd60e51b81526020600482015260136024820152720ecc2d8eaca40c8decae6dc4ee840dac2e8c6d606b1b60448201526064016105cb565b600e54610a639082611262565b600e55610a708282610e94565b610a79346112b0565b5050565b6000546001600160a01b03163314610aa75760405162461bcd60e51b81526004016105cb906117fe565b61086560006112bd565b6000546001600160a01b03163314610adb5760405162461bcd60e51b81526004016105cb906117fe565b600c55565b6000546001600160a01b03163314610b0a5760405162461bcd60e51b81526004016105cb906117fe565b600b805460ff19169055565b600080610b2e600a544761130d90919063ffffffff16565b905060006008548211610b42576000610b50565b600854610b5090839061130d565b9392505050565b6060600580546105e8906119c6565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015610be85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105cb565b610bf53385858403610d70565b5060019392505050565b6000610678338484610f40565b6000610c27600e546305f5e10061130d90919063ffffffff16565b905090565b6001600160a01b038116600090815260066020526040812060010154816001600160801b0382610c5b86611358565b600754610c6891906118ce565b610c729190611833565b610c7c919061188c565b90506000610c9f856001600160a01b031660009081526006602052604090205490565b90506000818313610cb1576000610cbb565b610cbb8284611970565b9695505050505050565b610865610cd0610b16565b611376565b6000546001600160a01b03163314610cff5760405162461bcd60e51b81526004016105cb906117fe565b6001600160a01b038116610d645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105cb565b610d6d816112bd565b50565b6001600160a01b038316610dd25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105cb565b6001600160a01b038216610e335760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105cb565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008111610ecf5760405162461bcd60e51b81526020600482015260086024820152670c08185b5bdd5b9d60c21b60448201526064016105cb565b631dcd650081610ede60035490565b610ee89190611874565b1115610f365760405162461bcd60e51b815260206004820152601b60248201527f63616e2774206d696e742061626f7665204d41585f535550504c59000000000060448201526064016105cb565b610a79828261145d565b6001600160a01b038316610fa45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105cb565b6001600160a01b0382166110065760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105cb565b611011838383611548565b6001600160a01b038316600090815260016020526040902054818110156110895760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105cb565b6001600160a01b038085166000908152600160205260408082208585039055918516815290812080548492906110c0908490611874565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161110c91815260200190565b60405180910390a36107ac565b600061112482610c2c565b90508061112f575050565b6000600a544761113f91906119af565b9050818110156111915760405162461bcd60e51b815260206004820152601860248201527f756e65787065637465642062616c616e6365207374617465000000000000000060448201526064016105cb565b6001600160a01b038316600090815260066020526040812080548492906111b9908490611874565b9250508190555081600860008282546111d291906119af565b9091555050604080516001600160a01b0385168152602081018490527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a16040516001600160a01b0384169083156108fc029084906000818181858888f193505050501580156107ac573d6000803e3d6000fd5b600a5461125c908261130d565b600a5550565b60008061126f8385611874565b905083811015610b505760405162461bcd60e51b815260206004820152600c60248201526b616464206f766572666c6f7760a01b60448201526064016105cb565b600a5461125c9082611262565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183101561134e5760405162461bcd60e51b815260206004820152600c60248201526b737562206f766572666c6f7760a01b60448201526064016105cb565b610b5082846119af565b6001600160a01b03811660009081526001602052604081205461067c565b600061138061157a565b116113bf5760405162461bcd60e51b815260206004820152600f60248201526e6e6f207374616b65686f6c6465727360881b60448201526064016105cb565b8015610d6d5780600960008282546113d79190611874565b9250508190555080600860008282546113f09190611874565b90915550506007546114249061141e61140761157a565b611418856001600160801b03611585565b906115e9565b90611262565b6007556040518181527f811447d6056ff558a12372ce4223abc2dca6c6c013973ac0f7530bbd25221f809060200160405180910390a150565b6001600160a01b0382166114b35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105cb565b6114bf60008383611548565b80600360008282546114d19190611874565b90915550506001600160a01b038216600090815260016020526040812080548392906114fe908490611874565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03831615611561576115618382611637565b6001600160a01b0382161561095857610958828261167d565b6000610c2760035490565b6000826115945750600061067c565b60006115a08385611951565b9050826115ad85836118ba565b14610b505760405162461bcd60e51b815260206004820152600c60248201526b6d756c206f766572666c6f7760a01b60448201526064016105cb565b600080821161162d5760405162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b60448201526064016105cb565b610b5082846118ba565b81818060075461164791906118ce565b6001600160a01b03831660009081526006602052604081206001018054909190611672908490611833565b909155505050505050565b8161168782611a01565b8060075461164791906118ce565b80356001600160a01b03811681146116ac57600080fd5b919050565b6000602082840312156116c2578081fd5b610b5082611695565b600080604083850312156116dd578081fd5b6116e683611695565b91506116f460208401611695565b90509250929050565b600080600060608486031215611711578081fd5b61171a84611695565b925061172860208501611695565b9150604084013590509250925092565b6000806040838503121561174a578182fd5b61175383611695565b946020939093013593505050565b600080600060608486031215611775578283fd5b61177e84611695565b95602085013595506040909401359392505050565b6000602082840312156117a4578081fd5b5035919050565b6000602080835283518082850152825b818110156117d7578581018301518582016040015282016117bb565b818111156117e85783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600080821280156001600160ff1b038490038513161561185557611855611a1b565b600160ff1b839003841281161561186e5761186e611a1b565b50500190565b6000821982111561188757611887611a1b565b500190565b60008261189b5761189b611a31565b600160ff1b8214600019841416156118b5576118b5611a1b565b500590565b6000826118c9576118c9611a31565b500490565b60006001600160ff1b03818413828413808216868404861116156118f4576118f4611a1b565b600160ff1b8487128281168783058912161561191257611912611a1b565b85871292508782058712848416161561192d5761192d611a1b565b8785058712818416161561194357611943611a1b565b505050929093029392505050565b600081600019048311821515161561196b5761196b611a1b565b500290565b60008083128015600160ff1b85018412161561198e5761198e611a1b565b6001600160ff1b03840183138116156119a9576119a9611a1b565b50500390565b6000828210156119c1576119c1611a1b565b500390565b600181811c908216806119da57607f821691505b602082108114156119fb57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600160ff1b821415611a1757611a17611a1b565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea26469706673582212205e0d37d29630f258e29b8ff450f073c247d88b0816d22d3cfc0a2dc4a29957b364736f6c634300080400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000d093f2634286afbc9d728c63ebc0d69f7d6cfc1a000000000000000000000000000000000000000000000000000000000000000f426561724d6166696153686172657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003424d530000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c806370a0823111610102578063a9059cbb11610095578063e3f4420411610064578063e3f4420414610537578063e4fc6b6d14610557578063efca2eed1461056c578063f2fde38b1461058157600080fd5b8063a9059cbb146104a7578063c0a86a4a146104c7578063c6773224146104dc578063dd62ed3e146104f157600080fd5b80638da5cb5b116100d15780638da5cb5b14610435578063900c83181461045d57806395d89b4114610472578063a457c2d71461048757600080fd5b806370a08231146103b5578063715018a6146103eb578063813e943b14610400578063894ba8331461042057600080fd5b80632e92abdd1161017a5780633ccfd60b116101495780633ccfd60b146103605780635a8f8ab514610375578063603c2cb51461038a5780636aa633b61461039d57600080fd5b80632e92abdd146102fa578063313ce5671461030f578063367edd321461032b578063395093511461034057600080fd5b806318032e40116101b657806318032e401461026557806318160ddd1461028557806322052d07146102a457806323b872dd146102da57600080fd5b80630249d624146101e857806306fdde031461020a578063095ea7b31461023557600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611793565b6105a1565b005b34801561021657600080fd5b5061021f6105d9565b60405161022c91906117ab565b60405180910390f35b34801561024157600080fd5b50610255610250366004611738565b61066b565b604051901515815260200161022c565b34801561027157600080fd5b50610208610280366004611761565b610682565b34801561029157600080fd5b506003545b60405190815260200161022c565b3480156102b057600080fd5b506102966102bf3660046116b1565b6001600160a01b031660009081526006602052604090205490565b3480156102e657600080fd5b506102556102f53660046116fd565b6107b2565b34801561030657600080fd5b5061020861085c565b34801561031b57600080fd5b506040516000815260200161022c565b34801561033757600080fd5b50610208610867565b34801561034c57600080fd5b5061025561035b366004611738565b6108a0565b34801561036c57600080fd5b506102086108dc565b34801561038157600080fd5b50600c54610296565b610208610398366004611738565b61095d565b3480156103a957600080fd5b50600b5460ff16610255565b3480156103c157600080fd5b506102966103d03660046116b1565b6001600160a01b031660009081526001602052604090205490565b3480156103f757600080fd5b50610208610a7d565b34801561040c57600080fd5b5061020861041b366004611793565b610ab1565b34801561042c57600080fd5b50610208610ae0565b34801561044157600080fd5b506000546040516001600160a01b03909116815260200161022c565b34801561046957600080fd5b50610296610b16565b34801561047e57600080fd5b5061021f610b57565b34801561049357600080fd5b506102556104a2366004611738565b610b66565b3480156104b357600080fd5b506102556104c2366004611738565b610bff565b3480156104d357600080fd5b50600d54610296565b3480156104e857600080fd5b50610296610c0c565b3480156104fd57600080fd5b5061029661050c3660046116cb565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561054357600080fd5b506102966105523660046116b1565b610c2c565b34801561056357600080fd5b50610208610cc5565b34801561057857600080fd5b50600954610296565b34801561058d57600080fd5b5061020861059c3660046116b1565b610cd5565b6000546001600160a01b031633146105d45760405162461bcd60e51b81526004016105cb906117fe565b60405180910390fd5b600d55565b6060600480546105e8906119c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610614906119c6565b80156106615780601f1061063657610100808354040283529160200191610661565b820191906000526020600020905b81548152906001019060200180831161064457829003601f168201915b5050505050905090565b6000610678338484610d70565b5060015b92915050565b600b5460ff166106c85760405162461bcd60e51b815260206004820152601160248201527018dbdb9d1c9858dd08191a5cd8589b1959607a1b60448201526064016105cb565b600c546106d59083611951565b81101561071a5760405162461bcd60e51b81526020600482015260136024820152720ecc2d8eaca40c8decae6dc4ee840dac2e8c6d606b1b60448201526064016105cb565b600b54600c54339161010090046001600160a01b031690639dc29fac908390610744908790611951565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b505050506107ac8484610e94565b50505050565b60006107bf848484610f40565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156108445760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016105cb565b6108518533858403610d70565b506001949350505050565b61086533611119565b565b6000546001600160a01b031633146108915760405162461bcd60e51b81526004016105cb906117fe565b600b805460ff19166001179055565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106789185906108d7908690611874565b610d70565b6000546001600160a01b031633146109065760405162461bcd60e51b81526004016105cb906117fe565b6000610911600a5490565b905061091c8161124f565b600080546040516001600160a01b039091169182916108fc85150291859190818181858888f19350505050158015610958573d6000803e3d6000fd5b505050565b600b5460ff166109a35760405162461bcd60e51b815260206004820152601160248201527018dbdb9d1c9858dd08191a5cd8589b1959607a1b60448201526064016105cb565b6305f5e10081600e546109b69190611874565b1115610a045760405162461bcd60e51b815260206004820152601860248201527f63616e2774206d696e742061626f766520616c6c6f776564000000000000000060448201526064016105cb565b600d54610a119082611951565b341015610a565760405162461bcd60e51b81526020600482015260136024820152720ecc2d8eaca40c8decae6dc4ee840dac2e8c6d606b1b60448201526064016105cb565b600e54610a639082611262565b600e55610a708282610e94565b610a79346112b0565b5050565b6000546001600160a01b03163314610aa75760405162461bcd60e51b81526004016105cb906117fe565b61086560006112bd565b6000546001600160a01b03163314610adb5760405162461bcd60e51b81526004016105cb906117fe565b600c55565b6000546001600160a01b03163314610b0a5760405162461bcd60e51b81526004016105cb906117fe565b600b805460ff19169055565b600080610b2e600a544761130d90919063ffffffff16565b905060006008548211610b42576000610b50565b600854610b5090839061130d565b9392505050565b6060600580546105e8906119c6565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015610be85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105cb565b610bf53385858403610d70565b5060019392505050565b6000610678338484610f40565b6000610c27600e546305f5e10061130d90919063ffffffff16565b905090565b6001600160a01b038116600090815260066020526040812060010154816001600160801b0382610c5b86611358565b600754610c6891906118ce565b610c729190611833565b610c7c919061188c565b90506000610c9f856001600160a01b031660009081526006602052604090205490565b90506000818313610cb1576000610cbb565b610cbb8284611970565b9695505050505050565b610865610cd0610b16565b611376565b6000546001600160a01b03163314610cff5760405162461bcd60e51b81526004016105cb906117fe565b6001600160a01b038116610d645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105cb565b610d6d816112bd565b50565b6001600160a01b038316610dd25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105cb565b6001600160a01b038216610e335760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105cb565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008111610ecf5760405162461bcd60e51b81526020600482015260086024820152670c08185b5bdd5b9d60c21b60448201526064016105cb565b631dcd650081610ede60035490565b610ee89190611874565b1115610f365760405162461bcd60e51b815260206004820152601b60248201527f63616e2774206d696e742061626f7665204d41585f535550504c59000000000060448201526064016105cb565b610a79828261145d565b6001600160a01b038316610fa45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105cb565b6001600160a01b0382166110065760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105cb565b611011838383611548565b6001600160a01b038316600090815260016020526040902054818110156110895760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105cb565b6001600160a01b038085166000908152600160205260408082208585039055918516815290812080548492906110c0908490611874565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161110c91815260200190565b60405180910390a36107ac565b600061112482610c2c565b90508061112f575050565b6000600a544761113f91906119af565b9050818110156111915760405162461bcd60e51b815260206004820152601860248201527f756e65787065637465642062616c616e6365207374617465000000000000000060448201526064016105cb565b6001600160a01b038316600090815260066020526040812080548492906111b9908490611874565b9250508190555081600860008282546111d291906119af565b9091555050604080516001600160a01b0385168152602081018490527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a16040516001600160a01b0384169083156108fc029084906000818181858888f193505050501580156107ac573d6000803e3d6000fd5b600a5461125c908261130d565b600a5550565b60008061126f8385611874565b905083811015610b505760405162461bcd60e51b815260206004820152600c60248201526b616464206f766572666c6f7760a01b60448201526064016105cb565b600a5461125c9082611262565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183101561134e5760405162461bcd60e51b815260206004820152600c60248201526b737562206f766572666c6f7760a01b60448201526064016105cb565b610b5082846119af565b6001600160a01b03811660009081526001602052604081205461067c565b600061138061157a565b116113bf5760405162461bcd60e51b815260206004820152600f60248201526e6e6f207374616b65686f6c6465727360881b60448201526064016105cb565b8015610d6d5780600960008282546113d79190611874565b9250508190555080600860008282546113f09190611874565b90915550506007546114249061141e61140761157a565b611418856001600160801b03611585565b906115e9565b90611262565b6007556040518181527f811447d6056ff558a12372ce4223abc2dca6c6c013973ac0f7530bbd25221f809060200160405180910390a150565b6001600160a01b0382166114b35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105cb565b6114bf60008383611548565b80600360008282546114d19190611874565b90915550506001600160a01b038216600090815260016020526040812080548392906114fe908490611874565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03831615611561576115618382611637565b6001600160a01b0382161561095857610958828261167d565b6000610c2760035490565b6000826115945750600061067c565b60006115a08385611951565b9050826115ad85836118ba565b14610b505760405162461bcd60e51b815260206004820152600c60248201526b6d756c206f766572666c6f7760a01b60448201526064016105cb565b600080821161162d5760405162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b60448201526064016105cb565b610b5082846118ba565b81818060075461164791906118ce565b6001600160a01b03831660009081526006602052604081206001018054909190611672908490611833565b909155505050505050565b8161168782611a01565b8060075461164791906118ce565b80356001600160a01b03811681146116ac57600080fd5b919050565b6000602082840312156116c2578081fd5b610b5082611695565b600080604083850312156116dd578081fd5b6116e683611695565b91506116f460208401611695565b90509250929050565b600080600060608486031215611711578081fd5b61171a84611695565b925061172860208501611695565b9150604084013590509250925092565b6000806040838503121561174a578182fd5b61175383611695565b946020939093013593505050565b600080600060608486031215611775578283fd5b61177e84611695565b95602085013595506040909401359392505050565b6000602082840312156117a4578081fd5b5035919050565b6000602080835283518082850152825b818110156117d7578581018301518582016040015282016117bb565b818111156117e85783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600080821280156001600160ff1b038490038513161561185557611855611a1b565b600160ff1b839003841281161561186e5761186e611a1b565b50500190565b6000821982111561188757611887611a1b565b500190565b60008261189b5761189b611a31565b600160ff1b8214600019841416156118b5576118b5611a1b565b500590565b6000826118c9576118c9611a31565b500490565b60006001600160ff1b03818413828413808216868404861116156118f4576118f4611a1b565b600160ff1b8487128281168783058912161561191257611912611a1b565b85871292508782058712848416161561192d5761192d611a1b565b8785058712818416161561194357611943611a1b565b505050929093029392505050565b600081600019048311821515161561196b5761196b611a1b565b500290565b60008083128015600160ff1b85018412161561198e5761198e611a1b565b6001600160ff1b03840183138116156119a9576119a9611a1b565b50500390565b6000828210156119c1576119c1611a1b565b500390565b600181811c908216806119da57607f821691505b602082108114156119fb57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600160ff1b821415611a1757611a17611a1b565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea26469706673582212205e0d37d29630f258e29b8ff450f073c247d88b0816d22d3cfc0a2dc4a29957b364736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000d093f2634286afbc9d728c63ebc0d69f7d6cfc1a000000000000000000000000000000000000000000000000000000000000000f426561724d6166696153686172657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003424d530000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): BearMafiaShares
Arg [1] : symbol_ (string): BMS
Arg [2] : honey (address): 0xd093f2634286afbc9D728c63EbC0D69f7D6cfc1a

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000d093f2634286afbc9d728c63ebc0d69f7d6cfc1a
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [4] : 426561724d616669615368617265730000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 424d530000000000000000000000000000000000000000000000000000000000


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

BearMafiaShares (BMS token) - is an ERC20 utility token in the BearMafia ecosystem. Max supply 500,000,000, Founders pre mint is 10'000 shares.

Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.