Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 3,028 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Redeem | 12422787 | 421 days ago | IN | 0 ETH | 0.0000001 | ||||
| Redeem | 12421295 | 421 days ago | IN | 0 ETH | 0.00000024 | ||||
| Redeem | 12420876 | 421 days ago | IN | 0 ETH | 0.00000029 | ||||
| Redeem | 12419148 | 421 days ago | IN | 0 ETH | 0.00000033 | ||||
| Redeem | 12409323 | 422 days ago | IN | 0 ETH | 0.00000122 | ||||
| Redeem | 12409283 | 422 days ago | IN | 0 ETH | 0.00000107 | ||||
| Redeem | 12409139 | 422 days ago | IN | 0 ETH | 0.00000109 | ||||
| Redeem | 12409070 | 422 days ago | IN | 0 ETH | 0.00000087 | ||||
| Redeem | 12385943 | 422 days ago | IN | 0 ETH | 0.00000168 | ||||
| Redeem | 12385808 | 422 days ago | IN | 0 ETH | 0.00000076 | ||||
| Redeem | 12385662 | 422 days ago | IN | 0 ETH | 0.00000072 | ||||
| Redeem | 12385563 | 422 days ago | IN | 0 ETH | 0.00000111 | ||||
| Transfer | 12385390 | 422 days ago | IN | 0 ETH | 0.00000137 | ||||
| Redeem | 12385347 | 422 days ago | IN | 0 ETH | 0.0000014 | ||||
| Redeem | 12366614 | 423 days ago | IN | 0 ETH | 0.00000207 | ||||
| Redeem | 12366550 | 423 days ago | IN | 0 ETH | 0.00000138 | ||||
| Redeem | 12366513 | 423 days ago | IN | 0 ETH | 0.00000125 | ||||
| Redeem | 12319947 | 424 days ago | IN | 0 ETH | 0.00000108 | ||||
| Redeem | 12297943 | 424 days ago | IN | 0 ETH | 0.00000128 | ||||
| Redeem | 12294658 | 424 days ago | IN | 0 ETH | 0.00000091 | ||||
| Redeem | 12292310 | 424 days ago | IN | 0 ETH | 0.00000105 | ||||
| Redeem | 12282432 | 425 days ago | IN | 0 ETH | 0.00000208 | ||||
| Redeem | 12281988 | 425 days ago | IN | 0 ETH | 0.00000321 | ||||
| Redeem | 12277904 | 425 days ago | IN | 0 ETH | 0.00000274 | ||||
| Redeem | 12276916 | 425 days ago | IN | 0 ETH | 0.00000264 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Win
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.0.0
pragma solidity >=0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "../interfaces/IWin.sol";
contract Win is IWin, ERC20, Ownable {
address public _phoenix;
address public _controlAddress;
IERC20 immutable USDB;
address public _developmentAddress;
mapping(uint256 => bool) private randomMap;
event _mintWin(
address indexed from,
uint256 total,
uint256 develop,
uint256 win
);
event _redeem(address indexed from, uint256 win, uint256 usdb);
event _bondsReward(
address indexed from,
uint256 total,
uint256 usdb,
uint256 win
);
event _accelerateBurn(
address indexed from,
uint256 day,
uint256 pex,
uint256 win
);
event sendReward(uint256 random);
constructor(address usdb) ERC20("Wings", "WIN") Ownable(msg.sender) {
USDB = IERC20(usdb);
}
modifier onlyController() {
require(msg.sender == _controlAddress, "permission denied");
_;
}
function setController(address addr) public onlyOwner {
_controlAddress = addr;
}
uint256 public totalBurn = 0;
uint256 public _developmentRate = 500;
uint256 public _redeemRate = 1500;
uint256 public _rewardRate = 5000;
mapping(uint256 => uint256) public randomWinMap;
function setPhoenix(address addr) public onlyController {
_phoenix = addr;
}
function setDevelopmentRate(uint256 developmentRate) public onlyController {
require(developmentRate <= 10000, "invalid rate");
_developmentRate = developmentRate;
}
function setDevelopmentAddress(
address developmentAddress
) public onlyController {
_developmentAddress = developmentAddress;
_escapeList[developmentAddress] = true;
}
function setRedeemRate(uint256 redeemRate) public onlyController {
require(redeemRate <= 10000, "invalid rate");
_redeemRate = redeemRate;
}
function setRewardRate(uint256 rewardRate) public onlyController {
require(rewardRate <= 10000, "invalid rate");
_rewardRate = rewardRate;
}
mapping(uint256 => uint256) public _configTotalSupply;
mapping(uint256 => uint256) public _configRate;
uint256 public _fundConfigLength = 9;
mapping(uint256 => uint256) public _configAccelerateDay;
mapping(uint256 => uint256) public _configAccelerateWin;
function setFundConfigLength(uint256 length) public onlyController {
_fundConfigLength = length;
}
function setFundConfig(
uint256 index,
uint256 supply,
uint256 rate
) public onlyController {
require(rate <= 10000, "invalid rate");
require(index <= _fundConfigLength, "exceeds index");
_configTotalSupply[index] = supply;
_configRate[index] = rate;
}
function setAccelerateConfig(
uint256 day,
uint256 win
) public onlyController {
require(day > 0, "day <= 0");
require(win > 0 && win <= 10000, "exceeds win");
_configAccelerateDay[day] = day;
_configAccelerateWin[day] = win;
}
function getPrice() public view returns (uint256) {
uint256 circulate = totalSupply();
uint256 usdbBalance = USDB.balanceOf(address(this));
return (usdbBalance * 1e18) / circulate;
}
function getMintRate() public view returns (uint256) {
uint256 rate = 6600;
uint256 _tTotal = totalSupply() + totalBurn;
for (uint256 i = 1; i <= _fundConfigLength; i++) {
if (_tTotal > _configTotalSupply[i]) {
rate = _configRate[i];
return rate;
}
}
return rate;
}
mapping(address => bool) private _escapeList;
mapping(address => bool) private _limitList;
// _transferFee / 10000
uint256 private _transferFee = 500;
uint256 private _initStatus = 1;
function setEscapeList(address escape) public onlyController {
_escapeList[escape] = true;
}
function unSetEscapeList(address escape) public onlyController {
_escapeList[escape] = false;
}
function setLimitList(address limit) public onlyController {
_limitList[limit] = true;
}
function unSetLimitList(address limit) public onlyController {
_limitList[limit] = false;
}
function setTransferFee(uint256 fee) public onlyController {
require(fee <= 10000, "invalid rate");
_transferFee = fee;
}
function _update(
address from,
address to,
uint256 value
) internal override {
require(!_limitList[from] && !_limitList[to], "ERC20: transfer limit");
uint256 fee = 0;
if (
from != address(0) &&
to != address(0) &&
!_escapeList[from] &&
!_escapeList[to]
) {
fee = (value * _transferFee) / 10000;
super._update(from, address(0), fee);
totalBurn += fee;
} else if (to == address(0)) {
totalBurn += value;
}
uint256 amount = value - fee;
super._update(from, to, amount);
}
function initWin(uint256 win, address to) public {
require(_initStatus == 1, "ERC20: init limit");
_mint(to, win);
_initStatus = 0;
}
function mintWin(address from, uint256 usdb, uint256 random) public {
require(msg.sender == _phoenix, "permission denied");
require(usdb > 0, "ERC20: mint amount by 0");
uint256 rate = getMintRate();
uint256 circulate = totalSupply();
uint256 usdbBalance = USDB.balanceOf(address(this));
uint256 mint = (usdb * rate * circulate) / (usdbBalance * 10000);
uint256 development = (mint * _developmentRate) / 10000;
uint256 reward = mint - development;
USDB.transferFrom(from, address(this), usdb);
_mint(_developmentAddress, development);
_mint(address(this), reward);
randomWinMap[random] = reward;
emit _mintWin(from, mint, development, reward);
}
function redeem(uint256 win) public {
address from = msg.sender;
require(win > 0, "ERC20: redeem amount by 0");
uint256 price = getPrice();
uint256 amount = (win * price * (10000 - _redeemRate)) / (10000 * 1e18);
USDB.transfer(from, amount);
_burn(from, win);
emit _redeem(from, win, amount);
}
function accelerateBurn(address from, uint256 day, uint256 pexUsdb) public {
require(msg.sender == _phoenix, "permission denied");
require(day > 0, "day <= 0");
require(_configAccelerateDay[day] > 0, "ERC20: accelerate error!");
uint256 winUsdb = getPrice();
uint256 burns = (pexUsdb * _configAccelerateWin[day]) /
(10000 * winUsdb);
_burn(from, burns);
emit _accelerateBurn(from, day, pexUsdb, burns);
}
function bondsReward(
address[] memory to,
uint256[] memory win,
uint256 random
) public onlyController {
require(!randomMap[random], "invalid random");
randomMap[random] = true;
uint256 price = getPrice();
require(to.length > 0 && to.length == win.length, "Invalid Array");
uint256 burnAmount = 0;
for (uint256 i = 0; i < to.length; i++) {
uint256 totalWin = win[i];
if (totalWin > 0) {
uint256 redeemWin = (totalWin * _rewardRate) / (10000);
uint256 leftWin = totalWin - redeemWin;
uint256 usdb = ((redeemWin * price) * (10000 - _redeemRate)) /
(1e18 * 10000);
bool success = USDB.transfer(to[i], usdb);
require(success, "ERC20: bonds USDB transfer fail");
super._update(address(this), to[i], leftWin);
burnAmount += redeemWin;
emit _bondsReward(to[i], totalWin, usdb, leftWin);
}
}
_burn(address(this), burnAmount);
emit sendReward(random);
}
function bondsRewardSingle(
address to,
uint256 win,
uint256 random
) public onlyController {
require(!randomMap[random], "invalid random");
randomMap[random] = true;
uint256 price = getPrice();
require(win > 0, "amount <= 0");
uint256 redeemWin = (win * _rewardRate) / (10000);
uint256 leftWin = win - redeemWin;
uint256 usdb = ((redeemWin * price) * (10000 - _redeemRate)) /
(1e18 * 10000);
bool success = USDB.transfer(to, usdb);
require(success, "ERC20: bonds USDB transfer fail");
super._update(address(this), to, leftWin);
_burn(address(this), redeemWin);
emit _bondsReward(to, win, usdb, leftWin);
emit sendReward(random);
}
function getWinByRandom(uint256 random) public view returns (uint256) {
return randomWinMap[random];
}
receive() external payable {}
function claimTokens(uint256 amount) public onlyOwner {
payable(msg.sender).transfer(amount);
}
function claimAllTokens() public onlyOwner {
payable(msg.sender).transfer(address(this).balance);
}
function claimAllErc20Tokens(address addr) public onlyOwner {
uint256 balance = IERC20(addr).balanceOf(address(this));
require(balance > 0, "ERC20: claim amount by 0");
IERC20(addr).transfer(msg.sender, balance);
}
function claimErc20Tokens(address addr, uint256 balance) public onlyOwner {
IERC20(addr).transfer(msg.sender, balance);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.20;
import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.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}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* 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.
*/
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* 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 returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual 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 default value returned by this function, unless
* it's 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 returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `value`.
*/
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
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}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `value`.
* - the caller must have allowance for ``from``'s tokens of at least
* `value`.
*/
function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
/**
* @dev Moves a `value` amount of tokens from `from` to `to`.
*
* 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.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
/**
* @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
* (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
* this function.
*
* Emits a {Transfer} event.
*/
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
// Overflow check required: The rest of the code assumes that totalSupply never overflows
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
// Overflow not possible: value <= fromBalance <= totalSupply.
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
// Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
_totalSupply -= value;
}
} else {
unchecked {
// Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
/**
* @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
* Relies on the `_update` mechanism
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
/**
* @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
* Relies on the `_update` mechanism.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead
*/
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
/**
* @dev Sets `value` 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.
*
* Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
*/
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
/**
* @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
*
* By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
* `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
* `Approval` event during `transferFrom` operations.
*
* Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
* true using the following override:
* ```
* function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
* super._approve(owner, spender, value, true);
* }
* ```
*
* Requirements are the same as {_approve}.
*/
function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `value`.
*
* Does not update the allowance value in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Does not emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(spender, currentAllowance, value);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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 Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../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.
*
* The initial owner is set to the address provided by the deployer. 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;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling 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 {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_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;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
interface IWin is IERC20 {
function mintWin(address from, uint256 usdb, uint256 random) external;
function accelerateBurn(
address from,
uint256 day,
uint256 pexUsdb
) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.20;
import {IERC20} from "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*/
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 (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard ERC20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC20InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
* @param spender Address that may be allowed to operate on tokens without being their owner.
* @param allowance Amount of tokens a `spender` is allowed to operate with.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC20InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `spender` to be approved. Used in approvals.
* @param spender Address that may be allowed to operate on tokens without being their owner.
*/
error ERC20InvalidSpender(address spender);
}
/**
* @dev Standard ERC721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
* Used in balance queries.
* @param owner Address of the current owner of a token.
*/
error ERC721InvalidOwner(address owner);
/**
* @dev Indicates a `tokenId` whose `owner` is the zero address.
* @param tokenId Identifier number of a token.
*/
error ERC721NonexistentToken(uint256 tokenId);
/**
* @dev Indicates an error related to the ownership over a particular token. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param tokenId Identifier number of a token.
* @param owner Address of the current owner of a token.
*/
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC721InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC721InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param tokenId Identifier number of a token.
*/
error ERC721InsufficientApproval(address operator, uint256 tokenId);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC721InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC721InvalidOperator(address operator);
}
/**
* @dev Standard ERC1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
*/
interface IERC1155Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
* @param tokenId Identifier number of a token.
*/
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC1155InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC1155InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param owner Address of the current owner of a token.
*/
error ERC1155MissingApprovalForAll(address operator, address owner);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC1155InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC1155InvalidOperator(address operator);
/**
* @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
* Used in batch transfers.
* @param idsLength Length of the array of token identifiers
* @param valuesLength Length of the array of token amounts
*/
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}{
"remappings": [
"forge-std/=lib/forge-std/src/",
"@openzeppelin/=node_modules/@openzeppelin/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"uniswap-v2/=lib/uniswap-v2/contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "paris",
"viaIR": true,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"usdb","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":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":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"day","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"win","type":"uint256"}],"name":"_accelerateBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdb","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"win","type":"uint256"}],"name":"_bondsReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"develop","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"win","type":"uint256"}],"name":"_mintWin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"win","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdb","type":"uint256"}],"name":"_redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"random","type":"uint256"}],"name":"sendReward","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_configAccelerateDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_configAccelerateWin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_configRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_configTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_controlAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developmentRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fundConfigLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_phoenix","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_redeemRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"uint256","name":"pexUsdb","type":"uint256"}],"name":"accelerateBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"value","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":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"win","type":"uint256[]"},{"internalType":"uint256","name":"random","type":"uint256"}],"name":"bondsReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"win","type":"uint256"},{"internalType":"uint256","name":"random","type":"uint256"}],"name":"bondsRewardSingle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"claimAllErc20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAllTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"}],"name":"claimErc20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"random","type":"uint256"}],"name":"getWinByRandom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"win","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"initWin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"usdb","type":"uint256"},{"internalType":"uint256","name":"random","type":"uint256"}],"name":"mintWin","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"randomWinMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"win","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"uint256","name":"win","type":"uint256"}],"name":"setAccelerateConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"developmentAddress","type":"address"}],"name":"setDevelopmentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"developmentRate","type":"uint256"}],"name":"setDevelopmentRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"escape","type":"address"}],"name":"setEscapeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setFundConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"setFundConfigLength","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"limit","type":"address"}],"name":"setLimitList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setPhoenix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redeemRate","type":"uint256"}],"name":"setRedeemRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardRate","type":"uint256"}],"name":"setRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":[{"internalType":"address","name":"escape","type":"address"}],"name":"unSetEscapeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"limit","type":"address"}],"name":"unSetLimitList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a034620003f4576001600160401b0390601f1990601f620026ef388190038281018516840186811185821017620002fa57849282916040528339602093849181010312620003f457516001600160a01b03948582169491859003620003f45762000069620003f9565b936005938486526457696e677360d81b8287015262000087620003f9565b600392838252622ba4a760e91b818301528751858111620002fa5784546001998a82811c92168015620003e9575b84831014620003d35781868493116200037f575b5083908683116001146200031c5760009262000310575b505060001982871b1c191690891b1784555b8151948511620002fa5760049586548981811c91168015620002ef575b83821014620002da57908185889796959493116200027e575b50819386116001146200021357505060009362000207575b505082861b92600019911b1c19161781555b3315620001ef57508054336001600160a01b03198216811790925560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36000600a556101f480600b556105dc600c55611388600d5560096011556016556017556080526122d590816200041a8239608051818181610520015281816107aa01528181610e1a015281816115fd0152611e2d0152f35b602490600060405191631e4fbdf760e01b8352820152fd5b01519150388062000140565b89969493929194168760005284600020946000905b82821062000264575050851162000249575b50505050811b01815562000152565b01519060f884600019921b161c19169055388080806200023a565b8484015187558b9890960195938401939081019062000228565b909192939495508760005282600020858089018b1c820192858a10620002d0575b918c918a99989796959493018c1c01915b828110620002c057505062000128565b600081558998508c9101620002b0565b925081926200029f565b602288634e487b7160e01b6000525260246000fd5b90607f16906200010f565b634e487b7160e01b600052604160045260246000fd5b015190503880620000e0565b90898c94169188600052856000209260005b878282106200036857505084116200034f575b505050811b018455620000f2565b015160001983891b60f8161c1916905538808062000341565b8385015186558f979095019493840193016200032e565b9091508660005283600020868085018c1c820192868610620003c9575b918d9186959493018d1c01915b828110620003b9575050620000c9565b600081558594508d9101620003a9565b925081926200039c565b634e487b7160e01b600052602260045260246000fd5b91607f1691620000b5565b600080fd5b60408051919082016001600160401b03811183821017620002fa5760405256fe608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c90816306fc196014611abd5750806306fdde03146119ff578063095ea7b3146119795780630ed967971461195b578063149727e1146118675780631754e7d01461181857806317be778c1461177457806318160ddd146117565780631a100e39146117385780631e4bd42c146117085780631ee9f0e3146106945780631fcdf2391461151857806323b872dd14611426578063246199db1461130857806329b1c15c146112a3578063313ce567146112875780633c9f861d146112695780633d6a9afe14611240578063437edfcd146111d057806346e04a2f146111945780634fbec0e81461116857806368fd25cd1461114a5780636dd722691461110e57806370a08231146110d4578063715018a61461107757806375e41c7614610fdd578063783d574314610fb15780637974d6b314610c1d57806383cba2b914610bf45780638da5cb5b14610bcb5780638f02bb5b14610b8f57806392eefe9b14610b4c57806395d89b4114610a4757806396f0bd6114610a2c57806398d5fdca14610a095780639e447fc6146109cd578063a3f194e014610981578063a68eb7ef1461076b578063a7a7b1851461073d578063a9059cbb1461070c578063bf77dd53146106c0578063c2913b2114610694578063d7d95ea21461061c578063db006a751461049d578063dd62ed3e1461044c578063de2d99e514610410578063e0e46063146103c1578063f066daf214610395578063f2fde38b1461030c578063f57c1c3b146102c0578063f7e21b04146102945763fafcf6d314610266573861000f565b3461028f57600036600319011261028f576007546040516001600160a01b039091168152602090f35b600080fd5b3461028f57602036600319011261028f57600435600052600f6020526020604060002054604051908152f35b3461028f57602036600319011261028f576102d9611b21565b6007546001600160a01b0391906102f39083163314611d29565b166001600160601b0360a01b6006541617600655600080f35b3461028f57602036600319011261028f57610325611b21565b61032d611bc7565b6001600160a01b0390811690811561037c57600554826001600160601b0360a01b821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b604051631e4fbdf760e01b815260006004820152602490fd5b3461028f57602036600319011261028f5760043560005260106020526020604060002054604051908152f35b3461028f57602036600319011261028f576103da611b21565b6007546001600160a01b0391906103f49083163314611d29565b166000908152601460205260409020805460ff19166001179055005b3461028f57602036600319011261028f5760043561043960018060a01b03600754163314611d29565b610447612710821115611d69565b600b55005b3461028f57604036600319011261028f57610465611b21565b61046d611b37565b9060018060a01b038091166000526001602052604060002091166000526020526020604060002054604051908152f35b3461028f5760208060031936011261028f576004359081156105d8576104ca6104c4611e0e565b83611ddb565b600c54906127109182039182116105c25769021e19e0c9bab2400000916104f091611ddb565b60405163a9059cbb60e01b8152336004820152919004602482018190529190818160448160006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156105b657610589575b506105588333612172565b6040519283528201527f31b4617921a2c70f1aa3b03fe95c10c6583a15005bcb9b159020892b49b6beff60403392a2005b6105a890823d84116105af575b6105a08183611b77565b81019061215a565b508361054d565b503d610596565b6040513d6000823e3d90fd5b634e487b7160e01b600052601160045260246000fd5b6064906040519062461bcd60e51b82526004820152601960248201527f45524332303a2072656465656d20616d6f756e742062792030000000000000006044820152fd5b3461028f57604036600319011261028f57610635611b21565b61063d611bc7565b60405163a9059cbb60e01b8152336004820152602480359082015290602090829060449082906000906001600160a01b03165af180156105b65761067d57005b61001b9060203d81116105af576105a08183611b77565b3461028f57602036600319011261028f57600435600052600e6020526020604060002054604051908152f35b3461028f57602036600319011261028f576106d9611b21565b6007546001600160a01b0391906106f39083163314611d29565b166000908152601560205260409020805460ff19169055005b3461028f57604036600319011261028f57610732610728611b21565b6024359033611bf3565b602060405160018152f35b3461028f57602036600319011261028f5761076360018060a01b03600754163314611d29565b600435601155005b3461028f5761077936611b4d565b60065491926001600160a01b03926107949084163314611d29565b831561093c576107a2611edf565b9160025491847f00000000000000000000000000000000000000000000000000000000000000001694604051936370a0823160e01b855230600486015260209586866024818b5afa9586156105b657600096610909575b509061080861080d928a611ddb565b611ddb565b61271094858102908082048714901517156105c25761082b91611dee565b93610838600b5486611ddb565b0494808260646108488989611f3d565b9560006040519b8c9485936323b872dd60e01b8552169d8e600485015230602485015260448401525af19384156105b6576108b587600e947ff1d7a63039a8218cf853ec6ee4852c21ecf63f65488fececd59450011d58eeb29a6108e7986108ec575b50600854166120df565b6108bf84306120df565b6000525280604060002055604051938493846040919493926060820195825260208201520152565b0390a2005b61090290863d88116105af576105a08183611b77565b508c6108ab565b919095508682813d8311610935575b6109228183611b77565b8101031261028f579051946108086107f9565b503d610918565b60405162461bcd60e51b815260206004820152601760248201527f45524332303a206d696e7420616d6f756e7420627920300000000000000000006044820152606490fd5b3461028f57602036600319011261028f5761099a611b21565b6007546001600160a01b0391906109b49083163314611d29565b166000908152601460205260409020805460ff19169055005b3461028f57602036600319011261028f576004356109f660018060a01b03600754163314611d29565b610a04612710821115611d69565b600d55005b3461028f57600036600319011261028f576020610a24611e0e565b604051908152f35b3461028f57600036600319011261028f576020610a24611edf565b3461028f57600036600319011261028f57604051600090600454600181811c90808316928315610b42575b6020938484108114610b2c57838652908115610b0c5750600114610ab1575b610aad84610aa181880382611b77565b60405191829182611ad8565b0390f35b600460009081529294507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610af95750505081610aad93610aa19282010193610a91565b8054858501870152928501928101610add565b60ff1916858501525050151560051b8201019150610aa181610aad610a91565b634e487b7160e01b600052602260045260246000fd5b91607f1691610a72565b3461028f57602036600319011261028f57610b65611b21565b610b6d611bc7565b600780546001600160a01b0319166001600160a01b0392909216919091179055005b3461028f57602036600319011261028f57600435610bb860018060a01b03600754163314611d29565b610bc6612710821115611d69565b601655005b3461028f57600036600319011261028f576005546040516001600160a01b039091168152602090f35b3461028f57600036600319011261028f576006546040516001600160a01b039091168152602090f35b3461028f57606036600319011261028f5760043567ffffffffffffffff80821161028f573660238301121561028f578160040135610c5a81611baf565b92610c686040519485611b77565b8184526024602085019260051b8201019036821161028f57602401915b818310610f915750505060243590811161028f573660238201121561028f57806004013590610cb382611baf565b91610cc16040519384611b77565b8083526024602084019160051b8301019136831161028f57602401905b828210610f8157505050610cfd60018060a01b03600754163314611d29565b6044356000526009602052610d1a60ff60406000205416156121cc565b60443560005260096020526040600020600160ff19825416179055610d3d611e0e565b82518015159081610f76575b5015610f41576000805b8451821015610f0957610d668285612209565b519182610d7f575b610d79919250611ed0565b90610d53565b61271080610d8f600d5486611ddb565b0490610d9b8286611f3d565b91610da68782611ddb565b91600c5481039081116105c257610dcb69021e19e0c9bab240000091610e1494611ddb565b04906020826001600160a01b03610de2888e612209565b5160405163a9059cbb60e01b815291166001600160a01b03166004820152602481019190915293849081906044820190565b038160007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156105b657610d7996610e86610ea9937fc0ca27dc73711f96a89cb8b44eedaf064955a74b64b18f76d42e906bfe37da0396600091610eea575b50612233565b610ea4868d610e9c8a60018060a01b0392612209565b511630612006565b611ec3565b95610edf6001600160a01b03610ebf878d612209565b511694604051938493846040919493926060820195825260208201520152565b0390a2829150610d6e565b610f03915060203d6020116105af576105a08183611b77565b8e610e80565b610f139030612172565b7fc78b6dea49882fca01b3fbf70d408b2e957ee8e0745b711d892db3d49159325260206040516044358152a1005b60405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420417272617960981b6044820152606490fd5b905082511484610d49565b8135815260209182019101610cde565b82356001600160a01b038116810361028f57815260209283019201610c85565b3461028f57602036600319011261028f5760043560005260136020526020604060002054604051908152f35b3461028f57606036600319011261028f576004356044359061100a60018060a01b03600754163314611d29565b611018612710831115611d69565b601154811161104257600052600f6020526024356040600020556010602052604060002055600080f35b60405162461bcd60e51b815260206004820152600d60248201526c0caf0c6cacac8e640d2dcc8caf609b1b6044820152606490fd5b3461028f57600036600319011261028f57611090611bc7565b600580546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461028f57602036600319011261028f576001600160a01b036110f5611b21565b1660005260006020526020604060002054604051908152f35b3461028f57602036600319011261028f5760043561113760018060a01b03600754163314611d29565b611145612710821115611d69565b600c55005b3461028f57600036600319011261028f576020600d54604051908152f35b3461028f57602036600319011261028f5760043560005260126020526020604060002054604051908152f35b3461028f57602036600319011261028f5760008080806004356111b5611bc7565b8181156111c7575b3390f1156105b657005b506108fc6111bd565b3461028f57604036600319011261028f576111e9611b37565b6001601754036112075761120090600435906120df565b6000601755005b60405162461bcd60e51b8152602060048201526011602482015270115490cc8c0e881a5b9a5d081b1a5b5a5d607a1b6044820152606490fd5b3461028f57600036600319011261028f576008546040516001600160a01b039091168152602090f35b3461028f57600036600319011261028f576020600a54604051908152f35b3461028f57600036600319011261028f57602060405160128152f35b3461028f57602036600319011261028f576112bc611b21565b6007546001600160a01b0391906112d69083163314611d29565b16806001600160601b0360a01b600854161760085560005260146020526040600020600160ff19825416179055600080f35b3461028f5760208060031936011261028f57611322611b21565b61132a611bc7565b6040516370a0823160e01b81523060048201526001600160a01b0391909116908281602481855afa9081156105b6576000916113f9575b5080156113b45760405163a9059cbb60e01b81523360048201526024810191909152908290829060449082906000905af180156105b65761139e57005b8161001b92903d106105af576105a08183611b77565b60405162461bcd60e51b815260048101849052601860248201527f45524332303a20636c61696d20616d6f756e74206279203000000000000000006044820152606490fd5b90508281813d831161141f575b6114108183611b77565b8101031261028f575183611361565b503d611406565b3461028f57606036600319011261028f5761143f611b21565b611447611b37565b6044359060018060a01b03831692836000526001602052604060002033600052602052604060002054936000198503611486575b506107329350611bf3565b8385106114f25780156114d95733156114c0576107329484916000526001602052604060002033600052602052036040600020558461147b565b604051634a1406b160e11b815260006004820152602490fd5b60405163e602df0560e01b815260006004820152602490fd5b604051637dc7a0d960e11b81523360048201526024810186905260448101859052606490fd5b3461028f5761152636611b4d565b6007546001600160a01b039392906115419085163314611d29565b816000526020926009845261155e60ff60406000205416156121cc565b82600052600984526040600020600160ff1982541617905561157e611e0e565b9482156116d5576127109182611596600d5486611ddb565b04926115ac6115a58587611f3d565b9885611ddb565b600c5482039182116105c25769021e19e0c9bab2400000916115cd91611ddb565b60405163a9059cbb60e01b81526001600160a01b03841660048201529190046024820181905297878260448160007f000000000000000000000000000000000000000000000000000000000000000089165af19889156105b6576116937fc0ca27dc73711f96a89cb8b44eedaf064955a74b64b18f76d42e906bfe37da03966116827fc78b6dea49882fca01b3fbf70d408b2e957ee8e0745b711d892db3d4915932529c6116b2966000916116be5750612233565b61168d848730612006565b30612172565b6040519485941696846040919493926060820195825260208201520152565b0390a2604051908152a1005b610f0391508d803d106105af576105a08183611b77565b60405162461bcd60e51b815260048101869052600b60248201526a0616d6f756e74203c3d20360ac1b6044820152606490fd5b3461028f57600036600319011261028f57611721611bc7565b6000808080478181156111c7573390f1156105b657005b3461028f57600036600319011261028f576020601154604051908152f35b3461028f57600036600319011261028f576020600254604051908152f35b3461028f57604036600319011261028f57600435602435906117a160018060a01b03600754163314611d29565b6117ac811515611da4565b8115158061180c575b156117d9578060005260126020526040600020556013602052604060002055600080f35b60405162461bcd60e51b815260206004820152600b60248201526a32bc31b2b2b239903bb4b760a91b6044820152606490fd5b506127108211156117b5565b3461028f57602036600319011261028f57611831611b21565b6007546001600160a01b03919061184b9083163314611d29565b166000908152601560205260409020805460ff19166001179055005b3461028f5761187536611b4d565b909160018060a01b039061188e82600654163314611d29565b611899841515611da4565b83600052601260205260406000205415611916576118b5611e0e565b8460005260136020526118cd60406000205485611ddb565b9361271091808302928304036105c25761190b6108e7927f4ef234eda81457f5376f8cb22a13c30e27b24d97ede622105f01f2cde767611096611dee565b906116938285612172565b60405162461bcd60e51b815260206004820152601860248201527f45524332303a20616363656c6572617465206572726f722100000000000000006044820152606490fd5b3461028f57600036600319011261028f576020600b54604051908152f35b3461028f57604036600319011261028f57611992611b21565b6024359033156114d9576001600160a01b03169081156114c057336000526001602052604060002082600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b3461028f57600036600319011261028f57604051600090600354600181811c90808316928315611ab3575b6020938484108114610b2c57838652908115610b0c5750600114611a5857610aad84610aa181880382611b77565b600360009081529294507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410611aa05750505081610aad93610aa19282010193610a91565b8054858501870152928501928101611a84565b91607f1691611a2a565b3461028f57600036600319011261028f57602090600c548152f35b6020808252825181830181905290939260005b828110611b0d57505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611aeb565b600435906001600160a01b038216820361028f57565b602435906001600160a01b038216820361028f57565b606090600319011261028f576004356001600160a01b038116810361028f57906024359060443590565b90601f8019910116810190811067ffffffffffffffff821117611b9957604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff8111611b995760051b60200190565b6005546001600160a01b03163303611bdb57565b60405163118cdaa760e01b8152336004820152602490fd5b906001600160a01b03808316908115611d10578216938415611cf757600091808352601560205260ff6040842054161580611ce5575b15611ca857611c8c9583611c8694928152601460205260ff604082205416159182611c94575b505015611c8e5750612710611c6660165483611ddb565b0490611c728286611f4a565b611c7e82600a54611ec3565b600a55611f3d565b91612006565b565b90611f3d565b8152604090205460ff161590503880611c4f565b60405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881d1c985b9cd9995c881b1a5b5a5d605a1b6044820152606490fd5b5085835260ff60408420541615611c29565b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fd5b15611d3057565b60405162461bcd60e51b81526020600482015260116024820152701c195c9b5a5cdcda5bdb8819195b9a5959607a1b6044820152606490fd5b15611d7057565b60405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964207261746560a01b6044820152606490fd5b15611dab57565b60405162461bcd60e51b81526020600482015260086024820152670646179203c3d20360c41b6044820152606490fd5b818102929181159184041417156105c257565b8115611df8570490565b634e487b7160e01b600052601260045260246000fd5b6002546040516370a0823160e01b8152306004820152906020826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9182156105b657600092611e8d575b50670de0b6b3a7640000918281029281840414901517156105c257611e8a91611dee565b90565b90916020823d8211611ebb575b81611ea760209383611b77565b81010312611eb85750519038611e66565b80fd5b3d9150611e9a565b919082018092116105c257565b60001981146105c25760010190565b611eee600254600a5490611ec3565b6011549060015b82811115611f06575050506119c890565b6000818152602090600f8252604091828220548511611f3057505050611f2b90611ed0565b611ef5565b6010905220549392505050565b919082039182116105c257565b9091906001600160a01b0381169081611f945750600080516020612280833981519152602084611f7f60009596600254611ec3565b6002555b8060025403600255604051908152a3565b92600082815280602052604081205494828610611fd55750818160406000805160206122808339815191529460009798876020965283865203912055611f83565b60405163391434e360e21b81526001600160a01b039190911660048201526024810186905260448101839052606490fd5b6001600160a01b038082169290918361206e57506000805160206122808339815191529160209161203986600254611ec3565b6002555b1693846120565780600254036002555b604051908152a3565b8460005260008252604060002081815401905561204d565b600090848252816020526040822054908682106120ad57509181604087602095886000805160206122808339815191529896528387520391205561203d565b60405163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101869052606490fd5b6001600160a01b0316908115611cf757600090818052601560205260ff6040832054161580612148575b15611ca85760208161212c60008051602061228083398151915293600254611ec3565b60025584845283825260408420818154019055604051908152a3565b5082825260ff60408320541615612109565b9081602091031261028f5751801515810361028f5790565b906001600160a01b0382168015611d1057600052601560205260ff6040600020541615806121b8575b15611ca857611c8c916121b082600a54611ec3565b600a55611f4a565b506000805260ff604060002054161561219b565b156121d357565b60405162461bcd60e51b815260206004820152600e60248201526d696e76616c69642072616e646f6d60901b6044820152606490fd5b805182101561221d5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b1561223a57565b60405162461bcd60e51b815260206004820152601f60248201527f45524332303a20626f6e64732055534442207472616e73666572206661696c006044820152606490fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122063b990ad782b46528e50d56c49ac3e65509e9821ee49bead21d1b553e658c76664736f6c634300081400330000000000000000000000004300000000000000000000000000000000000003
Deployed Bytecode
0x608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c90816306fc196014611abd5750806306fdde03146119ff578063095ea7b3146119795780630ed967971461195b578063149727e1146118675780631754e7d01461181857806317be778c1461177457806318160ddd146117565780631a100e39146117385780631e4bd42c146117085780631ee9f0e3146106945780631fcdf2391461151857806323b872dd14611426578063246199db1461130857806329b1c15c146112a3578063313ce567146112875780633c9f861d146112695780633d6a9afe14611240578063437edfcd146111d057806346e04a2f146111945780634fbec0e81461116857806368fd25cd1461114a5780636dd722691461110e57806370a08231146110d4578063715018a61461107757806375e41c7614610fdd578063783d574314610fb15780637974d6b314610c1d57806383cba2b914610bf45780638da5cb5b14610bcb5780638f02bb5b14610b8f57806392eefe9b14610b4c57806395d89b4114610a4757806396f0bd6114610a2c57806398d5fdca14610a095780639e447fc6146109cd578063a3f194e014610981578063a68eb7ef1461076b578063a7a7b1851461073d578063a9059cbb1461070c578063bf77dd53146106c0578063c2913b2114610694578063d7d95ea21461061c578063db006a751461049d578063dd62ed3e1461044c578063de2d99e514610410578063e0e46063146103c1578063f066daf214610395578063f2fde38b1461030c578063f57c1c3b146102c0578063f7e21b04146102945763fafcf6d314610266573861000f565b3461028f57600036600319011261028f576007546040516001600160a01b039091168152602090f35b600080fd5b3461028f57602036600319011261028f57600435600052600f6020526020604060002054604051908152f35b3461028f57602036600319011261028f576102d9611b21565b6007546001600160a01b0391906102f39083163314611d29565b166001600160601b0360a01b6006541617600655600080f35b3461028f57602036600319011261028f57610325611b21565b61032d611bc7565b6001600160a01b0390811690811561037c57600554826001600160601b0360a01b821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b604051631e4fbdf760e01b815260006004820152602490fd5b3461028f57602036600319011261028f5760043560005260106020526020604060002054604051908152f35b3461028f57602036600319011261028f576103da611b21565b6007546001600160a01b0391906103f49083163314611d29565b166000908152601460205260409020805460ff19166001179055005b3461028f57602036600319011261028f5760043561043960018060a01b03600754163314611d29565b610447612710821115611d69565b600b55005b3461028f57604036600319011261028f57610465611b21565b61046d611b37565b9060018060a01b038091166000526001602052604060002091166000526020526020604060002054604051908152f35b3461028f5760208060031936011261028f576004359081156105d8576104ca6104c4611e0e565b83611ddb565b600c54906127109182039182116105c25769021e19e0c9bab2400000916104f091611ddb565b60405163a9059cbb60e01b8152336004820152919004602482018190529190818160448160006001600160a01b037f0000000000000000000000004300000000000000000000000000000000000003165af180156105b657610589575b506105588333612172565b6040519283528201527f31b4617921a2c70f1aa3b03fe95c10c6583a15005bcb9b159020892b49b6beff60403392a2005b6105a890823d84116105af575b6105a08183611b77565b81019061215a565b508361054d565b503d610596565b6040513d6000823e3d90fd5b634e487b7160e01b600052601160045260246000fd5b6064906040519062461bcd60e51b82526004820152601960248201527f45524332303a2072656465656d20616d6f756e742062792030000000000000006044820152fd5b3461028f57604036600319011261028f57610635611b21565b61063d611bc7565b60405163a9059cbb60e01b8152336004820152602480359082015290602090829060449082906000906001600160a01b03165af180156105b65761067d57005b61001b9060203d81116105af576105a08183611b77565b3461028f57602036600319011261028f57600435600052600e6020526020604060002054604051908152f35b3461028f57602036600319011261028f576106d9611b21565b6007546001600160a01b0391906106f39083163314611d29565b166000908152601560205260409020805460ff19169055005b3461028f57604036600319011261028f57610732610728611b21565b6024359033611bf3565b602060405160018152f35b3461028f57602036600319011261028f5761076360018060a01b03600754163314611d29565b600435601155005b3461028f5761077936611b4d565b60065491926001600160a01b03926107949084163314611d29565b831561093c576107a2611edf565b9160025491847f00000000000000000000000043000000000000000000000000000000000000031694604051936370a0823160e01b855230600486015260209586866024818b5afa9586156105b657600096610909575b509061080861080d928a611ddb565b611ddb565b61271094858102908082048714901517156105c25761082b91611dee565b93610838600b5486611ddb565b0494808260646108488989611f3d565b9560006040519b8c9485936323b872dd60e01b8552169d8e600485015230602485015260448401525af19384156105b6576108b587600e947ff1d7a63039a8218cf853ec6ee4852c21ecf63f65488fececd59450011d58eeb29a6108e7986108ec575b50600854166120df565b6108bf84306120df565b6000525280604060002055604051938493846040919493926060820195825260208201520152565b0390a2005b61090290863d88116105af576105a08183611b77565b508c6108ab565b919095508682813d8311610935575b6109228183611b77565b8101031261028f579051946108086107f9565b503d610918565b60405162461bcd60e51b815260206004820152601760248201527f45524332303a206d696e7420616d6f756e7420627920300000000000000000006044820152606490fd5b3461028f57602036600319011261028f5761099a611b21565b6007546001600160a01b0391906109b49083163314611d29565b166000908152601460205260409020805460ff19169055005b3461028f57602036600319011261028f576004356109f660018060a01b03600754163314611d29565b610a04612710821115611d69565b600d55005b3461028f57600036600319011261028f576020610a24611e0e565b604051908152f35b3461028f57600036600319011261028f576020610a24611edf565b3461028f57600036600319011261028f57604051600090600454600181811c90808316928315610b42575b6020938484108114610b2c57838652908115610b0c5750600114610ab1575b610aad84610aa181880382611b77565b60405191829182611ad8565b0390f35b600460009081529294507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610af95750505081610aad93610aa19282010193610a91565b8054858501870152928501928101610add565b60ff1916858501525050151560051b8201019150610aa181610aad610a91565b634e487b7160e01b600052602260045260246000fd5b91607f1691610a72565b3461028f57602036600319011261028f57610b65611b21565b610b6d611bc7565b600780546001600160a01b0319166001600160a01b0392909216919091179055005b3461028f57602036600319011261028f57600435610bb860018060a01b03600754163314611d29565b610bc6612710821115611d69565b601655005b3461028f57600036600319011261028f576005546040516001600160a01b039091168152602090f35b3461028f57600036600319011261028f576006546040516001600160a01b039091168152602090f35b3461028f57606036600319011261028f5760043567ffffffffffffffff80821161028f573660238301121561028f578160040135610c5a81611baf565b92610c686040519485611b77565b8184526024602085019260051b8201019036821161028f57602401915b818310610f915750505060243590811161028f573660238201121561028f57806004013590610cb382611baf565b91610cc16040519384611b77565b8083526024602084019160051b8301019136831161028f57602401905b828210610f8157505050610cfd60018060a01b03600754163314611d29565b6044356000526009602052610d1a60ff60406000205416156121cc565b60443560005260096020526040600020600160ff19825416179055610d3d611e0e565b82518015159081610f76575b5015610f41576000805b8451821015610f0957610d668285612209565b519182610d7f575b610d79919250611ed0565b90610d53565b61271080610d8f600d5486611ddb565b0490610d9b8286611f3d565b91610da68782611ddb565b91600c5481039081116105c257610dcb69021e19e0c9bab240000091610e1494611ddb565b04906020826001600160a01b03610de2888e612209565b5160405163a9059cbb60e01b815291166001600160a01b03166004820152602481019190915293849081906044820190565b038160007f00000000000000000000000043000000000000000000000000000000000000036001600160a01b03165af19081156105b657610d7996610e86610ea9937fc0ca27dc73711f96a89cb8b44eedaf064955a74b64b18f76d42e906bfe37da0396600091610eea575b50612233565b610ea4868d610e9c8a60018060a01b0392612209565b511630612006565b611ec3565b95610edf6001600160a01b03610ebf878d612209565b511694604051938493846040919493926060820195825260208201520152565b0390a2829150610d6e565b610f03915060203d6020116105af576105a08183611b77565b8e610e80565b610f139030612172565b7fc78b6dea49882fca01b3fbf70d408b2e957ee8e0745b711d892db3d49159325260206040516044358152a1005b60405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420417272617960981b6044820152606490fd5b905082511484610d49565b8135815260209182019101610cde565b82356001600160a01b038116810361028f57815260209283019201610c85565b3461028f57602036600319011261028f5760043560005260136020526020604060002054604051908152f35b3461028f57606036600319011261028f576004356044359061100a60018060a01b03600754163314611d29565b611018612710831115611d69565b601154811161104257600052600f6020526024356040600020556010602052604060002055600080f35b60405162461bcd60e51b815260206004820152600d60248201526c0caf0c6cacac8e640d2dcc8caf609b1b6044820152606490fd5b3461028f57600036600319011261028f57611090611bc7565b600580546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461028f57602036600319011261028f576001600160a01b036110f5611b21565b1660005260006020526020604060002054604051908152f35b3461028f57602036600319011261028f5760043561113760018060a01b03600754163314611d29565b611145612710821115611d69565b600c55005b3461028f57600036600319011261028f576020600d54604051908152f35b3461028f57602036600319011261028f5760043560005260126020526020604060002054604051908152f35b3461028f57602036600319011261028f5760008080806004356111b5611bc7565b8181156111c7575b3390f1156105b657005b506108fc6111bd565b3461028f57604036600319011261028f576111e9611b37565b6001601754036112075761120090600435906120df565b6000601755005b60405162461bcd60e51b8152602060048201526011602482015270115490cc8c0e881a5b9a5d081b1a5b5a5d607a1b6044820152606490fd5b3461028f57600036600319011261028f576008546040516001600160a01b039091168152602090f35b3461028f57600036600319011261028f576020600a54604051908152f35b3461028f57600036600319011261028f57602060405160128152f35b3461028f57602036600319011261028f576112bc611b21565b6007546001600160a01b0391906112d69083163314611d29565b16806001600160601b0360a01b600854161760085560005260146020526040600020600160ff19825416179055600080f35b3461028f5760208060031936011261028f57611322611b21565b61132a611bc7565b6040516370a0823160e01b81523060048201526001600160a01b0391909116908281602481855afa9081156105b6576000916113f9575b5080156113b45760405163a9059cbb60e01b81523360048201526024810191909152908290829060449082906000905af180156105b65761139e57005b8161001b92903d106105af576105a08183611b77565b60405162461bcd60e51b815260048101849052601860248201527f45524332303a20636c61696d20616d6f756e74206279203000000000000000006044820152606490fd5b90508281813d831161141f575b6114108183611b77565b8101031261028f575183611361565b503d611406565b3461028f57606036600319011261028f5761143f611b21565b611447611b37565b6044359060018060a01b03831692836000526001602052604060002033600052602052604060002054936000198503611486575b506107329350611bf3565b8385106114f25780156114d95733156114c0576107329484916000526001602052604060002033600052602052036040600020558461147b565b604051634a1406b160e11b815260006004820152602490fd5b60405163e602df0560e01b815260006004820152602490fd5b604051637dc7a0d960e11b81523360048201526024810186905260448101859052606490fd5b3461028f5761152636611b4d565b6007546001600160a01b039392906115419085163314611d29565b816000526020926009845261155e60ff60406000205416156121cc565b82600052600984526040600020600160ff1982541617905561157e611e0e565b9482156116d5576127109182611596600d5486611ddb565b04926115ac6115a58587611f3d565b9885611ddb565b600c5482039182116105c25769021e19e0c9bab2400000916115cd91611ddb565b60405163a9059cbb60e01b81526001600160a01b03841660048201529190046024820181905297878260448160007f000000000000000000000000430000000000000000000000000000000000000389165af19889156105b6576116937fc0ca27dc73711f96a89cb8b44eedaf064955a74b64b18f76d42e906bfe37da03966116827fc78b6dea49882fca01b3fbf70d408b2e957ee8e0745b711d892db3d4915932529c6116b2966000916116be5750612233565b61168d848730612006565b30612172565b6040519485941696846040919493926060820195825260208201520152565b0390a2604051908152a1005b610f0391508d803d106105af576105a08183611b77565b60405162461bcd60e51b815260048101869052600b60248201526a0616d6f756e74203c3d20360ac1b6044820152606490fd5b3461028f57600036600319011261028f57611721611bc7565b6000808080478181156111c7573390f1156105b657005b3461028f57600036600319011261028f576020601154604051908152f35b3461028f57600036600319011261028f576020600254604051908152f35b3461028f57604036600319011261028f57600435602435906117a160018060a01b03600754163314611d29565b6117ac811515611da4565b8115158061180c575b156117d9578060005260126020526040600020556013602052604060002055600080f35b60405162461bcd60e51b815260206004820152600b60248201526a32bc31b2b2b239903bb4b760a91b6044820152606490fd5b506127108211156117b5565b3461028f57602036600319011261028f57611831611b21565b6007546001600160a01b03919061184b9083163314611d29565b166000908152601560205260409020805460ff19166001179055005b3461028f5761187536611b4d565b909160018060a01b039061188e82600654163314611d29565b611899841515611da4565b83600052601260205260406000205415611916576118b5611e0e565b8460005260136020526118cd60406000205485611ddb565b9361271091808302928304036105c25761190b6108e7927f4ef234eda81457f5376f8cb22a13c30e27b24d97ede622105f01f2cde767611096611dee565b906116938285612172565b60405162461bcd60e51b815260206004820152601860248201527f45524332303a20616363656c6572617465206572726f722100000000000000006044820152606490fd5b3461028f57600036600319011261028f576020600b54604051908152f35b3461028f57604036600319011261028f57611992611b21565b6024359033156114d9576001600160a01b03169081156114c057336000526001602052604060002082600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b3461028f57600036600319011261028f57604051600090600354600181811c90808316928315611ab3575b6020938484108114610b2c57838652908115610b0c5750600114611a5857610aad84610aa181880382611b77565b600360009081529294507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410611aa05750505081610aad93610aa19282010193610a91565b8054858501870152928501928101611a84565b91607f1691611a2a565b3461028f57600036600319011261028f57602090600c548152f35b6020808252825181830181905290939260005b828110611b0d57505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611aeb565b600435906001600160a01b038216820361028f57565b602435906001600160a01b038216820361028f57565b606090600319011261028f576004356001600160a01b038116810361028f57906024359060443590565b90601f8019910116810190811067ffffffffffffffff821117611b9957604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff8111611b995760051b60200190565b6005546001600160a01b03163303611bdb57565b60405163118cdaa760e01b8152336004820152602490fd5b906001600160a01b03808316908115611d10578216938415611cf757600091808352601560205260ff6040842054161580611ce5575b15611ca857611c8c9583611c8694928152601460205260ff604082205416159182611c94575b505015611c8e5750612710611c6660165483611ddb565b0490611c728286611f4a565b611c7e82600a54611ec3565b600a55611f3d565b91612006565b565b90611f3d565b8152604090205460ff161590503880611c4f565b60405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881d1c985b9cd9995c881b1a5b5a5d605a1b6044820152606490fd5b5085835260ff60408420541615611c29565b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fd5b15611d3057565b60405162461bcd60e51b81526020600482015260116024820152701c195c9b5a5cdcda5bdb8819195b9a5959607a1b6044820152606490fd5b15611d7057565b60405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964207261746560a01b6044820152606490fd5b15611dab57565b60405162461bcd60e51b81526020600482015260086024820152670646179203c3d20360c41b6044820152606490fd5b818102929181159184041417156105c257565b8115611df8570490565b634e487b7160e01b600052601260045260246000fd5b6002546040516370a0823160e01b8152306004820152906020826024817f00000000000000000000000043000000000000000000000000000000000000036001600160a01b03165afa9182156105b657600092611e8d575b50670de0b6b3a7640000918281029281840414901517156105c257611e8a91611dee565b90565b90916020823d8211611ebb575b81611ea760209383611b77565b81010312611eb85750519038611e66565b80fd5b3d9150611e9a565b919082018092116105c257565b60001981146105c25760010190565b611eee600254600a5490611ec3565b6011549060015b82811115611f06575050506119c890565b6000818152602090600f8252604091828220548511611f3057505050611f2b90611ed0565b611ef5565b6010905220549392505050565b919082039182116105c257565b9091906001600160a01b0381169081611f945750600080516020612280833981519152602084611f7f60009596600254611ec3565b6002555b8060025403600255604051908152a3565b92600082815280602052604081205494828610611fd55750818160406000805160206122808339815191529460009798876020965283865203912055611f83565b60405163391434e360e21b81526001600160a01b039190911660048201526024810186905260448101839052606490fd5b6001600160a01b038082169290918361206e57506000805160206122808339815191529160209161203986600254611ec3565b6002555b1693846120565780600254036002555b604051908152a3565b8460005260008252604060002081815401905561204d565b600090848252816020526040822054908682106120ad57509181604087602095886000805160206122808339815191529896528387520391205561203d565b60405163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101869052606490fd5b6001600160a01b0316908115611cf757600090818052601560205260ff6040832054161580612148575b15611ca85760208161212c60008051602061228083398151915293600254611ec3565b60025584845283825260408420818154019055604051908152a3565b5082825260ff60408320541615612109565b9081602091031261028f5751801515810361028f5790565b906001600160a01b0382168015611d1057600052601560205260ff6040600020541615806121b8575b15611ca857611c8c916121b082600a54611ec3565b600a55611f4a565b506000805260ff604060002054161561219b565b156121d357565b60405162461bcd60e51b815260206004820152600e60248201526d696e76616c69642072616e646f6d60901b6044820152606490fd5b805182101561221d5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b1561223a57565b60405162461bcd60e51b815260206004820152601f60248201527f45524332303a20626f6e64732055534442207472616e73666572206661696c006044820152606490fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122063b990ad782b46528e50d56c49ac3e65509e9821ee49bead21d1b553e658c76664736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004300000000000000000000000000000000000003
-----Decoded View---------------
Arg [0] : usdb (address): 0x4300000000000000000000000000000000000003
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004300000000000000000000000000000000000003
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$47,946.96
Net Worth in ETH
20.564269
Token Allocations
USDB
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BLAST | 100.00% | $1 | 47,899.0593 | $47,946.96 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.