Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 194 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 35340368 | 68 days ago | IN | 0 ETH | 0.00000014 | ||||
| Approve | 20944547 | 402 days ago | IN | 0 ETH | 0.00000027 | ||||
| Transfer | 18729250 | 453 days ago | IN | 0 ETH | 0.00000034 | ||||
| Approve | 17272177 | 487 days ago | IN | 0 ETH | 0.00000035 | ||||
| Approve | 16480164 | 505 days ago | IN | 0 ETH | 0.00000024 | ||||
| Approve | 16388562 | 507 days ago | IN | 0 ETH | 0.00000039 | ||||
| Approve | 16279904 | 510 days ago | IN | 0 ETH | 0.00006982 | ||||
| Approve | 16279894 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279893 | 510 days ago | IN | 0 ETH | 0.00001434 | ||||
| Approve | 16279892 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279890 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279890 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279890 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279890 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279890 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279889 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279889 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279888 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279888 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279888 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279888 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279888 | 510 days ago | IN | 0 ETH | 0.00000967 | ||||
| Approve | 16279887 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 16279878 | 510 days ago | IN | 0 ETH | 0.00000501 | ||||
| Approve | 15441255 | 529 days ago | IN | 0 ETH | 0.00000032 |
Latest 1 internal transaction
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 12815292 | 590 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DefiV3Token
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.17;
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
import { LibCommon } from "./lib/LibCommon.sol";
import { ReflectiveERC20 } from "./ReflectiveERC20.sol";
/// @title A Defi Token implementation with extended functionalities
/// @notice Implements ERC20 standards with additional features like tax and deflation
contract DefiV3Token is ReflectiveERC20, Ownable {
// Constants
uint256 private constant MAX_BPS_AMOUNT = 10_000;
uint256 private constant MAX_ALLOWED_BPS = 2_000;
string public constant VERSION = "defi_v_3";
// State Variables
string public initialDocumentUri;
string public documentUri;
uint256 public immutable initialSupply;
uint256 public immutable initialMaxTokenAmountPerAddress;
uint256 public maxTokenAmountPerAddress;
uint256 public maxTotalSupply;
/// @notice Configuration properties for the ERC20 token
struct ERC20ConfigProps {
bool _isMintable;
bool _isBurnable;
bool _isDocumentAllowed;
bool _isMaxAmountOfTokensSet;
bool _isMaxSupplySet;
bool _isTaxable;
bool _isDeflationary;
bool _isReflective;
}
ERC20ConfigProps private configProps;
address public immutable initialTokenOwner;
uint8 private immutable _decimals;
address public taxAddress;
uint256 public taxBPS;
uint256 public deflationBPS;
// Events
event DocumentUriSet(string newDocUri);
event MaxTokenAmountPerSet(uint256 newMaxTokenAmount);
event TaxConfigSet(address indexed _taxAddress, uint256 indexed _taxBPS);
event DeflationConfigSet(uint256 indexed _deflationBPS);
event ReflectionConfigSet(uint256 indexed _feeBPS);
// Custom Errors
error InvalidMaxTokenAmount(uint256 maxTokenAmount);
error InvalidDecimals(uint8 decimals);
error MaxTokenAmountPerAddrLtPrevious();
error DestBalanceExceedsMaxAllowed(address addr);
error DocumentUriNotAllowed();
error MaxTokenAmountNotAllowed();
error TokenIsNotTaxable();
error TokenIsNotDeflationary();
error InvalidTotalBPS(uint256 bps);
error InvalidReflectiveConfig();
error InvalidMaxSupplyConfig();
error TotalSupplyExceedsMaxAllowedAmount();
/// @notice Constructor to initialize the DeFi token
/// @param name_ Name of the token
/// @param symbol_ Symbol of the token
/// @param initialSupplyToSet Initial supply of tokens
/// @param decimalsToSet Number of decimals for the token
/// @param tokenOwner Address of the initial token owner
/// @param customConfigProps Configuration properties for the token
/// @param newDocumentUri URI for the document associated with the token
/// @param _taxAddress Address where tax will be sent
/// @param bpsParams array of BPS values in this order:
/// taxBPS = bpsParams[0],
/// deflationBPS = bpsParams[1],
/// rewardFeeBPS = bpsParams[2],
/// @param amountParams array of amounts for amount specific config:
/// maxTokenAmount = amountParams[0], Maximum token amount per address
/// maxSupplyAmount = amountParams[1], Maximum token token supply amount
constructor(
string memory name_,
string memory symbol_,
uint256 initialSupplyToSet,
uint8 decimalsToSet,
address tokenOwner,
ERC20ConfigProps memory customConfigProps,
string memory newDocumentUri,
address _taxAddress,
uint256[3] memory bpsParams,
uint256[2] memory amountParams
)
ReflectiveERC20(
name_,
symbol_,
tokenOwner,
initialSupplyToSet,
decimalsToSet,
initialSupplyToSet != 0 ? bpsParams[2] : 0,
customConfigProps._isReflective
)
{
// reflection feature can't be used in combination with burning/minting/deflation
// or reflection config is invalid if no reflection BPS amount is provided
if (
(customConfigProps._isReflective &&
(customConfigProps._isBurnable ||
customConfigProps._isMintable ||
customConfigProps._isDeflationary)) ||
(!customConfigProps._isReflective && bpsParams[2] != 0)
) {
revert InvalidReflectiveConfig();
}
if (customConfigProps._isMaxAmountOfTokensSet) {
if (amountParams[0] == 0) {
revert InvalidMaxTokenAmount(amountParams[0]);
}
}
if (decimalsToSet > 18) {
revert InvalidDecimals(decimalsToSet);
}
if (
customConfigProps._isMaxSupplySet &&
(!customConfigProps._isMintable || (totalSupply() > amountParams[1]))
) {
revert InvalidMaxSupplyConfig();
}
bpsInitChecks(customConfigProps, bpsParams, _taxAddress);
LibCommon.validateAddress(tokenOwner);
taxAddress = _taxAddress;
taxBPS = bpsParams[0];
deflationBPS = bpsParams[1];
initialSupply = initialSupplyToSet;
initialMaxTokenAmountPerAddress = amountParams[0];
initialDocumentUri = newDocumentUri;
initialTokenOwner = tokenOwner;
_decimals = decimalsToSet;
configProps = customConfigProps;
documentUri = newDocumentUri;
maxTokenAmountPerAddress = amountParams[0];
maxTotalSupply = amountParams[1];
if (tokenOwner != msg.sender) {
transferOwnership(tokenOwner);
}
}
function bpsInitChecks(
ERC20ConfigProps memory customConfigProps,
uint256[3] memory bpsParams,
address _taxAddress
) private pure {
uint256 totalBPS = 0;
if (customConfigProps._isTaxable) {
LibCommon.validateAddress(_taxAddress);
totalBPS += bpsParams[0];
}
if (customConfigProps._isDeflationary) {
totalBPS += bpsParams[1];
}
if (customConfigProps._isReflective) {
totalBPS += bpsParams[2];
}
if (totalBPS > MAX_ALLOWED_BPS) {
revert InvalidTotalBPS(totalBPS);
}
}
// Public and External Functions
/// @notice Checks if the token is mintable
/// @return True if the token can be minted
function isMintable() public view returns (bool) {
return configProps._isMintable;
}
/// @notice Checks if the token is burnable
/// @return True if the token can be burned
function isBurnable() public view returns (bool) {
return configProps._isBurnable;
}
/// @notice Checks if the maximum amount of tokens per address is set
/// @return True if there is a maximum limit for token amount per address
function isMaxAmountOfTokensSet() public view returns (bool) {
return configProps._isMaxAmountOfTokensSet;
}
/// @notice Checks if the maximum amount of token supply is set
/// @return True if there is a maximum limit for token supply
function isMaxSupplySet() public view returns (bool) {
return configProps._isMaxSupplySet;
}
/// @notice Checks if setting a document URI is allowed
/// @return True if setting a document URI is allowed
function isDocumentUriAllowed() public view returns (bool) {
return configProps._isDocumentAllowed;
}
/// @notice Returns the number of decimals used for the token
/// @return The number of decimals
function decimals() public view virtual override returns (uint8) {
return _decimals;
}
/// @notice Checks if the token is taxable
/// @return True if the token has tax applied on transfers
function isTaxable() public view returns (bool) {
return configProps._isTaxable;
}
/// @notice Checks if the token is deflationary
/// @return True if the token has deflation applied on transfers
function isDeflationary() public view returns (bool) {
return configProps._isDeflationary;
}
/// @notice Checks if the token is reflective
/// @return True if the token has reflection (ie. holder rewards) applied on transfers
function isReflective() public view returns (bool) {
return configProps._isReflective;
}
/// @notice Sets a new document URI
/// @dev Can only be called by the contract owner
/// @param newDocumentUri The new URI to be set
function setDocumentUri(string memory newDocumentUri) external onlyOwner {
if (!isDocumentUriAllowed()) {
revert DocumentUriNotAllowed();
}
documentUri = newDocumentUri;
emit DocumentUriSet(newDocumentUri);
}
/// @notice Sets a new maximum token amount per address
/// @dev Can only be called by the contract owner
/// @param newMaxTokenAmount The new maximum token amount per address
function setMaxTokenAmountPerAddress(
uint256 newMaxTokenAmount
) external onlyOwner {
if (!isMaxAmountOfTokensSet()) {
revert MaxTokenAmountNotAllowed();
}
if (newMaxTokenAmount <= maxTokenAmountPerAddress) {
revert MaxTokenAmountPerAddrLtPrevious();
}
maxTokenAmountPerAddress = newMaxTokenAmount;
emit MaxTokenAmountPerSet(newMaxTokenAmount);
}
/// @notice Sets a new reflection fee
/// @dev Can only be called by the contract owner
/// @param _feeBPS The reflection fee in basis points
function setReflectionConfig(uint256 _feeBPS) external onlyOwner {
if (!isReflective()) {
revert TokenIsNotReflective();
}
super._setReflectionFee(_feeBPS);
emit ReflectionConfigSet(_feeBPS);
}
/// @notice Sets a new tax configuration
/// @dev Can only be called by the contract owner
/// @param _taxAddress The address where tax will be sent
/// @param _taxBPS The tax rate in basis points
function setTaxConfig(
address _taxAddress,
uint256 _taxBPS
) external onlyOwner {
if (!isTaxable()) {
revert TokenIsNotTaxable();
}
uint256 totalBPS = deflationBPS + tFeeBPS + _taxBPS;
if (totalBPS > MAX_ALLOWED_BPS) {
revert InvalidTotalBPS(totalBPS);
}
LibCommon.validateAddress(_taxAddress);
taxAddress = _taxAddress;
taxBPS = _taxBPS;
emit TaxConfigSet(_taxAddress, _taxBPS);
}
/// @notice Sets a new deflation configuration
/// @dev Can only be called by the contract owner
/// @param _deflationBPS The deflation rate in basis points
function setDeflationConfig(uint256 _deflationBPS) external onlyOwner {
if (!isDeflationary()) {
revert TokenIsNotDeflationary();
}
uint256 totalBPS = deflationBPS + tFeeBPS + _deflationBPS;
if (totalBPS > MAX_ALLOWED_BPS) {
revert InvalidTotalBPS(totalBPS);
}
deflationBPS = _deflationBPS;
emit DeflationConfigSet(_deflationBPS);
}
/// @notice Transfers tokens to a specified address
/// @dev Overrides the ERC20 transfer function with added tax and deflation logic
/// @param to The address to transfer tokens to
/// @param amount The amount of tokens to be transferred
/// @return True if the transfer was successful
function transfer(
address to,
uint256 amount
) public virtual override returns (bool) {
uint256 taxAmount = _taxAmount(msg.sender, amount);
uint256 deflationAmount = _deflationAmount(amount);
uint256 amountToTransfer = amount - taxAmount - deflationAmount;
if (isMaxAmountOfTokensSet()) {
if (balanceOf(to) + amountToTransfer > maxTokenAmountPerAddress) {
revert DestBalanceExceedsMaxAllowed(to);
}
}
if (taxAmount != 0) {
_transferNonReflectedTax(msg.sender, taxAddress, taxAmount);
}
if (deflationAmount != 0) {
_burn(msg.sender, deflationAmount);
}
return super.transfer(to, amountToTransfer);
}
/// @notice Transfers tokens from one address to another
/// @dev Overrides the ERC20 transferFrom function with added tax and deflation logic
/// @param from The address which you want to send tokens from
/// @param to The address which you want to transfer to
/// @param amount The amount of tokens to be transferred
/// @return True if the transfer was successful
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
uint256 taxAmount = _taxAmount(from, amount);
uint256 deflationAmount = _deflationAmount(amount);
uint256 amountToTransfer = amount - taxAmount - deflationAmount;
if (isMaxAmountOfTokensSet()) {
if (balanceOf(to) + amountToTransfer > maxTokenAmountPerAddress) {
revert DestBalanceExceedsMaxAllowed(to);
}
}
if (taxAmount != 0) {
_transferNonReflectedTax(from, taxAddress, taxAmount);
}
if (deflationAmount != 0) {
_burn(from, deflationAmount);
}
return super.transferFrom(from, to, amountToTransfer);
}
/// @notice Mints new tokens to a specified address
/// @dev Can only be called by the contract owner and if minting is enabled
/// @param to The address to mint tokens to
/// @param amount The amount of tokens to mint
function mint(address to, uint256 amount) external onlyOwner {
if (!isMintable()) {
revert MintingNotEnabled();
}
if (isMaxAmountOfTokensSet()) {
if (balanceOf(to) + amount > maxTokenAmountPerAddress) {
revert DestBalanceExceedsMaxAllowed(to);
}
}
if (isMaxSupplySet()) {
if (totalSupply() + amount > maxTotalSupply) {
revert TotalSupplyExceedsMaxAllowedAmount();
}
}
super._mint(to, amount);
}
/// @notice Burns a specific amount of tokens
/// @dev Can only be called by the contract owner and if burning is enabled
/// @param amount The amount of tokens to be burned
function burn(uint256 amount) external onlyOwner {
if (!isBurnable()) {
revert BurningNotEnabled();
}
_burn(msg.sender, amount);
}
/// @notice Renounces ownership of the contract
/// @dev Leaves the contract without an owner, disabling any functions that require the owner's authorization
function renounceOwnership() public override onlyOwner {
super.renounceOwnership();
}
/// @notice Transfers ownership of the contract to a new account
/// @dev Can only be called by the current owner
/// @param newOwner The address of the new owner
function transferOwnership(address newOwner) public override onlyOwner {
super.transferOwnership(newOwner);
}
// Internal Functions
/// @notice Calculates the tax amount for a transfer
/// @param sender The address initiating the transfer
/// @param amount The amount of tokens being transferred
/// @return taxAmount The calculated tax amount
function _taxAmount(
address sender,
uint256 amount
) internal view returns (uint256 taxAmount) {
taxAmount = 0;
if (taxBPS != 0 && sender != taxAddress) {
taxAmount = (amount * taxBPS) / MAX_BPS_AMOUNT;
}
}
/// @notice Calculates the deflation amount for a transfer
/// @param amount The amount of tokens being transferred
/// @return deflationAmount The calculated deflation amount
function _deflationAmount(
uint256 amount
) internal view returns (uint256 deflationAmount) {
deflationAmount = 0;
if (deflationBPS != 0) {
deflationAmount = (amount * deflationBPS) / MAX_BPS_AMOUNT;
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (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 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 {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @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 {
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: MIT
// OpenZeppelin Contracts (last updated v4.9.4) (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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
library LibCommon {
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* CUSTOM ERRORS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev The ETH transfer has failed.
error ETHTransferFailed();
/// @dev The address is the zero address.
error ZeroAddress();
/// @notice raised when an ERC20 transfer fails
error TransferFailed();
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* ETH OPERATIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @notice Taken from Solady (https://github.com/vectorized/solady/blob/main/src/utils/SafeTransferLib.sol)
/// @dev Sends `amount` (in wei) ETH to `to`.
/// Reverts upon failure.
function safeTransferETH(address to, uint256 amount) internal {
// solhint-disable-next-line no-inline-assembly
assembly {
// Transfer the ETH and check if it succeeded or not.
if iszero(call(gas(), to, amount, 0, 0, 0, 0)) {
// Store the function selector of `ETHTransferFailed()`.
// bytes4(keccak256(bytes("ETHTransferFailed()"))) = 0xb12d13eb
mstore(0x00, 0xb12d13eb)
// Revert with (offset, size).
revert(0x1c, 0x04)
}
}
}
/// @notice Validates that the address is not the zero address using assembly.
/// @dev Reverts if the address is the zero address.
function validateAddress(address addr) internal pure {
// solhint-disable-next-line no-inline-assembly
assembly {
if iszero(shl(96, addr)) {
// Store the function selector of `ZeroAddress()`.
// bytes4(keccak256(bytes("ZeroAddress()"))) = 0xd92e233d
mstore(0x00, 0xd92e233d)
// Revert with (offset, size).
revert(0x1c, 0x04)
}
}
}
/// @notice Helper function to transfer ERC20 tokens without the need for SafeERC20.
/// @dev Reverts if the ERC20 transfer fails.
/// @param tokenAddress The address of the ERC20 token.
/// @param from The address to transfer the tokens from.
/// @param to The address to transfer the tokens to.
/// @param amount The amount of tokens to transfer.
function safeTransferFrom(
address tokenAddress,
address from,
address to,
uint256 amount
) internal returns (bool) {
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory data) = tokenAddress.call(
abi.encodeWithSignature(
"transferFrom(address,address,uint256)",
from,
to,
amount
)
);
if (!success) {
if (data.length != 0) {
// bubble up error
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(data)
revert(add(32, data), returndata_size)
}
} else {
revert TransferFailed();
}
}
return true;
}
/// @notice Helper function to transfer ERC20 tokens without the need for SafeERC20.
/// @dev Reverts if the ERC20 transfer fails.
/// @param tokenAddress The address of the ERC20 token.
/// @param to The address to transfer the tokens to.
/// @param amount The amount of tokens to transfer.
function safeTransfer(
address tokenAddress,
address to,
uint256 amount
) internal returns (bool) {
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory data) = tokenAddress.call(
abi.encodeWithSignature("transfer(address,uint256)", to, amount)
);
if (!success) {
if (data.length != 0) {
// bubble up error
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(data)
revert(add(32, data), returndata_size)
}
} else {
revert TransferFailed();
}
}
return true;
}
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.17;
import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import { LibCommon } from "./lib/LibCommon.sol";
/// @title A ERC20 implementation with extended reflection token functionalities
/// @notice Implements ERC20 standards with additional token holder reward feature
abstract contract ReflectiveERC20 is ERC20 {
// Constants
uint256 private constant BPS_DIVISOR = 10_000;
mapping(address => uint256) private _rOwned;
mapping(address => uint256) private _tOwned;
uint256 private constant UINT_256_MAX = type(uint256).max;
uint256 private _rTotal;
uint256 private _tFeeTotal;
uint256 public tFeeBPS;
bool private immutable isReflective;
// custom errors
error TokenIsNotReflective();
error TotalReflectionTooSmall();
error ZeroTransferError();
error MintingNotEnabled();
error BurningNotEnabled();
error ERC20InsufficientBalance(
address recipient,
uint256 fromBalance,
uint256 balance
);
/// @notice Gets total supply of the erc20 token
/// @return Token total supply
function _tTotal() public view virtual returns (uint256) {
return totalSupply();
}
/// @notice Constructor to initialize the ReflectionErc20 token
/// @param name_ Name of the token
/// @param symbol_ Symbol of the token
/// @param tokenOwner Address of the token owner
/// @param totalSupply_ Initial total supply
/// @param decimalsToSet Token decimal number
/// @param decimalsToSet Token reward (reflection fee BPS value
constructor(
string memory name_,
string memory symbol_,
address tokenOwner,
uint256 totalSupply_,
uint8 decimalsToSet,
uint256 tFeeBPS_,
bool isReflective_
) ERC20(name_, symbol_) {
if (totalSupply_ != 0) {
super._mint(tokenOwner, totalSupply_ * 10 ** decimalsToSet);
_rTotal = (UINT_256_MAX - (UINT_256_MAX % totalSupply_));
}
_rOwned[tokenOwner] = _rTotal;
tFeeBPS = tFeeBPS_;
isReflective = isReflective_;
}
// public standard ERC20 functions
/// @notice Gets balance the erc20 token for specific address
/// @param account Account address
/// @return Token balance
function balanceOf(address account) public view override returns (uint256) {
if (isReflective) {
return tokenFromReflection(_rOwned[account]);
} else {
return super.balanceOf(account);
}
}
/// @notice Transfers allowed tokens between accounts
/// @param from From account
/// @param to To account
/// @param value Transferred value
/// @return Success
function transferFrom(
address from,
address to,
uint256 value
) public virtual override returns (bool) {
address spender = super._msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
/// @notice Transfers tokens from owner to an account
/// @param to To account
/// @param value Transferred value
/// @return Success
function transfer(
address to,
uint256 value
) public virtual override returns (bool) {
address owner = super._msgSender();
_transfer(owner, to, value);
return true;
}
// override internal OZ standard ERC20 functions related to transfer
/// @notice Transfers tokens from owner to an account
/// @param to To account
/// @param amount Transferred amount
function _transfer(
address from,
address to,
uint256 amount
) internal override {
if (isReflective) {
LibCommon.validateAddress(from);
LibCommon.validateAddress(to);
if (amount == 0) {
revert ZeroTransferError();
}
_transferReflected(from, to, amount);
} else {
super._transfer(from, to, amount);
}
}
// override incompatible internal OZ standard ERC20 functions to disable them in case
// reflection mechanism is used, ie. tFeeBPS is non zero
/// @notice Creates specified amount of tokens, it either uses standard OZ ERC function
/// or in case of reflection logic, it is prohibited
/// @param account Account new tokens will be transferred to
/// @param value Created tokens value
function _mint(address account, uint256 value) internal override {
if (isReflective) {
revert MintingNotEnabled();
} else {
super._mint(account, value);
}
}
/// @notice Destroys specified amount of tokens, it either uses standard OZ ERC function
/// or in case of reflection logic, it is prohibited
/// @param account Account in which tokens will be destroyed
/// @param value Destroyed tokens value
function _burn(address account, uint256 value) internal override {
if (isReflective) {
revert BurningNotEnabled();
} else {
super._burn(account, value);
}
}
// public reflection custom functions
/// @notice Sets a new reflection fee
/// @dev Should only be called by the contract owner
/// @param _tFeeBPS The reflection fee in basis points
function _setReflectionFee(uint256 _tFeeBPS) internal {
if (!isReflective) {
revert TokenIsNotReflective();
}
tFeeBPS = _tFeeBPS;
}
/// @notice Calculates number of tokens from reflection amount
/// @param rAmount Reflection token amount
function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
if (rAmount > _rTotal) {
revert TotalReflectionTooSmall();
}
uint256 currentRate = _getRate();
return rAmount / currentRate;
}
// private reflection custom functions
/// @notice Transfers reflected amount of tokens
/// @param sender Account to transfer tokens from
/// @param recipient Account to transfer tokens to
/// @param tAmount Total token amount
function _transferReflected(
address sender,
address recipient,
uint256 tAmount
) private {
uint256 tFee = calculateFee(tAmount);
uint256 tTransferAmount = tAmount - tFee;
(uint256 rAmount, uint256 rFee, uint256 rTransferAmount) = _getRValues(
tAmount,
tFee,
tTransferAmount
);
if (tAmount != 0) {
_rUpdate(sender, recipient, rAmount, rTransferAmount);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tAmount);
}
}
/// @notice Deducts reflection fee from reflection supply to 'distribute' token holder rewards
/// @param rFee Reflection fee
/// @param tFee Token fee
function _reflectFee(uint256 rFee, uint256 tFee) private {
_rTotal = _rTotal - rFee;
_tFeeTotal = _tFeeTotal + tFee;
}
/// @notice Calculates the reflection fee from token amount
/// @param _amount Amount of tokens to calculate fee from
function calculateFee(uint256 _amount) private view returns (uint256) {
return (_amount * tFeeBPS) / BPS_DIVISOR;
}
/// @notice Transfers Tax related tokens and do not apply reflection fees
/// @param from Account to transfer tokens from
/// @param to Account to transfer tokens to
/// @param tAmount Total token amount
function _transferNonReflectedTax(
address from,
address to,
uint256 tAmount
) internal {
if (isReflective) {
if (tAmount != 0) {
uint256 currentRate = _getRate();
uint256 rAmount = tAmount * currentRate;
_rUpdate(from, to, rAmount, rAmount);
emit Transfer(from, to, tAmount);
}
} else {
super._transfer(from, to, tAmount);
}
}
/// @notice Get reflective values from token values
/// @param tAmount Token amount
/// @param tFee Token fee
/// @param tTransferAmount Transfer amount
function _getRValues(
uint256 tAmount,
uint256 tFee,
uint256 tTransferAmount
) private view returns (uint256, uint256, uint256) {
uint256 currentRate = _getRate();
uint256 rAmount = tAmount * currentRate;
uint256 rFee = tFee * currentRate;
uint256 rTransferAmount = tTransferAmount * currentRate;
return (rAmount, rFee, rTransferAmount);
}
/// @notice Get ratio rate between reflective and token supply
/// @return Reflective rate
function _getRate() private view returns (uint256) {
(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
return rSupply / tSupply;
}
/// @notice Get reflective and token supplies
/// @return Reflective and token supplies
function _getCurrentSupply() private view returns (uint256, uint256) {
return (_rTotal, _tTotal());
}
/// @notice Update reflective balances to reflect amount transfer,
/// with or without a fee applied. If a fee is applied,
/// the amount deducted from the sender will differ
/// from amount added to the recipient
/// @param sender Sender address
/// @param recipient Recipient address
/// @param rSubAmount Amount to be deducted from sender
/// @param rTransferAmount Amount to be added to recipient
function _rUpdate(
address sender,
address recipient,
uint256 rSubAmount,
uint256 rTransferAmount
) private {
uint256 fromBalance = _rOwned[sender];
if (fromBalance < rSubAmount) {
revert ERC20InsufficientBalance(recipient, fromBalance, rSubAmount);
}
_rOwned[sender] = _rOwned[sender] - rSubAmount;
_rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (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.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.
*
* 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}.
*
* 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 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 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:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, 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}.
*
* NOTE: If `amount` 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 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, 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}.
*
* 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 `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, 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) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, 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) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `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.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, 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;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_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;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_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 Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - 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: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @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 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 `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}// 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);
}{
"optimizer": {
"enabled": true,
"runs": 1337
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"initialSupplyToSet","type":"uint256"},{"internalType":"uint8","name":"decimalsToSet","type":"uint8"},{"internalType":"address","name":"tokenOwner","type":"address"},{"components":[{"internalType":"bool","name":"_isMintable","type":"bool"},{"internalType":"bool","name":"_isBurnable","type":"bool"},{"internalType":"bool","name":"_isDocumentAllowed","type":"bool"},{"internalType":"bool","name":"_isMaxAmountOfTokensSet","type":"bool"},{"internalType":"bool","name":"_isMaxSupplySet","type":"bool"},{"internalType":"bool","name":"_isTaxable","type":"bool"},{"internalType":"bool","name":"_isDeflationary","type":"bool"},{"internalType":"bool","name":"_isReflective","type":"bool"}],"internalType":"struct DefiV3Token.ERC20ConfigProps","name":"customConfigProps","type":"tuple"},{"internalType":"string","name":"newDocumentUri","type":"string"},{"internalType":"address","name":"_taxAddress","type":"address"},{"internalType":"uint256[3]","name":"bpsParams","type":"uint256[3]"},{"internalType":"uint256[2]","name":"amountParams","type":"uint256[2]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BurningNotEnabled","type":"error"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"DestBalanceExceedsMaxAllowed","type":"error"},{"inputs":[],"name":"DocumentUriNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"fromBalance","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"uint8","name":"decimals","type":"uint8"}],"name":"InvalidDecimals","type":"error"},{"inputs":[],"name":"InvalidMaxSupplyConfig","type":"error"},{"inputs":[{"internalType":"uint256","name":"maxTokenAmount","type":"uint256"}],"name":"InvalidMaxTokenAmount","type":"error"},{"inputs":[],"name":"InvalidReflectiveConfig","type":"error"},{"inputs":[{"internalType":"uint256","name":"bps","type":"uint256"}],"name":"InvalidTotalBPS","type":"error"},{"inputs":[],"name":"MaxTokenAmountNotAllowed","type":"error"},{"inputs":[],"name":"MaxTokenAmountPerAddrLtPrevious","type":"error"},{"inputs":[],"name":"MintingNotEnabled","type":"error"},{"inputs":[],"name":"TokenIsNotDeflationary","type":"error"},{"inputs":[],"name":"TokenIsNotReflective","type":"error"},{"inputs":[],"name":"TokenIsNotTaxable","type":"error"},{"inputs":[],"name":"TotalReflectionTooSmall","type":"error"},{"inputs":[],"name":"TotalSupplyExceedsMaxAllowedAmount","type":"error"},{"inputs":[],"name":"ZeroTransferError","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":"uint256","name":"_deflationBPS","type":"uint256"}],"name":"DeflationConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"newDocUri","type":"string"}],"name":"DocumentUriSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxTokenAmount","type":"uint256"}],"name":"MaxTokenAmountPerSet","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":"uint256","name":"_feeBPS","type":"uint256"}],"name":"ReflectionConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_taxAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"_taxBPS","type":"uint256"}],"name":"TaxConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deflationBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"documentUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"initialDocumentUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialMaxTokenAmountPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialTokenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBurnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDeflationary","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDocumentUriAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMaxAmountOfTokensSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMaxSupplySet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isReflective","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","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":"_deflationBPS","type":"uint256"}],"name":"setDeflationConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newDocumentUri","type":"string"}],"name":"setDocumentUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTokenAmount","type":"uint256"}],"name":"setMaxTokenAmountPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeBPS","type":"uint256"}],"name":"setReflectionConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxAddress","type":"address"},{"internalType":"uint256","name":"_taxBPS","type":"uint256"}],"name":"setTaxConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tFeeBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","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":"amount","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":"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"}]Contract Creation Code
6101206040523480156200001257600080fd5b5060405162002dd638038062002dd6833981016040819052620000359162000933565b8989878a8a8c6000036200004b57600062000051565b60408701515b60e08b01518686600362000066838262000ad3565b50600462000075828262000ad3565b50505083600014620000d057620000b0856200009385600a62000cb4565b6200009f908762000ccc565b620003b160201b6200100a1760201c565b620000be8460001962000ce6565b620000cc9060001962000d09565b6007555b6007546001600160a01b0390951660009081526005602052604090209490945560095550501515608052506200010f9050620001093390565b62000474565b8460e0015180156200013857508460200151806200012b575084515b806200013857508460c001515b806200015557508460e00151158015620001555750604082015115155b156200017457604051630c2a1c3360e21b815260040160405180910390fd5b846060015115620001ad578051600003620001ad5780516040516364824b8d60e01b815260048101919091526024015b60405180910390fd5b60128760ff161115620001d95760405163ca95039160e01b815260ff88166004820152602401620001a4565b84608001518015620001fa575084511580620001fa57506020810151600254115b156200021957604051635a8d424160e11b815260040160405180910390fd5b62000226858385620004c6565b6200023c866200056660201b620010c91760201c565b601080546001600160a01b0319166001600160a01b0385161790558151601155602082015160125560a0889052805160c052600b6200027c858262000ad3565b506001600160a01b03861660e090815260ff88166101009081528651600f805460208a015160408b015160608c015160808d015160a08e015160c08f0151998f015161ffff1990961697151561ff001916979097179315159097029290921763ffff00001916620100009115159190910263ff0000001916176301000000911515919091021761ffff60201b19166401000000009415159490940260ff60281b19169390931765010000000000921515929092029190911761ffff60301b191666010000000000009315159390930260ff60381b19169290921767010000000000000091151591909102179055600c62000377858262000ad3565b508051600d556020810151600e55336001600160a01b03871614620003a157620003a18662000580565b5050505050505050505062000d35565b6001600160a01b038216620004095760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001a4565b80600260008282546200041d919062000d1f565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008360a0015115620004fa57620004e9826200056660201b620010c91760201c565b8251620004f7908262000d1f565b90505b8360c00151156200051957602083015162000516908262000d1f565b90505b8360e00151156200053857604083015162000535908262000d1f565b90505b6107d08111156200056057604051633e474e0d60e01b815260048101829052602401620001a4565b50505050565b8060601b6200057d5763d92e233d6000526004601cfd5b50565b6200058a620005a5565b6200057d816200060360201b620010df1760201c565b505050565b600a546001600160a01b03163314620006015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620001a4565b565b6200060d620005a5565b6001600160a01b038116620006745760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001a4565b6200057d8162000474565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620006c057620006c06200067f565b604052919050565b600082601f830112620006da57600080fd5b81516001600160401b03811115620006f657620006f66200067f565b60206200070c601f8301601f1916820162000695565b82815285828487010111156200072157600080fd5b60005b838110156200074157858101830151828201840152820162000724565b506000928101909101919091529392505050565b805160ff811681146200076757600080fd5b919050565b80516001600160a01b03811681146200076757600080fd5b805180151581146200076757600080fd5b6000610100808385031215620007aa57600080fd5b604051908101906001600160401b0382118183101715620007cf57620007cf6200067f565b81604052809250620007e18462000784565b8152620007f16020850162000784565b6020820152620008046040850162000784565b6040820152620008176060850162000784565b60608201526200082a6080850162000784565b60808201526200083d60a0850162000784565b60a08201526200085060c0850162000784565b60c08201526200086360e0850162000784565b60e0820152505092915050565b600082601f8301126200088257600080fd5b604051606081016001600160401b0381118282101715620008a757620008a76200067f565b604052806060840185811115620008bd57600080fd5b845b81811015620008d9578051835260209283019201620008bf565b509195945050505050565b600082601f830112620008f657600080fd5b604080519081016001600160401b03811182821017156200091b576200091b6200067f565b8060405250806040840185811115620008bd57600080fd5b6000806000806000806000806000806102808b8d0312156200095457600080fd5b8a516001600160401b03808211156200096c57600080fd5b6200097a8e838f01620006c8565b9b5060208d01519150808211156200099157600080fd5b6200099f8e838f01620006c8565b9a5060408d01519950620009b660608e0162000755565b9850620009c660808e016200076c565b9750620009d78e60a08f0162000795565b96506101a08d0151915080821115620009ef57600080fd5b50620009fe8d828e01620006c8565b94505062000a106101c08c016200076c565b925062000a228c6101e08d0162000870565b915062000a348c6102408d01620008e4565b90509295989b9194979a5092959850565b600181811c9082168062000a5a57607f821691505b60208210810362000a7b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005a057600081815260208120601f850160051c8101602086101562000aaa5750805b601f850160051c820191505b8181101562000acb5782815560010162000ab6565b505050505050565b81516001600160401b0381111562000aef5762000aef6200067f565b62000b078162000b00845462000a45565b8462000a81565b602080601f83116001811462000b3f576000841562000b265750858301515b600019600386901b1c1916600185901b17855562000acb565b600085815260208120601f198616915b8281101562000b705788860151825594840194600190910190840162000b4f565b508582101562000b8f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000bf657816000190482111562000bda5762000bda62000b9f565b8085161562000be857918102915b93841c939080029062000bba565b509250929050565b60008262000c0f5750600162000cae565b8162000c1e5750600062000cae565b816001811462000c37576002811462000c425762000c62565b600191505062000cae565b60ff84111562000c565762000c5662000b9f565b50506001821b62000cae565b5060208310610133831016604e8410600b841016171562000c87575081810a62000cae565b62000c93838362000bb5565b806000190482111562000caa5762000caa62000b9f565b0290505b92915050565b600062000cc560ff84168362000bfe565b9392505050565b808202811582820484141762000cae5762000cae62000b9f565b60008262000d0457634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111562000cae5762000cae62000b9f565b8082018082111562000cae5762000cae62000b9f565b60805160a05160c05160e0516101005161203962000d9d60003960006103b3015260006104cc01526000610519015260006103e2015260008181610b1c0152818161138a0152818161143c015281816114c10152818161152a0152611a9301526120396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c8063883356d911610191578063af465a27116100e3578063de0060ca11610097578063f820f56711610071578063f820f56714610625578063f91f825d14610636578063ffa1ad741461064957600080fd5b8063de0060ca146105ec578063f19c4e3b146105ff578063f2fde38b1461061257600080fd5b8063d48e4127116100c8578063d48e412714610597578063d8f67851146105a0578063dd62ed3e146105b357600080fd5b8063af465a271461057c578063b7bda68f1461058457600080fd5b80639703a19d11610145578063a476df611161011f578063a476df611461054e578063a9059cbb14610561578063a9d866851461057457600080fd5b80639703a19d1461050b578063a32f697614610514578063a457c2d71461053b57600080fd5b80638dac7191116101765780638dac7191146104c75780638e8c10a2146104ee57806395d89b411461050357600080fd5b8063883356d9146104925780638da5cb5b146104a257600080fd5b8063313ce5671161024a57806346b45af7116101fe5780635a3990ce116101d85780635a3990ce1461046557806370a0823114610477578063715018a61461048a57600080fd5b806346b45af71461043d5780634ac0bc3214610448578063542e96671461045c57600080fd5b8063395093511161022f578063395093511461040457806340c10f191461041757806342966c681461042a57600080fd5b8063313ce567146103ac578063378dc3dc146103dd57600080fd5b806323b872dd116102a15780632d838119116102865780632d8381191461037a5780632e0ee48e1461038d5780632fa782eb146103a357600080fd5b806323b872dd1461035e5780632ab4d0521461037157600080fd5b806306fdde03116102d257806306fdde0314610321578063095ea7b31461032957806318160ddd1461034c57600080fd5b806302252c4d146102ee578063044ab74e14610303575b600080fd5b6103016102fc366004611c4d565b610685565b005b61030b610747565b6040516103189190611c66565b60405180910390f35b61030b6107d5565b61033c610337366004611ccb565b610867565b6040519015158152602001610318565b6002545b604051908152602001610318565b61033c61036c366004611cf5565b610881565b610350600e5481565b610350610388366004611c4d565b610953565b600f54670100000000000000900460ff1661033c565b61035060115481565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610318565b6103507f000000000000000000000000000000000000000000000000000000000000000081565b61033c610412366004611ccb565b6109ae565b610301610425366004611ccb565b6109ed565b610301610438366004611c4d565b610adb565b600f5460ff1661033c565b600f5465010000000000900460ff1661033c565b61035060125481565b600f546301000000900460ff1661033c565b610350610485366004611d31565b610b18565b610301610b85565b600f54610100900460ff1661033c565b600a546001600160a01b03165b6040516001600160a01b039091168152602001610318565b6104af7f000000000000000000000000000000000000000000000000000000000000000081565b600f546601000000000000900460ff1661033c565b61030b610b97565b61035060095481565b6103507f000000000000000000000000000000000000000000000000000000000000000081565b61033c610549366004611ccb565b610ba6565b61030161055c366004611d62565b610c5b565b61033c61056f366004611ccb565b610ce1565b61030b610dac565b610350610db9565b6010546104af906001600160a01b031681565b610350600d5481565b6103016105ae366004611c4d565b610dc9565b6103506105c1366004611e13565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600f54640100000000900460ff1661033c565b61030161060d366004611ccb565b610e90565b610301610620366004611d31565b610f8c565b600f5462010000900460ff1661033c565b610301610644366004611c4d565b610f9d565b61030b6040518060400160405280600881526020017f646566695f765f3300000000000000000000000000000000000000000000000081525081565b61068d61116c565b600f546301000000900460ff166106d0576040517f6273340f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d54811161070b576040517fa43d2d7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d8190556040518181527f2905481c6fd1a037492016c4760435a52203d82a6f34dc3de40f464c1bf42d59906020015b60405180910390a150565b600c805461075490611e46565b80601f016020809104026020016040519081016040528092919081815260200182805461078090611e46565b80156107cd5780601f106107a2576101008083540402835291602001916107cd565b820191906000526020600020905b8154815290600101906020018083116107b057829003601f168201915b505050505081565b6060600380546107e490611e46565b80601f016020809104026020016040519081016040528092919081815260200182805461081090611e46565b801561085d5780601f106108325761010080835404028352916020019161085d565b820191906000526020600020905b81548152906001019060200180831161084057829003601f168201915b5050505050905090565b6000336108758185856111c6565b60019150505b92915050565b60008061088e858461131e565b9050600061089b84611361565b90506000816108aa8487611e96565b6108b49190611e96565b600f549091506301000000900460ff161561090f57600d54816108d688610b18565b6108e09190611ea9565b111561090f5760405163f6202a8f60e01b81526001600160a01b03871660048201526024015b60405180910390fd5b821561092d5760105461092d9088906001600160a01b031685611388565b811561093d5761093d878361143a565b610948878783611483565b979650505050505050565b6000600754821115610991576040517fc91fa8bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061099b61149c565b90506109a78184611ebc565b9392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061087590829086906109e8908790611ea9565b6111c6565b6109f561116c565b600f5460ff16610a1857604051630732158d60e31b815260040160405180910390fd5b600f546301000000900460ff1615610a6b57600d5481610a3784610b18565b610a419190611ea9565b1115610a6b5760405163f6202a8f60e01b81526001600160a01b0383166004820152602401610906565b600f54640100000000900460ff1615610acd57600e5481610a8b60025490565b610a959190611ea9565b1115610acd576040517f44ea8ea500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad782826114bf565b5050565b610ae361116c565b600f54610100900460ff16610b0b57604051636cb5913960e01b815260040160405180910390fd5b610b15338261143a565b50565b60007f000000000000000000000000000000000000000000000000000000000000000015610b62576001600160a01b03821660009081526005602052604090205461087b90610953565b6001600160a01b03821660009081526020819052604090205461087b565b919050565b610b8d61116c565b610b95611508565b565b6060600480546107e490611e46565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610c435760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610906565b610c5082868684036111c6565b506001949350505050565b610c6361116c565b600f5462010000900460ff16610ca5576040517f70a43fce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c610cb18282611f2c565b507f4456a0b562609d67398ddb488f136db285cd3c92343e0a7ba684925669237ade8160405161073c9190611c66565b600080610cee338461131e565b90506000610cfb84611361565b9050600081610d0a8487611e96565b610d149190611e96565b600f549091506301000000900460ff1615610d6a57600d5481610d3688610b18565b610d409190611ea9565b1115610d6a5760405163f6202a8f60e01b81526001600160a01b0387166004820152602401610906565b8215610d8857601054610d889033906001600160a01b031685611388565b8115610d9857610d98338361143a565b610da2868261151a565b9695505050505050565b600b805461075490611e46565b6000610dc460025490565b905090565b610dd161116c565b600f546601000000000000900460ff16610e17576040517fcd9e529800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600954601254610e2a9190611ea9565b610e349190611ea9565b90506107d0811115610e5c57604051633e474e0d60e01b815260048101829052602401610906565b601282905560405182907fc1ff65ee907dc079b64ed9913d53f4bd593bd6ebd9b2a2708db2916d49e17ec390600090a25050565b610e9861116c565b600f5465010000000000900460ff16610edd576040517fc8a478a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600954601254610ef09190611ea9565b610efa9190611ea9565b90506107d0811115610f2257604051633e474e0d60e01b815260048101829052602401610906565b610f2b836110c9565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03851690811790915560118390556040518391907facc44e32fd5ca4240f6dbe6e8cf4eb49349c17c5ce5f80f1919a9c97b50d398a90600090a3505050565b610f9461116c565b610b15816110df565b610fa561116c565b600f54670100000000000000900460ff16610fd357604051630800e34b60e41b815260040160405180910390fd5b610fdc81611528565b60405181907f76e1296412dac7b50002658bf9aab02d0cfe366f373222d5c14d0168ee8199e390600090a250565b6001600160a01b0382166110605760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610906565b80600260008282546110729190611ea9565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b8060601b610b155763d92e233d6000526004601cfd5b6110e761116c565b6001600160a01b0381166111635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610906565b610b158161156b565b600a546001600160a01b03163314610b955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610906565b6001600160a01b0383166112415760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b0382166112bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600060115460001415801561134157506010546001600160a01b03848116911614155b1561087b57612710601154836113579190611fec565b6109a79190611ebc565b6000601254600014610b80576127106012548361137e9190611fec565b61087b9190611ebc565b7f00000000000000000000000000000000000000000000000000000000000000001561142f57801561142a5760006113be61149c565b905060006113cc8284611fec565b90506113da858583846115ca565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161141f91815260200190565b60405180910390a350505b505050565b61142a8383836116ad565b7f00000000000000000000000000000000000000000000000000000000000000001561147957604051636cb5913960e01b815260040160405180910390fd5b610ad7828261189c565b600033611491858285611a05565b610c50858585611a91565b60008060006114a9611b0e565b90925090506114b88183611ebc565b9250505090565b7f0000000000000000000000000000000000000000000000000000000000000000156114fe57604051630732158d60e31b815260040160405180910390fd5b610ad7828261100a565b61151061116c565b610b95600061156b565b600033610875818585611a91565b7f000000000000000000000000000000000000000000000000000000000000000061156657604051630800e34b60e41b815260040160405180910390fd5b600955565b600a80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03841660009081526005602052604090205482811015611636576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810182905260448101849052606401610906565b6001600160a01b03851660009081526005602052604090205461165a908490611e96565b6001600160a01b03808716600090815260056020526040808220939093559086168152205461168a908390611ea9565b6001600160a01b0390941660009081526005602052604090209390935550505050565b6001600160a01b0383166117295760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b0382166117a55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b038316600090815260208190526040902054818110156118345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b6001600160a01b0382166119185760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b038216600090815260208190526040902054818110156119a75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146118965781811015611a845760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610906565b61189684848484036111c6565b7f00000000000000000000000000000000000000000000000000000000000000001561142f57611ac0836110c9565b611ac9826110c9565b80600003611b03576040517f76c4f5b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61142a838383611b24565b600080600754611b1c610db9565b915091509091565b6000611b2f82611bcb565b90506000611b3d8284611e96565b90506000806000611b4f868686611bde565b92509250925085600014611bc157611b69888885846115ca565b611b738286611c27565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051611bb891815260200190565b60405180910390a35b5050505050505050565b60006127106009548361137e9190611fec565b600080600080611bec61149c565b90506000611bfa8289611fec565b90506000611c088389611fec565b90506000611c168489611fec565b929a91995091975095505050505050565b81600754611c359190611e96565b600755600854611c46908290611ea9565b6008555050565b600060208284031215611c5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015611c9357858101830151858201604001528201611c77565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b8057600080fd5b60008060408385031215611cde57600080fd5b611ce783611cb4565b946020939093013593505050565b600080600060608486031215611d0a57600080fd5b611d1384611cb4565b9250611d2160208501611cb4565b9150604084013590509250925092565b600060208284031215611d4357600080fd5b6109a782611cb4565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611d7457600080fd5b813567ffffffffffffffff80821115611d8c57600080fd5b818401915084601f830112611da057600080fd5b813581811115611db257611db2611d4c565b604051601f8201601f19908116603f01168101908382118183101715611dda57611dda611d4c565b81604052828152876020848701011115611df357600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215611e2657600080fd5b611e2f83611cb4565b9150611e3d60208401611cb4565b90509250929050565b600181811c90821680611e5a57607f821691505b602082108103611e7a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561087b5761087b611e80565b8082018082111561087b5761087b611e80565b600082611ed957634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561142a57600081815260208120601f850160051c81016020861015611f055750805b601f850160051c820191505b81811015611f2457828155600101611f11565b505050505050565b815167ffffffffffffffff811115611f4657611f46611d4c565b611f5a81611f548454611e46565b84611ede565b602080601f831160018114611f8f5760008415611f775750858301515b600019600386901b1c1916600185901b178555611f24565b600085815260208120601f198616915b82811015611fbe57888601518255948401946001909101908401611f9f565b5085821015611fdc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808202811582820484141761087b5761087b611e8056fea2646970667358221220f0883b06564851f25c2214f07da7f7c972f341f687d3de12c8903d945027bfe064736f6c63430008110033000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000094b1bf3f983ed75a6d98872c453ce6b48f88e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000094b1bf3f983ed75a6d98872c453ce6b48f88e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006427265616420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034c474200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102e95760003560e01c8063883356d911610191578063af465a27116100e3578063de0060ca11610097578063f820f56711610071578063f820f56714610625578063f91f825d14610636578063ffa1ad741461064957600080fd5b8063de0060ca146105ec578063f19c4e3b146105ff578063f2fde38b1461061257600080fd5b8063d48e4127116100c8578063d48e412714610597578063d8f67851146105a0578063dd62ed3e146105b357600080fd5b8063af465a271461057c578063b7bda68f1461058457600080fd5b80639703a19d11610145578063a476df611161011f578063a476df611461054e578063a9059cbb14610561578063a9d866851461057457600080fd5b80639703a19d1461050b578063a32f697614610514578063a457c2d71461053b57600080fd5b80638dac7191116101765780638dac7191146104c75780638e8c10a2146104ee57806395d89b411461050357600080fd5b8063883356d9146104925780638da5cb5b146104a257600080fd5b8063313ce5671161024a57806346b45af7116101fe5780635a3990ce116101d85780635a3990ce1461046557806370a0823114610477578063715018a61461048a57600080fd5b806346b45af71461043d5780634ac0bc3214610448578063542e96671461045c57600080fd5b8063395093511161022f578063395093511461040457806340c10f191461041757806342966c681461042a57600080fd5b8063313ce567146103ac578063378dc3dc146103dd57600080fd5b806323b872dd116102a15780632d838119116102865780632d8381191461037a5780632e0ee48e1461038d5780632fa782eb146103a357600080fd5b806323b872dd1461035e5780632ab4d0521461037157600080fd5b806306fdde03116102d257806306fdde0314610321578063095ea7b31461032957806318160ddd1461034c57600080fd5b806302252c4d146102ee578063044ab74e14610303575b600080fd5b6103016102fc366004611c4d565b610685565b005b61030b610747565b6040516103189190611c66565b60405180910390f35b61030b6107d5565b61033c610337366004611ccb565b610867565b6040519015158152602001610318565b6002545b604051908152602001610318565b61033c61036c366004611cf5565b610881565b610350600e5481565b610350610388366004611c4d565b610953565b600f54670100000000000000900460ff1661033c565b61035060115481565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000012168152602001610318565b6103507f000000000000000000000000000000000000000000000000000000e8d4a5100081565b61033c610412366004611ccb565b6109ae565b610301610425366004611ccb565b6109ed565b610301610438366004611c4d565b610adb565b600f5460ff1661033c565b600f5465010000000000900460ff1661033c565b61035060125481565b600f546301000000900460ff1661033c565b610350610485366004611d31565b610b18565b610301610b85565b600f54610100900460ff1661033c565b600a546001600160a01b03165b6040516001600160a01b039091168152602001610318565b6104af7f00000000000000000000000094b1bf3f983ed75a6d98872c453ce6b48f88e58081565b600f546601000000000000900460ff1661033c565b61030b610b97565b61035060095481565b6103507f000000000000000000000000000000000000000000000000000000000000000081565b61033c610549366004611ccb565b610ba6565b61030161055c366004611d62565b610c5b565b61033c61056f366004611ccb565b610ce1565b61030b610dac565b610350610db9565b6010546104af906001600160a01b031681565b610350600d5481565b6103016105ae366004611c4d565b610dc9565b6103506105c1366004611e13565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600f54640100000000900460ff1661033c565b61030161060d366004611ccb565b610e90565b610301610620366004611d31565b610f8c565b600f5462010000900460ff1661033c565b610301610644366004611c4d565b610f9d565b61030b6040518060400160405280600881526020017f646566695f765f3300000000000000000000000000000000000000000000000081525081565b61068d61116c565b600f546301000000900460ff166106d0576040517f6273340f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d54811161070b576040517fa43d2d7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d8190556040518181527f2905481c6fd1a037492016c4760435a52203d82a6f34dc3de40f464c1bf42d59906020015b60405180910390a150565b600c805461075490611e46565b80601f016020809104026020016040519081016040528092919081815260200182805461078090611e46565b80156107cd5780601f106107a2576101008083540402835291602001916107cd565b820191906000526020600020905b8154815290600101906020018083116107b057829003601f168201915b505050505081565b6060600380546107e490611e46565b80601f016020809104026020016040519081016040528092919081815260200182805461081090611e46565b801561085d5780601f106108325761010080835404028352916020019161085d565b820191906000526020600020905b81548152906001019060200180831161084057829003601f168201915b5050505050905090565b6000336108758185856111c6565b60019150505b92915050565b60008061088e858461131e565b9050600061089b84611361565b90506000816108aa8487611e96565b6108b49190611e96565b600f549091506301000000900460ff161561090f57600d54816108d688610b18565b6108e09190611ea9565b111561090f5760405163f6202a8f60e01b81526001600160a01b03871660048201526024015b60405180910390fd5b821561092d5760105461092d9088906001600160a01b031685611388565b811561093d5761093d878361143a565b610948878783611483565b979650505050505050565b6000600754821115610991576040517fc91fa8bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061099b61149c565b90506109a78184611ebc565b9392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061087590829086906109e8908790611ea9565b6111c6565b6109f561116c565b600f5460ff16610a1857604051630732158d60e31b815260040160405180910390fd5b600f546301000000900460ff1615610a6b57600d5481610a3784610b18565b610a419190611ea9565b1115610a6b5760405163f6202a8f60e01b81526001600160a01b0383166004820152602401610906565b600f54640100000000900460ff1615610acd57600e5481610a8b60025490565b610a959190611ea9565b1115610acd576040517f44ea8ea500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad782826114bf565b5050565b610ae361116c565b600f54610100900460ff16610b0b57604051636cb5913960e01b815260040160405180910390fd5b610b15338261143a565b50565b60007f000000000000000000000000000000000000000000000000000000000000000015610b62576001600160a01b03821660009081526005602052604090205461087b90610953565b6001600160a01b03821660009081526020819052604090205461087b565b919050565b610b8d61116c565b610b95611508565b565b6060600480546107e490611e46565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610c435760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610906565b610c5082868684036111c6565b506001949350505050565b610c6361116c565b600f5462010000900460ff16610ca5576040517f70a43fce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c610cb18282611f2c565b507f4456a0b562609d67398ddb488f136db285cd3c92343e0a7ba684925669237ade8160405161073c9190611c66565b600080610cee338461131e565b90506000610cfb84611361565b9050600081610d0a8487611e96565b610d149190611e96565b600f549091506301000000900460ff1615610d6a57600d5481610d3688610b18565b610d409190611ea9565b1115610d6a5760405163f6202a8f60e01b81526001600160a01b0387166004820152602401610906565b8215610d8857601054610d889033906001600160a01b031685611388565b8115610d9857610d98338361143a565b610da2868261151a565b9695505050505050565b600b805461075490611e46565b6000610dc460025490565b905090565b610dd161116c565b600f546601000000000000900460ff16610e17576040517fcd9e529800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600954601254610e2a9190611ea9565b610e349190611ea9565b90506107d0811115610e5c57604051633e474e0d60e01b815260048101829052602401610906565b601282905560405182907fc1ff65ee907dc079b64ed9913d53f4bd593bd6ebd9b2a2708db2916d49e17ec390600090a25050565b610e9861116c565b600f5465010000000000900460ff16610edd576040517fc8a478a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600954601254610ef09190611ea9565b610efa9190611ea9565b90506107d0811115610f2257604051633e474e0d60e01b815260048101829052602401610906565b610f2b836110c9565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03851690811790915560118390556040518391907facc44e32fd5ca4240f6dbe6e8cf4eb49349c17c5ce5f80f1919a9c97b50d398a90600090a3505050565b610f9461116c565b610b15816110df565b610fa561116c565b600f54670100000000000000900460ff16610fd357604051630800e34b60e41b815260040160405180910390fd5b610fdc81611528565b60405181907f76e1296412dac7b50002658bf9aab02d0cfe366f373222d5c14d0168ee8199e390600090a250565b6001600160a01b0382166110605760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610906565b80600260008282546110729190611ea9565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b8060601b610b155763d92e233d6000526004601cfd5b6110e761116c565b6001600160a01b0381166111635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610906565b610b158161156b565b600a546001600160a01b03163314610b955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610906565b6001600160a01b0383166112415760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b0382166112bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600060115460001415801561134157506010546001600160a01b03848116911614155b1561087b57612710601154836113579190611fec565b6109a79190611ebc565b6000601254600014610b80576127106012548361137e9190611fec565b61087b9190611ebc565b7f00000000000000000000000000000000000000000000000000000000000000001561142f57801561142a5760006113be61149c565b905060006113cc8284611fec565b90506113da858583846115ca565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161141f91815260200190565b60405180910390a350505b505050565b61142a8383836116ad565b7f00000000000000000000000000000000000000000000000000000000000000001561147957604051636cb5913960e01b815260040160405180910390fd5b610ad7828261189c565b600033611491858285611a05565b610c50858585611a91565b60008060006114a9611b0e565b90925090506114b88183611ebc565b9250505090565b7f0000000000000000000000000000000000000000000000000000000000000000156114fe57604051630732158d60e31b815260040160405180910390fd5b610ad7828261100a565b61151061116c565b610b95600061156b565b600033610875818585611a91565b7f000000000000000000000000000000000000000000000000000000000000000061156657604051630800e34b60e41b815260040160405180910390fd5b600955565b600a80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03841660009081526005602052604090205482811015611636576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810182905260448101849052606401610906565b6001600160a01b03851660009081526005602052604090205461165a908490611e96565b6001600160a01b03808716600090815260056020526040808220939093559086168152205461168a908390611ea9565b6001600160a01b0390941660009081526005602052604090209390935550505050565b6001600160a01b0383166117295760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b0382166117a55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b038316600090815260208190526040902054818110156118345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b6001600160a01b0382166119185760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b038216600090815260208190526040902054818110156119a75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610906565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146118965781811015611a845760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610906565b61189684848484036111c6565b7f00000000000000000000000000000000000000000000000000000000000000001561142f57611ac0836110c9565b611ac9826110c9565b80600003611b03576040517f76c4f5b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61142a838383611b24565b600080600754611b1c610db9565b915091509091565b6000611b2f82611bcb565b90506000611b3d8284611e96565b90506000806000611b4f868686611bde565b92509250925085600014611bc157611b69888885846115ca565b611b738286611c27565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051611bb891815260200190565b60405180910390a35b5050505050505050565b60006127106009548361137e9190611fec565b600080600080611bec61149c565b90506000611bfa8289611fec565b90506000611c088389611fec565b90506000611c168489611fec565b929a91995091975095505050505050565b81600754611c359190611e96565b600755600854611c46908290611ea9565b6008555050565b600060208284031215611c5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015611c9357858101830151858201604001528201611c77565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b8057600080fd5b60008060408385031215611cde57600080fd5b611ce783611cb4565b946020939093013593505050565b600080600060608486031215611d0a57600080fd5b611d1384611cb4565b9250611d2160208501611cb4565b9150604084013590509250925092565b600060208284031215611d4357600080fd5b6109a782611cb4565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611d7457600080fd5b813567ffffffffffffffff80821115611d8c57600080fd5b818401915084601f830112611da057600080fd5b813581811115611db257611db2611d4c565b604051601f8201601f19908116603f01168101908382118183101715611dda57611dda611d4c565b81604052828152876020848701011115611df357600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215611e2657600080fd5b611e2f83611cb4565b9150611e3d60208401611cb4565b90509250929050565b600181811c90821680611e5a57607f821691505b602082108103611e7a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561087b5761087b611e80565b8082018082111561087b5761087b611e80565b600082611ed957634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561142a57600081815260208120601f850160051c81016020861015611f055750805b601f850160051c820191505b81811015611f2457828155600101611f11565b505050505050565b815167ffffffffffffffff811115611f4657611f46611d4c565b611f5a81611f548454611e46565b84611ede565b602080601f831160018114611f8f5760008415611f775750858301515b600019600386901b1c1916600185901b178555611f24565b600085815260208120601f198616915b82811015611fbe57888601518255948401946001909101908401611f9f565b5085821015611fdc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808202811582820484141761087b5761087b611e8056fea2646970667358221220f0883b06564851f25c2214f07da7f7c972f341f687d3de12c8903d945027bfe064736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000094b1bf3f983ed75a6d98872c453ce6b48f88e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000094b1bf3f983ed75a6d98872c453ce6b48f88e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006427265616420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034c474200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): Bread
Arg [1] : symbol_ (string): LGB
Arg [2] : initialSupplyToSet (uint256): 1000000000000
Arg [3] : decimalsToSet (uint8): 18
Arg [4] : tokenOwner (address): 0x94b1BF3f983ed75A6D98872C453cE6b48f88e580
Arg [5] : customConfigProps (tuple):
Arg [1] : _isMintable (bool): False
Arg [2] : _isBurnable (bool): True
Arg [3] : _isDocumentAllowed (bool): False
Arg [4] : _isMaxAmountOfTokensSet (bool): False
Arg [5] : _isMaxSupplySet (bool): False
Arg [6] : _isTaxable (bool): False
Arg [7] : _isDeflationary (bool): False
Arg [8] : _isReflective (bool): False
Arg [6] : newDocumentUri (string):
Arg [7] : _taxAddress (address): 0x94b1BF3f983ed75A6D98872C453cE6b48f88e580
Arg [8] : bpsParams (uint256[3]): 0,0,0
Arg [9] : amountParams (uint256[2]): 0,0
-----Encoded View---------------
25 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [1] : 00000000000000000000000000000000000000000000000000000000000002c0
Arg [2] : 000000000000000000000000000000000000000000000000000000e8d4a51000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 00000000000000000000000094b1bf3f983ed75a6d98872c453ce6b48f88e580
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000300
Arg [14] : 00000000000000000000000094b1bf3f983ed75a6d98872c453ce6b48f88e580
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [21] : 4272656164200000000000000000000000000000000000000000000000000000
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [23] : 4c47420000000000000000000000000000000000000000000000000000000000
Arg [24] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
395:14391:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8278:392;;;;;;:::i;:::-;;:::i;:::-;;672:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2158:98:1;;;:::i;4444:197::-;;;;;;:::i;:::-;;:::i;:::-;;;1377:14:8;;1370:22;1352:41;;1340:2;1325:18;4444:197:1;1212:187:8;3255:106:1;3342:12;;3255:106;;;1550:25:8;;;1538:2;1523:18;3255:106:1;1404:177:8;11602:700:5;;;;;;:::i;:::-;;:::i;846:29::-;;;;;;5254:229:6;;;;;;:::i;:::-;;:::i;7622:94:5:-;7686:11;:25;;;;;;7622:94;;1328:21;;;;;;6972:92;;;2091:4:8;7050:9:5;2079:17:8;2061:36;;2049:2;2034:18;6972:92:5;1919:184:8;701:38:5;;;;;5854:234:1;;;;;;:::i;:::-;;:::i;12533:471:5:-;;;;;;:::i;:::-;;:::i;13188:150::-;;;;;;:::i;:::-;;:::i;5868:90::-;5930:11;:23;;;5868:90;;7174:88;7235:11;:22;;;;;;7174:88;;1353:27;;;;;;6296:114;6370:11;:35;;;;;;6296:114;;2199:214:6;;;;;;:::i;:::-;;:::i;13504:91:5:-;;;:::i;6054:90::-;6116:11;:23;;;;;;6054:90;;1201:85:0;1273:6;;-1:-1:-1;;;;;1273:6:0;1201:85;;;-1:-1:-1;;;;;2463:55:8;;;2445:74;;2433:2;2418:18;1201:85:0;2299:226:8;1216:42:5;;;;;7383:98;7449:11;:27;;;;;;7383:98;;2369:102:1;;;:::i;673:22:6:-;;;;;;743:56:5;;;;;6575:427:1;;;;;;:::i;:::-;;:::i;7860:232:5:-;;;;;;:::i;:::-;;:::i;10534:685::-;;;;;;:::i;:::-;;:::i;636:32::-;;;:::i;1104:88:6:-;;;:::i;1299:25:5:-;;;;;-1:-1:-1;;;;;1299:25:5;;;803:39;;;;;;9859:374;;;;;;:::i;:::-;;:::i;3987:149:1:-;;;;;;:::i;:::-;-1:-1:-1;;;;;4102:18:1;;;4076:7;4102:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3987:149;6544:98:5;6610:11;:27;;;;;;6544:98;;9249:443;;;;;;:::i;:::-;;:::i;13768:115::-;;;;;;:::i;:::-;;:::i;6760:107::-;6832:11;:30;;;;;;6760:107;;8822:218;;;;;;:::i;:::-;;:::i;567:43::-;;;;;;;;;;;;;;;;;;;;;8278:392;1094:13:0;:11;:13::i;:::-;6370:11:5;:35;;;;;;8375:79:::1;;8421:26;;;;;;;;;;;;;;8375:79;8484:24;;8463:17;:45;8459:106;;8525:33;;;;;;;;;;;;;;8459:106;8571:24;:44:::0;;;8626:39:::1;::::0;1550:25:8;;;8626:39:5::1;::::0;1538:2:8;1523:18;8626:39:5::1;;;;;;;;8278:392:::0;:::o;672:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2158:98:1:-;2212:13;2244:5;2237:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2158:98;:::o;4444:197::-;4527:4;734:10:4;4581:32:1;734:10:4;4597:7:1;4606:6;4581:8;:32::i;:::-;4630:4;4623:11;;;4444:197;;;;;:::o;11602:700:5:-;11715:4;11727:17;11747:24;11758:4;11764:6;11747:10;:24::i;:::-;11727:44;;11777:23;11803:24;11820:6;11803:16;:24::i;:::-;11777:50;-1:-1:-1;11833:24:5;11777:50;11860:18;11869:9;11860:6;:18;:::i;:::-;:36;;;;:::i;:::-;6370:11;:35;11833:63;;-1:-1:-1;6370:35:5;;;;;11903:167;;;11980:24;;11961:16;11945:13;11955:2;11945:9;:13::i;:::-;:32;;;;:::i;:::-;:59;11941:123;;;12023:32;;-1:-1:-1;;;12023:32:5;;-1:-1:-1;;;;;2463:55:8;;12023:32:5;;;2445:74:8;2418:18;;12023:32:5;;;;;;;;11941:123;12080:14;;12076:88;;12135:10;;12104:53;;12129:4;;-1:-1:-1;;;;;12135:10:5;12147:9;12104:24;:53::i;:::-;12173:20;;12169:69;;12203:28;12209:4;12215:15;12203:5;:28::i;:::-;12251:46;12270:4;12276:2;12280:16;12251:18;:46::i;:::-;12244:53;11602:700;-1:-1:-1;;;;;;;11602:700:5:o;5254:229:6:-;5321:7;5350;;5340;:17;5336:70;;;5374:25;;;;;;;;;;;;;;5336:70;5412:19;5434:10;:8;:10::i;:::-;5412:32;-1:-1:-1;5457:21:6;5412:32;5457:7;:21;:::i;:::-;5450:28;5254:229;-1:-1:-1;;;5254:229:6:o;5854:234:1:-;734:10:4;5942:4:1;4102:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;4102:27:1;;;;;;;;;;5942:4;;734:10:4;5996:64:1;;734:10:4;;4102:27:1;;6021:38;;6049:10;;6021:38;:::i;:::-;5996:8;:64::i;12533:471:5:-;1094:13:0;:11;:13::i;:::-;5930:11:5;:23;;;12600:60:::1;;12634:19;;-1:-1:-1::0;;;12634:19:5::1;;;;;;;;;;;12600:60;6370:11:::0;:35;;;;;;12665:157:::1;;;12732:24;;12723:6;12707:13;12717:2;12707:9;:13::i;:::-;:22;;;;:::i;:::-;:49;12703:113;;;12775:32;::::0;-1:-1:-1;;;12775:32:5;;-1:-1:-1;;;;;2463:55:8;;12775:32:5::1;::::0;::::1;2445:74:8::0;2418:18;;12775:32:5::1;2299:226:8::0;12703:113:5::1;6610:11:::0;:27;;;;;;12827:143:::1;;;12886:14;;12877:6;12861:13;3342:12:1::0;;;3255:106;12861:13:5::1;:22;;;;:::i;:::-;:39;12857:107;;;12919:36;;;;;;;;;;;;;;12857:107;12976:23;12988:2;12992:6;12976:11;:23::i;:::-;12533:471:::0;;:::o;13188:150::-;1094:13:0;:11;:13::i;:::-;6116:11:5;:23;;;;;;13243:60:::1;;13277:19;;-1:-1:-1::0;;;13277:19:5::1;;;;;;;;;;;13243:60;13308:25;13314:10;13326:6;13308:5;:25::i;:::-;13188:150:::0;:::o;2199:214:6:-;2265:7;2284:12;2280:129;;;-1:-1:-1;;;;;2333:16:6;;;;;;:7;:16;;;;;;2313:37;;:19;:37::i;2280:129::-;-1:-1:-1;;;;;3519:18:1;;3493:7;3519:18;;;;;;;;;;;2378:24:6;3419:125:1;2280:129:6;2199:214;;;:::o;13504:91:5:-;1094:13:0;:11;:13::i;:::-;13565:25:5::1;:23;:25::i;:::-;13504:91::o:0;2369:102:1:-;2425:13;2457:7;2450:14;;;;;:::i;6575:427::-;734:10:4;6668:4:1;4102:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;4102:27:1;;;;;;;;;;6668:4;;734:10:4;6812:15:1;6792:16;:35;;6784:85;;;;-1:-1:-1;;;6784:85:1;;5286:2:8;6784:85:1;;;5268:21:8;5325:2;5305:18;;;5298:30;5364:34;5344:18;;;5337:62;5435:7;5415:18;;;5408:35;5460:19;;6784:85:1;5084:401:8;6784:85:1;6903:60;6912:5;6919:7;6947:15;6928:16;:34;6903:8;:60::i;:::-;-1:-1:-1;6991:4:1;;6575:427;-1:-1:-1;;;;6575:427:1:o;7860:232:5:-;1094:13:0;:11;:13::i;:::-;6832:11:5;:30;;;;;;7939:74:::1;;7983:23;;;;;;;;;;;;;;7939:74;8018:11;:28;8032:14:::0;8018:11;:28:::1;:::i;:::-;;8057:30;8072:14;8057:30;;;;;;:::i;10534:685::-:0;10625:4;10637:17;10657:30;10668:10;10680:6;10657:10;:30::i;:::-;10637:50;;10693:23;10719:24;10736:6;10719:16;:24::i;:::-;10693:50;-1:-1:-1;10749:24:5;10693:50;10776:18;10785:9;10776:6;:18;:::i;:::-;:36;;;;:::i;:::-;6370:11;:35;10749:63;;-1:-1:-1;6370:35:5;;;;;10819:167;;;10896:24;;10877:16;10861:13;10871:2;10861:9;:13::i;:::-;:32;;;;:::i;:::-;:59;10857:123;;;10939:32;;-1:-1:-1;;;10939:32:5;;-1:-1:-1;;;;;2463:55:8;;10939:32:5;;;2445:74:8;2418:18;;10939:32:5;2299:226:8;10857:123:5;10996:14;;10992:94;;11057:10;;11020:59;;11045:10;;-1:-1:-1;;;;;11057:10:5;11069:9;11020:24;:59::i;:::-;11095:20;;11091:75;;11125:34;11131:10;11143:15;11125:5;:34::i;:::-;11178:36;11193:2;11197:16;11178:14;:36::i;:::-;11171:43;10534:685;-1:-1:-1;;;;;;10534:685:5:o;636:32::-;;;;;;;:::i;1104:88:6:-;1152:7;1174:13;3342:12:1;;;3255:106;1174:13:6;1167:20;;1104:88;:::o;9859:374:5:-;1094:13:0;:11;:13::i;:::-;7449:11:5;:27;;;;;;9935:69:::1;;9973:24;;;;;;;;;;;;;;9935:69;10009:16;10053:13;10043:7;;10028:12;;:22;;;;:::i;:::-;:38;;;;:::i;:::-;10009:57;;558:5;10076:8;:26;10072:79;;;10119:25;::::0;-1:-1:-1;;;10119:25:5;;::::1;::::0;::::1;1550::8::0;;;1523:18;;10119:25:5::1;1404:177:8::0;10072:79:5::1;10156:12;:28:::0;;;10195:33:::1;::::0;10171:13;;10195:33:::1;::::0;;;::::1;9929:304;9859:374:::0;:::o;9249:443::-;1094:13:0;:11;:13::i;:::-;7235:11:5;:22;;;;;;9346:59:::1;;9379:19;;;;;;;;;;;;;;9346:59;9411:16;9455:7;9445;;9430:12;;:22;;;;:::i;:::-;:32;;;;:::i;:::-;9411:51;;558:5;9472:8;:26;9468:79;;;9515:25;::::0;-1:-1:-1;;;9515:25:5;;::::1;::::0;::::1;1550::8::0;;;1523:18;;9515:25:5::1;1404:177:8::0;9468:79:5::1;9552:38;9578:11;9552:25;:38::i;:::-;9596:10;:24:::0;;-1:-1:-1;;9596:24:5::1;-1:-1:-1::0;;;;;9596:24:5;::::1;::::0;;::::1;::::0;;;9626:6:::1;:16:::0;;;9653:34:::1;::::0;9626:16;;9596:24;9653:34:::1;::::0;-1:-1:-1;;9653:34:5::1;9340:352;9249:443:::0;;:::o;13768:115::-;1094:13:0;:11;:13::i;:::-;13845:33:5::1;13869:8;13845:23;:33::i;8822:218::-:0;1094:13:0;:11;:13::i;:::-;7686:11:5;:25;;;;;;8893:65:::1;;8929:22;;-1:-1:-1::0;;;8929:22:5::1;;;;;;;;;;;8893:65;8963:32;8987:7;8963:23;:32::i;:::-;9007:28;::::0;9027:7;;9007:28:::1;::::0;;;::::1;8822:218:::0;:::o;8520:535:1:-;-1:-1:-1;;;;;8603:21:1;;8595:65;;;;-1:-1:-1;;;8595:65:1;;7896:2:8;8595:65:1;;;7878:21:8;7935:2;7915:18;;;7908:30;7974:33;7954:18;;;7947:61;8025:18;;8595:65:1;7694:355:8;8595:65:1;8747:6;8731:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8899:18:1;;:9;:18;;;;;;;;;;;:28;;;;;;8952:37;1550:25:8;;;8952:37:1;;1523:18:8;8952:37:1;;;;;;;12533:471:5;;:::o;1674:396:7:-;1820:4;1816:2;1812:13;1802:258;;1975:10;1969:4;1962:24;2047:4;2041;2034:18;2074:198:0;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:0;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:0;;8256:2:8;2154:73:0::1;::::0;::::1;8238:21:8::0;8295:2;8275:18;;;8268:30;8334:34;8314:18;;;8307:62;8405:8;8385:18;;;8378:36;8431:19;;2154:73:0::1;8054:402:8::0;2154:73:0::1;2237:28;2256:8;2237:18;:28::i;1359:130::-:0;1273:6;;-1:-1:-1;;;;;1273:6:0;734:10:4;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;8663:2:8;1414:68:0;;;8645:21:8;;;8682:18;;;8675:30;8741:34;8721:18;;;8714:62;8793:18;;1414:68:0;8461:356:8;10457:340:1;-1:-1:-1;;;;;10558:19:1;;10550:68;;;;-1:-1:-1;;;10550:68:1;;9024:2:8;10550:68:1;;;9006:21:8;9063:2;9043:18;;;9036:30;9102:34;9082:18;;;9075:62;9173:6;9153:18;;;9146:34;9197:19;;10550:68:1;8822:400:8;10550:68:1;-1:-1:-1;;;;;10636:21:1;;10628:68;;;;-1:-1:-1;;;10628:68:1;;9429:2:8;10628:68:1;;;9411:21:8;9468:2;9448:18;;;9441:30;9507:34;9487:18;;;9480:62;9578:4;9558:18;;;9551:32;9600:19;;10628:68:1;9227:398:8;10628:68:1;-1:-1:-1;;;;;10707:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10758:32;;1550:25:8;;;10758:32:1;;1523:18:8;10758:32:1;;;;;;;10457:340;;;:::o;14132:237:5:-;14219:17;14267:6;;14277:1;14267:11;;:35;;;;-1:-1:-1;14292:10:5;;-1:-1:-1;;;;;14282:20:5;;;14292:10;;14282:20;;14267:35;14263:102;;;505:6;14334;;14325;:15;;;;:::i;:::-;14324:34;;;;:::i;14555:229::-;14628:23;14688:12;;14704:1;14688:17;14684:96;;505:6;14743:12;;14734:6;:21;;;;:::i;:::-;14733:40;;;;:::i;6980:406:6:-;7092:12;7088:294;;;7118:12;;7114:207;;7142:19;7164:10;:8;:10::i;:::-;7142:32;-1:-1:-1;7184:15:6;7202:21;7142:32;7202:7;:21;:::i;:::-;7184:39;;7234:36;7243:4;7249:2;7253:7;7262;7234:8;:36::i;:::-;7300:2;-1:-1:-1;;;;;7285:27:6;7294:4;-1:-1:-1;;;;;7285:27:6;;7304:7;7285:27;;;;1550:25:8;;1538:2;1523:18;;1404:177;7285:27:6;;;;;;;;7132:189;;7114:207;6980:406;;;:::o;7088:294::-;7341:34;7357:4;7363:2;7367:7;7341:15;:34::i;4609:182::-;4684:12;4680:107;;;4713:19;;-1:-1:-1;;;4713:19:6;;;;;;;;;;;4680:107;4753:27;4765:7;4774:5;4753:11;:27::i;2590:257::-;2702:4;734:10:4;2756:37:6;2772:4;734:10:4;2787:5:6;2756:15;:37::i;:::-;2799:26;2809:4;2815:2;2819:5;2799:9;:26::i;8026:148::-;8068:7;8084:15;8101;8120:19;:17;:19::i;:::-;8083:56;;-1:-1:-1;8083:56:6;-1:-1:-1;8152:17:6;8083:56;;8152:17;:::i;:::-;8145:24;;;;8026:148;:::o;4164:182::-;4239:12;4235:107;;;4268:19;;-1:-1:-1;;;4268:19:6;;;;;;;;;;;4235:107;4308:27;4320:7;4329:5;4308:11;:27::i;1824:101:0:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;2993:191:6:-:0;3083:4;734:10:4;3135:27:6;734:10:4;3152:2:6;3156:5;3135:9;:27::i;4988:152::-;5053:12;5048:63;;5082:22;;-1:-1:-1;;;5082:22:6;;;;;;;;;;;5048:63;5117:7;:18;4988:152::o;2426:187:0:-;2518:6;;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;2534:17:0;;;;;;;2566:40;;2518:6;;;2534:17;2518:6;;2566:40;;2499:16;;2566:40;2489:124;2426:187;:::o;8822:406:6:-;-1:-1:-1;;;;;8976:15:6;;8954:19;8976:15;;;:7;:15;;;;;;9001:24;;;8997:112;;;9042:60;;;;;-1:-1:-1;;;;;10023:55:8;;9042:60:6;;;10005:74:8;10095:18;;;10088:34;;;10138:18;;;10131:34;;;9978:18;;9042:60:6;9803:368:8;8997:112:6;-1:-1:-1;;;;;9132:15:6;;;;;;:7;:15;;;;;;:28;;9150:10;;9132:28;:::i;:::-;-1:-1:-1;;;;;9114:15:6;;;;;;;:7;:15;;;;;;:46;;;;9187:18;;;;;;;:36;;9208:15;;9187:36;:::i;:::-;-1:-1:-1;;;;;9166:18:6;;;;;;;:7;:18;;;;;:57;;;;-1:-1:-1;;;;8822:406:6:o;7456:788:1:-;-1:-1:-1;;;;;7552:18:1;;7544:68;;;;-1:-1:-1;;;7544:68:1;;10378:2:8;7544:68:1;;;10360:21:8;10417:2;10397:18;;;10390:30;10456:34;10436:18;;;10429:62;10527:7;10507:18;;;10500:35;10552:19;;7544:68:1;10176:401:8;7544:68:1;-1:-1:-1;;;;;7630:16:1;;7622:64;;;;-1:-1:-1;;;7622:64:1;;10784:2:8;7622:64:1;;;10766:21:8;10823:2;10803:18;;;10796:30;10862:34;10842:18;;;10835:62;10933:5;10913:18;;;10906:33;10956:19;;7622:64:1;10582:399:8;7622:64:1;-1:-1:-1;;;;;7768:15:1;;7746:19;7768:15;;;;;;;;;;;7801:21;;;;7793:72;;;;-1:-1:-1;;;7793:72:1;;11188:2:8;7793:72:1;;;11170:21:8;11227:2;11207:18;;;11200:30;11266:34;11246:18;;;11239:62;11337:8;11317:18;;;11310:36;11363:19;;7793:72:1;10986:402:8;7793:72:1;-1:-1:-1;;;;;7899:15:1;;;:9;:15;;;;;;;;;;;7917:20;;;7899:38;;8114:13;;;;;;;;;;:23;;;;;;8163:26;;1550:25:8;;;8114:13:1;;8163:26;;1523:18:8;8163:26:1;;;;;;;8200:37;7534:710;7456:788;;;:::o;9375:659::-;-1:-1:-1;;;;;9458:21:1;;9450:67;;;;-1:-1:-1;;;9450:67:1;;11595:2:8;9450:67:1;;;11577:21:8;11634:2;11614:18;;;11607:30;11673:34;11653:18;;;11646:62;11744:3;11724:18;;;11717:31;11765:19;;9450:67:1;11393:397:8;9450:67:1;-1:-1:-1;;;;;9613:18:1;;9588:22;9613:18;;;;;;;;;;;9649:24;;;;9641:71;;;;-1:-1:-1;;;9641:71:1;;11997:2:8;9641:71:1;;;11979:21:8;12036:2;12016:18;;;12009:30;12075:34;12055:18;;;12048:62;12146:4;12126:18;;;12119:32;12168:19;;9641:71:1;11795:398:8;9641:71:1;-1:-1:-1;;;;;9746:18:1;;:9;:18;;;;;;;;;;;9767:23;;;9746:44;;9883:12;:22;;;;;;;9931:37;1550:25:8;;;9746:9:1;;:18;9931:37;;1523:18:8;9931:37:1;;;;;;;6980:406:6;;;:::o;11078:411:1:-;-1:-1:-1;;;;;4102:18:1;;;11178:24;4102:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;11244:37:1;;11240:243;;11325:6;11305:16;:26;;11297:68;;;;-1:-1:-1;;;11297:68:1;;12400:2:8;11297:68:1;;;12382:21:8;12439:2;12419:18;;;12412:30;12478:31;12458:18;;;12451:59;12527:18;;11297:68:1;12198:353:8;11297:68:1;11407:51;11416:5;11423:7;11451:6;11432:16;:25;11407:8;:51::i;3382:374:6:-;3487:12;3483:269;;;3509:31;3535:4;3509:25;:31::i;:::-;3548:29;3574:2;3548:25;:29::i;:::-;3589:6;3599:1;3589:11;3585:62;;3619:19;;;;;;;;;;;;;;3585:62;3655:36;3674:4;3680:2;3684:6;3655:18;:36::i;8270:107::-;8321:7;8330;8353;;8362:9;:7;:9::i;:::-;8345:27;;;;8270:107;;:::o;5725:502::-;5835:12;5850:21;5863:7;5850:12;:21::i;:::-;5835:36;-1:-1:-1;5877:23:6;5903:14;5835:36;5903:7;:14;:::i;:::-;5877:40;;5924:15;5941:12;5955:23;5982:67;6001:7;6016:4;6028:15;5982:11;:67::i;:::-;5923:126;;;;;;6060:7;6071:1;6060:12;6056:167;;6082:53;6091:6;6099:9;6110:7;6119:15;6082:8;:53::i;:::-;6144:23;6156:4;6162;6144:11;:23::i;:::-;6197:9;-1:-1:-1;;;;;6180:36:6;6189:6;-1:-1:-1;;;;;6180:36:6;;6208:7;6180:36;;;;1550:25:8;;1538:2;1523:18;;1404:177;6180:36:6;;;;;;;;6056:167;5829:398;;;;;5725:502;;;:::o;6643:121::-;6704:7;448:6;6737:7;;6727;:17;;;;:::i;7551:376::-;7666:7;7675;7684;7699:19;7721:10;:8;:10::i;:::-;7699:32;-1:-1:-1;7737:15:6;7755:21;7699:32;7755:7;:21;:::i;:::-;7737:39;-1:-1:-1;7782:12:6;7797:18;7804:11;7797:4;:18;:::i;:::-;7782:33;-1:-1:-1;7821:23:6;7847:29;7865:11;7847:15;:29;:::i;:::-;7891:7;;7900:4;;-1:-1:-1;7891:7:6;;-1:-1:-1;7551:376:6;-1:-1:-1;;;;;;7551:376:6:o;6389:128::-;6472:4;6462:7;;:14;;;;:::i;:::-;6452:7;:24;6495:10;;:17;;6508:4;;6495:17;:::i;:::-;6482:10;:30;-1:-1:-1;;6389:128:6:o;14:180:8:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:8;;14:180;-1:-1:-1;14:180:8:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:196::-;820:20;;-1:-1:-1;;;;;869:54:8;;859:65;;849:93;;938:1;935;928:12;953:254;1021:6;1029;1082:2;1070:9;1061:7;1057:23;1053:32;1050:52;;;1098:1;1095;1088:12;1050:52;1121:29;1140:9;1121:29;:::i;:::-;1111:39;1197:2;1182:18;;;;1169:32;;-1:-1:-1;;;953:254:8:o;1586:328::-;1663:6;1671;1679;1732:2;1720:9;1711:7;1707:23;1703:32;1700:52;;;1748:1;1745;1738:12;1700:52;1771:29;1790:9;1771:29;:::i;:::-;1761:39;;1819:38;1853:2;1842:9;1838:18;1819:38;:::i;:::-;1809:48;;1904:2;1893:9;1889:18;1876:32;1866:42;;1586:328;;;;;:::o;2108:186::-;2167:6;2220:2;2208:9;2199:7;2195:23;2191:32;2188:52;;;2236:1;2233;2226:12;2188:52;2259:29;2278:9;2259:29;:::i;2530:184::-;-1:-1:-1;;;2579:1:8;2572:88;2679:4;2676:1;2669:15;2703:4;2700:1;2693:15;2719:922;2788:6;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2897:9;2884:23;2926:18;2967:2;2959:6;2956:14;2953:34;;;2983:1;2980;2973:12;2953:34;3021:6;3010:9;3006:22;2996:32;;3066:7;3059:4;3055:2;3051:13;3047:27;3037:55;;3088:1;3085;3078:12;3037:55;3124:2;3111:16;3146:2;3142;3139:10;3136:36;;;3152:18;;:::i;:::-;3227:2;3221:9;3195:2;3281:13;;-1:-1:-1;;3277:22:8;;;3301:2;3273:31;3269:40;3257:53;;;3325:18;;;3345:22;;;3322:46;3319:72;;;3371:18;;:::i;:::-;3411:10;3407:2;3400:22;3446:2;3438:6;3431:18;3486:7;3481:2;3476;3472;3468:11;3464:20;3461:33;3458:53;;;3507:1;3504;3497:12;3458:53;3563:2;3558;3554;3550:11;3545:2;3537:6;3533:15;3520:46;3608:1;3586:15;;;3603:2;3582:24;3575:35;;;;-1:-1:-1;3590:6:8;2719:922;-1:-1:-1;;;;;2719:922:8:o;3646:260::-;3714:6;3722;3775:2;3763:9;3754:7;3750:23;3746:32;3743:52;;;3791:1;3788;3781:12;3743:52;3814:29;3833:9;3814:29;:::i;:::-;3804:39;;3862:38;3896:2;3885:9;3881:18;3862:38;:::i;:::-;3852:48;;3646:260;;;;;:::o;3911:437::-;3990:1;3986:12;;;;4033;;;4054:61;;4108:4;4100:6;4096:17;4086:27;;4054:61;4161:2;4153:6;4150:14;4130:18;4127:38;4124:218;;-1:-1:-1;;;4195:1:8;4188:88;4299:4;4296:1;4289:15;4327:4;4324:1;4317:15;4124:218;;3911:437;;;:::o;4353:184::-;-1:-1:-1;;;4402:1:8;4395:88;4502:4;4499:1;4492:15;4526:4;4523:1;4516:15;4542:128;4609:9;;;4630:11;;;4627:37;;;4644:18;;:::i;4675:125::-;4740:9;;;4761:10;;;4758:36;;;4774:18;;:::i;4805:274::-;4845:1;4871;4861:189;;-1:-1:-1;;;4903:1:8;4896:88;5007:4;5004:1;4997:15;5035:4;5032:1;5025:15;4861:189;-1:-1:-1;5064:9:8;;4805:274::o;5616:545::-;5718:2;5713:3;5710:11;5707:448;;;5754:1;5779:5;5775:2;5768:17;5824:4;5820:2;5810:19;5894:2;5882:10;5878:19;5875:1;5871:27;5865:4;5861:38;5930:4;5918:10;5915:20;5912:47;;;-1:-1:-1;5953:4:8;5912:47;6008:2;6003:3;5999:12;5996:1;5992:20;5986:4;5982:31;5972:41;;6063:82;6081:2;6074:5;6071:13;6063:82;;;6126:17;;;6107:1;6096:13;6063:82;;;6067:3;;;5616:545;;;:::o;6337:1352::-;6463:3;6457:10;6490:18;6482:6;6479:30;6476:56;;;6512:18;;:::i;:::-;6541:97;6631:6;6591:38;6623:4;6617:11;6591:38;:::i;:::-;6585:4;6541:97;:::i;:::-;6693:4;;6757:2;6746:14;;6774:1;6769:663;;;;7476:1;7493:6;7490:89;;;-1:-1:-1;7545:19:8;;;7539:26;7490:89;-1:-1:-1;;6294:1:8;6290:11;;;6286:24;6282:29;6272:40;6318:1;6314:11;;;6269:57;7592:81;;6739:944;;6769:663;5563:1;5556:14;;;5600:4;5587:18;;-1:-1:-1;;6805:20:8;;;6923:236;6937:7;6934:1;6931:14;6923:236;;;7026:19;;;7020:26;7005:42;;7118:27;;;;7086:1;7074:14;;;;6953:19;;6923:236;;;6927:3;7187:6;7178:7;7175:19;7172:201;;;7248:19;;;7242:26;-1:-1:-1;;7331:1:8;7327:14;;;7343:3;7323:24;7319:37;7315:42;7300:58;7285:74;;7172:201;-1:-1:-1;;;;;7419:1:8;7403:14;;;7399:22;7386:36;;-1:-1:-1;6337:1352:8:o;9630:168::-;9703:9;;;9734;;9751:15;;;9745:22;;9731:37;9721:71;;9772:18;;:::i
Swarm Source
ipfs://f0883b06564851f25c2214f07da7f7c972f341f687d3de12c8903d945027bfe0
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.