Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 14 from a total of 14 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Burn All | 23974580 | 10 days ago | IN | 0 ETH | 0.00002319 | ||||
| Approve | 11523438 | 1820 days ago | IN | 0 ETH | 0.00410074 | ||||
| Approve | 11518540 | 1821 days ago | IN | 0 ETH | 0.00136691 | ||||
| Approve | 11516969 | 1821 days ago | IN | 0 ETH | 0.00330705 | ||||
| Approve | 11513255 | 1822 days ago | IN | 0 ETH | 0.01014162 | ||||
| Approve | 11513003 | 1822 days ago | IN | 0 ETH | 0.00815739 | ||||
| Approve | 11510679 | 1822 days ago | IN | 0 ETH | 0.00405664 | ||||
| Approve | 11503911 | 1823 days ago | IN | 0 ETH | 0.00233443 | ||||
| Approve | 11503070 | 1823 days ago | IN | 0 ETH | 0.00176184 | ||||
| Approve | 11499576 | 1824 days ago | IN | 0 ETH | 0.00158738 | ||||
| Approve | 11496441 | 1824 days ago | IN | 0 ETH | 0.00485034 | ||||
| Approve | 11496438 | 1824 days ago | IN | 0 ETH | 0.00485034 | ||||
| Transfer | 11495793 | 1825 days ago | IN | 0 ETH | 0.00191208 | ||||
| Approve | 11495523 | 1825 days ago | IN | 0 ETH | 0.00149797 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 11495508 | 1825 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BondTokenCollateralizedErc20
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-12-21
*/
pragma solidity 0.6.6;
// File: contracts/util/TransferETHInterface.sol
interface TransferETHInterface {
receive() external payable;
event LogTransferETH(address indexed from, address indexed to, uint256 value);
}
// File: contracts/util/TransferETH.sol
abstract contract TransferETH is TransferETHInterface {
receive() external override payable {
emit LogTransferETH(msg.sender, address(this), msg.value);
}
function _hasSufficientBalance(uint256 amount) internal view returns (bool ok) {
address thisContract = address(this);
return amount <= thisContract.balance;
}
/**
* @notice transfer `amount` ETH to the `recipient` account with emitting log
*/
function _transferETH(
address payable recipient,
uint256 amount,
string memory errorMessage
) internal {
require(_hasSufficientBalance(amount), errorMessage);
(bool success, ) = recipient.call{value: amount}("");
require(success, "transferring Ether failed");
emit LogTransferETH(address(this), recipient, amount);
}
function _transferETH(address payable recipient, uint256 amount) internal {
_transferETH(recipient, amount, "TransferETH: transfer amount exceeds balance");
}
}
// File: @openzeppelin/contracts/GSN/Context.sol
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor () internal { }
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: @openzeppelin/contracts/math/SafeMath.sol
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin/contracts/utils/Address.sol
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.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 {ERC20MinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20 {
using SafeMath for uint256;
using Address for address;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
uint8 private _decimals;
/**
* @dev Sets the values for {name} and {symbol}, initializes {decimals} with
* a default value of 18.
*
* To select a different value for {decimals}, use {_setupDecimals}.
*
* All three of these values are immutable: they can only be set once during
* construction.
*/
constructor (string memory name, string memory symbol) public {
_name = name;
_symbol = symbol;
_decimals = 18;
}
/**
* @dev Returns the name of the token.
*/
function name() public view returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
* called.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view returns (uint8) {
return _decimals;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20};
*
* Requirements:
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(address sender, address recipient, uint256 amount) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements
*
* - `to` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
*
* This is internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Sets {decimals} to a value other than the default one of 18.
*
* WARNING: This function should only be called from the constructor. Most
* applications that interact with token contracts will not expect
* {decimals} to ever change, and may work incorrectly if it does.
*/
function _setupDecimals(uint8 decimals_) internal {
_decimals = decimals_;
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be to transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}
// File: @openzeppelin/contracts/access/Ownable.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.
*/
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 () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = 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");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// File: contracts/bondToken/BondTokenInterface.sol
interface BondTokenInterface is IERC20 {
event LogExpire(uint128 rateNumerator, uint128 rateDenominator, bool firstTime);
function mint(address account, uint256 amount) external returns (bool success);
function expire(uint128 rateNumerator, uint128 rateDenominator)
external
returns (bool firstTime);
function simpleBurn(address account, uint256 amount) external returns (bool success);
function burn(uint256 amount) external returns (bool success);
function burnAll() external returns (uint256 amount);
function getRate() external view returns (uint128 rateNumerator, uint128 rateDenominator);
}
// File: contracts/bondToken/BondToken.sol
abstract contract BondToken is Ownable, BondTokenInterface, ERC20 {
struct Frac128x128 {
uint128 numerator;
uint128 denominator;
}
Frac128x128 internal _rate;
constructor(
string memory name,
string memory symbol,
uint8 decimals
) public ERC20(name, symbol) {
_setupDecimals(decimals);
}
function mint(address account, uint256 amount)
public
virtual
override
onlyOwner
returns (bool success)
{
require(!_isExpired(), "this token contract has expired");
_mint(account, amount);
return true;
}
function transfer(address recipient, uint256 amount)
public
override(ERC20, IERC20)
returns (bool success)
{
_transfer(msg.sender, recipient, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public override(ERC20, IERC20) returns (bool success) {
_transfer(sender, recipient, amount);
_approve(
sender,
msg.sender,
allowance(sender, msg.sender).sub(amount, "ERC20: transfer amount exceeds allowance")
);
return true;
}
/**
* @dev Record the settlement price at maturity in the form of a fraction and let the bond
* token expire.
*/
function expire(uint128 rateNumerator, uint128 rateDenominator)
public
override
onlyOwner
returns (bool isFirstTime)
{
isFirstTime = !_isExpired();
if (isFirstTime) {
_setRate(Frac128x128(rateNumerator, rateDenominator));
}
emit LogExpire(rateNumerator, rateDenominator, isFirstTime);
}
function simpleBurn(address from, uint256 amount) public override onlyOwner returns (bool) {
if (amount > balanceOf(from)) {
return false;
}
_burn(from, amount);
return true;
}
function burn(uint256 amount) public override returns (bool success) {
if (!_isExpired()) {
return false;
}
_burn(msg.sender, amount);
if (_rate.numerator != 0) {
uint8 decimalsOfCollateral = _getCollateralDecimals();
uint256 withdrawAmount = _applyDecimalGap(amount, decimals(), decimalsOfCollateral)
.mul(_rate.numerator)
.div(_rate.denominator);
_sendCollateralTo(msg.sender, withdrawAmount);
}
return true;
}
function burnAll() public override returns (uint256 amount) {
amount = balanceOf(msg.sender);
bool success = burn(amount);
if (!success) {
amount = 0;
}
}
/**
* @dev rateDenominator never be zero due to div() function, thus initial _rateDenominator is 0
* can be used for flag of non-expired;
*/
function _isExpired() internal view returns (bool) {
return _rate.denominator != 0;
}
function getRate()
public
override
view
returns (uint128 rateNumerator, uint128 rateDenominator)
{
rateNumerator = _rate.numerator;
rateDenominator = _rate.denominator;
}
function _setRate(Frac128x128 memory rate) internal {
require(
rate.denominator != 0,
"system error: the exchange rate must be non-negative number"
);
_rate = rate;
}
/**
* @dev removes a decimal gap from rate.
*/
function _applyDecimalGap(
uint256 baseAmount,
uint8 decimalsOfBase,
uint8 decimalsOfQuote
) internal pure returns (uint256 quoteAmount) {
uint256 n;
uint256 d;
if (decimalsOfBase > decimalsOfQuote) {
d = decimalsOfBase - decimalsOfQuote;
} else if (decimalsOfBase < decimalsOfQuote) {
n = decimalsOfQuote - decimalsOfBase;
}
// The consequent multiplication would overflow under extreme and non-blocking circumstances.
require(n < 19 && d < 19, "decimal gap needs to be lower than 19");
quoteAmount = baseAmount.mul(10**n).div(10**d);
}
function _getCollateralDecimals() internal virtual view returns (uint8);
function _sendCollateralTo(address receiver, uint256 amount) internal virtual;
}
// File: contracts/bondToken/BondTokenCollateralizedErc20.sol
contract BondTokenCollateralizedErc20 is BondToken {
ERC20 internal immutable COLLATERALIZED_TOKEN;
constructor(
address collateralizedTokenAddress,
string memory name,
string memory symbol,
uint8 decimals
) public BondToken(name, symbol, decimals) {
COLLATERALIZED_TOKEN = ERC20(collateralizedTokenAddress);
}
function _getCollateralDecimals() internal override view returns (uint8) {
return COLLATERALIZED_TOKEN.decimals();
}
function _sendCollateralTo(address receiver, uint256 amount) internal override {
COLLATERALIZED_TOKEN.transfer(receiver, amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"collateralizedTokenAddress","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"rateNumerator","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"rateDenominator","type":"uint128"},{"indexed":false,"internalType":"bool","name":"firstTime","type":"bool"}],"name":"LogExpire","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAll","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"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":[{"internalType":"uint128","name":"rateNumerator","type":"uint128"},{"internalType":"uint128","name":"rateDenominator","type":"uint128"}],"name":"expire","outputs":[{"internalType":"bool","name":"isFirstTime","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint128","name":"rateNumerator","type":"uint128"},{"internalType":"uint128","name":"rateDenominator","type":"uint128"}],"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"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":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"simpleBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a06040523480156200001157600080fd5b506040516200202138038062002021833981810160405260808110156200003757600080fd5b8151602083018051604051929492938301929190846401000000008211156200005f57600080fd5b9083019060208201858111156200007557600080fd5b82516401000000008111828201881017156200009057600080fd5b82525081516020918201929091019080838360005b83811015620000bf578181015183820152602001620000a5565b50505050905090810190601f168015620000ed5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011157600080fd5b9083019060208201858111156200012757600080fd5b82516401000000008111828201881017156200014257600080fd5b82525081516020918201929091019080838360005b838110156200017157818101518382015260200162000157565b50505050905090810190601f1680156200019f5780820380516001836020036101000a031916815260200191505b50604052602001519150839050828282826000620001c56001600160e01b036200027d16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200022490600490602085019062000298565b5080516200023a90600590602084019062000298565b50506006805460ff19166012179055506200025e816001600160e01b036200028216565b505050505060609190911b6001600160601b031916608052506200033a565b335b90565b6006805460ff191660ff92909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002db57805160ff19168380011785556200030b565b828001600101855582156200030b579182015b828111156200030b578251825591602001919060010190620002ee565b50620003199291506200031d565b5090565b6200027f91905b8082111562000319576000815560010162000324565b60805160601c611cc46200035d6000398061162852806118365250611cc46000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063715018a6116100cd578063a457c2d711610081578063dd62ed3e11610066578063dd62ed3e146104a3578063f05fcdf2146104de578063f2fde38b146105175761016c565b8063a457c2d714610431578063a9059cbb1461046a5761016c565b8063903d8e77116100b2578063903d8e77146103ea57806395d89b41146104215780639975038c146104295761016c565b8063715018a6146103af5780638da5cb5b146103b95761016c565b8063395093511161012457806342966c681161010957806342966c6814610328578063679aefce1461034557806370a082311461037c5761016c565b806339509351146102b657806340c10f19146102ef5761016c565b806318160ddd1161015557806318160ddd1461023b57806323b872dd14610255578063313ce567146102985761016c565b806306fdde0314610171578063095ea7b3146101ee575b600080fd5b61017961054a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101b357818101518382015260200161019b565b50505050905090810190601f1680156101e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102276004803603604081101561020457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105fe565b604080519115158252519081900360200190f35b61024361061c565b60408051918252519081900360200190f35b6102276004803603606081101561026b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610622565b6102a0610677565b6040805160ff9092168252519081900360200190f35b610227600480360360408110156102cc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610680565b6102276004803603604081101561030557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356106e1565b6102276004803603602081101561033e57600080fd5b50356107f2565b61034d6108b2565b604080516fffffffffffffffffffffffffffffffff938416815291909216602082015281519081900390910190f35b6102436004803603602081101561039257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166108e3565b6103b761090b565b005b6103c1610a0b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102276004803603604081101561040057600080fd5b506fffffffffffffffffffffffffffffffff81358116916020013516610a27565b610179610b66565b610243610be5565b6102276004803603604081101561044757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c0d565b6102276004803603604081101561048057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c88565b610243600480360360408110156104b957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610c95565b610227600480360360408110156104f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610ccd565b6103b76004803603602081101561052d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d82565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105f45780601f106105c9576101008083540402835291602001916105f4565b820191906000526020600020905b8154815290600101906020018083116105d757829003601f168201915b5050505050905090565b600061061261060b610f0c565b8484610f10565b5060015b92915050565b60035490565b600061062f848484611057565b61066d843361066885604051806060016040528060288152602001611bd86028913961065b8a33610c95565b919063ffffffff61123516565b610f10565b5060019392505050565b60065460ff1690565b600061061261068d610f0c565b84610668856002600061069e610f0c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6112e616565b60006106eb610f0c565b60005473ffffffffffffffffffffffffffffffffffffffff90811691161461077457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61077c611361565b156107e857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f7468697320746f6b656e20636f6e747261637420686173206578706972656400604482015290519081900360640190fd5b610612838361138f565b60006107fc611361565b610808575060006108ad565b61081233836114ce565b6007546fffffffffffffffffffffffffffffffff16156108a9576000610836611624565b60075490915060009061089a906fffffffffffffffffffffffffffffffff700100000000000000000000000000000000820481169161088e91166108828861087c610677565b886116bd565b9063ffffffff61177f16565b9063ffffffff6117f216565b90506108a63382611834565b50505b5060015b919050565b6007546fffffffffffffffffffffffffffffffff808216927001000000000000000000000000000000009092041690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b610913610f0c565b60005473ffffffffffffffffffffffffffffffffffffffff90811691161461099c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6000610a31610f0c565b60005473ffffffffffffffffffffffffffffffffffffffff908116911614610aba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ac2611361565b1590508015610b0c57610b0c6040518060400160405280856fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff1681525061190b565b604080516fffffffffffffffffffffffffffffffff8086168252841660208201528215158183015290517fcdcd2e977c58a9c82d799c0986ab5c6fe48d43a9b96bbf60a654b46728c6f6679181900360600190a192915050565b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105f45780601f106105c9576101008083540402835291602001916105f4565b6000610bf0336108e3565b90506000610bfd826107f2565b905080610c0957600091505b5090565b6000610612610c1a610f0c565b8461066885604051806060016040528060258152602001611c6a6025913960026000610c44610f0c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61123516565b6000610612338484611057565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b6000610cd7610f0c565b60005473ffffffffffffffffffffffffffffffffffffffff908116911614610d6057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610d69836108e3565b821115610d7857506000610616565b61061283836114ce565b610d8a610f0c565b60005473ffffffffffffffffffffffffffffffffffffffff908116911614610e1357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611b0e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180611c466024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611b346022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166110c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611c216025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661112f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611aa46023913960400191505060405180910390fd5b61113a8383836119dd565b61118a81604051806060016040528060268152602001611b566026913973ffffffffffffffffffffffffffffffffffffffff8616600090815260016020526040902054919063ffffffff61123516565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602052604080822093909355908416815220546111cc908263ffffffff6112e616565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112a357818101518382015260200161128b565b50505050905090810190601f1680156112d05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561135a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60075470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16151590565b73ffffffffffffffffffffffffffffffffffffffff821661141157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61141d600083836119dd565b600354611430908263ffffffff6112e616565b60035573ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902054611469908263ffffffff6112e616565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff821661153a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611c006021913960400191505060405180910390fd5b611546826000836119dd565b61159681604051806060016040528060228152602001611aec6022913973ffffffffffffffffffffffffffffffffffffffff8516600090815260016020526040902054919063ffffffff61123516565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260409020556003546115cf908263ffffffff6119e216565b60035560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561168c57600080fd5b505afa1580156116a0573d6000803e3d6000fd5b505050506040513d60208110156116b657600080fd5b5051905090565b60008060008360ff168560ff1611156116dc575060ff838503166116f3565b8360ff168560ff1610156116f35784840360ff1691505b6013821080156117035750601381105b611758576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611ac76025913960400191505060405180910390fd5b61177581600a0a61088e84600a0a8961177f90919063ffffffff16565b9695505050505050565b60008261178e57506000610616565b8282028284828161179b57fe5b041461135a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611bb76021913960400191505060405180910390fd5b600061135a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611a24565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156118db57600080fd5b505af11580156118ef573d6000803e3d6000fd5b505050506040513d602081101561190557600080fd5b50505050565b60208101516fffffffffffffffffffffffffffffffff16611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180611b7c603b913960400191505060405180910390fd5b8051600780546020909301516fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029281167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941693909317909216179055565b505050565b600061135a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611235565b60008183611a8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283519092839260449091019190850190808383600083156112a357818101518382015260200161128b565b506000838581611a9957fe5b049594505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373646563696d616c20676170206e6565647320746f206265206c6f776572207468616e20313945524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636573797374656d206572726f723a207468652065786368616e67652072617465206d757374206265206e6f6e2d6e65676174697665206e756d626572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200d09e1c29d314c5abe81987999a2c15d4ceb3dd3b4f69d8af6c2d483ad13ecbe64736f6c63430006060033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104c42542032303231303130312036373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4c42543031303130363730000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061016c5760003560e01c8063715018a6116100cd578063a457c2d711610081578063dd62ed3e11610066578063dd62ed3e146104a3578063f05fcdf2146104de578063f2fde38b146105175761016c565b8063a457c2d714610431578063a9059cbb1461046a5761016c565b8063903d8e77116100b2578063903d8e77146103ea57806395d89b41146104215780639975038c146104295761016c565b8063715018a6146103af5780638da5cb5b146103b95761016c565b8063395093511161012457806342966c681161010957806342966c6814610328578063679aefce1461034557806370a082311461037c5761016c565b806339509351146102b657806340c10f19146102ef5761016c565b806318160ddd1161015557806318160ddd1461023b57806323b872dd14610255578063313ce567146102985761016c565b806306fdde0314610171578063095ea7b3146101ee575b600080fd5b61017961054a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101b357818101518382015260200161019b565b50505050905090810190601f1680156101e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102276004803603604081101561020457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105fe565b604080519115158252519081900360200190f35b61024361061c565b60408051918252519081900360200190f35b6102276004803603606081101561026b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610622565b6102a0610677565b6040805160ff9092168252519081900360200190f35b610227600480360360408110156102cc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610680565b6102276004803603604081101561030557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356106e1565b6102276004803603602081101561033e57600080fd5b50356107f2565b61034d6108b2565b604080516fffffffffffffffffffffffffffffffff938416815291909216602082015281519081900390910190f35b6102436004803603602081101561039257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166108e3565b6103b761090b565b005b6103c1610a0b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102276004803603604081101561040057600080fd5b506fffffffffffffffffffffffffffffffff81358116916020013516610a27565b610179610b66565b610243610be5565b6102276004803603604081101561044757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c0d565b6102276004803603604081101561048057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c88565b610243600480360360408110156104b957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610c95565b610227600480360360408110156104f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610ccd565b6103b76004803603602081101561052d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d82565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105f45780601f106105c9576101008083540402835291602001916105f4565b820191906000526020600020905b8154815290600101906020018083116105d757829003601f168201915b5050505050905090565b600061061261060b610f0c565b8484610f10565b5060015b92915050565b60035490565b600061062f848484611057565b61066d843361066885604051806060016040528060288152602001611bd86028913961065b8a33610c95565b919063ffffffff61123516565b610f10565b5060019392505050565b60065460ff1690565b600061061261068d610f0c565b84610668856002600061069e610f0c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6112e616565b60006106eb610f0c565b60005473ffffffffffffffffffffffffffffffffffffffff90811691161461077457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61077c611361565b156107e857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f7468697320746f6b656e20636f6e747261637420686173206578706972656400604482015290519081900360640190fd5b610612838361138f565b60006107fc611361565b610808575060006108ad565b61081233836114ce565b6007546fffffffffffffffffffffffffffffffff16156108a9576000610836611624565b60075490915060009061089a906fffffffffffffffffffffffffffffffff700100000000000000000000000000000000820481169161088e91166108828861087c610677565b886116bd565b9063ffffffff61177f16565b9063ffffffff6117f216565b90506108a63382611834565b50505b5060015b919050565b6007546fffffffffffffffffffffffffffffffff808216927001000000000000000000000000000000009092041690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b610913610f0c565b60005473ffffffffffffffffffffffffffffffffffffffff90811691161461099c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6000610a31610f0c565b60005473ffffffffffffffffffffffffffffffffffffffff908116911614610aba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ac2611361565b1590508015610b0c57610b0c6040518060400160405280856fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff1681525061190b565b604080516fffffffffffffffffffffffffffffffff8086168252841660208201528215158183015290517fcdcd2e977c58a9c82d799c0986ab5c6fe48d43a9b96bbf60a654b46728c6f6679181900360600190a192915050565b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105f45780601f106105c9576101008083540402835291602001916105f4565b6000610bf0336108e3565b90506000610bfd826107f2565b905080610c0957600091505b5090565b6000610612610c1a610f0c565b8461066885604051806060016040528060258152602001611c6a6025913960026000610c44610f0c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61123516565b6000610612338484611057565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b6000610cd7610f0c565b60005473ffffffffffffffffffffffffffffffffffffffff908116911614610d6057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610d69836108e3565b821115610d7857506000610616565b61061283836114ce565b610d8a610f0c565b60005473ffffffffffffffffffffffffffffffffffffffff908116911614610e1357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611b0e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180611c466024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611b346022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166110c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611c216025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661112f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611aa46023913960400191505060405180910390fd5b61113a8383836119dd565b61118a81604051806060016040528060268152602001611b566026913973ffffffffffffffffffffffffffffffffffffffff8616600090815260016020526040902054919063ffffffff61123516565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602052604080822093909355908416815220546111cc908263ffffffff6112e616565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112a357818101518382015260200161128b565b50505050905090810190601f1680156112d05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561135a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60075470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16151590565b73ffffffffffffffffffffffffffffffffffffffff821661141157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61141d600083836119dd565b600354611430908263ffffffff6112e616565b60035573ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902054611469908263ffffffff6112e616565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff821661153a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611c006021913960400191505060405180910390fd5b611546826000836119dd565b61159681604051806060016040528060228152602001611aec6022913973ffffffffffffffffffffffffffffffffffffffff8516600090815260016020526040902054919063ffffffff61123516565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260409020556003546115cf908263ffffffff6119e216565b60035560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60007f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561168c57600080fd5b505afa1580156116a0573d6000803e3d6000fd5b505050506040513d60208110156116b657600080fd5b5051905090565b60008060008360ff168560ff1611156116dc575060ff838503166116f3565b8360ff168560ff1610156116f35784840360ff1691505b6013821080156117035750601381105b611758576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611ac76025913960400191505060405180910390fd5b61177581600a0a61088e84600a0a8961177f90919063ffffffff16565b9695505050505050565b60008261178e57506000610616565b8282028284828161179b57fe5b041461135a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611bb76021913960400191505060405180910390fd5b600061135a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611a24565b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156118db57600080fd5b505af11580156118ef573d6000803e3d6000fd5b505050506040513d602081101561190557600080fd5b50505050565b60208101516fffffffffffffffffffffffffffffffff16611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180611b7c603b913960400191505060405180910390fd5b8051600780546020909301516fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029281167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941693909317909216179055565b505050565b600061135a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611235565b60008183611a8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283519092839260449091019190850190808383600083156112a357818101518382015260200161128b565b506000838581611a9957fe5b049594505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373646563696d616c20676170206e6565647320746f206265206c6f776572207468616e20313945524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636573797374656d206572726f723a207468652065786368616e67652072617465206d757374206265206e6f6e2d6e65676174697665206e756d626572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200d09e1c29d314c5abe81987999a2c15d4ceb3dd3b4f69d8af6c2d483ad13ecbe64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104c42542032303231303130312036373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4c42543031303130363730000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : collateralizedTokenAddress (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [1] : name (string): LBT 20210101 670
Arg [2] : symbol (string): LBT01010670
Arg [3] : decimals (uint8): 8
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [5] : 4c42542032303231303130312036373000000000000000000000000000000000
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [7] : 4c42543031303130363730000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
31952:671:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31952:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;15468:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15468:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17574:169;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17574:169:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;16543:100;;;:::i;:::-;;;;;;;;;;;;;;;;28243:414;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28243:414:0;;;;;;;;;;;;;;;;;;:::i;16395:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18947:218;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18947:218:0;;;;;;;;;:::i;27722:285::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27722:285:0;;;;;;;;;:::i;29432:565::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29432:565:0;;:::i;30492:234::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16706:119;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16706:119:0;;;;:::i;25994:148::-;;;:::i;:::-;;25352:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28801:383;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28801:383:0;;;;;;;;;;;:::i;15670:87::-;;;:::i;30005:208::-;;;:::i;19668:269::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19668:269:0;;;;;;;;;:::i;28015:220::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28015:220:0;;;;;;;;;:::i;17276:151::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17276:151:0;;;;;;;;;;;:::i;29192:232::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29192:232:0;;;;;;;;;:::i;26297:244::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26297:244:0;;;;:::i;15468:83::-;15538:5;15531:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15505:13;;15531:12;;15538:5;;15531:12;;15538:5;15531:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15468:83;:::o;17574:169::-;17657:4;17674:39;17683:12;:10;:12::i;:::-;17697:7;17706:6;17674:8;:39::i;:::-;-1:-1:-1;17731:4:0;17574:169;;;;;:::o;16543:100::-;16623:12;;16543:100;:::o;28243:414::-;28390:12;28415:36;28425:6;28433:9;28444:6;28415:9;:36::i;:::-;28462:165;28485:6;28506:10;28531:85;28565:6;28531:85;;;;;;;;;;;;;;;;;:29;28541:6;28549:10;28531:9;:29::i;:::-;:33;:85;;:33;:85;:::i;:::-;28462:8;:165::i;:::-;-1:-1:-1;28645:4:0;28243:414;;;;;:::o;16395:83::-;16461:9;;;;16395:83;:::o;18947:218::-;19035:4;19052:83;19061:12;:10;:12::i;:::-;19075:7;19084:50;19123:10;19084:11;:25;19096:12;:10;:12::i;:::-;19084:25;;;;;;;;;;;;;;;;;;-1:-1:-1;19084:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;27722:285::-;27857:12;25574;:10;:12::i;:::-;25564:6;;:22;:6;;;:22;;;25556:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27896:12:::1;:10;:12::i;:::-;27895:13;27887:57;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27955:22;27961:7;27970:6;27955:5;:22::i;29432:565::-:0;29487:12;29517;:10;:12::i;:::-;29512:58;;-1:-1:-1;29553:5:0;29546:12;;29512:58;29582:25;29588:10;29600:6;29582:5;:25::i;:::-;29624:5;:15;;;:20;29620:346;;29661:26;29690:24;:22;:24::i;:::-;29874:5;:17;29661:53;;-1:-1:-1;29729:22:0;;29754:138;;29874:17;;;;;;;29754:97;;29835:15;29754:58;29771:6;29779:10;:8;:10::i;:::-;29791:20;29754:16;:58::i;:::-;:80;:97;:80;:97;:::i;:::-;:119;:138;:119;:138;:::i;:::-;29729:163;;29909:45;29927:10;29939:14;29909:17;:45::i;:::-;29620:346;;;-1:-1:-1;29985:4:0;29432:565;;;;:::o;30492:234::-;30657:5;:15;;;;;;30701:17;;;;;;30492:234::o;16706:119::-;16799:18;;16772:7;16799:18;;;:9;:18;;;;;;;16706:119::o;25994:148::-;25574:12;:10;:12::i;:::-;25564:6;;:22;:6;;;:22;;;25556:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26101:1:::1;26085:6:::0;;26064:40:::1;::::0;::::1;26085:6:::0;;::::1;::::0;26064:40:::1;::::0;26101:1;;26064:40:::1;26132:1;26115:19:::0;;;::::1;::::0;;25994:148::o;25352:79::-;25390:7;25417:6;;;25352:79;:::o;28801:383::-;28936:16;25574:12;:10;:12::i;:::-;25564:6;;:22;:6;;;:22;;;25556:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28985:12:::1;:10;:12::i;:::-;28984:13;28970:27;;29012:11;29008:97;;;29040:53;29049:43;;;;;;;;29061:13;29049:43;;;;;;29076:15;29049:43;;;;::::0;29040:8:::1;:53::i;:::-;29122:54;::::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;::::1;;::::0;;;;;;::::1;::::0;;;;;;;::::1;28801:383:::0;;;;:::o;15670:87::-;15742:7;15735:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15709:13;;15735:14;;15742:7;;15735:14;;15742:7;15735:14;;;;;;;;;;;;;;;;;;;;;;;;30005:208;30049:14;30085:21;30095:10;30085:9;:21::i;:::-;30076:30;;30117:12;30132;30137:6;30132:4;:12::i;:::-;30117:27;;30160:7;30155:51;;30193:1;30184:10;;30155:51;30005:208;;:::o;19668:269::-;19761:4;19778:129;19787:12;:10;:12::i;:::-;19801:7;19810:96;19849:15;19810:96;;;;;;;;;;;;;;;;;:11;:25;19822:12;:10;:12::i;:::-;19810:25;;;;;;;;;;;;;;;;;;-1:-1:-1;19810:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;28015:220::-;28135:12;28165:40;28175:10;28187:9;28198:6;28165:9;:40::i;17276:151::-;17392:18;;;;17365:7;17392:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17276:151::o;29192:232::-;29277:4;25574:12;:10;:12::i;:::-;25564:6;;:22;:6;;;:22;;;25556:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29307:15:::1;29317:4;29307:9;:15::i;:::-;29298:6;:24;29294:69;;;-1:-1:-1::0;29346:5:0::1;29339:12;;29294:69;29375:19;29381:4;29387:6;29375:5;:19::i;26297:244::-:0;25574:12;:10;:12::i;:::-;25564:6;;:22;:6;;;:22;;;25556:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26386:22:::1;::::0;::::1;26378:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26488:6;::::0;;26467:38:::1;::::0;::::1;::::0;;::::1;::::0;26488:6;::::1;::::0;26467:38:::1;::::0;::::1;26516:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;26297:244::o;2123:106::-;2211:10;2123:106;:::o;22815:346::-;22917:19;;;22909:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22996:21;;;22988:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23069:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23121:32;;;;;;;;;;;;;;;;;22815:346;;;:::o;20427:539::-;20533:20;;;20525:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20614:23;;;20606:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20690:47;20711:6;20719:9;20730:6;20690:20;:47::i;:::-;20770:71;20792:6;20770:71;;;;;;;;;;;;;;;;;:17;;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;20750:17;;;;;;;;:9;:17;;;;;;:91;;;;20875:20;;;;;;;:32;;20900:6;20875:32;:24;:32;:::i;:::-;20852:20;;;;;;;;:9;:20;;;;;;;;;:55;;;;20923:35;;;;;;;20852:20;;20923:35;;;;;;;;;;;;;20427:539;;;:::o;7030:192::-;7116:7;7152:12;7144:6;;;;7136:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7136:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7188:5:0;;;7030:192::o;6143:181::-;6201:7;6233:5;;;6257:6;;;;6249:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6315:1;6143:181;-1:-1:-1;;;6143:181:0:o;30385:99::-;30454:5;:17;;;;;;:22;;;30385:99::o;21247:378::-;21331:21;;;21323:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21401:49;21430:1;21434:7;21443:6;21401:20;:49::i;:::-;21478:12;;:24;;21495:6;21478:24;:16;:24;:::i;:::-;21463:12;:39;21534:18;;;;;;;:9;:18;;;;;;:30;;21557:6;21534:30;:22;:30;:::i;:::-;21513:18;;;;;;;:9;:18;;;;;;;;:51;;;;21580:37;;;;;;;21513:18;;;;21580:37;;;;;;;;;;21247:378;;:::o;21957:418::-;22041:21;;;22033:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22113:49;22134:7;22151:1;22155:6;22113:20;:49::i;:::-;22196:68;22219:6;22196:68;;;;;;;;;;;;;;;;;:18;;;;;;;:9;:18;;;;;;;:68;;:22;:68;:::i;:::-;22175:18;;;;;;;:9;:18;;;;;:89;22290:12;;:24;;22307:6;22290:24;:16;:24;:::i;:::-;22275:12;:39;22330:37;;;;;;;;22356:1;;22330:37;;;;;;;;;;;;;21957:418;;:::o;32337:130::-;32403:5;32428:20;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32428:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32428:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32428:31:0;;-1:-1:-1;32337:130:0;:::o;31030:676::-;31178:19;31210:9;31230;31273:15;31256:32;;:14;:32;;;31252:208;;;-1:-1:-1;31305:36:0;31309:32;;;31305:36;31252:208;;;31380:15;31363:32;;:14;:32;;;31359:101;;;31434:14;31416:15;:32;31412:36;;;;31359:101;31587:2;31583:1;:6;:16;;;;;31597:2;31593:1;:6;31583:16;31575:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31666:32;31696:1;31692:2;:5;31666:21;31685:1;31681:2;:5;31666:10;:14;;:21;;;;:::i;:32::-;31652:46;31030:676;-1:-1:-1;;;;;;31030:676:0:o;7473:471::-;7531:7;7776:6;7772:47;;-1:-1:-1;7806:1:0;7799:8;;7772:47;7843:5;;;7847:1;7843;:5;:1;7867:5;;;;;:10;7859:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8412:132;8470:7;8497:39;8501:1;8504;8497:39;;;;;;;;;;;;;;;;;:3;:39::i;32475:145::-;32565:20;:29;;;32595:8;32605:6;32565:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32565:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32565:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;32475:145:0:o;30734:224::-;30819:16;;;;:21;;30797:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30938:12;;:5;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30734:224::o;24186:92::-;;;;:::o;6599:136::-;6657:7;6684:43;6688:1;6691;6684:43;;;;;;;;;;;;;;;;;:3;:43::i;9032:345::-;9118:7;9220:12;9213:5;9205:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;9205:28:0;;9244:9;9260:1;9256;:5;;;;;;;9032:345;-1:-1:-1;;;;;9032:345:0:o
Swarm Source
ipfs://0d09e1c29d314c5abe81987999a2c15d4ceb3dd3b4f69d8af6c2d483ad13ecbe
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.