More Info
Private Name Tags
ContractCreator
Latest 15 from a total of 15 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Distribute Fees | 12489366 | 61 days ago | IN | 0 ETH | 0.00065319 | ||||
Distribute Fees | 11423039 | 86 days ago | IN | 0 ETH | 0.00041732 | ||||
Distribute Fees | 6038625 | 211 days ago | IN | 0 ETH | 0.00005275 | ||||
Distribute Fees | 5103768 | 236 days ago | IN | 0 ETH | 0.00005587 | ||||
Set Fee Registry | 4961946 | 240 days ago | IN | 0 ETH | 0.00000254 | ||||
Distribute Fees | 4786307 | 247 days ago | IN | 0 ETH | 0.00004567 | ||||
Set Fee Registry | 4580983 | 254 days ago | IN | 0 ETH | 0.0000021 | ||||
Distribute Fees | 3513614 | 291 days ago | IN | 0 ETH | 0.00003216 | ||||
Distribute Fees | 2601901 | 329 days ago | IN | 0 ETH | 0.00057421 | ||||
Set Fee Registry | 2218084 | 347 days ago | IN | 0 ETH | 0.0000602 | ||||
Distribute Fees | 1624747 | 378 days ago | IN | 0 ETH | 0.0007862 | ||||
Distribute Fees | 1303817 | 400 days ago | IN | 0 ETH | 0.00156159 | ||||
Distribute Fees | 916884 | 431 days ago | IN | 0 ETH | 0.00035012 | ||||
Distribute Fees | 901628 | 432 days ago | IN | 0 ETH | 0.00023241 | ||||
Distribute Fees | 655188 | 465 days ago | IN | 0 ETH | 0.00015422 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14995874 | 11 mins ago | 0 ETH | ||||
14995874 | 11 mins ago | 0 ETH | ||||
14995473 | 27 mins ago | 0 ETH | ||||
14995473 | 27 mins ago | 0 ETH | ||||
14995308 | 34 mins ago | 0 ETH | ||||
14995308 | 34 mins ago | 0 ETH | ||||
14995272 | 35 mins ago | 0 ETH | ||||
14995272 | 35 mins ago | 0 ETH | ||||
14995023 | 46 mins ago | 0 ETH | ||||
14995023 | 46 mins ago | 0 ETH | ||||
14994928 | 50 mins ago | 0 ETH | ||||
14994928 | 50 mins ago | 0 ETH | ||||
14994580 | 1 hr ago | 0 ETH | ||||
14994580 | 1 hr ago | 0 ETH | ||||
14994463 | 1 hr ago | 0 ETH | ||||
14994463 | 1 hr ago | 0 ETH | ||||
14994411 | 1 hr ago | 0 ETH | ||||
14994411 | 1 hr ago | 0 ETH | ||||
14994388 | 1 hr ago | 0 ETH | ||||
14994388 | 1 hr ago | 0 ETH | ||||
14994371 | 1 hr ago | 0 ETH | ||||
14994371 | 1 hr ago | 0 ETH | ||||
14994051 | 1 hr ago | 0 ETH | ||||
14994051 | 1 hr ago | 0 ETH | ||||
14994036 | 1 hr ago | 0 ETH |
Loading...
Loading
Contract Name:
SyncSwapFeeRecipient
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; import "../interfaces/token/IERC20.sol"; import "../interfaces/master/IFeeRegistry.sol"; import "../interfaces/master/IFeeRecipient.sol"; import "../libraries/Ownable2Step.sol"; import "../libraries/TransferHelper.sol"; error InvalidFeeSender(); contract SyncSwapFeeRecipient is IFeeRecipient, Ownable2Step { uint public epochDuration = 1 days; /// @dev The registry for fee senders. address public feeRegistry; /// @dev The epoch fees of each token. mapping(uint => mapping(address => uint)) public fees; // epoch => token => amount /// @dev The fees tokens in each epoch. mapping(uint => address[]) public feeTokens; /// @dev Whether the address is a fee distributor. mapping(address => bool) public isFeeDistributor; /// @dev The fee distributors. address[] public feeDistributors; // for inspection only struct FeeTokenData { // The start time of a fee token from a sender. uint startTime; // The accumulated fee amount since start time. uint amount; } /// @dev The fee token data of a sender. mapping(address => mapping(address => FeeTokenData)) public feeTokenData; // sender => token => time event NotifyFees(address indexed sender, uint16 indexed feeType, address indexed token, uint amount, uint feeRate); event AddFeeDistributor(address indexed distributor); event RemoveFeeDistributor(address indexed distributor); event SetFeeRegistry(address indexed feeRegistry); event SetEpochDuration(uint epochDuration); constructor(address _feeRegistry) { feeRegistry = _feeRegistry; } function feeTokensLength(uint epoch) external view returns (uint) { return feeTokens[epoch].length; } function feeDistributorsLength() external view returns (uint) { return feeDistributors.length; } function getEpochStart(uint ts) public view returns (uint) { return ts - (ts % epochDuration); } /// @dev Notifies the fee recipient after sent fees. function notifyFees( uint16 feeType, address token, uint amount, uint feeRate, bytes calldata /*data*/ ) external override { if (!IFeeRegistry(feeRegistry).isFeeSender(msg.sender)) { revert InvalidFeeSender(); } uint epoch = getEpochStart(block.timestamp); uint epochTokenFees = fees[epoch][token]; // Unchecked to avoid potential overflow, since fees are only for inspection. unchecked { if (epochTokenFees == 0) { // Pushes new tokens to array. feeTokens[epoch].push(token); // Updates epoch fees for the token. fees[epoch][token] = amount; // Updates fee token data for sender. feeTokenData[msg.sender][token] = FeeTokenData({ startTime: block.timestamp, amount: amount }); } else { // Updates epoch fees for the token. fees[epoch][token] = (epochTokenFees + amount); // Updates fee token data for sender. feeTokenData[msg.sender][token].amount += amount; } } emit NotifyFees(msg.sender, feeType, token, amount, feeRate); } /// @dev Distributes fees to the recipient. function distributeFees(address to, address[] calldata tokens, uint[] calldata amounts) external { require(isFeeDistributor[msg.sender] || msg.sender == owner(), "No perms"); require(tokens.length == amounts.length, "Wrong length"); uint n = tokens.length; address token; uint amount; for (uint i; i < n; ) { token = tokens[i]; amount = amounts[i]; if (token == address(0)) { // ETH if (amount == 0) { amount = address(this).balance; } TransferHelper.safeTransferETH(to, amount); } else { if (amount == 0) { amount = IERC20(token).balanceOf(address(this)); } TransferHelper.safeTransfer(token, to, amount); } unchecked { ++i; } } } /// @dev Adds a new fee distributor. function addFeeDistributor(address distributor) external onlyOwner { require(distributor != address(0), "Invalid address"); require(!isFeeDistributor[distributor], "Already set"); isFeeDistributor[distributor] = true; feeDistributors.push(distributor); emit AddFeeDistributor(distributor); } /// @dev Removes a new fee distributor. function removeFeeDistributor(address distributor, bool updateArray) external onlyOwner { require(isFeeDistributor[distributor], "Not set"); delete isFeeDistributor[distributor]; if (updateArray) { uint n = feeDistributors.length; for (uint i; i < n; ) { if (feeDistributors[i] == distributor) { feeDistributors[i] = feeDistributors[n - 1]; feeDistributors[n - 1] = distributor; feeDistributors.pop(); break; } unchecked { ++i; } } } emit RemoveFeeDistributor(distributor); } /// @dev Sets a new fee registry. function setFeeRegistry(address _feeRegistry) external onlyOwner { require(_feeRegistry != address(0), "Invalid address"); feeRegistry = _feeRegistry; emit SetFeeRegistry(_feeRegistry); } function setEpochDuration(uint _epochDuration) external onlyOwner { require(_epochDuration != 0, "Invalid duration"); epochDuration = _epochDuration; emit SetEpochDuration(_epochDuration); } function withdrawERC20(address token, address to, uint amount) external onlyOwner { if (amount == 0) { amount = IERC20(token).balanceOf(address(this)); } TransferHelper.safeTransfer(token, to, amount); } function withdrawETH(address to, uint amount) external onlyOwner { if (amount == 0) { amount = address(this).balance; } TransferHelper.safeTransferETH(to, amount); } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity >=0.5.0; interface IFeeRecipient { /// @dev Notifies the fee recipient after sent fees. function notifyFees( uint16 feeType, address token, uint amount, uint feeRate, bytes calldata data ) external; }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity >=0.5.0; interface IFeeRegistry { function isFeeSender(address sender) external view returns (bool); }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity >=0.5.0; import "./IERC20Base.sol"; interface IERC20 is IERC20Base { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity >=0.5.0; interface IERC20Base { function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint amount) external returns (bool); function transfer(address to, uint amount) external returns (bool); function transferFrom(address from, address to, uint amount) external returns (bool); event Approval(address indexed owner, address indexed spender, uint amount); event Transfer(address indexed from, address indexed to, uint amount); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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(msg.sender); } /** * @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. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol) pragma solidity ^0.8.0; import "./Ownable.sol"; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() public virtual { require(pendingOwner() == msg.sender, "Ownable2Step: caller is not the new owner"); _transferOwnership(msg.sender); } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; /// @dev The ETH transfer has failed. error ETHTransferFailed(); /// @dev The ERC20 `transferFrom` has failed. error TransferFromFailed(); /// @dev The ERC20 `transfer` has failed. error TransferFailed(); /// @dev The ERC20 `approve` has failed. error ApproveFailed(); /// @dev Helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true / false. library TransferHelper { function safeApprove( address token, address to, uint value ) internal { // bytes4(keccak256(bytes("approve(address,uint256)"))); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); if (!success || (data.length != 0 && !abi.decode(data, (bool)))) { revert ApproveFailed(); } } function safeTransfer( address token, address to, uint value ) internal { // bytes4(keccak256(bytes("transfer(address,uint256)"))); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); if (!success || (data.length != 0 && !abi.decode(data, (bool)))) { revert TransferFailed(); } } function safeTransferFrom( address token, address from, address to, uint value ) internal { // bytes4(keccak256(bytes("transferFrom(address,address,uint256)"))); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); if (!success || (data.length != 0 && !abi.decode(data, (bool)))) { revert TransferFromFailed(); } } function safeTransferETH(address to, uint value) internal { // solhint-disable-next-line avoid-low-level-calls (bool success, ) = to.call{value: value}(""); if (!success) { revert ETHTransferFailed(); } } }
{ "optimizer": { "enabled": true, "runs": 200, "details": { "yul": false } }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_feeRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ETHTransferFailed","type":"error"},{"inputs":[],"name":"InvalidFeeSender","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"distributor","type":"address"}],"name":"AddFeeDistributor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint16","name":"feeType","type":"uint16"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeRate","type":"uint256"}],"name":"NotifyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"distributor","type":"address"}],"name":"RemoveFeeDistributor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"epochDuration","type":"uint256"}],"name":"SetEpochDuration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"feeRegistry","type":"address"}],"name":"SetFeeRegistry","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"distributor","type":"address"}],"name":"addFeeDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epochDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feeDistributors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDistributorsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"feeTokenData","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"feeTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"feeTokensLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"fees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ts","type":"uint256"}],"name":"getEpochStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeDistributor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"feeType","type":"uint16"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"feeRate","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"notifyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"distributor","type":"address"},{"internalType":"bool","name":"updateArray","type":"bool"}],"name":"removeFeeDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_epochDuration","type":"uint256"}],"name":"setEpochDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeRegistry","type":"address"}],"name":"setFeeRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052620151806002553480156200001857600080fd5b506040516200174a3803806200174a8339810160408190526200003b916200011d565b62000046336200006c565b600380546001600160a01b0319166001600160a01b03929092169190911790556200014a565b600180546001600160a01b0319169055620000938162000096602090811b62000c8717901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6200010481620000e6565b81146200009357600080fd5b8051620000f381620000f9565b600060208284031215620001345762000134600080fd5b600062000142848462000110565b949350505050565b6115f0806200015a6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806379ba5097116100c3578063acdad7d01161007c578063acdad7d0146102ef578063b3a408b814610302578063b7c6d43714610315578063dfcfa80514610328578063e30c397814610348578063f2fde38b1461035957600080fd5b806379ba50971461025d5780637b364e6c14610265578063843e8218146102a55780638da5cb5b146102b85780639dc0f2e8146102c9578063a6db0aa4146102dc57600080fd5b80634ff0876a116101155780634ff0876a146101e15780635286ad60146101ea5780635397401b146101f2578063641c9eaa146102225780637118c6d714610235578063715018a61461025557600080fd5b80630175e23b1461015257806330024dfe1461017b57806333c373771461019057806344004cc1146101bb5780634782f779146101ce575b600080fd5b610165610160366004610eb4565b61036c565b6040516101729190610ee5565b60405180910390f35b61018e610189366004610eb4565b61038c565b005b61016561019e366004610f18565b600460209081526000928352604080842090915290825290205481565b61018e6101c9366004610f55565b6103fd565b61018e6101dc366004610fa5565b61048d565b61016560025481565b600754610165565b610215610200366004610fd8565b60066020526000908152604090205460ff1681565b6040516101729190611001565b61018e610230366004611061565b6104ae565b6102486102433660046110f1565b610624565b604051610172919061111c565b61018e61065c565b61018e610670565b61029761027336600461112a565b60086020908152600092835260408084209091529082529020805460019091015482565b60405161017292919061114c565b61018e6102b33660046111ce565b6106b2565b6000546001600160a01b0316610248565b61018e6102d7366004611277565b61089d565b61018e6102ea366004610fd8565b610a81565b61018e6102fd366004610fd8565b610b74565b600354610248906001600160a01b031681565b610248610323366004610eb4565b610bec565b610165610336366004610eb4565b60009081526005602052604090205490565b6001546001600160a01b0316610248565b61018e610367366004610fd8565b610c16565b60006002548261037c91906112c0565b61038690836112ea565b92915050565b610394610cd7565b806000036103bd5760405162461bcd60e51b81526004016103b49061132b565b60405180910390fd5b60028190556040517f5bce98672bb5217cce91d9b398e088c3e74809346b9c3348f45cf509038504fc906103f2908390610ee5565b60405180910390a150565b610405610cd7565b8060000361047d576040516370a0823160e01b81526001600160a01b038416906370a082319061043990309060040161111c565b602060405180830381865afa158015610456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047a9190611346565b90505b610488838383610d10565b505050565b610495610cd7565b806000036104a05750475b6104aa8282610e03565b5050565b3360009081526006602052604090205460ff16806104d657506000546001600160a01b031633145b6104f25760405162461bcd60e51b81526004016103b490611386565b8281146105115760405162461bcd60e51b81526004016103b4906113b9565b82600080805b8381101561061957878782818110610531576105316113c9565b90506020020160208101906105469190610fd8565b925085858281811061055a5761055a6113c9565b60200291909101359250506001600160a01b03831661058e578160000361057f574791505b6105898983610e03565b610611565b81600003610606576040516370a0823160e01b81526001600160a01b038416906370a08231906105c290309060040161111c565b602060405180830381865afa1580156105df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106039190611346565b91505b610611838a84610d10565b600101610517565b505050505050505050565b6005602052816000526040600020818154811061064057600080fd5b6000918252602090912001546001600160a01b03169150829050565b610664610cd7565b61066e6000610e80565b565b336106836001546001600160a01b031690565b6001600160a01b0316146106a95760405162461bcd60e51b81526004016103b4906113df565b61066e33610e80565b60035460405163fe47d6e160e01b81526001600160a01b039091169063fe47d6e1906106e290339060040161111c565b602060405180830381865afa1580156106ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107239190611437565b61074057604051635ae3252d60e11b815260040160405180910390fd5b600061074b4261036c565b60008181526004602090815260408083206001600160a01b038b1684529091528120549192508190036107fc5760008281526005602090815260408083208054600180820183559185528385200180546001600160a01b0319166001600160a01b038d169081179091558685526004845282852081865284528285208b9055825180840184524281528085018c81523387526008865284872092875291909452919093209151825551910155610841565b60008281526004602090815260408083206001600160a01b038b16808552908352818420858b0190553384526008835281842090845290915290206001018054870190555b866001600160a01b03168861ffff16336001600160a01b03167fd9cc3fd2bd703eb089f05b4dc0c28c75957d1775a1a2f72bff0e235a4dd710a6898960405161088b92919061114c565b60405180910390a45050505050505050565b6108a5610cd7565b6001600160a01b03821660009081526006602052604090205460ff166108dd5760405162461bcd60e51b81526004016103b490611476565b6001600160a01b0382166000908152600660205260409020805460ff191690558015610a495760075460005b81811015610a4657836001600160a01b03166007828154811061092e5761092e6113c9565b6000918252602090912001546001600160a01b031603610a3e5760076109556001846112ea565b81548110610965576109656113c9565b600091825260209091200154600780546001600160a01b039092169183908110610991576109916113c9565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558360076109c86001856112ea565b815481106109d8576109d86113c9565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506007805480610a1757610a17611486565b600082815260209020810160001990810180546001600160a01b0319169055019055610a46565b600101610909565b50505b6040516001600160a01b038316907f26b772cce7966f2cbf620e2f87b81c664ac00ac028b0d245e1138823526a779990600090a25050565b610a89610cd7565b6001600160a01b038116610aaf5760405162461bcd60e51b81526004016103b4906114c2565b6001600160a01b03811660009081526006602052604090205460ff1615610ae85760405162461bcd60e51b81526004016103b4906114f4565b6001600160a01b038116600081815260066020526040808220805460ff1916600190811790915560078054918201815583527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191684179055517f9bb88b21f52273267cddc0cbdd9f83415b89e652b819d3cfe37ad9ed833bc2499190a250565b610b7c610cd7565b6001600160a01b038116610ba25760405162461bcd60e51b81526004016103b4906114c2565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f38cb9250f3682ece75ce5c2f1477a9f818ace4522e65517be27af55c2862197f90600090a250565b60078181548110610bfc57600080fd5b6000918252602090912001546001600160a01b0316905081565b610c1e610cd7565b600180546001600160a01b0383166001600160a01b03199091168117909155610c4f6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b33610cea6000546001600160a01b031690565b6001600160a01b03161461066e5760405162461bcd60e51b81526004016103b490611536565b600080846001600160a01b031663a9059cbb8585604051602401610d35929190611546565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610d6e91906115a6565b6000604051808303816000865af19150503d8060008114610dab576040519150601f19603f3d011682016040523d82523d6000602084013e610db0565b606091505b5091509150811580610dde5750805115801590610dde575080806020019051810190610ddc9190611437565b155b15610dfc576040516312171d8360e31b815260040160405180910390fd5b5050505050565b6000826001600160a01b031682604051610e1c906115b2565b60006040518083038185875af1925050503d8060008114610e59576040519150601f19603f3d011682016040523d82523d6000602084013e610e5e565b606091505b50509050806104885760405163b12d13eb60e01b815260040160405180910390fd5b600180546001600160a01b0319169055610e9981610c87565b50565b805b8114610e9957600080fd5b803561038681610e9c565b600060208284031215610ec957610ec9600080fd5b6000610ed58484610ea9565b949350505050565b805b82525050565b602081016103868284610edd565b60006001600160a01b038216610386565b610e9e81610ef3565b803561038681610f04565b60008060408385031215610f2e57610f2e600080fd5b6000610f3a8585610ea9565b9250506020610f4b85828601610f0d565b9150509250929050565b600080600060608486031215610f6d57610f6d600080fd5b6000610f798686610f0d565b9350506020610f8a86828701610f0d565b9250506040610f9b86828701610ea9565b9150509250925092565b60008060408385031215610fbb57610fbb600080fd5b6000610fc78585610f0d565b9250506020610f4b85828601610ea9565b600060208284031215610fed57610fed600080fd5b6000610ed58484610f0d565b801515610edf565b602081016103868284610ff9565b60008083601f84011261102457611024600080fd5b50813567ffffffffffffffff81111561103f5761103f600080fd5b60208301915083602082028301111561105a5761105a600080fd5b9250929050565b60008060008060006060868803121561107c5761107c600080fd5b60006110888888610f0d565b955050602086013567ffffffffffffffff8111156110a8576110a8600080fd5b6110b48882890161100f565b9450945050604086013567ffffffffffffffff8111156110d6576110d6600080fd5b6110e28882890161100f565b92509250509295509295909350565b6000806040838503121561110757611107600080fd5b6000610fc78585610ea9565b610edf81610ef3565b602081016103868284611113565b6000806040838503121561114057611140600080fd5b6000610f3a8585610f0d565b6040810161115a8285610edd565b6111676020830184610edd565b9392505050565b61ffff8116610e9e565b80356103868161116e565b60008083601f84011261119857611198600080fd5b50813567ffffffffffffffff8111156111b3576111b3600080fd5b60208301915083600182028301111561105a5761105a600080fd5b60008060008060008060a087890312156111ea576111ea600080fd5b60006111f68989611178565b965050602061120789828a01610f0d565b955050604061121889828a01610ea9565b945050606061122989828a01610ea9565b935050608087013567ffffffffffffffff81111561124957611249600080fd5b61125589828a01611183565b92509250509295509295509295565b801515610e9e565b803561038681611264565b6000806040838503121561128d5761128d600080fd5b60006112998585610f0d565b9250506020610f4b8582860161126c565b634e487b7160e01b600052601260045260246000fd5b6000826112cf576112cf6112aa565b500690565b634e487b7160e01b600052601160045260246000fd5b6000828210156112fc576112fc6112d4565b500390565b601081526000602082016f24b73b30b634b210323ab930ba34b7b760811b815291505b5060200190565b6020808252810161038681611301565b805161038681610e9c565b60006020828403121561135b5761135b600080fd5b6000610ed5848461133b565b60088152600060208201674e6f207065726d7360c01b81529150611324565b6020808252810161038681611367565b600c81526000602082016b0aee4dedcce40d8cadccee8d60a31b81529150611324565b6020808252810161038681611396565b634e487b7160e01b600052603260045260246000fd5b6020808252810161038681602981527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206020820152683732bb9037bbb732b960b91b604082015260600190565b805161038681611264565b60006020828403121561144c5761144c600080fd5b6000610ed5848461142c565b6007815260006020820166139bdd081cd95d60ca1b81529150611324565b6020808252810161038681611458565b634e487b7160e01b600052603160045260246000fd5b600f81526000602082016e496e76616c6964206164647265737360881b81529150611324565b602080825281016103868161149c565b600b81526000602082016a105b1c9958591e481cd95d60aa1b81529150611324565b60208082528101610386816114d2565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000611324565b6020808252810161038681611504565b6040810161115a8285611113565b60005b8381101561156f578181015183820152602001611557565b8381111561157e576000848401525b50505050565b600061158e825190565b61159c818560208601611554565b9290920192915050565b60006111678284611584565b60008161038656fea264697066735822122094e8d7a68debfa7973dee226fba77cbf702e6ce566b2a03e5af9863c1870618a64736f6c634300080f00330000000000000000000000008cdf4ec0d5ee197b00467a720660c44480b3ec60
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806379ba5097116100c3578063acdad7d01161007c578063acdad7d0146102ef578063b3a408b814610302578063b7c6d43714610315578063dfcfa80514610328578063e30c397814610348578063f2fde38b1461035957600080fd5b806379ba50971461025d5780637b364e6c14610265578063843e8218146102a55780638da5cb5b146102b85780639dc0f2e8146102c9578063a6db0aa4146102dc57600080fd5b80634ff0876a116101155780634ff0876a146101e15780635286ad60146101ea5780635397401b146101f2578063641c9eaa146102225780637118c6d714610235578063715018a61461025557600080fd5b80630175e23b1461015257806330024dfe1461017b57806333c373771461019057806344004cc1146101bb5780634782f779146101ce575b600080fd5b610165610160366004610eb4565b61036c565b6040516101729190610ee5565b60405180910390f35b61018e610189366004610eb4565b61038c565b005b61016561019e366004610f18565b600460209081526000928352604080842090915290825290205481565b61018e6101c9366004610f55565b6103fd565b61018e6101dc366004610fa5565b61048d565b61016560025481565b600754610165565b610215610200366004610fd8565b60066020526000908152604090205460ff1681565b6040516101729190611001565b61018e610230366004611061565b6104ae565b6102486102433660046110f1565b610624565b604051610172919061111c565b61018e61065c565b61018e610670565b61029761027336600461112a565b60086020908152600092835260408084209091529082529020805460019091015482565b60405161017292919061114c565b61018e6102b33660046111ce565b6106b2565b6000546001600160a01b0316610248565b61018e6102d7366004611277565b61089d565b61018e6102ea366004610fd8565b610a81565b61018e6102fd366004610fd8565b610b74565b600354610248906001600160a01b031681565b610248610323366004610eb4565b610bec565b610165610336366004610eb4565b60009081526005602052604090205490565b6001546001600160a01b0316610248565b61018e610367366004610fd8565b610c16565b60006002548261037c91906112c0565b61038690836112ea565b92915050565b610394610cd7565b806000036103bd5760405162461bcd60e51b81526004016103b49061132b565b60405180910390fd5b60028190556040517f5bce98672bb5217cce91d9b398e088c3e74809346b9c3348f45cf509038504fc906103f2908390610ee5565b60405180910390a150565b610405610cd7565b8060000361047d576040516370a0823160e01b81526001600160a01b038416906370a082319061043990309060040161111c565b602060405180830381865afa158015610456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047a9190611346565b90505b610488838383610d10565b505050565b610495610cd7565b806000036104a05750475b6104aa8282610e03565b5050565b3360009081526006602052604090205460ff16806104d657506000546001600160a01b031633145b6104f25760405162461bcd60e51b81526004016103b490611386565b8281146105115760405162461bcd60e51b81526004016103b4906113b9565b82600080805b8381101561061957878782818110610531576105316113c9565b90506020020160208101906105469190610fd8565b925085858281811061055a5761055a6113c9565b60200291909101359250506001600160a01b03831661058e578160000361057f574791505b6105898983610e03565b610611565b81600003610606576040516370a0823160e01b81526001600160a01b038416906370a08231906105c290309060040161111c565b602060405180830381865afa1580156105df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106039190611346565b91505b610611838a84610d10565b600101610517565b505050505050505050565b6005602052816000526040600020818154811061064057600080fd5b6000918252602090912001546001600160a01b03169150829050565b610664610cd7565b61066e6000610e80565b565b336106836001546001600160a01b031690565b6001600160a01b0316146106a95760405162461bcd60e51b81526004016103b4906113df565b61066e33610e80565b60035460405163fe47d6e160e01b81526001600160a01b039091169063fe47d6e1906106e290339060040161111c565b602060405180830381865afa1580156106ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107239190611437565b61074057604051635ae3252d60e11b815260040160405180910390fd5b600061074b4261036c565b60008181526004602090815260408083206001600160a01b038b1684529091528120549192508190036107fc5760008281526005602090815260408083208054600180820183559185528385200180546001600160a01b0319166001600160a01b038d169081179091558685526004845282852081865284528285208b9055825180840184524281528085018c81523387526008865284872092875291909452919093209151825551910155610841565b60008281526004602090815260408083206001600160a01b038b16808552908352818420858b0190553384526008835281842090845290915290206001018054870190555b866001600160a01b03168861ffff16336001600160a01b03167fd9cc3fd2bd703eb089f05b4dc0c28c75957d1775a1a2f72bff0e235a4dd710a6898960405161088b92919061114c565b60405180910390a45050505050505050565b6108a5610cd7565b6001600160a01b03821660009081526006602052604090205460ff166108dd5760405162461bcd60e51b81526004016103b490611476565b6001600160a01b0382166000908152600660205260409020805460ff191690558015610a495760075460005b81811015610a4657836001600160a01b03166007828154811061092e5761092e6113c9565b6000918252602090912001546001600160a01b031603610a3e5760076109556001846112ea565b81548110610965576109656113c9565b600091825260209091200154600780546001600160a01b039092169183908110610991576109916113c9565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558360076109c86001856112ea565b815481106109d8576109d86113c9565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506007805480610a1757610a17611486565b600082815260209020810160001990810180546001600160a01b0319169055019055610a46565b600101610909565b50505b6040516001600160a01b038316907f26b772cce7966f2cbf620e2f87b81c664ac00ac028b0d245e1138823526a779990600090a25050565b610a89610cd7565b6001600160a01b038116610aaf5760405162461bcd60e51b81526004016103b4906114c2565b6001600160a01b03811660009081526006602052604090205460ff1615610ae85760405162461bcd60e51b81526004016103b4906114f4565b6001600160a01b038116600081815260066020526040808220805460ff1916600190811790915560078054918201815583527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191684179055517f9bb88b21f52273267cddc0cbdd9f83415b89e652b819d3cfe37ad9ed833bc2499190a250565b610b7c610cd7565b6001600160a01b038116610ba25760405162461bcd60e51b81526004016103b4906114c2565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f38cb9250f3682ece75ce5c2f1477a9f818ace4522e65517be27af55c2862197f90600090a250565b60078181548110610bfc57600080fd5b6000918252602090912001546001600160a01b0316905081565b610c1e610cd7565b600180546001600160a01b0383166001600160a01b03199091168117909155610c4f6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b33610cea6000546001600160a01b031690565b6001600160a01b03161461066e5760405162461bcd60e51b81526004016103b490611536565b600080846001600160a01b031663a9059cbb8585604051602401610d35929190611546565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610d6e91906115a6565b6000604051808303816000865af19150503d8060008114610dab576040519150601f19603f3d011682016040523d82523d6000602084013e610db0565b606091505b5091509150811580610dde5750805115801590610dde575080806020019051810190610ddc9190611437565b155b15610dfc576040516312171d8360e31b815260040160405180910390fd5b5050505050565b6000826001600160a01b031682604051610e1c906115b2565b60006040518083038185875af1925050503d8060008114610e59576040519150601f19603f3d011682016040523d82523d6000602084013e610e5e565b606091505b50509050806104885760405163b12d13eb60e01b815260040160405180910390fd5b600180546001600160a01b0319169055610e9981610c87565b50565b805b8114610e9957600080fd5b803561038681610e9c565b600060208284031215610ec957610ec9600080fd5b6000610ed58484610ea9565b949350505050565b805b82525050565b602081016103868284610edd565b60006001600160a01b038216610386565b610e9e81610ef3565b803561038681610f04565b60008060408385031215610f2e57610f2e600080fd5b6000610f3a8585610ea9565b9250506020610f4b85828601610f0d565b9150509250929050565b600080600060608486031215610f6d57610f6d600080fd5b6000610f798686610f0d565b9350506020610f8a86828701610f0d565b9250506040610f9b86828701610ea9565b9150509250925092565b60008060408385031215610fbb57610fbb600080fd5b6000610fc78585610f0d565b9250506020610f4b85828601610ea9565b600060208284031215610fed57610fed600080fd5b6000610ed58484610f0d565b801515610edf565b602081016103868284610ff9565b60008083601f84011261102457611024600080fd5b50813567ffffffffffffffff81111561103f5761103f600080fd5b60208301915083602082028301111561105a5761105a600080fd5b9250929050565b60008060008060006060868803121561107c5761107c600080fd5b60006110888888610f0d565b955050602086013567ffffffffffffffff8111156110a8576110a8600080fd5b6110b48882890161100f565b9450945050604086013567ffffffffffffffff8111156110d6576110d6600080fd5b6110e28882890161100f565b92509250509295509295909350565b6000806040838503121561110757611107600080fd5b6000610fc78585610ea9565b610edf81610ef3565b602081016103868284611113565b6000806040838503121561114057611140600080fd5b6000610f3a8585610f0d565b6040810161115a8285610edd565b6111676020830184610edd565b9392505050565b61ffff8116610e9e565b80356103868161116e565b60008083601f84011261119857611198600080fd5b50813567ffffffffffffffff8111156111b3576111b3600080fd5b60208301915083600182028301111561105a5761105a600080fd5b60008060008060008060a087890312156111ea576111ea600080fd5b60006111f68989611178565b965050602061120789828a01610f0d565b955050604061121889828a01610ea9565b945050606061122989828a01610ea9565b935050608087013567ffffffffffffffff81111561124957611249600080fd5b61125589828a01611183565b92509250509295509295509295565b801515610e9e565b803561038681611264565b6000806040838503121561128d5761128d600080fd5b60006112998585610f0d565b9250506020610f4b8582860161126c565b634e487b7160e01b600052601260045260246000fd5b6000826112cf576112cf6112aa565b500690565b634e487b7160e01b600052601160045260246000fd5b6000828210156112fc576112fc6112d4565b500390565b601081526000602082016f24b73b30b634b210323ab930ba34b7b760811b815291505b5060200190565b6020808252810161038681611301565b805161038681610e9c565b60006020828403121561135b5761135b600080fd5b6000610ed5848461133b565b60088152600060208201674e6f207065726d7360c01b81529150611324565b6020808252810161038681611367565b600c81526000602082016b0aee4dedcce40d8cadccee8d60a31b81529150611324565b6020808252810161038681611396565b634e487b7160e01b600052603260045260246000fd5b6020808252810161038681602981527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206020820152683732bb9037bbb732b960b91b604082015260600190565b805161038681611264565b60006020828403121561144c5761144c600080fd5b6000610ed5848461142c565b6007815260006020820166139bdd081cd95d60ca1b81529150611324565b6020808252810161038681611458565b634e487b7160e01b600052603160045260246000fd5b600f81526000602082016e496e76616c6964206164647265737360881b81529150611324565b602080825281016103868161149c565b600b81526000602082016a105b1c9958591e481cd95d60aa1b81529150611324565b60208082528101610386816114d2565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081526000611324565b6020808252810161038681611504565b6040810161115a8285611113565b60005b8381101561156f578181015183820152602001611557565b8381111561157e576000848401525b50505050565b600061158e825190565b61159c818560208601611554565b9290920192915050565b60006111678284611584565b60008161038656fea264697066735822122094e8d7a68debfa7973dee226fba77cbf702e6ce566b2a03e5af9863c1870618a64736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008cdf4ec0d5ee197b00467a720660c44480b3ec60
-----Decoded View---------------
Arg [0] : _feeRegistry (address): 0x8cDf4Ec0D5ee197B00467A720660C44480B3Ec60
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000008cdf4ec0d5ee197b00467a720660c44480b3ec60
Loading...
Loading
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.