Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 129 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Burn | 16638554 | 561 days ago | IN | 0 ETH | 0.00286728 | ||||
Burn | 16601803 | 566 days ago | IN | 0 ETH | 0.00231125 | ||||
Burn | 16601786 | 566 days ago | IN | 0 ETH | 0.00185599 | ||||
Burn | 16597301 | 567 days ago | IN | 0 ETH | 0.00173425 | ||||
Burn | 16597024 | 567 days ago | IN | 0 ETH | 0.00140302 | ||||
Burn | 16596965 | 567 days ago | IN | 0 ETH | 0.00136667 | ||||
Burn | 16595110 | 567 days ago | IN | 0 ETH | 0.00203421 | ||||
Burn | 16590686 | 568 days ago | IN | 0 ETH | 0.00139036 | ||||
Burn | 16590663 | 568 days ago | IN | 0 ETH | 0.00218184 | ||||
Burn | 16590639 | 568 days ago | IN | 0 ETH | 0.00253006 | ||||
Burn | 16581362 | 569 days ago | IN | 0 ETH | 0.004609 | ||||
Burn | 16580311 | 569 days ago | IN | 0 ETH | 0.00374071 | ||||
Burn | 16580299 | 569 days ago | IN | 0 ETH | 0.00392315 | ||||
Burn | 16578764 | 570 days ago | IN | 0 ETH | 0.00483833 | ||||
Burn | 16578756 | 570 days ago | IN | 0 ETH | 0.00492662 | ||||
Burn | 16575942 | 570 days ago | IN | 0 ETH | 0.00134355 | ||||
Burn | 16575935 | 570 days ago | IN | 0 ETH | 0.00159476 | ||||
Burn | 16575916 | 570 days ago | IN | 0 ETH | 0.00255051 | ||||
Burn | 16570696 | 571 days ago | IN | 0 ETH | 0.0019541 | ||||
Burn | 16567739 | 571 days ago | IN | 0 ETH | 0.00128283 | ||||
Burn | 16565308 | 572 days ago | IN | 0 ETH | 0.00166094 | ||||
Burn | 16563613 | 572 days ago | IN | 0 ETH | 0.00124632 | ||||
Burn | 16563179 | 572 days ago | IN | 0 ETH | 0.00107338 | ||||
Burn | 16563163 | 572 days ago | IN | 0 ETH | 0.00131319 | ||||
Burn | 16563132 | 572 days ago | IN | 0 ETH | 0.00165189 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
16317740 | 606 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
LlamaB2E
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; import "openzeppelin/token/ERC721/IERC721.sol"; import "./lib/Ownable.sol"; import "./lib/ECDSA.sol"; contract LlamaB2E is Ownable { /* -------------------------------------------------------------------------- */ /* errors */ /* -------------------------------------------------------------------------- */ error ErrInvalidSignature(); /* -------------------------------------------------------------------------- */ /* events */ /* -------------------------------------------------------------------------- */ event LogBurnt(address indexed user, address collectionAddress, uint256 tokenID); /* -------------------------------------------------------------------------- */ /* constants */ /* -------------------------------------------------------------------------- */ address private constant burnAddress = 0x000000000000000000000000000000000000dEaD; address private constant burnAddress2 = 0x0000000000000000000000000000000000000001; address private constant burnAddress3 = 0x0000000000000000000000000000000000000002; address private constant burnAddress4 = 0x0000000000000000000000000000000000000003; /* -------------------------------------------------------------------------- */ /* states */ /* -------------------------------------------------------------------------- */ address public signer; /* -------------------------------------------------------------------------- */ /* contructor */ /* -------------------------------------------------------------------------- */ constructor(address signer_) { signer = signer_; } /* -------------------------------------------------------------------------- */ /* external */ /* -------------------------------------------------------------------------- */ function burn(address collectionAddress, uint256 tokenID, bytes calldata signature) external { // check signature checkSignature(collectionAddress, tokenID, signature); // burn try IERC721(collectionAddress).transferFrom(msg.sender, burnAddress, tokenID) { } catch { try IERC721(collectionAddress).transferFrom(msg.sender, burnAddress2, tokenID) { } catch { try IERC721(collectionAddress).transferFrom(msg.sender, burnAddress3, tokenID) { } catch { IERC721(collectionAddress).transferFrom(msg.sender, burnAddress4, tokenID); } } } // emit event emit LogBurnt(msg.sender, collectionAddress, tokenID); } function checkSignature(address collectionAddress, uint256 tokenID, bytes calldata signature) public view { // prepare data bytes32 messageHash = keccak256(abi.encode(msg.sender, collectionAddress, tokenID)); _checkSignature(messageHash, signature); } /* -------------------------------------------------------------------------- */ /* owners only */ /* -------------------------------------------------------------------------- */ function updateSigner(address signer_) external onlyOwner { signer = signer_; } /* -------------------------------------------------------------------------- */ /* private */ /* -------------------------------------------------------------------------- */ function _checkSignature(bytes32 message, bytes calldata signature) private view { // recover address recovered = ECDSA.recover(message, signature); // check if (recovered != signer) { revert ErrInvalidSignature(); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (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`. * * 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 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 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 ERC721 * 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 caller. * * 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 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.16; /// @notice Gas optimized ECDSA wrapper. /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/ECDSA.sol) /// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/ECDSA.sol) /// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/ECDSA.sol) library ECDSA { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* CONSTANTS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev The number which `s` must not exceed in order for /// the signature to be non-malleable. bytes32 private constant _MALLEABILITY_THRESHOLD = 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0; /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* RECOVERY OPERATIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Recovers the signer's address from a message digest `hash`, /// and the `signature`. /// /// This function does NOT accept EIP-2098 short form signatures. /// Use `recover(bytes32 hash, bytes32 r, bytes32 vs)` for EIP-2098 /// short form signatures instead. /// /// WARNING! /// The `result` will be the zero address upon recovery failure. /// As such, it is extremely important to ensure that the address which /// the `result` is compared against is never zero. function recover(bytes32 hash, bytes calldata signature) internal view returns (address result) { assembly { if eq(signature.length, 65) { // Copy the free memory pointer so that we can restore it later. let m := mload(0x40) // Directly copy `r` and `s` from the calldata. calldatacopy(0x40, signature.offset, 0x40) // If `s` in lower half order, such that the signature is not malleable. if iszero(gt(mload(0x60), _MALLEABILITY_THRESHOLD)) { mstore(0x00, hash) // Compute `v` and store it in the scratch space. mstore( 0x20, byte(0, calldataload(add(signature.offset, 0x40))) ) pop( staticcall( gas(), // Amount of gas left for the transaction. 0x01, // Address of `ecrecover`. 0x00, // Start of input. 0x80, // Size of input. 0x40, // Start of output. 0x20 // Size of output. ) ) // Restore the zero slot. mstore(0x60, 0) // `returndatasize()` will be `0x20` upon success, and `0x00` otherwise. result := mload(sub(0x60, returndatasize())) } // Restore the free memory pointer. mstore(0x40, m) } } } /// @dev Recovers the signer's address from a message digest `hash`, /// and the EIP-2098 short form signature defined by `r` and `vs`. /// /// This function only accepts EIP-2098 short form signatures. /// See: https://eips.ethereum.org/EIPS/eip-2098 /// /// To be honest, I do not recommend using EIP-2098 signatures /// for simplicity, performance, and security reasons. Most if not /// all clients support traditional non EIP-2098 signatures by default. /// As such, this method is intentionally not fully inlined. /// It is merely included for completeness. /// /// WARNING! /// The `result` will be the zero address upon recovery failure. /// As such, it is extremely important to ensure that the address which /// the `result` is compared against is never zero. function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal view returns (address result) { uint8 v; bytes32 s; assembly { s := shr(1, shl(1, vs)) v := add(shr(255, vs), 27) } result = recover(hash, v, r, s); } /// @dev Recovers the signer's address from a message digest `hash`, /// and the signature defined by `v`, `r`, `s`. /// /// WARNING! /// The `result` will be the zero address upon recovery failure. /// As such, it is extremely important to ensure that the address which /// the `result` is compared against is never zero. function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal view returns (address result) { assembly { // Copy the free memory pointer so that we can restore it later. let m := mload(0x40) // If `s` in lower half order, such that the signature is not malleable. if iszero(gt(s, _MALLEABILITY_THRESHOLD)) { mstore(0x00, hash) mstore(0x20, v) mstore(0x40, r) mstore(0x60, s) pop( staticcall( gas(), // Amount of gas left for the transaction. 0x01, // Address of `ecrecover`. 0x00, // Start of input. 0x80, // Size of input. 0x40, // Start of output. 0x20 // Size of output. ) ) // Restore the zero slot. mstore(0x60, 0) // `returndatasize()` will be `0x20` upon success, and `0x00` otherwise. result := mload(sub(0x60, returndatasize())) } // Restore the free memory pointer. mstore(0x40, m) } } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* HASHING OPERATIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Returns an Ethereum Signed Message, created from a `hash`. /// This produces a hash corresponding to the one signed with the /// [`eth_sign`](https://eth.wiki/json-rpc/API#eth_sign) /// JSON-RPC method as part of EIP-191. function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 result) { assembly { // Store into scratch space for keccak256. mstore(0x20, hash) mstore(0x00, "\x00\x00\x00\x00\x19Ethereum Signed Message:\n32") // 0x40 - 0x04 = 0x3c result := keccak256(0x04, 0x3c) } } /// @dev Returns an Ethereum Signed Message, created from `s`. /// This produces a hash corresponding to the one signed with the /// [`eth_sign`](https://eth.wiki/json-rpc/API#eth_sign) /// JSON-RPC method as part of EIP-191. function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32 result) { assembly { // We need at most 128 bytes for Ethereum signed message header. // The max length of the ASCII reprenstation of a uint256 is 78 bytes. // The length of "\x19Ethereum Signed Message:\n" is 26 bytes (i.e. 0x1a). // The next multiple of 32 above 78 + 26 is 128 (i.e. 0x80). // Instead of allocating, we temporarily copy the 128 bytes before the // start of `s` data to some variables. let m3 := mload(sub(s, 0x60)) let m2 := mload(sub(s, 0x40)) let m1 := mload(sub(s, 0x20)) // The length of `s` is in bytes. let sLength := mload(s) let ptr := add(s, 0x20) // `end` marks the end of the memory which we will compute the keccak256 of. let end := add(ptr, sLength) // Convert the length of the bytes to ASCII decimal representation // and store it into the memory. // prettier-ignore for { let temp := sLength } 1 {} { ptr := sub(ptr, 1) mstore8(ptr, add(48, mod(temp, 10))) temp := div(temp, 10) // prettier-ignore if iszero(temp) { break } } // Copy the header over to the memory. mstore( sub(ptr, 0x20), "\x00\x00\x00\x00\x00\x00\x19Ethereum Signed Message:\n" ) // Compute the keccak256 of the memory. result := keccak256(sub(ptr, 0x1a), sub(end, sub(ptr, 0x1a))) // Restore the previous memory. mstore(s, sLength) mstore(sub(s, 0x20), m1) mstore(sub(s, 0x40), m2) mstore(sub(s, 0x60), m3) } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(tx.origin); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == msg.sender, "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/", "openzeppelin/=lib/openzeppelin-contracts/contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"signer_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ErrInvalidSignature","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"collectionAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"LogBurnt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"collectionAddress","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collectionAddress","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"checkSignature","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"signer_","type":"address"}],"name":"updateSigner","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5060405161076138038061076183398101604081905261002f916100ad565b6100383261005d565b600180546001600160a01b0319166001600160a01b03929092169190911790556100dd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100bf57600080fd5b81516001600160a01b03811681146100d657600080fd5b9392505050565b610675806100ec6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100ce578063a485c5cc146100df578063a7ecd37e146100f2578063f2fde38b1461010557600080fd5b8063238ac9331461008257806344d17187146100b1578063715018a6146100c6575b600080fd5b600154610095906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100c46100bf366004610579565b610118565b005b6100c46102f3565b6000546001600160a01b0316610095565b6100c46100ed366004610579565b610307565b6100c4610100366004610600565b610348565b6100c4610113366004610600565b610372565b61012484848484610307565b6040516323b872dd60e01b81526001600160a01b038516906323b872dd9061015690339061dead90889060040161061b565b600060405180830381600087803b15801561017057600080fd5b505af1925050508015610181575060015b6102a9576040516323b872dd60e01b81526001600160a01b038516906323b872dd906101b6903390600190889060040161061b565b600060405180830381600087803b1580156101d057600080fd5b505af19250505080156101e1575060015b6102a9576040516323b872dd60e01b81526001600160a01b038516906323b872dd90610216903390600290889060040161061b565b600060405180830381600087803b15801561023057600080fd5b505af1925050508015610241575060015b6102a9576040516323b872dd60e01b81526001600160a01b038516906323b872dd90610276903390600390889060040161061b565b600060405180830381600087803b15801561029057600080fd5b505af11580156102a4573d6000803e3d6000fd5b505050505b604080516001600160a01b03861681526020810185905233917f59e4651cf57a59bca5085d1e327331b917119975e8186c6e17bbcf58d1bf0b9b910160405180910390a250505050565b6102fb6103f0565b6103056000610459565b565b600033858560405160200161031e9392919061061b565b6040516020818303038152906040528051906020012090506103418184846104a9565b5050505050565b6103506103f0565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b61037a6103f0565b6001600160a01b0381166103e45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103ed81610459565b50565b336104036000546001600160a01b031690565b6001600160a01b0316146103055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103db565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006104b68484846104ed565b6001549091506001600160a01b038083169116146104e7576040516326325a1560e21b815260040160405180910390fd5b50505050565b600060418203610556576040516040846040377f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0606051116105525784600052604084013560001a602052602060406080600060015afa5060006060523d6060035191505b6040525b9392505050565b80356001600160a01b038116811461057457600080fd5b919050565b6000806000806060858703121561058f57600080fd5b6105988561055d565b935060208501359250604085013567ffffffffffffffff808211156105bc57600080fd5b818701915087601f8301126105d057600080fd5b8135818111156105df57600080fd5b8860208285010111156105f157600080fd5b95989497505060200194505050565b60006020828403121561061257600080fd5b6105568261055d565b6001600160a01b03938416815291909216602082015260408101919091526060019056fea2646970667358221220387b4d4d74309c3f8394be75caac6be0dd98dbc544e4598fed273a5c0d4694cd64736f6c634300081100330000000000000000000000000475bde21713376928b80d1219ec11e0ea985073
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100ce578063a485c5cc146100df578063a7ecd37e146100f2578063f2fde38b1461010557600080fd5b8063238ac9331461008257806344d17187146100b1578063715018a6146100c6575b600080fd5b600154610095906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100c46100bf366004610579565b610118565b005b6100c46102f3565b6000546001600160a01b0316610095565b6100c46100ed366004610579565b610307565b6100c4610100366004610600565b610348565b6100c4610113366004610600565b610372565b61012484848484610307565b6040516323b872dd60e01b81526001600160a01b038516906323b872dd9061015690339061dead90889060040161061b565b600060405180830381600087803b15801561017057600080fd5b505af1925050508015610181575060015b6102a9576040516323b872dd60e01b81526001600160a01b038516906323b872dd906101b6903390600190889060040161061b565b600060405180830381600087803b1580156101d057600080fd5b505af19250505080156101e1575060015b6102a9576040516323b872dd60e01b81526001600160a01b038516906323b872dd90610216903390600290889060040161061b565b600060405180830381600087803b15801561023057600080fd5b505af1925050508015610241575060015b6102a9576040516323b872dd60e01b81526001600160a01b038516906323b872dd90610276903390600390889060040161061b565b600060405180830381600087803b15801561029057600080fd5b505af11580156102a4573d6000803e3d6000fd5b505050505b604080516001600160a01b03861681526020810185905233917f59e4651cf57a59bca5085d1e327331b917119975e8186c6e17bbcf58d1bf0b9b910160405180910390a250505050565b6102fb6103f0565b6103056000610459565b565b600033858560405160200161031e9392919061061b565b6040516020818303038152906040528051906020012090506103418184846104a9565b5050505050565b6103506103f0565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b61037a6103f0565b6001600160a01b0381166103e45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103ed81610459565b50565b336104036000546001600160a01b031690565b6001600160a01b0316146103055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103db565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006104b68484846104ed565b6001549091506001600160a01b038083169116146104e7576040516326325a1560e21b815260040160405180910390fd5b50505050565b600060418203610556576040516040846040377f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0606051116105525784600052604084013560001a602052602060406080600060015afa5060006060523d6060035191505b6040525b9392505050565b80356001600160a01b038116811461057457600080fd5b919050565b6000806000806060858703121561058f57600080fd5b6105988561055d565b935060208501359250604085013567ffffffffffffffff808211156105bc57600080fd5b818701915087601f8301126105d057600080fd5b8135818111156105df57600080fd5b8860208285010111156105f157600080fd5b95989497505060200194505050565b60006020828403121561061257600080fd5b6105568261055d565b6001600160a01b03938416815291909216602082015260408101919091526060019056fea2646970667358221220387b4d4d74309c3f8394be75caac6be0dd98dbc544e4598fed273a5c0d4694cd64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000475bde21713376928b80d1219ec11e0ea985073
-----Decoded View---------------
Arg [0] : signer_ (address): 0x0475BDe21713376928B80d1219eC11E0ea985073
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000475bde21713376928b80d1219ec11e0ea985073
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.