Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 15539593 | 707 days ago | IN | 0 ETH | 0.01132772 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
AirdropERC721
Compiler Version
v0.8.12+commit.f00d7308
Optimization Enabled:
Yes with 490 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.11; // ========== External imports ========== import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol"; // ========== Internal imports ========== import "../interfaces/airdrop/IAirdropERC721.sol"; // ========== Features ========== import "../extension/Ownable.sol"; contract AirdropERC721 is Initializable, Ownable, ReentrancyGuardUpgradeable, MulticallUpgradeable, IAirdropERC721 { /*/////////////////////////////////////////////////////////////// State variables //////////////////////////////////////////////////////////////*/ bytes32 private constant MODULE_TYPE = bytes32("AirdropERC721"); uint256 private constant VERSION = 1; /*/////////////////////////////////////////////////////////////// Constructor + initializer logic //////////////////////////////////////////////////////////////*/ constructor() initializer {} /// @dev Initiliazes the contract, like a constructor. function initialize(address _defaultAdmin) external initializer { _setupOwner(_defaultAdmin); __ReentrancyGuard_init(); } /*/////////////////////////////////////////////////////////////// Generic contract logic //////////////////////////////////////////////////////////////*/ /// @dev Returns the type of the contract. function contractType() external pure returns (bytes32) { return MODULE_TYPE; } /// @dev Returns the version of the contract. function contractVersion() external pure returns (uint8) { return uint8(VERSION); } /*/////////////////////////////////////////////////////////////// airdrop logic //////////////////////////////////////////////////////////////*/ /** * @notice Lets contract-owner send ERC721 tokens to a list of addresses. * @dev The token-owner should approve target tokens to Airdrop contract, * which acts as operator for the tokens. * * @param _tokenAddress Contract address of ERC721 tokens to air-drop. * @param _tokenOwner Address from which to transfer tokens. * @param _recipients List of recipient addresses for the air-drop. * @param _tokenIds ERC721 token-Ids of tokens to drop. */ function airdrop( address _tokenAddress, address _tokenOwner, address[] memory _recipients, uint256[] memory _tokenIds ) external nonReentrant onlyOwner { uint256 len = _tokenIds.length; require(len == _recipients.length, "length mismatch"); IERC721 token = IERC721(_tokenAddress); for (uint256 i = 0; i < len; i++) { token.safeTransferFrom(_tokenOwner, _recipients[i], _tokenIds[i]); } } /*/////////////////////////////////////////////////////////////// Miscellaneous //////////////////////////////////////////////////////////////*/ /// @dev Returns whether owner can be set in the given execution context. function _canSetOwner() internal view virtual override returns (bool) { return msg.sender == owner(); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./interface/IOwnable.sol"; /** * @title Ownable * @notice Thirdweb's `Ownable` is a contract extension to be used with any base contract. It exposes functions for setting and reading * who the 'owner' of the inheriting smart contract is, and lets the inheriting contract perform conditional logic that uses * information about who the contract's owner is. */ abstract contract Ownable is IOwnable { /// @dev Owner of the contract (purpose: OpenSea compatibility) address private _owner; /// @dev Reverts if caller is not the owner. modifier onlyOwner() { if (msg.sender != _owner) { revert("Not authorized"); } _; } /** * @notice Returns the owner of the contract. */ function owner() public view override returns (address) { return _owner; } /** * @notice Lets an authorized wallet set a new owner for the contract. * @param _newOwner The address to set as the new owner of the contract. */ function setOwner(address _newOwner) external override { if (!_canSetOwner()) { revert("Not authorized"); } _setupOwner(_newOwner); } /// @dev Lets a contract admin set a new owner for the contract. The new owner must be a contract admin. function _setupOwner(address _newOwner) internal { address _prevOwner = _owner; _owner = _newOwner; emit OwnerUpdated(_prevOwner, _newOwner); } /// @dev Returns whether owner can be set in the given execution context. function _canSetOwner() internal view virtual returns (bool); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; /** * Thirdweb's `Ownable` is a contract extension to be used with any base contract. It exposes functions for setting and reading * who the 'owner' of the inheriting smart contract is, and lets the inheriting contract perform conditional logic that uses * information about who the contract's owner is. */ interface IOwnable { /// @dev Returns the owner of the contract. function owner() external view returns (address); /// @dev Lets a module admin set a new owner for the contract. The new owner must be a module admin. function setOwner(address _newOwner) external; /// @dev Emitted when a new Owner is set. event OwnerUpdated(address indexed prevOwner, address indexed newOwner); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.11; /** * Thirdweb's `Airdrop` contracts provide a lightweight and easy to use mechanism * to drop tokens. * * `AirdropERC721` contract is an airdrop contract for ERC721 tokens. It follows a * push mechanism for transfer of tokens to intended recipients. */ interface IAirdropERC721 { /** * @notice Lets contract-owner send ERC721 tokens to a list of addresses. * @dev The token-owner should approve target tokens to Airdrop contract, * which acts as operator for the tokens. * * @param _tokenAddress Contract address of ERC721 tokens to air-drop. * @param _tokenOwner Address from which to transfer tokens. * @param _recipients List of recipient addresses for the air-drop. * @param _tokenIds ERC721 token-Ids of tokens to drop. */ function airdrop( address _tokenAddress, address _tokenOwner, address[] memory _recipients, uint256[] memory _tokenIds ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.0; import "../../utils/AddressUpgradeable.sol"; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() initializer {} * ``` * ==== */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { // If the contract is initializing we ignore whether _initialized is set in order to support multiple // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the // contract may have been reentered. require(_initializing ? _isConstructor() : !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} modifier, directly or indirectly. */ modifier onlyInitializing() { require(_initializing, "Initializable: contract is not initializing"); _; } function _isConstructor() private view returns (bool) { return !AddressUpgradeable.isContract(address(this)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; import "../proxy/utils/Initializable.sol"; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuardUpgradeable is Initializable { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; function __ReentrancyGuard_init() internal onlyInitializing { __ReentrancyGuard_init_unchained(); } function __ReentrancyGuard_init_unchained() internal onlyInitializing { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[49] private __gap; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @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"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Multicall.sol) pragma solidity ^0.8.0; import "./AddressUpgradeable.sol"; import "../proxy/utils/Initializable.sol"; /** * @dev Provides a function to batch together multiple calls in a single external call. * * _Available since v4.1._ */ abstract contract MulticallUpgradeable is Initializable { function __Multicall_init() internal onlyInitializing { } function __Multicall_init_unchained() internal onlyInitializing { } /** * @dev Receives and executes a batch of function calls on this contract. */ function multicall(bytes[] calldata data) external virtual returns (bytes[] memory results) { results = new bytes[](data.length); for (uint256 i = 0; i < data.length; i++) { results[i] = _functionDelegateCall(address(this), data[i]); } return results; } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function _functionDelegateCall(address target, bytes memory data) private returns (bytes memory) { require(AddressUpgradeable.isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return AddressUpgradeable.verifyCallResult(success, returndata, "Address: low-level delegate call failed"); } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 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`, checking first that contract recipients * are aware of the ERC721 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 be 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: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @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); /** * @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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * 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[EIP 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); }
{ "optimizer": { "enabled": true, "runs": 490 }, "evmVersion": "london", "remappings": [ ":@chainlink/contracts/src/=node_modules/@chainlink/contracts/src/", ":@ds-test/=lib/ds-test/src/", ":@openzeppelin/=node_modules/@openzeppelin/", ":@std/=lib/forge-std/src/", ":contracts/=contracts/", ":ds-test/=lib/ds-test/src/", ":erc721a-upgradeable/=node_modules/erc721a-upgradeable/", ":erc721a/=node_modules/erc721a/", ":forge-std/=lib/forge-std/src/" ], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"prevOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_tokenOwner","type":"address"},{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractType","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"contractVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_defaultAdmin","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600054610100900460ff1661002c5760005460ff1615610034565b6100346100d5565b61009b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b600054610100900460ff161580156100bd576000805461ffff19166101011790555b80156100cf576000805461ff00191690555b506100ff565b60006100ea306100f060201b6105481760201c565b15905090565b6001600160a01b03163b151590565b610c158061010e6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ac9650d81161005b578063ac9650d8146100d5578063c4d66de8146100f5578063cb2ef6f714610108578063e4485ca41461012657600080fd5b806313af4035146100825780638da5cb5b14610097578063a0a8e460146100c6575b600080fd5b6100956100903660046107f5565b610139565b005b6000546201000090046001600160a01b03166040516001600160a01b0390911681526020015b60405180910390f35b604051600181526020016100bd565b6100e86100e3366004610810565b61019b565b6040516100bd91906108e1565b6100956101033660046107f5565b610290565b6040516c41697264726f7045524337323160981b81526020016100bd565b610095610134366004610a19565b61035b565b6000546201000090046001600160a01b0316331461018f5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064015b60405180910390fd5b61019881610557565b50565b60608167ffffffffffffffff8111156101b6576101b6610943565b6040519080825280602002602001820160405280156101e957816020015b60608152602001906001900390816101d45790505b50905060005b82811015610289576102593085858481811061020d5761020d610afc565b905060200281019061021f9190610b12565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105bf92505050565b82828151811061026b5761026b610afc565b6020026020010181905250808061028190610b60565b9150506101ef565b5092915050565b600054610100900460ff166102ab5760005460ff16156102af565b303b155b6103125760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610186565b600054610100900460ff16158015610334576000805461ffff19166101011790555b61033d82610557565b6103456106b3565b8015610357576000805461ff00191690555b5050565b600260015414156103ae5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610186565b60026001556000546201000090046001600160a01b031633146104045760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610186565b8051825181146104565760405162461bcd60e51b815260206004820152600f60248201527f6c656e677468206d69736d6174636800000000000000000000000000000000006044820152606401610186565b8460005b8281101561053b57816001600160a01b03166342842e0e8787848151811061048457610484610afc565b602002602001015187858151811061049e5761049e610afc565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561051057600080fd5b505af1158015610524573d6000803e3d6000fd5b50505050808061053390610b60565b91505061045a565b5050600180555050505050565b6001600160a01b03163b151590565b600080546001600160a01b038381166201000081810275ffffffffffffffffffffffffffffffffffffffff000019851617855560405193049190911692909183917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7691a35050565b60606001600160a01b0383163b6106275760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610186565b600080846001600160a01b0316846040516106429190610b89565b600060405180830381855af49150503d806000811461067d576040519150601f19603f3d011682016040523d82523d6000602084013e610682565b606091505b50915091506106aa8282604051806060016040528060278152602001610bb960279139610728565b95945050505050565b600054610100900460ff1661071e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610186565b610726610768565b565b60608315610737575081610761565b8251156107475782518084602001fd5b8160405162461bcd60e51b81526004016101869190610ba5565b9392505050565b600054610100900460ff166107d35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610186565b60018055565b80356001600160a01b03811681146107f057600080fd5b919050565b60006020828403121561080757600080fd5b610761826107d9565b6000806020838503121561082357600080fd5b823567ffffffffffffffff8082111561083b57600080fd5b818501915085601f83011261084f57600080fd5b81358181111561085e57600080fd5b8660208260051b850101111561087357600080fd5b60209290920196919550909350505050565b60005b838110156108a0578181015183820152602001610888565b838111156108af576000848401525b50505050565b600081518084526108cd816020860160208601610885565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561093657603f198886030184526109248583516108b5565b94509285019290850190600101610908565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561098257610982610943565b604052919050565b600067ffffffffffffffff8211156109a4576109a4610943565b5060051b60200190565b600082601f8301126109bf57600080fd5b813560206109d46109cf8361098a565b610959565b82815260059290921b840181019181810190868411156109f357600080fd5b8286015b84811015610a0e57803583529183019183016109f7565b509695505050505050565b60008060008060808587031215610a2f57600080fd5b610a38856107d9565b93506020610a478187016107d9565b9350604086013567ffffffffffffffff80821115610a6457600080fd5b818801915088601f830112610a7857600080fd5b8135610a866109cf8261098a565b81815260059190911b8301840190848101908b831115610aa557600080fd5b938501935b82851015610aca57610abb856107d9565b82529385019390850190610aaa565b965050506060880135925080831115610ae257600080fd5b5050610af0878288016109ae565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610b2957600080fd5b83018035915067ffffffffffffffff821115610b4457600080fd5b602001915036819003821315610b5957600080fd5b9250929050565b6000600019821415610b8257634e487b7160e01b600052601160045260246000fd5b5060010190565b60008251610b9b818460208701610885565b9190910192915050565b60208152600061076160208301846108b556fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d29c015d04b5cfb39a5d66b9412c966f5d2fc0d8944868b1c54391b73beb720864736f6c634300080c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ac9650d81161005b578063ac9650d8146100d5578063c4d66de8146100f5578063cb2ef6f714610108578063e4485ca41461012657600080fd5b806313af4035146100825780638da5cb5b14610097578063a0a8e460146100c6575b600080fd5b6100956100903660046107f5565b610139565b005b6000546201000090046001600160a01b03166040516001600160a01b0390911681526020015b60405180910390f35b604051600181526020016100bd565b6100e86100e3366004610810565b61019b565b6040516100bd91906108e1565b6100956101033660046107f5565b610290565b6040516c41697264726f7045524337323160981b81526020016100bd565b610095610134366004610a19565b61035b565b6000546201000090046001600160a01b0316331461018f5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064015b60405180910390fd5b61019881610557565b50565b60608167ffffffffffffffff8111156101b6576101b6610943565b6040519080825280602002602001820160405280156101e957816020015b60608152602001906001900390816101d45790505b50905060005b82811015610289576102593085858481811061020d5761020d610afc565b905060200281019061021f9190610b12565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105bf92505050565b82828151811061026b5761026b610afc565b6020026020010181905250808061028190610b60565b9150506101ef565b5092915050565b600054610100900460ff166102ab5760005460ff16156102af565b303b155b6103125760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610186565b600054610100900460ff16158015610334576000805461ffff19166101011790555b61033d82610557565b6103456106b3565b8015610357576000805461ff00191690555b5050565b600260015414156103ae5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610186565b60026001556000546201000090046001600160a01b031633146104045760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610186565b8051825181146104565760405162461bcd60e51b815260206004820152600f60248201527f6c656e677468206d69736d6174636800000000000000000000000000000000006044820152606401610186565b8460005b8281101561053b57816001600160a01b03166342842e0e8787848151811061048457610484610afc565b602002602001015187858151811061049e5761049e610afc565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561051057600080fd5b505af1158015610524573d6000803e3d6000fd5b50505050808061053390610b60565b91505061045a565b5050600180555050505050565b6001600160a01b03163b151590565b600080546001600160a01b038381166201000081810275ffffffffffffffffffffffffffffffffffffffff000019851617855560405193049190911692909183917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7691a35050565b60606001600160a01b0383163b6106275760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610186565b600080846001600160a01b0316846040516106429190610b89565b600060405180830381855af49150503d806000811461067d576040519150601f19603f3d011682016040523d82523d6000602084013e610682565b606091505b50915091506106aa8282604051806060016040528060278152602001610bb960279139610728565b95945050505050565b600054610100900460ff1661071e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610186565b610726610768565b565b60608315610737575081610761565b8251156107475782518084602001fd5b8160405162461bcd60e51b81526004016101869190610ba5565b9392505050565b600054610100900460ff166107d35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610186565b60018055565b80356001600160a01b03811681146107f057600080fd5b919050565b60006020828403121561080757600080fd5b610761826107d9565b6000806020838503121561082357600080fd5b823567ffffffffffffffff8082111561083b57600080fd5b818501915085601f83011261084f57600080fd5b81358181111561085e57600080fd5b8660208260051b850101111561087357600080fd5b60209290920196919550909350505050565b60005b838110156108a0578181015183820152602001610888565b838111156108af576000848401525b50505050565b600081518084526108cd816020860160208601610885565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561093657603f198886030184526109248583516108b5565b94509285019290850190600101610908565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561098257610982610943565b604052919050565b600067ffffffffffffffff8211156109a4576109a4610943565b5060051b60200190565b600082601f8301126109bf57600080fd5b813560206109d46109cf8361098a565b610959565b82815260059290921b840181019181810190868411156109f357600080fd5b8286015b84811015610a0e57803583529183019183016109f7565b509695505050505050565b60008060008060808587031215610a2f57600080fd5b610a38856107d9565b93506020610a478187016107d9565b9350604086013567ffffffffffffffff80821115610a6457600080fd5b818801915088601f830112610a7857600080fd5b8135610a866109cf8261098a565b81815260059190911b8301840190848101908b831115610aa557600080fd5b938501935b82851015610aca57610abb856107d9565b82529385019390850190610aaa565b965050506060880135925080831115610ae257600080fd5b5050610af0878288016109ae565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610b2957600080fd5b83018035915067ffffffffffffffff821115610b4457600080fd5b602001915036819003821315610b5957600080fd5b9250929050565b6000600019821415610b8257634e487b7160e01b600052601160045260246000fd5b5060010190565b60008251610b9b818460208701610885565b9190910192915050565b60208152600061076160208301846108b556fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d29c015d04b5cfb39a5d66b9412c966f5d2fc0d8944868b1c54391b73beb720864736f6c634300080c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.