Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 55 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Push Terra Addre... | 15234929 | 727 days ago | IN | 0 ETH | 0.01504896 | ||||
Push Terra Addre... | 14848964 | 791 days ago | IN | 0 ETH | 0.07599603 | ||||
Push Terra Addre... | 14842053 | 792 days ago | IN | 0 ETH | 0.03101577 | ||||
Push Terra Addre... | 14842033 | 792 days ago | IN | 0 ETH | 0.01997385 | ||||
Push Terra Addre... | 14842016 | 792 days ago | IN | 0 ETH | 0.02427729 | ||||
Push Terra Addre... | 14775518 | 802 days ago | IN | 0 ETH | 0.02351897 | ||||
Push Terra Addre... | 14775518 | 802 days ago | IN | 0 ETH | 0.02351957 | ||||
Push Terra Addre... | 14775516 | 802 days ago | IN | 0 ETH | 0.02260192 | ||||
Push Terra Addre... | 14775514 | 802 days ago | IN | 0 ETH | 0.02729876 | ||||
Push Terra Addre... | 14775513 | 802 days ago | IN | 0 ETH | 0.02870041 | ||||
Push Terra Addre... | 14775512 | 802 days ago | IN | 0 ETH | 0.03005724 | ||||
Push Terra Addre... | 14775510 | 802 days ago | IN | 0 ETH | 0.0324992 | ||||
Push Terra Addre... | 14775504 | 802 days ago | IN | 0 ETH | 0.023011 | ||||
Push Terra Addre... | 14775478 | 802 days ago | IN | 0 ETH | 0.03537906 | ||||
Push Terra Addre... | 14775477 | 802 days ago | IN | 0 ETH | 0.03160453 | ||||
Push Terra Addre... | 14775175 | 802 days ago | IN | 0 ETH | 0.03318853 | ||||
Push Terra Addre... | 14747062 | 807 days ago | IN | 0 ETH | 0.07756976 | ||||
Push Terra Addre... | 14747062 | 807 days ago | IN | 0 ETH | 0.07757175 | ||||
Push Terra Addre... | 14605378 | 829 days ago | IN | 0 ETH | 0.01831717 | ||||
Push Terra Addre... | 14605362 | 829 days ago | IN | 0 ETH | 0.02110925 | ||||
Push Terra Addre... | 14605353 | 829 days ago | IN | 0 ETH | 0.01658283 | ||||
Push Terra Addre... | 14605346 | 829 days ago | IN | 0 ETH | 0.01690344 | ||||
Push Terra Addre... | 14605330 | 829 days ago | IN | 0 ETH | 0.01797286 | ||||
Push Terra Addre... | 14566320 | 835 days ago | IN | 0 ETH | 0.05891038 | ||||
Push Terra Addre... | 14566319 | 835 days ago | IN | 0 ETH | 0.06445375 |
Latest 25 internal transactions (View All)
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:
OperationFactory
Compiler Version
v0.7.3+commit.9bfce1f6
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.6.0 <0.8.0; import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; import {EnumerableSet} from "@openzeppelin/contracts/utils/EnumerableSet.sol"; import {OperationACL} from "./OperationACL.sol"; interface OperationStandard { function initialize(bytes memory) external; function initPayload( address, address, bytes32 ) external view returns (bytes memory); } interface IOperationFactory { event ContractDeployed( address indexed instance, address indexed controller, bytes32 indexed terraAddress ); struct Standard { address router; address controller; address operation; } function pushTerraAddresses(bytes32[] memory _addrs) external; function fetchAddressBufferSize() external view returns (uint256); function fetchNextTerraAddress() external view returns (bytes32); function build(uint256 _optId) external returns (address); } contract OperationFactory is IOperationFactory, OperationACL { using EnumerableSet for EnumerableSet.Bytes32Set; // standard operations uint256 public standardIndex = 0; mapping(uint256 => Standard) public standards; function pushStandardOperation( address _router, address _controller, address _operation ) public onlyOwner returns (uint256) { uint256 optStdId = standardIndex; standards[optStdId] = Standard({ router: _router, controller: _controller, operation: _operation }); standardIndex += 1; return optStdId; } // terra address buffer EnumerableSet.Bytes32Set private terraAddresses; function pushTerraAddresses(bytes32[] memory _addrs) public override onlyOwner { for (uint256 i = 0; i < _addrs.length; i++) { terraAddresses.add(_addrs[i]); } } function fetchAddressBufferSize() public view override returns (uint256) { return terraAddresses.length(); } function fetchNextTerraAddress() public view override returns (bytes32) { return terraAddresses.at(0); } function fetchTerraAddress() private returns (bytes32) { bytes32 addr = terraAddresses.at(0); terraAddresses.remove(addr); return addr; } function build(uint256 _optId) public override onlyGranted returns (address) { bytes32 terraAddr = fetchTerraAddress(); Standard memory std = standards[_optId]; address instance = Clones.clone(std.operation); bytes memory payload = OperationStandard(std.operation).initPayload( std.router, std.controller, terraAddr ); OperationStandard(instance).initialize(payload); emit ContractDeployed(instance, std.controller, terraAddr); return instance; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for * deploying minimal proxy contracts, also known as "clones". * * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies * > a minimal bytecode implementation that delegates all calls to a known, fixed address. * * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the * deterministic method. * * _Available since v3.4._ */ library Clones { /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `master`. * * This function uses the create opcode, which should never revert. */ function clone(address master) internal returns (address instance) { // solhint-disable-next-line no-inline-assembly assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, master)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) instance := create(0, ptr, 0x37) } require(instance != address(0), "ERC1167: create failed"); } /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `master`. * * This function uses the create2 opcode and a `salt` to deterministically deploy * the clone. Using the same `master` and `salt` multiple time will revert, since * the clones cannot be deployed twice at the same address. */ function cloneDeterministic(address master, bytes32 salt) internal returns (address instance) { // solhint-disable-next-line no-inline-assembly assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, master)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) instance := create2(0, ptr, 0x37, salt) } require(instance != address(0), "ERC1167: create2 failed"); } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress(address master, bytes32 salt, address deployer) internal pure returns (address predicted) { // solhint-disable-next-line no-inline-assembly assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, master)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000) mstore(add(ptr, 0x38), shl(0x60, deployer)) mstore(add(ptr, 0x4c), salt) mstore(add(ptr, 0x6c), keccak256(ptr, 0x37)) predicted := keccak256(add(ptr, 0x37), 0x55) } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress(address master, bytes32 salt) internal view returns (address predicted) { return predictDeterministicAddress(master, salt, address(this)); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; pragma experimental ABIEncoderV2; import {Context} from "@openzeppelin/contracts/utils/Context.sol"; abstract contract OperationACL is Context { address public owner; address public router; address public controller; constructor() { owner = _msgSender(); router = _msgSender(); controller = _msgSender(); } modifier onlyOwner { require(_msgSender() == owner, "OperationACL: owner access denied"); _; } modifier onlyRouter { require(_msgSender() == router, "OperationACL: router access denied"); _; } modifier onlyController { require( _msgSender() == controller, "OperationACL: controller access denied" ); _; } modifier onlyGranted { address sender = _msgSender(); require( sender == owner || sender == router || sender == controller, "OperationACL: denied" ); _; } function transferOwnership(address _owner) public onlyOwner { owner = _owner; } function transferRouter(address _router) public onlyOwner { router = _router; } function transferController(address _controller) public onlyOwner { controller = _controller; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"instance","type":"address"},{"indexed":true,"internalType":"address","name":"controller","type":"address"},{"indexed":true,"internalType":"bytes32","name":"terraAddress","type":"bytes32"}],"name":"ContractDeployed","type":"event"},{"inputs":[{"internalType":"uint256","name":"_optId","type":"uint256"}],"name":"build","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fetchAddressBufferSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fetchNextTerraAddress","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_controller","type":"address"},{"internalType":"address","name":"_operation","type":"address"}],"name":"pushStandardOperation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_addrs","type":"bytes32[]"}],"name":"pushTerraAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"standardIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"standards","outputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"controller","type":"address"},{"internalType":"address","name":"operation","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"transferController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"transferRouter","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600060035534801561001557600080fd5b5061001e610093565b600080546001600160a01b0319166001600160a01b0392909216919091179055610046610093565b600180546001600160a01b0319166001600160a01b039290921691909117905561006e610093565b600280546001600160a01b0319166001600160a01b0392909216919091179055610097565b3390565b610cec806100a66000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063987473231161008c578063e8ea054b11610066578063e8ea054b1461028a578063f2fde38b146102b0578063f77c4791146102d6578063f887ea40146102de576100cf565b80639874732314610232578063b1af34031461027a578063b27f681e14610282576100cf565b8063210f25f4146100d4578063268d79951461011e5780632ed739321461014657806377fc2b19146101e957806387463cc5146102225780638da5cb5b1461022a575b600080fd5b61010c600480360360608110156100ea57600080fd5b506001600160a01b0381358116916020810135821691604090910135166102e6565b60408051918252519081900360200190f35b6101446004803603602081101561013457600080fd5b50356001600160a01b03166103cb565b005b6101446004803603602081101561015c57600080fd5b81019060208101813564010000000081111561017757600080fd5b82018360208201111561018957600080fd5b803590602001918460208302840111640100000000831117156101ab57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610446945050505050565b610206600480360360208110156101ff57600080fd5b50356104df565b604080516001600160a01b039092168252519081900360200190f35b61010c61084f565b610206610855565b61024f6004803603602081101561024857600080fd5b5035610864565b604080516001600160a01b039485168152928416602084015292168183015290519081900360600190f35b61010c610892565b61010c6108a4565b610144600480360360208110156102a057600080fd5b50356001600160a01b03166108b0565b610144600480360360208110156102c657600080fd5b50356001600160a01b031661092b565b6102066109a6565b6102066109b5565b600080546001600160a01b03166102fb6109c4565b6001600160a01b0316146103405760405162461bcd60e51b8152600401808060200182810382526021815260200180610c966021913960400191505060405180910390fd5b5060038054604080516060810182526001600160a01b038088168252868116602080840191825287831684860190815260008781526004909252949020925183549083166001600160a01b0319918216178455905160018085018054928516928416929092179091559351600290930180549390921692169190911790558254019091559392505050565b6000546001600160a01b03166103df6109c4565b6001600160a01b0316146104245760405162461bcd60e51b8152600401808060200182810382526021815260200180610c966021913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031661045a6109c4565b6001600160a01b03161461049f5760405162461bcd60e51b8152600401808060200182810382526021815260200180610c966021913960400191505060405180910390fd5b60005b81518110156104db576104d28282815181106104ba57fe5b602002602001015160056109c890919063ffffffff16565b506001016104a2565b5050565b6000806104ea6109c4565b6000549091506001600160a01b038083169116148061051657506001546001600160a01b038281169116145b8061052e57506002546001600160a01b038281169116145b610576576040805162461bcd60e51b815260206004820152601460248201527313dc195c985d1a5bdb9050d30e8819195b9a595960621b604482015290519081900360640190fd5b60006105806109dd565b905061058a610c53565b506000848152600460209081526040808320815160608101835281546001600160a01b03908116825260018301548116948201949094526002909101549092169082018190529091906105dc906109fe565b9050606082604001516001600160a01b031663c93bd38b84600001518560200151876040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b03168152602001828152602001935050505060006040518083038186803b15801561065257600080fd5b505afa158015610666573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561068f57600080fd5b81019080805160405193929190846401000000008211156106af57600080fd5b9083019060208201858111156106c457600080fd5b82516401000000008111828201881017156106de57600080fd5b82525081516020918201929091019080838360005b8381101561070b5781810151838201526020016106f3565b50505050905090810190601f1680156107385780820380516001836020036101000a031916815260200191505b50604081905263439fab9160e01b81526020600482018181528651602484015286519697506001600160a01b0389169663439fab91965088955090935083926044019185019080838360005b8381101561079c578181015183820152602001610784565b50505050905090810190601f1680156107c95780820380516001836020036101000a031916815260200191505b5092505050600060405180830381600087803b1580156107e857600080fd5b505af11580156107fc573d6000803e3d6000fd5b505050508383602001516001600160a01b0316836001600160a01b03167f41a1a1e5033fb48fa68ae6842ead9050d540ddf76974d1cee54faf540d1f49e660405160405180910390a45095945050505050565b60035481565b6000546001600160a01b031681565b6004602052600090815260409020805460018201546002909201546001600160a01b03918216928216911683565b600061089f600582610aa0565b905090565b600061089f6005610aac565b6000546001600160a01b03166108c46109c4565b6001600160a01b0316146109095760405162461bcd60e51b8152600401808060200182810382526021815260200180610c966021913960400191505060405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031661093f6109c4565b6001600160a01b0316146109845760405162461bcd60e51b8152600401808060200182810382526021815260200180610c966021913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b6001546001600160a01b031681565b3390565b60006109d48383610ab7565b90505b92915050565b6000806109eb600582610aa0565b90506109f8600582610b01565b50905090565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610a9b576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b919050565b60006109d48383610b0d565b60006109d782610b71565b6000610ac38383610b75565b610af9575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109d7565b5060006109d7565b60006109d48383610b8d565b81546000908210610b4f5760405162461bcd60e51b8152600401808060200182810382526022815260200180610c746022913960400191505060405180910390fd5b826000018281548110610b5e57fe5b9060005260206000200154905092915050565b5490565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015610c495783546000198083019190810190600090879083908110610bc057fe5b9060005260206000200154905080876000018481548110610bdd57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080610c0d57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506109d7565b60009150506109d7565b60408051606081018252600080825260208201819052918101919091529056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734f7065726174696f6e41434c3a206f776e6572206163636573732064656e696564a26469706673582212208c4f5ac81c015f81b49309ed72abcdd1841a25f5722b9d7aae65e40cd434fea664736f6c63430007030033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063987473231161008c578063e8ea054b11610066578063e8ea054b1461028a578063f2fde38b146102b0578063f77c4791146102d6578063f887ea40146102de576100cf565b80639874732314610232578063b1af34031461027a578063b27f681e14610282576100cf565b8063210f25f4146100d4578063268d79951461011e5780632ed739321461014657806377fc2b19146101e957806387463cc5146102225780638da5cb5b1461022a575b600080fd5b61010c600480360360608110156100ea57600080fd5b506001600160a01b0381358116916020810135821691604090910135166102e6565b60408051918252519081900360200190f35b6101446004803603602081101561013457600080fd5b50356001600160a01b03166103cb565b005b6101446004803603602081101561015c57600080fd5b81019060208101813564010000000081111561017757600080fd5b82018360208201111561018957600080fd5b803590602001918460208302840111640100000000831117156101ab57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610446945050505050565b610206600480360360208110156101ff57600080fd5b50356104df565b604080516001600160a01b039092168252519081900360200190f35b61010c61084f565b610206610855565b61024f6004803603602081101561024857600080fd5b5035610864565b604080516001600160a01b039485168152928416602084015292168183015290519081900360600190f35b61010c610892565b61010c6108a4565b610144600480360360208110156102a057600080fd5b50356001600160a01b03166108b0565b610144600480360360208110156102c657600080fd5b50356001600160a01b031661092b565b6102066109a6565b6102066109b5565b600080546001600160a01b03166102fb6109c4565b6001600160a01b0316146103405760405162461bcd60e51b8152600401808060200182810382526021815260200180610c966021913960400191505060405180910390fd5b5060038054604080516060810182526001600160a01b038088168252868116602080840191825287831684860190815260008781526004909252949020925183549083166001600160a01b0319918216178455905160018085018054928516928416929092179091559351600290930180549390921692169190911790558254019091559392505050565b6000546001600160a01b03166103df6109c4565b6001600160a01b0316146104245760405162461bcd60e51b8152600401808060200182810382526021815260200180610c966021913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031661045a6109c4565b6001600160a01b03161461049f5760405162461bcd60e51b8152600401808060200182810382526021815260200180610c966021913960400191505060405180910390fd5b60005b81518110156104db576104d28282815181106104ba57fe5b602002602001015160056109c890919063ffffffff16565b506001016104a2565b5050565b6000806104ea6109c4565b6000549091506001600160a01b038083169116148061051657506001546001600160a01b038281169116145b8061052e57506002546001600160a01b038281169116145b610576576040805162461bcd60e51b815260206004820152601460248201527313dc195c985d1a5bdb9050d30e8819195b9a595960621b604482015290519081900360640190fd5b60006105806109dd565b905061058a610c53565b506000848152600460209081526040808320815160608101835281546001600160a01b03908116825260018301548116948201949094526002909101549092169082018190529091906105dc906109fe565b9050606082604001516001600160a01b031663c93bd38b84600001518560200151876040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b03168152602001828152602001935050505060006040518083038186803b15801561065257600080fd5b505afa158015610666573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561068f57600080fd5b81019080805160405193929190846401000000008211156106af57600080fd5b9083019060208201858111156106c457600080fd5b82516401000000008111828201881017156106de57600080fd5b82525081516020918201929091019080838360005b8381101561070b5781810151838201526020016106f3565b50505050905090810190601f1680156107385780820380516001836020036101000a031916815260200191505b50604081905263439fab9160e01b81526020600482018181528651602484015286519697506001600160a01b0389169663439fab91965088955090935083926044019185019080838360005b8381101561079c578181015183820152602001610784565b50505050905090810190601f1680156107c95780820380516001836020036101000a031916815260200191505b5092505050600060405180830381600087803b1580156107e857600080fd5b505af11580156107fc573d6000803e3d6000fd5b505050508383602001516001600160a01b0316836001600160a01b03167f41a1a1e5033fb48fa68ae6842ead9050d540ddf76974d1cee54faf540d1f49e660405160405180910390a45095945050505050565b60035481565b6000546001600160a01b031681565b6004602052600090815260409020805460018201546002909201546001600160a01b03918216928216911683565b600061089f600582610aa0565b905090565b600061089f6005610aac565b6000546001600160a01b03166108c46109c4565b6001600160a01b0316146109095760405162461bcd60e51b8152600401808060200182810382526021815260200180610c966021913960400191505060405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031661093f6109c4565b6001600160a01b0316146109845760405162461bcd60e51b8152600401808060200182810382526021815260200180610c966021913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b6001546001600160a01b031681565b3390565b60006109d48383610ab7565b90505b92915050565b6000806109eb600582610aa0565b90506109f8600582610b01565b50905090565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116610a9b576040805162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015290519081900360640190fd5b919050565b60006109d48383610b0d565b60006109d782610b71565b6000610ac38383610b75565b610af9575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109d7565b5060006109d7565b60006109d48383610b8d565b81546000908210610b4f5760405162461bcd60e51b8152600401808060200182810382526022815260200180610c746022913960400191505060405180910390fd5b826000018281548110610b5e57fe5b9060005260206000200154905092915050565b5490565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015610c495783546000198083019190810190600090879083908110610bc057fe5b9060005260206000200154905080876000018481548110610bdd57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080610c0d57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506109d7565b60009150506109d7565b60408051606081018252600080825260208201819052918101919091529056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734f7065726174696f6e41434c3a206f776e6572206163636573732064656e696564a26469706673582212208c4f5ac81c015f81b49309ed72abcdd1841a25f5722b9d7aae65e40cd434fea664736f6c63430007030033
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.