Overview
S Balance
0 S
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
PaintSwapLibrary
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 9999999 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.28; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IWrappedToken} from "./interfaces/IWrappedToken.sol"; import {IERC165, IERC2981} from "./interfaces/IERC2981.sol"; import {PaymentFailureMode} from "./globals.sol"; library PaintSwapLibrary { error InvalidNFT(); error InvalidERCType(); error InvalidAmountForERC721(); error InvalidPrice(); error SellingNotEnabled(); error InsufficientBalance(); error NotOwner(); error NotApproved(address operator); error InsufficientValue(); error CoinTransferFailed(address to); // Pre-condition is that the NFTS are either ERC721 or ERC1155 function safeNFTTransferFrom(address nft, uint256 tokenId, uint256 amount, address from, address to) external { if (isERC1155(nft)) { IERC1155(nft).safeTransferFrom(from, to, tokenId, amount, ""); } else { IERC721(nft).safeTransferFrom(from, to, tokenId); } } function checkBalance(address nft, uint256 tokenId, uint256 amount, address owner) external view { // Check that owner has these nfts and approved us if (isERC1155(nft)) { require(IERC1155(nft).balanceOf(owner, tokenId) >= amount, InsufficientBalance()); } else { require(IERC721(nft).ownerOf(tokenId) == owner, NotOwner()); } } function checkBalanceAndApproval( address nft, uint256 tokenId, uint256 amount, address owner, address operator ) external view { // Check that owner has these nfts and approved us if (isERC1155(nft)) { require(IERC1155(nft).balanceOf(owner, tokenId) >= amount, InsufficientBalance()); require(IERC1155(nft).isApprovedForAll(owner, operator), NotApproved(operator)); } else { require(IERC721(nft).ownerOf(tokenId) == owner, NotOwner()); require( IERC721(nft).isApprovedForAll(owner, operator) || IERC721(nft).getApproved(tokenId) == operator, NotApproved(operator) ); } } function safeTransferFromUs( address token, address receiver, uint256 amount, address wNative, PaymentFailureMode _paymentFailureMode ) external returns (bool success) { if (tokenIsNativeFtm(token)) { // Do an FTM transfer uint256 balance = address(this).balance; uint256 amountToSend = balance >= amount ? amount : balance; (success, ) = receiver.call{value: amountToSend}(""); if (_paymentFailureMode == PaymentFailureMode.ALLOW_FAILURE && !success) { // Send them wrapped native instead IWrappedToken(wNative).deposit{value: amountToSend}(); IERC20(wNative).transfer(receiver, amountToSend); success = true; } } else { uint256 balance = IERC20(token).balanceOf(address(this)); uint256 amountToSend = balance >= amount ? amount : balance; IERC20(token).transfer(receiver, amountToSend); success = true; } } function checkAddListing( address nft, uint96 price, uint256 amount, bool isSellingEnabled, uint96 maxNative ) external view { require(nft != address(0), InvalidNFT()); uint256 ercType = getNFTERCType(nft); require(ercType == 1155 || ercType == 721, InvalidERCType()); require((ercType == 1155 && amount != 0) || amount == 1, InvalidAmountForERC721()); require(price != 0 && price < maxNative, InvalidPrice()); require(isSellingEnabled, SellingNotEnabled()); } function isFinished(uint256 endTime) public view returns (bool) { return endTime <= block.timestamp; } function nextMinimumBid(uint96 price, uint96 highestBid, uint96 percentIncrease) public pure returns (uint96) { if (highestBid == 0) { return price; } else { return _nextMinimumBid(highestBid, percentIncrease); } } function _nextMinimumBid(uint96 highestBid, uint96 percentIncrease) private pure returns (uint96) { uint96 newMin = (highestBid + (highestBid * percentIncrease) / 10000); if (newMin == highestBid) { return highestBid + 1; // Increase by 1 } return newMin; } // The zero address is used to show that the token is native fantom function tokenIsNativeFtm(address token) public pure returns (bool) { return token == address(0); } // An NFT contract could be malicious and prevent a sale finishing. Try send NFT to our backup address, // if possible, otherwise it just gets lost forever. function tryRoyaltyInfo( address nft, uint256 tokenId, uint256 salePrice ) external view returns (address receiver, uint256 royaltyAmount) { try IERC2981(nft).royaltyInfo(tokenId, salePrice) returns (address _receiver, uint256 _royaltyAmount) { return (_receiver, _royaltyAmount); } catch {} return (address(0), 0); } function isValidNFTContract(address nft) public view returns (bool) { return isERC1155(nft) || isERC721(nft); } function getNFTERCType(address nft) public view returns (uint256) { if (isERC1155(nft)) { return 1155; } else if (isERC721(nft)) { return 721; } else { return 0; } } function isERC721(address nft) public view returns (bool) { try IERC165(nft).supportsInterface(type(IERC721).interfaceId) returns (bool supportsERC721) { return supportsERC721; } catch {} return false; } function isERC1155(address nft) public view returns (bool) { try IERC165(nft).supportsInterface(type(IERC1155).interfaceId) returns (bool supportsERC1155) { return supportsERC1155; } catch {} return false; } function wrapNative(address wNative) external { IWrappedToken(wNative).deposit{value: msg.value}(); IERC20(wNative).transfer(msg.sender, msg.value); } function addListingTransferFee(uint96 listingFee, address devFeeAddress) external { if (listingFee != 0) { // If paying with ftm require(msg.value >= listingFee, InsufficientValue()); (bool sent, ) = devFeeAddress.call{value: listingFee}(""); require(sent, CoinTransferFailed(devFeeAddress)); // Refund any excess FTM if (msg.value > listingFee) { (bool sent1, ) = msg.sender.call{value: msg.value - listingFee}(""); require(sent1, CoinTransferFailed(msg.sender)); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC-1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[ERC]. */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the value of tokens of token type `id` owned by `account`. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the zero address. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`. * * WARNING: This function can potentially allow a reentrancy attack when transferring tokens * to an untrusted contract, when invoking {onERC1155Received} on the receiver. * Ensure to follow the checks-effects-interactions pattern and consider employing * reentrancy guards when interacting with untrusted contracts. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `value` amount. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * WARNING: This function can potentially allow a reentrancy attack when transferring tokens * to an untrusted contract, when invoking {onERC1155BatchReceived} on the receiver. * Ensure to follow the checks-effects-interactions pattern and consider employing * reentrancy guards when interacting with untrusted contracts. * * Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments. * * Requirements: * * - `ids` and `values` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC-721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC-721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// 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: MIT pragma solidity ^0.8.28; struct NFT { address nft; uint256 tokenId; } enum PaymentFailureMode { ALLOW_FAILURE, NOT_ALLOWED }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.28; import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; interface IERC2981 is IERC165 { /// @notice Called with the sale price to determine how much royalty // is owed and to whom. /// @param tokenId - the NFT asset queried for royalty information /// @param salePrice - the sale price of the NFT asset specified by _tokenId /// @return receiver - address of who should be sent the royalty payment /// @return royaltyAmount - the royalty payment amount for _salePrice function royaltyInfo( uint256 tokenId, uint256 salePrice ) external view returns (address receiver, uint256 royaltyAmount); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.28; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IWrappedToken is IERC20 { function deposit() external payable; function withdraw(uint256 amount) external; }
{ "optimizer": { "enabled": true, "runs": 9999999, "details": { "yul": true } }, "evmVersion": "cancun", "viaIR": true, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"CoinTransferFailed","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InsufficientValue","type":"error"},{"inputs":[],"name":"InvalidAmountForERC721","type":"error"},{"inputs":[],"name":"InvalidERCType","type":"error"},{"inputs":[],"name":"InvalidNFT","type":"error"},{"inputs":[],"name":"InvalidPrice","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"NotApproved","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"SellingNotEnabled","type":"error"},{"inputs":[{"internalType":"address","name":"nft","type":"address"},{"internalType":"uint96","name":"price","type":"uint96"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"isSellingEnabled","type":"bool"},{"internalType":"uint96","name":"maxNative","type":"uint96"}],"name":"checkAddListing","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nft","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"checkBalance","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nft","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"checkBalanceAndApproval","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nft","type":"address"}],"name":"getNFTERCType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nft","type":"address"}],"name":"isERC1155","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nft","type":"address"}],"name":"isERC721","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"isFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nft","type":"address"}],"name":"isValidNFTContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint96","name":"price","type":"uint96"},{"internalType":"uint96","name":"highestBid","type":"uint96"},{"internalType":"uint96","name":"percentIncrease","type":"uint96"}],"name":"nextMinimumBid","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"tokenIsNativeFtm","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"nft","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"tryRoyaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60808060405234601b5761179290816100208239308160070152f35b5f80fdfe6080604052307f0000000000000000000000000000000000000000000000000000000000000000146004361015610034575f80fd5b5f905f3560e01c8063108754de14610e2d5780632479d86314610d13578063282e460a14610cd657806334659f6814610ab457806348d4973f146109515780635aeb86691461077f57806366ad086d146107075780639eb1198e146106c2578063a21064d01461066e578063cc7d3e8114610338578063daa09e54146102f1578063df01a63414610284578063e8ba65091461024a578063f8156bb4146101e95763fd7ed6a0146100e3575f80fd5b6101e65760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e6576101196112d2565b6bffffffffffffffffffffffff61012e6111fd565b9116908161013a578280f35b8134106101be5780838080808661015b965af16101556114d2565b5061165e565b80341161016757808280f35b3403348111610191578180808061018b94335af16101836114d2565b50339061165e565b5f808280f35b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004837f11011294000000000000000000000000000000000000000000000000000000008152fd5b80fd5b8260207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e657602061021e6111b7565b610227816113de565b90811561023a575b506040519015158152f35b610244915061152f565b8261022f565b8260207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e65760206040514260043511158152f35b8260607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e6576102c76102ba6111b7565b60443590602435906115ad565b6040805173ffffffffffffffffffffffffffffffffffffffff939093168352602083019190915290f35b8260207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e657602061032e6103296111b7565b61152f565b6040519015158152f35b506101e65760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e65761036f6111b7565b6103776111fd565b604435906103836111da565b9160843593600285101561066a5773ffffffffffffffffffffffffffffffffffffffff168061052b5750478181106105235750915b8480808086865af16103c86114d2565b509315848161051a575b506103e9575b505050602091506040519015158152f35b73ffffffffffffffffffffffffffffffffffffffff919293501690813b1561050b576040517fd0e30db0000000000000000000000000000000000000000000000000000000008152848160048187875af1801561050f576104f6575b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260248101929092529091906020908390604490829085905af19081156104ea57506104bd575b50602060015f80806103d8565b6104de9060203d6020116104e3575b6104d681836112ed565b81019061137c565b6104b0565b503d6104cc565b604051903d90823e3d90fd5b6105018580926112ed565b61050b575f610445565b8380fd5b6040513d87823e3d90fd5b9050155f6103d2565b9050916103b8565b9192509392506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481855afa90811561065f578491610621575b506105e19460209392918181106106195750915b846040518097819582947fa9059cbb000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156104ea57506105fc575b506020600161032e565b6106149060203d6020116104e3576104d681836112ed565b6105f2565b905091610588565b929190506020833d602011610657575b8161063e602093836112ed565b810103126106535791519091906105e1610574565b5f80fd5b3d9150610631565b6040513d86823e3d90fd5b8580fd5b8260207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e657602073ffffffffffffffffffffffffffffffffffffffff6106b86111b7565b1615604051908152f35b8260207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e65760206106ff6106fa6111b7565b6114a5565b604051908152f35b8260607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e65761073a6112d2565b6107426112b7565b90604435926bffffffffffffffffffffffff841684036101e6576020610769858585611481565b6bffffffffffffffffffffffff60405191168152f35b8260a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e6576107b26111b7565b6107ba6112b7565b90604435916064359283159384150361094d57608435926bffffffffffffffffffffffff841680940361066a5773ffffffffffffffffffffffffffffffffffffffff8116156109255761080c906114a5565b90610483821480928115610919575b50156108f157816108e7575b81156108dc575b50156108b4576bffffffffffffffffffffffff169081151591826108aa575b5050156108835761085b5780f35b807f499b135a0000000000000000000000000000000000000000000000000000000060049252fd5b6004827ebfc921000000000000000000000000000000000000000000000000000000008152fd5b109050838061084d565b6004847fdc4c32f0000000000000000000000000000000000000000000000000000000008152fd5b60019150148561082e565b8015159150610827565b6004867f56af5116000000000000000000000000000000000000000000000000000000008152fd5b6102d19150148761081b565b6004867f0f3e2a3e000000000000000000000000000000000000000000000000000000008152fd5b8480fd5b506101e6578061096036611220565b9361096d819392936113de565b15610a285773ffffffffffffffffffffffffffffffffffffffff1691823b1561066a578573ffffffffffffffffffffffffffffffffffffffff9360c493829686604051998a9889977ff242432a0000000000000000000000000000000000000000000000000000000089521660048801521660248601526044850152606484015260a060848401528160a48401525af18015610a1d57610a0c57505080f35b81610a16916112ed565b6101e65780f35b6040513d84823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff915092919216803b1561094d5784928360649273ffffffffffffffffffffffffffffffffffffffff948560405198899788967f42842e0e00000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015610a1d57610a0c57505080f35b8260807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e657610ae76111b7565b60243590610af36111da565b610afc826113de565b15610bcc576040517efdd58e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481019390935260209183916044918391165afa908115610a1d578291610b9a575b5060443511610b725780f35b807ff4d678b80000000000000000000000000000000000000000000000000000000060049252fd5b90506020813d602011610bc4575b81610bb5602093836112ed565b81010312610653575182610b66565b3d9150610ba8565b90602090602473ffffffffffffffffffffffffffffffffffffffff9460405195869384927f6352211e0000000000000000000000000000000000000000000000000000000084526004840152165afa918215610ccb578392610c74575b5073ffffffffffffffffffffffffffffffffffffffff809116911603610c4c5780f35b807f30cd74710000000000000000000000000000000000000000000000000000000060049252fd5b9091506020813d602011610cc3575b81610c90602093836112ed565b81010312610cbf5773ffffffffffffffffffffffffffffffffffffffff610cb7819261135b565b929150610c29565b8280fd5b3d9150610c83565b6040513d85823e3d90fd5b8260207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e657602061032e610d0e6111b7565b6113de565b506106535760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106535773ffffffffffffffffffffffffffffffffffffffff610d5f6111b7565b16803b15610653576040517fd0e30db00000000000000000000000000000000000000000000000000000000081525f8160048134865af18015610e2257610e0d575b506040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152346024820152906020908290604490829086905af18015610a1d57610df1575080f35b610e099060203d6020116104e3576104d681836112ed565b5080f35b610e1a9192505f906112ed565b5f905f610da1565b6040513d5f823e3d90fd5b610e3636611220565b92919093610e43816113de565b15610f9b576040517efdd58e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820194909452921691602081604481865afa908115610e22575f91610f69575b5010610f41576040517fe985e9c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201529282166024840152602090839060449082905afa8015610e2257610f20925f91610f22575b50611394565b005b610f3b915060203d6020116104e3576104d681836112ed565b83610f1a565b7ff4d678b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d602011610f93575b81610f84602093836112ed565b81010312610653575185610eac565b3d9150610f77565b73ffffffffffffffffffffffffffffffffffffffff915093919316926040517f6352211e000000000000000000000000000000000000000000000000000000008152816004820152602081602481885afa908115610e22575f9161117d575b5073ffffffffffffffffffffffffffffffffffffffff808416911603611155576040517fe985e9c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529183166024830152602082604481875afa918215610e22575f92611134575b50811561108f575b50610f209250611394565b602091506024604051809581937f081812fc00000000000000000000000000000000000000000000000000000000835260048301525afa8015610e22575f906110f9575b610f20925073ffffffffffffffffffffffffffffffffffffffff80831691161483611084565b506020823d60201161112c575b81611113602093836112ed565b8101031261065357611127610f209261135b565b6110d3565b3d9150611106565b61114e91925060203d6020116104e3576104d681836112ed565b908461107c565b7f30cd7471000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d6020116111af575b81611198602093836112ed565b81010312610653576111a99061135b565b85610ffa565b3d915061118b565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361065357565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361065357565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361065357565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a09101126106535760043573ffffffffffffffffffffffffffffffffffffffff811681036106535790602435906044359060643573ffffffffffffffffffffffffffffffffffffffff81168103610653579060843573ffffffffffffffffffffffffffffffffffffffff811681036106535790565b602435906bffffffffffffffffffffffff8216820361065357565b600435906bffffffffffffffffffffffff8216820361065357565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761132e57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b519073ffffffffffffffffffffffffffffffffffffffff8216820361065357565b90816020910312610653575180151581036106535790565b1561139c5750565b73ffffffffffffffffffffffffffffffffffffffff907f0ca968d8000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b602073ffffffffffffffffffffffffffffffffffffffff916024604051809481937f01ffc9a70000000000000000000000000000000000000000000000000000000083527fd9b67a26000000000000000000000000000000000000000000000000000000006004840152165afa5f9181611460575b5061145d57505f90565b90565b61147a91925060203d6020116104e3576104d681836112ed565b905f611453565b91906bffffffffffffffffffffffff811661149b57505090565b61145d92506116a8565b6114ae816113de565b156114ba575061048390565b6114c39061152f565b156114ce576102d190565b5f90565b3d1561152a573d9067ffffffffffffffff821161132e576040519161151f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846112ed565b82523d5f602084013e565b606090565b602073ffffffffffffffffffffffffffffffffffffffff916024604051809481937f01ffc9a70000000000000000000000000000000000000000000000000000000083527f80ac58cd000000000000000000000000000000000000000000000000000000006004840152165afa5f9181611460575061145d57505f90565b9291604460409273ffffffffffffffffffffffffffffffffffffffff845196879485937f2a55205a00000000000000000000000000000000000000000000000000000000855260048501526024840152165afa91825f915f9461161c575b5061161857505f91508190565b9190565b915092506040813d604011611656575b81611639604093836112ed565b8101031261065357602061164c8261135b565b910151925f61160b565b3d915061162c565b156116665750565b73ffffffffffffffffffffffffffffffffffffffff907f1e1f3e86000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6bffffffffffffffffffffffff809116911681026bffffffffffffffffffffffff811690810361172f576127106bffffffffffffffffffffffff9104168101906bffffffffffffffffffffffff821161172f57806bffffffffffffffffffffffff831614611714575090565b60019150016bffffffffffffffffffffffff811161172f5790565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffdfea2646970667358221220470616b6ded3e9414cf95ecd40e1a68a04e8fb7a3e62bcd0abf12f8ba405336164736f6c634300081c0033
Deployed Bytecode
0x6080604052307f000000000000000000000000e0cb467a1a46d29682332e0ba8099aee26dee620146004361015610034575f80fd5b5f905f3560e01c8063108754de14610e2d5780632479d86314610d13578063282e460a14610cd657806334659f6814610ab457806348d4973f146109515780635aeb86691461077f57806366ad086d146107075780639eb1198e146106c2578063a21064d01461066e578063cc7d3e8114610338578063daa09e54146102f1578063df01a63414610284578063e8ba65091461024a578063f8156bb4146101e95763fd7ed6a0146100e3575f80fd5b6101e65760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e6576101196112d2565b6bffffffffffffffffffffffff61012e6111fd565b9116908161013a578280f35b8134106101be5780838080808661015b965af16101556114d2565b5061165e565b80341161016757808280f35b3403348111610191578180808061018b94335af16101836114d2565b50339061165e565b5f808280f35b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004837f11011294000000000000000000000000000000000000000000000000000000008152fd5b80fd5b8260207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e657602061021e6111b7565b610227816113de565b90811561023a575b506040519015158152f35b610244915061152f565b8261022f565b8260207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e65760206040514260043511158152f35b8260607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e6576102c76102ba6111b7565b60443590602435906115ad565b6040805173ffffffffffffffffffffffffffffffffffffffff939093168352602083019190915290f35b8260207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e657602061032e6103296111b7565b61152f565b6040519015158152f35b506101e65760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e65761036f6111b7565b6103776111fd565b604435906103836111da565b9160843593600285101561066a5773ffffffffffffffffffffffffffffffffffffffff168061052b5750478181106105235750915b8480808086865af16103c86114d2565b509315848161051a575b506103e9575b505050602091506040519015158152f35b73ffffffffffffffffffffffffffffffffffffffff919293501690813b1561050b576040517fd0e30db0000000000000000000000000000000000000000000000000000000008152848160048187875af1801561050f576104f6575b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260248101929092529091906020908390604490829085905af19081156104ea57506104bd575b50602060015f80806103d8565b6104de9060203d6020116104e3575b6104d681836112ed565b81019061137c565b6104b0565b503d6104cc565b604051903d90823e3d90fd5b6105018580926112ed565b61050b575f610445565b8380fd5b6040513d87823e3d90fd5b9050155f6103d2565b9050916103b8565b9192509392506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481855afa90811561065f578491610621575b506105e19460209392918181106106195750915b846040518097819582947fa9059cbb000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156104ea57506105fc575b506020600161032e565b6106149060203d6020116104e3576104d681836112ed565b6105f2565b905091610588565b929190506020833d602011610657575b8161063e602093836112ed565b810103126106535791519091906105e1610574565b5f80fd5b3d9150610631565b6040513d86823e3d90fd5b8580fd5b8260207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e657602073ffffffffffffffffffffffffffffffffffffffff6106b86111b7565b1615604051908152f35b8260207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e65760206106ff6106fa6111b7565b6114a5565b604051908152f35b8260607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e65761073a6112d2565b6107426112b7565b90604435926bffffffffffffffffffffffff841684036101e6576020610769858585611481565b6bffffffffffffffffffffffff60405191168152f35b8260a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e6576107b26111b7565b6107ba6112b7565b90604435916064359283159384150361094d57608435926bffffffffffffffffffffffff841680940361066a5773ffffffffffffffffffffffffffffffffffffffff8116156109255761080c906114a5565b90610483821480928115610919575b50156108f157816108e7575b81156108dc575b50156108b4576bffffffffffffffffffffffff169081151591826108aa575b5050156108835761085b5780f35b807f499b135a0000000000000000000000000000000000000000000000000000000060049252fd5b6004827ebfc921000000000000000000000000000000000000000000000000000000008152fd5b109050838061084d565b6004847fdc4c32f0000000000000000000000000000000000000000000000000000000008152fd5b60019150148561082e565b8015159150610827565b6004867f56af5116000000000000000000000000000000000000000000000000000000008152fd5b6102d19150148761081b565b6004867f0f3e2a3e000000000000000000000000000000000000000000000000000000008152fd5b8480fd5b506101e6578061096036611220565b9361096d819392936113de565b15610a285773ffffffffffffffffffffffffffffffffffffffff1691823b1561066a578573ffffffffffffffffffffffffffffffffffffffff9360c493829686604051998a9889977ff242432a0000000000000000000000000000000000000000000000000000000089521660048801521660248601526044850152606484015260a060848401528160a48401525af18015610a1d57610a0c57505080f35b81610a16916112ed565b6101e65780f35b6040513d84823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff915092919216803b1561094d5784928360649273ffffffffffffffffffffffffffffffffffffffff948560405198899788967f42842e0e00000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015610a1d57610a0c57505080f35b8260807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e657610ae76111b7565b60243590610af36111da565b610afc826113de565b15610bcc576040517efdd58e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481019390935260209183916044918391165afa908115610a1d578291610b9a575b5060443511610b725780f35b807ff4d678b80000000000000000000000000000000000000000000000000000000060049252fd5b90506020813d602011610bc4575b81610bb5602093836112ed565b81010312610653575182610b66565b3d9150610ba8565b90602090602473ffffffffffffffffffffffffffffffffffffffff9460405195869384927f6352211e0000000000000000000000000000000000000000000000000000000084526004840152165afa918215610ccb578392610c74575b5073ffffffffffffffffffffffffffffffffffffffff809116911603610c4c5780f35b807f30cd74710000000000000000000000000000000000000000000000000000000060049252fd5b9091506020813d602011610cc3575b81610c90602093836112ed565b81010312610cbf5773ffffffffffffffffffffffffffffffffffffffff610cb7819261135b565b929150610c29565b8280fd5b3d9150610c83565b6040513d85823e3d90fd5b8260207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e657602061032e610d0e6111b7565b6113de565b506106535760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106535773ffffffffffffffffffffffffffffffffffffffff610d5f6111b7565b16803b15610653576040517fd0e30db00000000000000000000000000000000000000000000000000000000081525f8160048134865af18015610e2257610e0d575b506040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152346024820152906020908290604490829086905af18015610a1d57610df1575080f35b610e099060203d6020116104e3576104d681836112ed565b5080f35b610e1a9192505f906112ed565b5f905f610da1565b6040513d5f823e3d90fd5b610e3636611220565b92919093610e43816113de565b15610f9b576040517efdd58e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820194909452921691602081604481865afa908115610e22575f91610f69575b5010610f41576040517fe985e9c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201529282166024840152602090839060449082905afa8015610e2257610f20925f91610f22575b50611394565b005b610f3b915060203d6020116104e3576104d681836112ed565b83610f1a565b7ff4d678b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d602011610f93575b81610f84602093836112ed565b81010312610653575185610eac565b3d9150610f77565b73ffffffffffffffffffffffffffffffffffffffff915093919316926040517f6352211e000000000000000000000000000000000000000000000000000000008152816004820152602081602481885afa908115610e22575f9161117d575b5073ffffffffffffffffffffffffffffffffffffffff808416911603611155576040517fe985e9c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529183166024830152602082604481875afa918215610e22575f92611134575b50811561108f575b50610f209250611394565b602091506024604051809581937f081812fc00000000000000000000000000000000000000000000000000000000835260048301525afa8015610e22575f906110f9575b610f20925073ffffffffffffffffffffffffffffffffffffffff80831691161483611084565b506020823d60201161112c575b81611113602093836112ed565b8101031261065357611127610f209261135b565b6110d3565b3d9150611106565b61114e91925060203d6020116104e3576104d681836112ed565b908461107c565b7f30cd7471000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d6020116111af575b81611198602093836112ed565b81010312610653576111a99061135b565b85610ffa565b3d915061118b565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361065357565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361065357565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361065357565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a09101126106535760043573ffffffffffffffffffffffffffffffffffffffff811681036106535790602435906044359060643573ffffffffffffffffffffffffffffffffffffffff81168103610653579060843573ffffffffffffffffffffffffffffffffffffffff811681036106535790565b602435906bffffffffffffffffffffffff8216820361065357565b600435906bffffffffffffffffffffffff8216820361065357565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761132e57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b519073ffffffffffffffffffffffffffffffffffffffff8216820361065357565b90816020910312610653575180151581036106535790565b1561139c5750565b73ffffffffffffffffffffffffffffffffffffffff907f0ca968d8000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b602073ffffffffffffffffffffffffffffffffffffffff916024604051809481937f01ffc9a70000000000000000000000000000000000000000000000000000000083527fd9b67a26000000000000000000000000000000000000000000000000000000006004840152165afa5f9181611460575b5061145d57505f90565b90565b61147a91925060203d6020116104e3576104d681836112ed565b905f611453565b91906bffffffffffffffffffffffff811661149b57505090565b61145d92506116a8565b6114ae816113de565b156114ba575061048390565b6114c39061152f565b156114ce576102d190565b5f90565b3d1561152a573d9067ffffffffffffffff821161132e576040519161151f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846112ed565b82523d5f602084013e565b606090565b602073ffffffffffffffffffffffffffffffffffffffff916024604051809481937f01ffc9a70000000000000000000000000000000000000000000000000000000083527f80ac58cd000000000000000000000000000000000000000000000000000000006004840152165afa5f9181611460575061145d57505f90565b9291604460409273ffffffffffffffffffffffffffffffffffffffff845196879485937f2a55205a00000000000000000000000000000000000000000000000000000000855260048501526024840152165afa91825f915f9461161c575b5061161857505f91508190565b9190565b915092506040813d604011611656575b81611639604093836112ed565b8101031261065357602061164c8261135b565b910151925f61160b565b3d915061162c565b156116665750565b73ffffffffffffffffffffffffffffffffffffffff907f1e1f3e86000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6bffffffffffffffffffffffff809116911681026bffffffffffffffffffffffff811690810361172f576127106bffffffffffffffffffffffff9104168101906bffffffffffffffffffffffff821161172f57806bffffffffffffffffffffffff831614611714575090565b60019150016bffffffffffffffffffffffff811161172f5790565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffdfea2646970667358221220470616b6ded3e9414cf95ecd40e1a68a04e8fb7a3e62bcd0abf12f8ba405336164736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.