Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x60806040 | 23747529 | 106 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CloneableReceiptToken
Compiler Version
v0.8.30+commit.73712a01
Optimization Enabled:
Yes with 10000 runs
Other Settings:
prague EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.15;
// Interfaces
import {IERC20} from "src/interfaces/IERC20.sol";
import {IERC20BurnableMintable} from "src/interfaces/IERC20BurnableMintable.sol";
import {IDepositReceiptToken} from "src/interfaces/IDepositReceiptToken.sol";
import {IERC165} from "@openzeppelin-5.3.0/interfaces/IERC165.sol";
// Libraries
import {CloneERC20} from "src/external/clones/CloneERC20.sol";
/// @title CloneableReceiptToken
/// @notice ERC20 implementation that is deployed as a clone
/// with immutable arguments for each supported input token.
contract CloneableReceiptToken is CloneERC20, IERC20BurnableMintable, IDepositReceiptToken {
// ========== IMMUTABLE ARGS ========== //
// Storage layout:
// 0x00 - name, 32 bytes
// 0x20 - symbol, 32 bytes
// 0x40 - decimals, 1 byte
// 0x41 - owner, 20 bytes
// 0x55 - asset, 20 bytes
// 0x69 - depositPeriod, 1 byte
// 0x6A - operator, 20 bytes
/// @notice The owner of the clone
/// @return _owner The owner address stored in immutable args
function owner() public pure returns (address _owner) {
_owner = _getArgAddress(0x41);
}
/// @notice The underlying asset
/// @return _asset The asset address stored in immutable args
function asset() public pure returns (IERC20 _asset) {
_asset = IERC20(_getArgAddress(0x55));
}
/// @notice The deposit period (in months)
/// @return _depositPeriod The deposit period stored in immutable args
function depositPeriod() public pure returns (uint8 _depositPeriod) {
_depositPeriod = _getArgUint8(0x69);
}
/// @notice The operator that issued the receipt token
/// @return _operator The operator address stored in immutable args
function operator() public pure returns (address _operator) {
_operator = _getArgAddress(0x6A);
}
// ========== OWNER-ONLY FUNCTIONS ========== //
function _onlyOwner() internal view {
if (msg.sender != owner()) revert OnlyOwner();
}
/// @notice Only the owner can call this function
modifier onlyOwner() {
_onlyOwner();
_;
}
/// @notice Mint tokens to the specified address
/// @dev This is owner-only, as the underlying token is custodied by the owner.
/// Minting should be performed through the owner contract.
///
/// @param to_ The address to mint tokens to
/// @param amount_ The amount of tokens to mint
function mintFor(address to_, uint256 amount_) external onlyOwner {
_mint(to_, amount_);
}
/// @notice Burn tokens from the specified address
/// @dev This is gated to the owner, as burning is controlled.
/// Burning should be performed through the owner contract.
/// The owner is expected to handle spending approval before calling this function.
/// This function does NOT check or update allowances.
///
/// @param from_ The address to burn tokens from
/// @param amount_ The amount of tokens to burn
function burnFrom(address from_, uint256 amount_) external onlyOwner {
_burn(from_, amount_);
}
// ========== ERC165 ========== //
function supportsInterface(bytes4 interfaceId_) public pure returns (bool) {
// super does not implement ERC165, so no need to call it
return
interfaceId_ == type(IERC165).interfaceId ||
interfaceId_ == type(IERC20).interfaceId ||
interfaceId_ == type(IERC20BurnableMintable).interfaceId ||
interfaceId_ == type(IDepositReceiptToken).interfaceId;
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
// Imported from forge-std
/// @dev Interface of the ERC20 standard as defined in the EIP.
/// @dev This includes the optional name, symbol, and decimals metadata.
interface IERC20 {
/// @dev Emitted when `value` tokens are moved from one account (`from`) to another (`to`).
event Transfer(address indexed from, address indexed to, uint256 value);
/// @dev Emitted when the allowance of a `spender` for an `owner` is set, where `value`
/// is the new allowance.
event Approval(address indexed owner, address indexed spender, uint256 value);
/// @notice Returns the amount of tokens in existence.
function totalSupply() external view returns (uint256);
/// @notice Returns the amount of tokens owned by `account`.
function balanceOf(address account) external view returns (uint256);
/// @notice Moves `amount` tokens from the caller's account to `to`.
function transfer(address to, uint256 amount) external returns (bool);
/// @notice Returns the remaining number of tokens that `spender` is allowed
/// to spend on behalf of `owner`
function allowance(address owner, address spender) external view returns (uint256);
/// @notice Sets `amount` as the allowance of `spender` over the caller's tokens.
/// @dev Be aware of front-running risks: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
function approve(address spender, uint256 amount) external returns (bool);
/// @notice Moves `amount` tokens from `from` to `to` using the allowance mechanism.
/// `amount` is then deducted from the caller's allowance.
function transferFrom(address from, address to, uint256 amount) external returns (bool);
/// @notice Returns the name of the token.
function name() external view returns (string memory);
/// @notice Returns the symbol of the token.
function symbol() external view returns (string memory);
/// @notice Returns the decimals places of the token.
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.15;
import {IERC20} from "src/interfaces/IERC20.sol";
interface IERC20BurnableMintable is IERC20 {
/// @notice Mints tokens to the specified address
///
/// @param to_ The address to mint tokens to
/// @param amount_ The amount of tokens to mint
function mintFor(address to_, uint256 amount_) external;
/// @notice Burns tokens from the specified address
///
/// @param from_ The address to burn tokens from
/// @param amount_ The amount of tokens to burn
function burnFrom(address from_, uint256 amount_) external;
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.15;
import {IERC20} from "src/interfaces/IERC20.sol";
/// @title IDepositReceiptToken
/// @notice Interface for a deposit receipt token
/// @dev This interface adds additional metadata to the IERC20 interface that is necessary for deposit receipt tokens.
interface IDepositReceiptToken is IERC20 {
// ========== ERRORS ========== //
error OnlyOwner();
// ========== VIEW FUNCTIONS ========== //
function owner() external view returns (address _owner);
function asset() external view returns (IERC20 _asset);
function depositPeriod() external view returns (uint8 _depositPeriod);
function operator() external view returns (address _operator);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)
pragma solidity ^0.8.20;
import {IERC165} from "../utils/introspection/IERC165.sol";// SPDX-License-Identifier: BSD
pragma solidity >=0.8.0;
import {Clone} from "@clones-with-immutable-args-1.1.2/Clone.sol";
import {IERC20} from "src/interfaces/IERC20.sol";
/// @notice Modern and gas efficient ERC20 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract CloneERC20 is Clone, IERC20 {
/*///////////////////////////////////////////////////////////////
ERC20 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
/*///////////////////////////////////////////////////////////////
METADATA
//////////////////////////////////////////////////////////////*/
function name() external pure returns (string memory) {
return string(abi.encodePacked(_getArgUint256(0)));
}
function symbol() external pure returns (string memory) {
return string(abi.encodePacked(_getArgUint256(0x20)));
}
function decimals() external pure returns (uint8) {
return _getArgUint8(0x40);
}
/*///////////////////////////////////////////////////////////////
ERC20 LOGIC
//////////////////////////////////////////////////////////////*/
function approve(address spender, uint256 amount) public virtual returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function increaseAllowance(address spender, uint256 amount) public virtual returns (bool) {
allowance[msg.sender][spender] += amount;
emit Approval(msg.sender, spender, allowance[msg.sender][spender]);
return true;
}
function decreaseAllowance(address spender, uint256 amount) public virtual returns (bool) {
allowance[msg.sender][spender] -= amount;
emit Approval(msg.sender, spender, allowance[msg.sender][spender]);
return true;
}
function transfer(address to, uint256 amount) public virtual returns (bool) {
balanceOf[msg.sender] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(msg.sender, to, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) {
uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.
if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;
balanceOf[from] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(from, to, amount);
return true;
}
/*///////////////////////////////////////////////////////////////
INTERNAL LOGIC
//////////////////////////////////////////////////////////////*/
function _mint(address to, uint256 amount) internal virtual {
totalSupply += amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(address(0), to, amount);
}
function _burn(address from, uint256 amount) internal virtual {
balanceOf[from] -= amount;
// Cannot underflow because a user's balance
// will never be larger than the total supply.
unchecked {
totalSupply -= amount;
}
emit Transfer(from, address(0), amount);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[ERC].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: BSD
pragma solidity ^0.8.4;
/// @title Clone
/// @author zefram.eth
/// @notice Provides helper functions for reading immutable args from calldata
contract Clone {
/// @notice Reads an immutable arg with type address
/// @param argOffset The offset of the arg in the packed data
/// @return arg The arg value
function _getArgAddress(
uint256 argOffset
) internal pure returns (address arg) {
uint256 offset = _getImmutableArgsOffset();
// solhint-disable-next-line no-inline-assembly
assembly {
arg := shr(0x60, calldataload(add(offset, argOffset)))
}
}
/// @notice Reads an immutable arg with type uint256
/// @param argOffset The offset of the arg in the packed data
/// @return arg The arg value
function _getArgUint256(
uint256 argOffset
) internal pure returns (uint256 arg) {
uint256 offset = _getImmutableArgsOffset();
// solhint-disable-next-line no-inline-assembly
assembly {
arg := calldataload(add(offset, argOffset))
}
}
/// @notice Reads a uint256 array stored in the immutable args.
/// @param argOffset The offset of the arg in the packed data
/// @param arrLen Number of elements in the array
/// @return arr The array
function _getArgUint256Array(
uint256 argOffset,
uint64 arrLen
) internal pure returns (uint256[] memory arr) {
uint256 offset = _getImmutableArgsOffset();
uint256 el;
arr = new uint256[](arrLen);
for (uint64 i = 0; i < arrLen; i++) {
// solhint-disable-next-line no-inline-assembly
assembly {
el := calldataload(add(add(offset, argOffset), mul(i, 32)))
}
arr[i] = el;
}
return arr;
}
/// @notice Reads an immutable arg with type uint64
/// @param argOffset The offset of the arg in the packed data
/// @return arg The arg value
function _getArgUint64(
uint256 argOffset
) internal pure returns (uint64 arg) {
uint256 offset = _getImmutableArgsOffset();
// solhint-disable-next-line no-inline-assembly
assembly {
arg := shr(0xc0, calldataload(add(offset, argOffset)))
}
}
/// @notice Reads an immutable arg with type uint8
/// @param argOffset The offset of the arg in the packed data
/// @return arg The arg value
function _getArgUint8(uint256 argOffset) internal pure returns (uint8 arg) {
uint256 offset = _getImmutableArgsOffset();
// solhint-disable-next-line no-inline-assembly
assembly {
arg := shr(0xf8, calldataload(add(offset, argOffset)))
}
}
/// @return offset The offset of the packed immutable args in calldata
function _getImmutableArgsOffset() internal pure returns (uint256 offset) {
// solhint-disable-next-line no-inline-assembly
assembly {
offset := sub(
calldatasize(),
add(shr(240, calldataload(sub(calldatasize(), 2))), 2)
)
}
}
}{
"remappings": [
"interfaces/=src/interfaces/",
"modules/=src/modules/",
"policies/=src/policies/",
"libraries/=src/libraries/",
"test/=src/test/",
"test/mocks/=src/test/mocks/",
"test/lib/=src/test/lib/",
"@base64-1.1.0/=dependencies/base64-1.1.0/",
"@surl-1.0.0/=dependencies/surl-1.0.0/src/",
"@chainlink-ccip-1.6.0/=dependencies/chainlink-ccip-1.6.0/contracts/src/v0.8/",
"@chainlink-local-0.2.5/=dependencies/chainlink-local-0.2.5/src/",
"@chainlink/contracts-ccip/contracts/=dependencies/chainlink-ccip-1.6.0/contracts/src/v0.8/ccip/",
"@chainlink/contracts/=dependencies/chainlink-ccip-1.6.0/contracts/",
"@forge-std-1.9.6/=dependencies/forge-std-1.9.6/src/",
"forge-std/=dependencies/forge-std-1.9.6/src/",
"@safe-utils-0.0.13/=dependencies/safe-utils-0.0.13/src/",
"@base58-solidity-1.0.3/=dependencies/base58-solidity-1.0.3/contracts/",
"@clones-with-immutable-args-1.1.2/=dependencies/clones-with-immutable-args-1.1.2/src/",
"clones/=dependencies/clones-with-immutable-args-1.1.2/src/",
"@layer-zero-endpoint-v1-0.0.6/=dependencies/layer-zero-endpoint-v1-0.0.6/contracts/",
"layer-zero/=dependencies/layer-zero-endpoint-v1-0.0.6/contracts/",
"@solmate-6.2.0/=dependencies/solmate-6.2.0/src/",
"solmate/=dependencies/solmate-6.2.0/src/",
"@openzeppelin-4.8.0/=dependencies/openzeppelin-4.8.0/contracts/",
"@openzeppelin/contracts/=dependencies/openzeppelin-4.8.0/contracts/",
"openzeppelin/=dependencies/openzeppelin-4.8.0/contracts/",
"@openzeppelin-5.3.0/=dependencies/openzeppelin-new-5.3.0/contracts/",
"proposal-sim/=dependencies/forge-proposal-simulator-1.0.1/",
"dependencies/forge-proposal-simulator-1.0.1/:@addresses/=dependencies/forge-proposal-simulator-1.0.1/addresses/",
"dependencies/forge-proposal-simulator-1.0.1/:@utils/=dependencies/forge-proposal-simulator-1.0.1/utils/",
"dependencies/forge-proposal-simulator-1.0.1/:@proposals/=dependencies/forge-proposal-simulator-1.0.1/proposals/",
"Governors/=dependencies/forge-proposal-simulator-1.0.1/Governors/",
"safe-smart-account/=dependencies/safe-smart-account-1.4.1/contracts/",
"solidity-http/=dependencies/solidity-http-0.0.6/src/",
"@addresses/=dependencies/forge-proposal-simulator-1.0.1/addresses/",
"@chainlink/local/src/=dependencies/chainlink-local-0.2.5/src/",
"@examples/=dependencies/forge-proposal-simulator-1.0.1/examples/",
"@proposals/=dependencies/forge-proposal-simulator-1.0.1/proposals/",
"@script/=dependencies/forge-proposal-simulator-1.0.1/script/",
"@test/=dependencies/forge-proposal-simulator-1.0.1/test/",
"@utils/=dependencies/forge-proposal-simulator-1.0.1/utils/",
"base58-solidity-1.0.3/=dependencies/base58-solidity-1.0.3/contracts/",
"base64-1.1.0/=dependencies/base64-1.1.0/",
"chainlink-ccip-1.6.0/=dependencies/chainlink-ccip-1.6.0/",
"chainlink-local-0.2.5/=dependencies/chainlink-local-0.2.5/src/",
"clones-with-immutable-args-1.1.2/=dependencies/clones-with-immutable-args-1.1.2/src/",
"comp-governance/=dependencies/forge-proposal-simulator-1.0.1/lib/compound-governance/contracts/",
"ds-test/=dependencies/clones-with-immutable-args-1.1.2/lib/ds-test/src/",
"forge-proposal-simulator-1.0.1/=dependencies/forge-proposal-simulator-1.0.1/",
"forge-std-1.9.6/=dependencies/forge-std-1.9.6/src/",
"layer-zero-endpoint-v1-0.0.6/=dependencies/layer-zero-endpoint-v1-0.0.6/contracts/",
"openzeppelin-4.8.0/=dependencies/openzeppelin-4.8.0/",
"openzeppelin-new-5.3.0/=dependencies/openzeppelin-new-5.3.0/",
"safe-smart-account-1.4.1/=dependencies/safe-smart-account-1.4.1/",
"safe-utils-0.0.13/=dependencies/safe-utils-0.0.13/src/",
"solidity-http-0.0.6/=dependencies/solidity-http-0.0.6/src/",
"solidity-stringutils/=dependencies/solidity-http-0.0.6/lib/solidity-stringutils/",
"solmate-6.2.0/=dependencies/solmate-6.2.0/src/",
"surl-1.0.0/=dependencies/surl-1.0.0/src/"
],
"optimizer": {
"enabled": true,
"runs": 10000
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "prague",
"viaIR": false
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"OnlyOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"contract IERC20","name":"_asset","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositPeriod","outputs":[{"internalType":"uint8","name":"_depositPeriod","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mintFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"_operator","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId_","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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"}]Contract Creation Code
6080604052348015600e575f5ffd5b50610bd98061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061012f575f3560e01c806370a08231116100ad57806395d89b411161007d578063a9059cbb11610063578063a9059cbb1461026d578063da1919b314610280578063dd62ed3e14610293575f5ffd5b806395d89b4114610252578063a457c2d71461025a575f5ffd5b806370a082311461020e57806379cc67901461022d57806387df2c16146102425780638da5cb5b1461024a575f5ffd5b806323b872dd1161010257806338d52e0f116100e857806338d52e0f146101c657806339509351146101f3578063570ca73514610206575f5ffd5b806323b872dd14610199578063313ce567146101ac575f5ffd5b806301ffc9a71461013357806306fdde031461015b578063095ea7b31461017057806318160ddd14610183575b5f5ffd5b6101466101413660046109e3565b6102bd565b60405190151581526020015b60405180910390f35b6101636103ed565b6040516101529190610a29565b61014661017e366004610aa4565b61041e565b61018b5f5481565b604051908152602001610152565b6101466101a7366004610acc565b610496565b6101b46105d6565b60405160ff9091168152602001610152565b6101ce6105e6565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610152565b610146610201366004610aa4565b6105f1565b6101ce61069a565b61018b61021c366004610b06565b60016020525f908152604090205481565b61024061023b366004610aa4565b6106a5565b005b6101b46106bb565b6101ce6106c6565b6101636106d1565b610146610268366004610aa4565b6106dd565b61014661027b366004610aa4565b61071e565b61024061028e366004610aa4565b6107a1565b61018b6102a1366004610b1f565b600260209081525f928352604080842090915290825290205481565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000148061034f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f942e8b2200000000000000000000000000000000000000000000000000000000145b8061039b57507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3d57e2300000000000000000000000000000000000000000000000000000000145b806103e757507fffffffff0000000000000000000000000000000000000000000000000000000082167f65a36e7700000000000000000000000000000000000000000000000000000000145b92915050565b60606103f85f6107b3565b60405160200161040a91815260200190565b604051602081830303815290604052905090565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104859086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610528576104f78382610b7d565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526002602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f908152600160205260408120805485929061055c908490610b7d565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260016020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906105c39087815260200190565b60405180910390a3506001949350505050565b5f6105e160406107f2565b905090565b5f6105e16055610834565b335f90815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812080548391908390610632908490610b90565b9091555050335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610485565b5f6105e1606a610834565b6106ad610876565b6106b782826108e4565b5050565b5f6105e160696107f2565b5f6105e16041610834565b60606103f860206107b3565b335f90815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812080548391908390610632908490610b7d565b335f9081526001602052604081208054839190839061073e908490610b7d565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260016020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104859086815260200190565b6107a9610876565b6106b78282610975565b5f5f6107e77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe368181013560f01c90030190565b929092013592915050565b5f5f6108267ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe368181013560f01c90030190565b929092013560f81c92915050565b5f5f6108687ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe368181013560f01c90030190565b929092013560601c92915050565b61087e6106c6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e2576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081208054839290610918908490610b7d565b90915550505f8054829003815560405182815273ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b805f5f8282546109859190610b90565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610969565b5f602082840312156109f3575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a22575f5ffd5b9392505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a9f575f5ffd5b919050565b5f5f60408385031215610ab5575f5ffd5b610abe83610a7c565b946020939093013593505050565b5f5f5f60608486031215610ade575f5ffd5b610ae784610a7c565b9250610af560208501610a7c565b929592945050506040919091013590565b5f60208284031215610b16575f5ffd5b610a2282610a7c565b5f5f60408385031215610b30575f5ffd5b610b3983610a7c565b9150610b4760208401610a7c565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156103e7576103e7610b50565b808201808211156103e7576103e7610b5056fea2646970667358221220533193ce38beab52e4fb10a31007b996172c3b3ce2b7280eee10fa1c09f7abfa64736f6c634300081e0033
Deployed Bytecode
0x608060405234801561000f575f5ffd5b506004361061012f575f3560e01c806370a08231116100ad57806395d89b411161007d578063a9059cbb11610063578063a9059cbb1461026d578063da1919b314610280578063dd62ed3e14610293575f5ffd5b806395d89b4114610252578063a457c2d71461025a575f5ffd5b806370a082311461020e57806379cc67901461022d57806387df2c16146102425780638da5cb5b1461024a575f5ffd5b806323b872dd1161010257806338d52e0f116100e857806338d52e0f146101c657806339509351146101f3578063570ca73514610206575f5ffd5b806323b872dd14610199578063313ce567146101ac575f5ffd5b806301ffc9a71461013357806306fdde031461015b578063095ea7b31461017057806318160ddd14610183575b5f5ffd5b6101466101413660046109e3565b6102bd565b60405190151581526020015b60405180910390f35b6101636103ed565b6040516101529190610a29565b61014661017e366004610aa4565b61041e565b61018b5f5481565b604051908152602001610152565b6101466101a7366004610acc565b610496565b6101b46105d6565b60405160ff9091168152602001610152565b6101ce6105e6565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610152565b610146610201366004610aa4565b6105f1565b6101ce61069a565b61018b61021c366004610b06565b60016020525f908152604090205481565b61024061023b366004610aa4565b6106a5565b005b6101b46106bb565b6101ce6106c6565b6101636106d1565b610146610268366004610aa4565b6106dd565b61014661027b366004610aa4565b61071e565b61024061028e366004610aa4565b6107a1565b61018b6102a1366004610b1f565b600260209081525f928352604080842090915290825290205481565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000148061034f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f942e8b2200000000000000000000000000000000000000000000000000000000145b8061039b57507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3d57e2300000000000000000000000000000000000000000000000000000000145b806103e757507fffffffff0000000000000000000000000000000000000000000000000000000082167f65a36e7700000000000000000000000000000000000000000000000000000000145b92915050565b60606103f85f6107b3565b60405160200161040a91815260200190565b604051602081830303815290604052905090565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104859086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610528576104f78382610b7d565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526002602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f908152600160205260408120805485929061055c908490610b7d565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260016020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906105c39087815260200190565b60405180910390a3506001949350505050565b5f6105e160406107f2565b905090565b5f6105e16055610834565b335f90815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812080548391908390610632908490610b90565b9091555050335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610485565b5f6105e1606a610834565b6106ad610876565b6106b782826108e4565b5050565b5f6105e160696107f2565b5f6105e16041610834565b60606103f860206107b3565b335f90815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812080548391908390610632908490610b7d565b335f9081526001602052604081208054839190839061073e908490610b7d565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260016020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104859086815260200190565b6107a9610876565b6106b78282610975565b5f5f6107e77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe368181013560f01c90030190565b929092013592915050565b5f5f6108267ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe368181013560f01c90030190565b929092013560f81c92915050565b5f5f6108687ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe368181013560f01c90030190565b929092013560601c92915050565b61087e6106c6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e2576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081208054839290610918908490610b7d565b90915550505f8054829003815560405182815273ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b805f5f8282546109859190610b90565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610969565b5f602082840312156109f3575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a22575f5ffd5b9392505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a9f575f5ffd5b919050565b5f5f60408385031215610ab5575f5ffd5b610abe83610a7c565b946020939093013593505050565b5f5f5f60608486031215610ade575f5ffd5b610ae784610a7c565b9250610af560208501610a7c565b929592945050506040919091013590565b5f60208284031215610b16575f5ffd5b610a2282610a7c565b5f5f60408385031215610b30575f5ffd5b610b3983610a7c565b9150610b4760208401610a7c565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156103e7576103e7610b50565b808201808211156103e7576103e7610b5056fea2646970667358221220533193ce38beab52e4fb10a31007b996172c3b3ce2b7280eee10fa1c09f7abfa64736f6c634300081e0033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.