Source Code
Latest 25 from a total of 42 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Batch Collect Re... | 21115281 | 482 days ago | IN | 0 ETH | 0.00052883 | ||||
| Batch Collect Re... | 20973594 | 502 days ago | IN | 0 ETH | 0.00094761 | ||||
| Batch Collect Re... | 20803031 | 525 days ago | IN | 0 ETH | 0.0003628 | ||||
| Batch Collect Re... | 20742762 | 534 days ago | IN | 0 ETH | 0.00041881 | ||||
| Batch Collect Re... | 20735808 | 535 days ago | IN | 0 ETH | 0.00024527 | ||||
| Batch Collect Re... | 20735787 | 535 days ago | IN | 0 ETH | 0.00026668 | ||||
| Batch Collect Re... | 20723005 | 537 days ago | IN | 0 ETH | 0.0007431 | ||||
| Batch Collect Re... | 20678029 | 543 days ago | IN | 0 ETH | 0.00059825 | ||||
| Batch Collect Re... | 20663185 | 545 days ago | IN | 0 ETH | 0.00019746 | ||||
| Batch Collect Re... | 20598538 | 554 days ago | IN | 0 ETH | 0.00005333 | ||||
| Batch Collect Re... | 20567974 | 558 days ago | IN | 0 ETH | 0.00006429 | ||||
| Create Fee Contr... | 20528818 | 564 days ago | IN | 0 ETH | 0.00112795 | ||||
| Create Fee Contr... | 20528813 | 564 days ago | IN | 0 ETH | 0.00105768 | ||||
| Create Fee Contr... | 20528806 | 564 days ago | IN | 0 ETH | 0.00110636 | ||||
| Create Fee Contr... | 20528800 | 564 days ago | IN | 0 ETH | 0.00122006 | ||||
| Create Fee Contr... | 20528794 | 564 days ago | IN | 0 ETH | 0.00128394 | ||||
| Change Default F... | 20528769 | 564 days ago | IN | 0 ETH | 0.00015754 | ||||
| Create Fee Contr... | 20528755 | 564 days ago | IN | 0 ETH | 0.00149047 | ||||
| Create Fee Contr... | 20528751 | 564 days ago | IN | 0 ETH | 0.00152526 | ||||
| Create Fee Contr... | 20528745 | 564 days ago | IN | 0 ETH | 0.00145972 | ||||
| Batch Collect Re... | 20528716 | 564 days ago | IN | 0 ETH | 0.00020834 | ||||
| Create Fee Contr... | 20528594 | 564 days ago | IN | 0 ETH | 0.00125853 | ||||
| Create Fee Contr... | 20528579 | 564 days ago | IN | 0 ETH | 0.00126434 | ||||
| Create Fee Contr... | 20528554 | 564 days ago | IN | 0 ETH | 0.00150073 | ||||
| Create Fee Contr... | 20528548 | 564 days ago | IN | 0 ETH | 0.00160467 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 21115281 | 482 days ago | 0.57962869 ETH | ||||
| Transfer | 20973594 | 502 days ago | 0.03311432 ETH | ||||
| Transfer | 20803031 | 525 days ago | 0.26591678 ETH | ||||
| Transfer | 20742762 | 534 days ago | 0.0262029 ETH | ||||
| Transfer | 20735808 | 535 days ago | 0.04085265 ETH | ||||
| Transfer | 20735787 | 535 days ago | 0.08443352 ETH | ||||
| Transfer | 20723005 | 537 days ago | 0.25324044 ETH | ||||
| Transfer | 20678029 | 543 days ago | 0.18018008 ETH | ||||
| Transfer | 20663185 | 545 days ago | 0.24240293 ETH | ||||
| Transfer | 20598538 | 554 days ago | 0.14502682 ETH | ||||
| Transfer | 20567974 | 558 days ago | 0.02316651 ETH | ||||
| 0x60c06040 | 20528818 | 564 days ago | Contract Creation | 0 ETH | |||
| 0x60c06040 | 20528813 | 564 days ago | Contract Creation | 0 ETH | |||
| 0x60c06040 | 20528806 | 564 days ago | Contract Creation | 0 ETH | |||
| 0x60c06040 | 20528800 | 564 days ago | Contract Creation | 0 ETH | |||
| 0x60c06040 | 20528794 | 564 days ago | Contract Creation | 0 ETH | |||
| 0x60c06040 | 20528755 | 564 days ago | Contract Creation | 0 ETH | |||
| 0x60c06040 | 20528751 | 564 days ago | Contract Creation | 0 ETH | |||
| 0x60c06040 | 20528745 | 564 days ago | Contract Creation | 0 ETH | |||
| Transfer | 20528716 | 564 days ago | 0.93184728 ETH | ||||
| 0x60c06040 | 20528594 | 564 days ago | Contract Creation | 0 ETH | |||
| 0x60c06040 | 20528579 | 564 days ago | Contract Creation | 0 ETH | |||
| 0x60c06040 | 20528554 | 564 days ago | Contract Creation | 0 ETH | |||
| 0x60c06040 | 20528548 | 564 days ago | Contract Creation | 0 ETH | |||
| 0x60c06040 | 20528512 | 564 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
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:
FeeRewardsManager
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache License 2.0
pragma solidity ^0.8.13;
import "@openzeppelin/contracts/access/Ownable2Step.sol";
// We use a library for the `calculateRewards` function because the less code in
// `RewardsCollector` the less expensive it is to deploy the collector contract.
// We can call the library instead of deploying the library's code again and
// again.
library CalculateAndSendRewards {
// Fee denominator, if `feeNominator = 500`,
// the tax is 500/10000 = 5/100 = 5%.
uint32 public constant FEE_DENOMINATOR = 10_000;
event CollectedReward(
address withdrawalCredential,
uint256 withdrawnAmount,
address feeRewardsManager,
uint256 fee
);
function calculateAndSendRewards(
uint32 feeNominator,
address feeRewardsManager,
address withdrawalCredential
) public {
require(address(this).balance != 0, "Nothing to distribute");
uint256 feeAmount = (address(this).balance * feeNominator) /
FEE_DENOMINATOR;
uint256 withdrawAmount = address(this).balance - feeAmount;
emit CollectedReward(
withdrawalCredential,
withdrawAmount,
feeRewardsManager,
feeAmount
);
// This can be used to call this contract again (reentrancy) but since
// all funds from this contract are used for the feeRewardsManager.
(bool feeRewardsManagerSent, ) = payable(feeRewardsManager).call{
value: feeAmount
}("");
require(
feeRewardsManagerSent,
"Failed to send Ether back to owner contract"
);
(bool sent, ) = payable(withdrawalCredential).call{
value: withdrawAmount
}("");
require(sent, "Failed to send Ether back to withdrawal credential");
}
}
contract RewardsCollector {
// 1 - fee % will go to the user in this address.
address public immutable withdrawalCredential;
// Fee's numerator.
uint32 public feeNumerator;
// This is the contract that created the `RewardsCollector`.
// Do not use owner here because this contract is going to be
// created multiple times for each `withdrawal credential` and
// we don't need any function for the ownership except when changing
// the fee.
address public immutable parentContract;
// Allow receiving MEV and other rewards.
receive() external payable {}
function collectRewards() public payable {
CalculateAndSendRewards.calculateAndSendRewards(
feeNumerator,
parentContract,
withdrawalCredential
);
}
constructor(address _withdrawalCredential) {
withdrawalCredential = _withdrawalCredential;
parentContract = msg.sender;
}
function changeFeeNumerator(uint32 _newFeeNumerator) public {
require(
msg.sender == parentContract,
"ChangeFee not called from parent contract"
);
// Do not let fee be > 1 (with 10_000 denominator).
require(_newFeeNumerator <= 10_000, "Invalid fee numerator");
feeNumerator = _newFeeNumerator;
}
}
contract FeeRewardsManager is Ownable2Step {
uint32 public defaultFeeNumerator;
constructor(uint32 _defaultFeeNumerator) Ownable(msg.sender) {
// Do not let fee be > 1 (with 10_000 denominator).
require(_defaultFeeNumerator <= 10_000, "Invalid fee numerator");
defaultFeeNumerator = _defaultFeeNumerator;
}
event ContractDeployed(address contractAddress, uint32 feeNumerator);
function changeDefaultFee(uint32 _newFeeNumerator) public onlyOwner {
// Do not let fee be > 1 (with 10_000 denominator).
require(_newFeeNumerator <= 10_000, "Invalid fee numerator");
defaultFeeNumerator = _newFeeNumerator;
}
function createFeeContract(
address _withdrawalCredential
) public returns (address payable) {
bytes32 withdrawalCredentialBytes = bytes32(
uint256(uint160(_withdrawalCredential))
);
// Uses CREATE2 opcode.
RewardsCollector rewardsCollector = new RewardsCollector{
salt: withdrawalCredentialBytes
}(_withdrawalCredential);
rewardsCollector.changeFeeNumerator(defaultFeeNumerator);
emit ContractDeployed(address(rewardsCollector), defaultFeeNumerator);
return payable(address(rewardsCollector));
}
// Predicts the address of a new contract that will be a `fee_recipient` of
// an Ethereum validator.
// Given the `_withdrawalCredential` we can instantiate a contract that will
// be deployed at a deterministic address, calculated given the
// `_withdrawalCredential`, the current contract address and the current
// contract's bytecode.
function predictFeeContractAddress(
address _withdrawalCredential
) public view returns (address) {
bytes memory bytecode = type(RewardsCollector).creationCode;
bytecode = abi.encodePacked(
bytecode,
abi.encode(_withdrawalCredential)
);
bytes32 withdrawalCredentialBytes = bytes32(
uint256(uint160(_withdrawalCredential))
);
bytes32 hash = keccak256(
abi.encodePacked(
bytes1(0xff),
address(this),
withdrawalCredentialBytes,
keccak256(bytecode)
)
);
return address(uint160(uint(hash)));
}
function changeFeeNumerator(
address payable _feeContract,
uint32 _newFee
) public onlyOwner {
RewardsCollector(_feeContract).changeFeeNumerator(_newFee);
}
function batchCollectRewards(
address payable[] calldata feeAddresses
) public {
for (uint32 i = 0; i < feeAddresses.length; ++i) {
RewardsCollector(feeAddresses[i]).collectRewards();
}
}
receive() external payable {}
// Withdraws Eth from the manager contract.
function getEth(address addr) external onlyOwner {
(bool sent, ) = payable(addr).call{value: address(this).balance}("");
require(sent, "Failed to get Eth from contract");
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol)
pragma solidity ^0.8.20;
import {Ownable} from "./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.
*
* This extension of the {Ownable} contract includes a two-step mechanism to transfer
* ownership, where the new owner must call {acceptOwnership} in order to replace the
* old one. This can help prevent common mistakes, such as transfers of ownership to
* incorrect accounts, or to contracts that are unable to interact with the
* permission system.
*
* The initial owner is specified at deployment time in the constructor for `Ownable`. 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 {
address sender = _msgSender();
if (pendingOwner() != sender) {
revert OwnableUnauthorizedAccount(sender);
}
_transferOwnership(sender);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @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.
*
* The initial owner is set to the address provided by the deployer. 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 is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @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 {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @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 {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_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 v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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 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) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}{
"remappings": [
"@openzeppelin/=lib/openzeppelin-contracts/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/openzeppelin-contracts/lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "paris",
"viaIR": false,
"libraries": {
"src/FeeRewardsManager.sol": {
"CalculateAndSendRewards": "0x8D03884EF3F39ec263F3D7c3954A868468ff8497"
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint32","name":"_defaultFeeNumerator","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"uint32","name":"feeNumerator","type":"uint32"}],"name":"ContractDeployed","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"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"feeAddresses","type":"address[]"}],"name":"batchCollectRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_newFeeNumerator","type":"uint32"}],"name":"changeDefaultFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_feeContract","type":"address"},{"internalType":"uint32","name":"_newFee","type":"uint32"}],"name":"changeFeeNumerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_withdrawalCredential","type":"address"}],"name":"createFeeContract","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultFeeNumerator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getEth","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":"_withdrawalCredential","type":"address"}],"name":"predictFeeContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801561001057600080fd5b50604051610f5b380380610f5b83398101604081905261002f9161014d565b338061005657604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61005f816100e1565b506127108163ffffffff1611156100b85760405162461bcd60e51b815260206004820152601560248201527f496e76616c696420666565206e756d657261746f720000000000000000000000604482015260640161004d565b6001805463ffffffff909216600160a01b0263ffffffff60a01b1990921691909117905561017a565b600180546001600160a01b03191690556100fa816100fd565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561015f57600080fd5b815163ffffffff8116811461017357600080fd5b9392505050565b610dd2806101896000396000f3fe6080604052600436106100ab5760003560e01c80638da5cb5b116100645780638da5cb5b14610180578063a900ccec1461019e578063af3f6f4d146101be578063e30c3978146101f7578063ef5828d014610215578063f2fde38b1461023557600080fd5b806301361090146100b75780632630be4e146100d9578063673c949d146100f95780636a953e0914610136578063715018a61461015657806379ba50971461016b57600080fd5b366100b257005b600080fd5b3480156100c357600080fd5b506100d76100d2366004610816565b610255565b005b3480156100e557600080fd5b506100d76100f436600461084b565b6102c0565b34801561010557600080fd5b506101196101143660046108c0565b610366565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014257600080fd5b506100d76101513660046108c0565b61047e565b34801561016257600080fd5b506100d7610532565b34801561017757600080fd5b506100d7610546565b34801561018c57600080fd5b506000546001600160a01b0316610119565b3480156101aa57600080fd5b506101196101b93660046108c0565b61058a565b3480156101ca57600080fd5b506001546101e290600160a01b900463ffffffff1681565b60405163ffffffff909116815260200161012d565b34801561020357600080fd5b506001546001600160a01b0316610119565b34801561022157600080fd5b506100d76102303660046108e4565b61065b565b34801561024157600080fd5b506100d76102503660046108c0565b6106d9565b61025d61074a565b6040516335c8427760e01b815263ffffffff821660048201526001600160a01b038316906335c8427790602401600060405180830381600087803b1580156102a457600080fd5b505af11580156102b8573d6000803e3d6000fd5b505050505050565b60005b63ffffffff81168211156103615782828263ffffffff168181106102e9576102e96108ff565b90506020020160208101906102fe91906108c0565b6001600160a01b03166370bb45b36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561033857600080fd5b505af115801561034c573d6000803e3d6000fd5b505050508061035a90610915565b90506102c3565b505050565b600080826001600160a01b031660001b905060008184604051610388906107db565b6001600160a01b0390911681526020018190604051809103906000f59050801580156103b8573d6000803e3d6000fd5b506001546040516335c8427760e01b8152600160a01b90910463ffffffff1660048201529091506001600160a01b038216906335c8427790602401600060405180830381600087803b15801561040d57600080fd5b505af1158015610421573d6000803e3d6000fd5b5050600154604080516001600160a01b0386168152600160a01b90920463ffffffff1660208301527f620dca0c9d04f7cea9d7f31e571d74acccd54c21dc8ff8855ec1d5a21733c26b935001905060405180910390a19392505050565b61048661074a565b6000816001600160a01b03164760405160006040518083038185875af1925050503d80600081146104d3576040519150601f19603f3d011682016040523d82523d6000602084013e6104d8565b606091505b505090508061052e5760405162461bcd60e51b815260206004820152601f60248201527f4661696c656420746f20676574204574682066726f6d20636f6e74726163740060448201526064015b60405180910390fd5b5050565b61053a61074a565b6105446000610777565b565b60015433906001600160a01b0316811461057e5760405163118cdaa760e01b81526001600160a01b0382166004820152602401610525565b61058781610777565b50565b6000806040518060200161059d906107db565b601f1982820381018352601f9091011660408181526001600160a01b038616602083015291925082910160408051601f19818403018152908290526105e59291602001610976565b60408051601f1981840301815282825280516020918201206001600160f81b0319828501523060601b6bffffffffffffffffffffffff191660218501526001600160a01b039690961660358401526055808401969096528151808403909601865260759092019052835193019290922092915050565b61066361074a565b6127108163ffffffff1611156106b35760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103332b290373ab6b2b930ba37b960591b6044820152606401610525565b6001805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6106e161074a565b600180546001600160a01b0383166001600160a01b031990911681179091556107126000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000546001600160a01b031633146105445760405163118cdaa760e01b8152336004820152602401610525565b600180546001600160a01b031916905561058781600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6104098061099483390190565b6001600160a01b038116811461058757600080fd5b803563ffffffff8116811461081157600080fd5b919050565b6000806040838503121561082957600080fd5b8235610834816107e8565b9150610842602084016107fd565b90509250929050565b6000806020838503121561085e57600080fd5b823567ffffffffffffffff8082111561087657600080fd5b818501915085601f83011261088a57600080fd5b81358181111561089957600080fd5b8660208260051b85010111156108ae57600080fd5b60209290920196919550909350505050565b6000602082840312156108d257600080fd5b81356108dd816107e8565b9392505050565b6000602082840312156108f657600080fd5b6108dd826107fd565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff80831681810361093c57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b6000815160005b81811015610967576020818501810151868301520161094d565b50600093019283525090919050565b600061098b6109858386610946565b84610946565b94935050505056fe60c060405234801561001057600080fd5b5060405161040938038061040983398101604081905261002f91610044565b6001600160a01b03166080523360a052610074565b60006020828403121561005657600080fd5b81516001600160a01b038116811461006d57600080fd5b9392505050565b60805160a05161035d6100ac60003960008181606c01528181610146015261025c01526000818160e70152610284015261035d6000f3fe60806040526004361061004e5760003560e01c8063230b9da31461005a57806335c84277146100ab57806370bb45b3146100cd57806383059303146100d5578063e86dea4a1461010957600080fd5b3661005557005b600080fd5b34801561006657600080fd5b5061008e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100b757600080fd5b506100cb6100c63660046102fa565b61013b565b005b6100cb610236565b3480156100e157600080fd5b5061008e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561011557600080fd5b506000546101269063ffffffff1681565b60405163ffffffff90911681526020016100a2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101ca5760405162461bcd60e51b815260206004820152602960248201527f4368616e6765466565206e6f742063616c6c65642066726f6d20706172656e746044820152680818dbdb9d1c9858dd60ba1b60648201526084015b60405180910390fd5b6127108163ffffffff16111561021a5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103332b290373ab6b2b930ba37b960591b60448201526064016101c1565b6000805463ffffffff191663ffffffff92909216919091179055565b60005460405162a1b0d360e71b815263ffffffff90911660048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000166044820152738d03884ef3f39ec263f3d7c3954a868468ff8497906350d869809060640160006040518083038186803b1580156102e057600080fd5b505af41580156102f4573d6000803e3d6000fd5b50505050565b60006020828403121561030c57600080fd5b813563ffffffff8116811461032057600080fd5b939250505056fea2646970667358221220dedd6e81267a3223fee9cbafd3198b4e3a87c70d5c77006b127bdbb16a8d6c9064736f6c63430008140033a2646970667358221220329aaff78029e413c142aa23bdae08b8518c0e9660d94ceee57df6f2e35d147564736f6c634300081400330000000000000000000000000000000000000000000000000000000000000af0
Deployed Bytecode
0x6080604052600436106100ab5760003560e01c80638da5cb5b116100645780638da5cb5b14610180578063a900ccec1461019e578063af3f6f4d146101be578063e30c3978146101f7578063ef5828d014610215578063f2fde38b1461023557600080fd5b806301361090146100b75780632630be4e146100d9578063673c949d146100f95780636a953e0914610136578063715018a61461015657806379ba50971461016b57600080fd5b366100b257005b600080fd5b3480156100c357600080fd5b506100d76100d2366004610816565b610255565b005b3480156100e557600080fd5b506100d76100f436600461084b565b6102c0565b34801561010557600080fd5b506101196101143660046108c0565b610366565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014257600080fd5b506100d76101513660046108c0565b61047e565b34801561016257600080fd5b506100d7610532565b34801561017757600080fd5b506100d7610546565b34801561018c57600080fd5b506000546001600160a01b0316610119565b3480156101aa57600080fd5b506101196101b93660046108c0565b61058a565b3480156101ca57600080fd5b506001546101e290600160a01b900463ffffffff1681565b60405163ffffffff909116815260200161012d565b34801561020357600080fd5b506001546001600160a01b0316610119565b34801561022157600080fd5b506100d76102303660046108e4565b61065b565b34801561024157600080fd5b506100d76102503660046108c0565b6106d9565b61025d61074a565b6040516335c8427760e01b815263ffffffff821660048201526001600160a01b038316906335c8427790602401600060405180830381600087803b1580156102a457600080fd5b505af11580156102b8573d6000803e3d6000fd5b505050505050565b60005b63ffffffff81168211156103615782828263ffffffff168181106102e9576102e96108ff565b90506020020160208101906102fe91906108c0565b6001600160a01b03166370bb45b36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561033857600080fd5b505af115801561034c573d6000803e3d6000fd5b505050508061035a90610915565b90506102c3565b505050565b600080826001600160a01b031660001b905060008184604051610388906107db565b6001600160a01b0390911681526020018190604051809103906000f59050801580156103b8573d6000803e3d6000fd5b506001546040516335c8427760e01b8152600160a01b90910463ffffffff1660048201529091506001600160a01b038216906335c8427790602401600060405180830381600087803b15801561040d57600080fd5b505af1158015610421573d6000803e3d6000fd5b5050600154604080516001600160a01b0386168152600160a01b90920463ffffffff1660208301527f620dca0c9d04f7cea9d7f31e571d74acccd54c21dc8ff8855ec1d5a21733c26b935001905060405180910390a19392505050565b61048661074a565b6000816001600160a01b03164760405160006040518083038185875af1925050503d80600081146104d3576040519150601f19603f3d011682016040523d82523d6000602084013e6104d8565b606091505b505090508061052e5760405162461bcd60e51b815260206004820152601f60248201527f4661696c656420746f20676574204574682066726f6d20636f6e74726163740060448201526064015b60405180910390fd5b5050565b61053a61074a565b6105446000610777565b565b60015433906001600160a01b0316811461057e5760405163118cdaa760e01b81526001600160a01b0382166004820152602401610525565b61058781610777565b50565b6000806040518060200161059d906107db565b601f1982820381018352601f9091011660408181526001600160a01b038616602083015291925082910160408051601f19818403018152908290526105e59291602001610976565b60408051601f1981840301815282825280516020918201206001600160f81b0319828501523060601b6bffffffffffffffffffffffff191660218501526001600160a01b039690961660358401526055808401969096528151808403909601865260759092019052835193019290922092915050565b61066361074a565b6127108163ffffffff1611156106b35760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103332b290373ab6b2b930ba37b960591b6044820152606401610525565b6001805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6106e161074a565b600180546001600160a01b0383166001600160a01b031990911681179091556107126000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000546001600160a01b031633146105445760405163118cdaa760e01b8152336004820152602401610525565b600180546001600160a01b031916905561058781600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6104098061099483390190565b6001600160a01b038116811461058757600080fd5b803563ffffffff8116811461081157600080fd5b919050565b6000806040838503121561082957600080fd5b8235610834816107e8565b9150610842602084016107fd565b90509250929050565b6000806020838503121561085e57600080fd5b823567ffffffffffffffff8082111561087657600080fd5b818501915085601f83011261088a57600080fd5b81358181111561089957600080fd5b8660208260051b85010111156108ae57600080fd5b60209290920196919550909350505050565b6000602082840312156108d257600080fd5b81356108dd816107e8565b9392505050565b6000602082840312156108f657600080fd5b6108dd826107fd565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff80831681810361093c57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b6000815160005b81811015610967576020818501810151868301520161094d565b50600093019283525090919050565b600061098b6109858386610946565b84610946565b94935050505056fe60c060405234801561001057600080fd5b5060405161040938038061040983398101604081905261002f91610044565b6001600160a01b03166080523360a052610074565b60006020828403121561005657600080fd5b81516001600160a01b038116811461006d57600080fd5b9392505050565b60805160a05161035d6100ac60003960008181606c01528181610146015261025c01526000818160e70152610284015261035d6000f3fe60806040526004361061004e5760003560e01c8063230b9da31461005a57806335c84277146100ab57806370bb45b3146100cd57806383059303146100d5578063e86dea4a1461010957600080fd5b3661005557005b600080fd5b34801561006657600080fd5b5061008e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100b757600080fd5b506100cb6100c63660046102fa565b61013b565b005b6100cb610236565b3480156100e157600080fd5b5061008e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561011557600080fd5b506000546101269063ffffffff1681565b60405163ffffffff90911681526020016100a2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101ca5760405162461bcd60e51b815260206004820152602960248201527f4368616e6765466565206e6f742063616c6c65642066726f6d20706172656e746044820152680818dbdb9d1c9858dd60ba1b60648201526084015b60405180910390fd5b6127108163ffffffff16111561021a5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103332b290373ab6b2b930ba37b960591b60448201526064016101c1565b6000805463ffffffff191663ffffffff92909216919091179055565b60005460405162a1b0d360e71b815263ffffffff90911660048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000166044820152738d03884ef3f39ec263f3d7c3954a868468ff8497906350d869809060640160006040518083038186803b1580156102e057600080fd5b505af41580156102f4573d6000803e3d6000fd5b50505050565b60006020828403121561030c57600080fd5b813563ffffffff8116811461032057600080fd5b939250505056fea2646970667358221220dedd6e81267a3223fee9cbafd3198b4e3a87c70d5c77006b127bdbb16a8d6c9064736f6c63430008140033a2646970667358221220329aaff78029e413c142aa23bdae08b8518c0e9660d94ceee57df6f2e35d147564736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000af0
-----Decoded View---------------
Arg [0] : _defaultFeeNumerator (uint32): 2800
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000af0
Loading...
Loading
Loading...
Loading
Net Worth in USD
$5,620.89
Net Worth in ETH
2.842247
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,988.24 | 2.8271 | $5,620.89 |
Loading...
Loading
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.