Source Code
Latest 15 from a total of 15 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw Fees | 36971605 | 22 days ago | IN | 0 ETH | 0.00004111 | ||||
| Transfer Setter | 36777158 | 24 days ago | IN | 0 ETH | 0 | ||||
| Transfer Allocat... | 36777094 | 24 days ago | IN | 0 ETH | 0 | ||||
| Withdraw Fees | 36776893 | 24 days ago | IN | 0 ETH | 0 | ||||
| Transfer Allocat... | 36118850 | 32 days ago | IN | 0 ETH | 0.00007036 | ||||
| Transfer Allocat... | 36118543 | 32 days ago | IN | 0 ETH | 0 | ||||
| Withdraw Fees | 35419184 | 40 days ago | IN | 0 ETH | 0.00005041 | ||||
| Withdraw Fees | 34729549 | 48 days ago | IN | 0 ETH | 0.00005041 | ||||
| Withdraw Fees | 29896401 | 104 days ago | IN | 0 ETH | 0.00005041 | ||||
| Withdraw Fees | 27553331 | 131 days ago | IN | 0 ETH | 0.00005041 | ||||
| Withdraw Fees | 23833519 | 174 days ago | IN | 0 ETH | 0.00005041 | ||||
| Withdraw Fees | 21507973 | 201 days ago | IN | 0 ETH | 0.00005042 | ||||
| Withdraw Fees | 19095612 | 229 days ago | IN | 0 ETH | 0.00005046 | ||||
| Withdraw Fees | 16587993 | 258 days ago | IN | 0 ETH | 0.00006411 | ||||
| Transfer Allocat... | 1833745 | 429 days ago | IN | 0 ETH | 0.00000193 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 38896335 | 3 hrs ago | 0.33459196 ETH | ||||
| 38809935 | 27 hrs ago | 0.14771614 ETH | ||||
| 38785864 | 33 hrs ago | 3.34032024 ETH | ||||
| 38785864 | 33 hrs ago | 0.21291965 ETH | ||||
| 38723535 | 2 days ago | 0.45804518 ETH | ||||
| 38637135 | 3 days ago | 0.42569189 ETH | ||||
| 38550735 | 4 days ago | 0.11361873 ETH | ||||
| 38464335 | 5 days ago | 0.46620361 ETH | ||||
| 38377935 | 6 days ago | 0.69177162 ETH | ||||
| 38291535 | 7 days ago | 0.76491711 ETH | ||||
| 38205135 | 8 days ago | 0.20715241 ETH | ||||
| 38185963 | 8 days ago | 3.40008404 ETH | ||||
| 38185963 | 8 days ago | 0.41108715 ETH | ||||
| 38118735 | 9 days ago | 0.43134549 ETH | ||||
| 38032335 | 10 days ago | 0.11918905 ETH | ||||
| 37945935 | 11 days ago | 0.04679025 ETH | ||||
| 37859535 | 12 days ago | 0.20028947 ETH | ||||
| 37773135 | 13 days ago | 0.36545821 ETH | ||||
| 37686735 | 14 days ago | 0.5236672 ETH | ||||
| 37600335 | 15 days ago | 0.72637964 ETH | ||||
| 37513935 | 16 days ago | 0.32804005 ETH | ||||
| 37427535 | 17 days ago | 0.19728948 ETH | ||||
| 37341135 | 18 days ago | 0.03917589 ETH | ||||
| 37254735 | 19 days ago | 0.0113721 ETH | ||||
| 37245285 | 19 days ago | 1.70792021 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
NetFeeSplitter
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import {INetFeeSplitter} from '../interfaces/FeeSplitter/INetFeeSplitter.sol';
/// @title NetFeeSplitter
/// @notice Splits net fees between multiple recipients. Recipients are managed by setters. Setters can transfer the entire allocation or a portion of it to other recipients.
contract NetFeeSplitter is INetFeeSplitter {
uint256 internal constant TOTAL_ALLOCATION = 10_000;
uint256 private constant MAGNITUDE = 1e30;
uint256 private _index;
mapping(address recipient => uint256 index) private _indexOf;
mapping(address recipient => uint256 _earned) private _earned;
mapping(address recipient => Recipient) public recipients;
constructor(address[] memory initialRecipients, Recipient[] memory recipientData) {
uint256 totalAllocation;
uint256 length = initialRecipients.length;
if (initialRecipients.length != recipientData.length) revert InvalidRecipients();
for (uint256 i = 0; i < length; i++) {
address recipient = initialRecipients[i];
bool duplicateRecipient = false;
assembly {
duplicateRecipient := tload(recipient)
tstore(recipient, 1)
}
if (duplicateRecipient) revert DuplicateRecipient();
if (recipientData[i].setter == address(0)) revert SetterZero();
if (recipient == address(0)) revert RecipientZero();
if (recipientData[i].allocation == 0) revert AllocationZero();
recipients[recipient] = recipientData[i];
totalAllocation += recipientData[i].allocation;
}
if (totalAllocation != TOTAL_ALLOCATION) revert InvalidTotalAllocation();
}
/// @dev Keep track of incoming fees
receive() external payable {
_index += (msg.value * MAGNITUDE) / TOTAL_ALLOCATION;
}
/// @inheritdoc INetFeeSplitter
function transferAllocation(address oldRecipient, address newRecipient, uint256 allocation) external {
if (setterOf(newRecipient) == address(0)) revert SetterZero();
_transfer(oldRecipient, newRecipient, allocation);
}
/// @inheritdoc INetFeeSplitter
function transferAllocationAndSetSetter(
address oldRecipient,
address newRecipient,
address newSetter,
uint256 allocation
) external {
if (setterOf(newRecipient) != address(0)) revert SetterAlreadySet();
if (newSetter == address(0)) revert SetterZero();
recipients[newRecipient] = Recipient(newSetter, 0);
emit SetterTransferred(newRecipient, address(0), newSetter);
_transfer(oldRecipient, newRecipient, allocation);
}
/// @inheritdoc INetFeeSplitter
function transferSetter(address recipient, address newSetter) external {
if (newSetter == address(0)) revert SetterZero();
address currentSetter = setterOf(recipient);
if (currentSetter != msg.sender) revert Unauthorized();
recipients[recipient].setter = newSetter;
emit SetterTransferred(recipient, currentSetter, newSetter);
}
/// @inheritdoc INetFeeSplitter
function withdrawFees(address to) external returns (uint256 amount) {
_updateFees(msg.sender);
amount = _earned[msg.sender];
if (amount != 0) {
_earned[msg.sender] = 0;
(bool success,) = to.call{value: amount}('');
if (!success) revert WithdrawalFailed();
}
emit Withdrawn(msg.sender, to, amount);
}
/// @inheritdoc INetFeeSplitter
function earnedFees(address account) external view returns (uint256) {
return _earned[account] + _calculateFees(account);
}
/// @inheritdoc INetFeeSplitter
function balanceOf(address recipient) public view returns (uint256) {
return recipients[recipient].allocation;
}
/// @inheritdoc INetFeeSplitter
function setterOf(address recipient) public view returns (address) {
return recipients[recipient].setter;
}
function _transfer(address oldRecipient, address newRecipient, uint256 allocation) private {
if (setterOf(oldRecipient) != msg.sender) revert Unauthorized();
if (newRecipient == address(0)) revert RecipientZero();
if (allocation == 0) revert AllocationZero();
if (balanceOf(oldRecipient) < allocation) revert InsufficientAllocation();
_updateFees(oldRecipient);
_updateFees(newRecipient);
recipients[oldRecipient].allocation -= allocation;
recipients[newRecipient].allocation += allocation;
emit AllocationTransferred(msg.sender, oldRecipient, newRecipient, allocation);
}
function _updateFees(address account) private {
_earned[account] += _calculateFees(account);
_indexOf[account] = _index;
}
function _calculateFees(address account) private view returns (uint256) {
return (recipients[account].allocation * (_index - _indexOf[account])) / MAGNITUDE;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
interface INetFeeSplitter {
/// @notice Recipient data for an individual recipient
/// @custom:field setter The setter address managing the recipient
/// @custom:field allocation The allocation of the recipient
struct Recipient {
address setter;
uint256 allocation;
}
/// @notice Emitted when a recipient's allocation is transferred
/// @param setter The setter address managing the recipient
/// @param from The previous recipient address
/// @param to The new recipient address
/// @param allocation The allocation transferred
event AllocationTransferred(address indexed setter, address indexed from, address indexed to, uint256 allocation);
/// @notice Emitted when a recipient's setter is transferred
/// @param recipient The recipient address
/// @param previousSetter The previous setter address
/// @param newSetter The new setter address
event SetterTransferred(address indexed recipient, address indexed previousSetter, address indexed newSetter);
/// @notice Emitted when fees are withdrawn by recipient
/// @param recipient The recipient address
/// @param to The address the fees were withdrawn to
/// @param amount The amount of fees withdrawn
event Withdrawn(address indexed recipient, address indexed to, uint256 amount);
/// @notice Thrown when the recipients array is not the same length as the recipientData array
error InvalidRecipients();
/// @notice Thrown when a duplicate recipient is added
error DuplicateRecipient();
/// @notice Thrown when an setter address is zero
error SetterZero();
/// @notice Thrown when a recipient already has a setter
error SetterAlreadySet();
/// @notice Thrown when a recipient address is zero
error RecipientZero();
/// @notice Thrown when a recipient allocation is zero or zero allocation is transferred
error AllocationZero();
/// @notice Thrown when the total allocation is not the same as the sum of the recipient balances
error InvalidTotalAllocation();
/// @notice Thrown when the caller is not the setter
error Unauthorized();
/// @notice Thrown when there is insufficient allocation to perform a transfer
error InsufficientAllocation();
/// @notice Thrown when a withdrawal fails
error WithdrawalFailed();
/// @notice Transfers a allocation from one recipient to another
/// @param oldRecipient The recipient address to transfer from
/// @param newRecipient The recipient address to transfer to
/// @param allocation The allocation to transfer
/// @dev reverts if the recipient doesn't have a setter
function transferAllocation(address oldRecipient, address newRecipient, uint256 allocation) external;
/// @notice Transfers the allocation of a recipient to another recipient and sets the setter of the recipient
/// @param oldRecipient The recipient address to transfer from
/// @param newRecipient The recipient address to transfer to
/// @param newSetter The new setter address for the recipient
/// @param allocation The allocation to transfer
/// @dev reverts if the recipient already has a setter
function transferAllocationAndSetSetter(
address oldRecipient,
address newRecipient,
address newSetter,
uint256 allocation
) external;
/// @notice Transfers the setter of a recipient to a new setter
/// @param recipient The recipient address
/// @param newSetter The new setter address
function transferSetter(address recipient, address newSetter) external;
/// @notice Withdraws the fees earned by a recipient
/// @param to The address to withdraw the fees to
/// @return amount The amount of fees withdrawn
function withdrawFees(address to) external returns (uint256 amount);
/// @notice Calculates the fees earned by a recipient
/// @param account The recipient address
/// @return amount The amount of fees earned
function earnedFees(address account) external view returns (uint256);
/// @notice Gets the allocation of a recipient
/// @param recipient The recipient address
/// @return allocation The allocation of the recipient
function balanceOf(address recipient) external view returns (uint256);
/// @notice Gets the setter of a recipient
/// @param recipient The recipient address
/// @return setter The setter of the recipient
function setterOf(address recipient) external view returns (address);
}{
"remappings": [
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"@eth-optimism-bedrock/=lib/optimism/packages/contracts-bedrock/",
"forge-std/=lib/forge-std/src/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"@eth-optimism-bedrock/=lib/optimism/packages/contracts-bedrock/",
"automate/=lib/optimism/packages/contracts-bedrock/lib/automate/contracts/",
"ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
"forge-gas-snapshot/=lib/forge-gas-snapshot/src/",
"forge-std/=lib/forge-std/src/",
"kontrol-cheatcodes/=lib/optimism/packages/contracts-bedrock/lib/kontrol-cheatcodes/src/",
"lib-keccak/=lib/optimism/packages/contracts-bedrock/lib/lib-keccak/contracts/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts-v5/=lib/optimism/packages/contracts-bedrock/lib/openzeppelin-contracts-v5/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"optimism/=lib/optimism/",
"prb-test/=lib/optimism/packages/contracts-bedrock/lib/automate/lib/prb-test/src/",
"safe-contracts/=lib/optimism/packages/contracts-bedrock/lib/safe-contracts/contracts/",
"solady/=lib/optimism/packages/contracts-bedrock/lib/solady/",
"solmate/=lib/optimism/packages/contracts-bedrock/lib/solmate/src/"
],
"optimizer": {
"enabled": true,
"runs": 999999
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address[]","name":"initialRecipients","type":"address[]"},{"components":[{"internalType":"address","name":"setter","type":"address"},{"internalType":"uint256","name":"allocation","type":"uint256"}],"internalType":"struct INetFeeSplitter.Recipient[]","name":"recipientData","type":"tuple[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AllocationZero","type":"error"},{"inputs":[],"name":"DuplicateRecipient","type":"error"},{"inputs":[],"name":"InsufficientAllocation","type":"error"},{"inputs":[],"name":"InvalidRecipients","type":"error"},{"inputs":[],"name":"InvalidTotalAllocation","type":"error"},{"inputs":[],"name":"RecipientZero","type":"error"},{"inputs":[],"name":"SetterAlreadySet","type":"error"},{"inputs":[],"name":"SetterZero","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"WithdrawalFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"allocation","type":"uint256"}],"name":"AllocationTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"previousSetter","type":"address"},{"indexed":true,"internalType":"address","name":"newSetter","type":"address"}],"name":"SetterTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earnedFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"recipients","outputs":[{"internalType":"address","name":"setter","type":"address"},{"internalType":"uint256","name":"allocation","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"setterOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"oldRecipient","type":"address"},{"internalType":"address","name":"newRecipient","type":"address"},{"internalType":"uint256","name":"allocation","type":"uint256"}],"name":"transferAllocation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oldRecipient","type":"address"},{"internalType":"address","name":"newRecipient","type":"address"},{"internalType":"address","name":"newSetter","type":"address"},{"internalType":"uint256","name":"allocation","type":"uint256"}],"name":"transferAllocationAndSetSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"newSetter","type":"address"}],"name":"transferSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdrawFees","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526004361061007c575f3560e01c8063c13886a41161004c578063c13886a4146101c0578063c6743555146101df578063eb820312146101fe578063feb7219d14610275575f80fd5b8063024e2c06146100c0578063164e68de146100e1578063396cb5971461011357806370a082311461017c575f80fd5b366100bc5761271061009b6c0c9f2c9cd04674edea4000000034610a1e565b6100a59190610a35565b5f808282546100b49190610a6d565b925050819055005b5f80fd5b3480156100cb575f80fd5b506100df6100da366004610aa8565b610294565b005b3480156100ec575f80fd5b506101006100fb366004610ae2565b610301565b6040519081526020015b60405180910390f35b34801561011e575f80fd5b5061015761012d366004610ae2565b73ffffffffffffffffffffffffffffffffffffffff9081165f908152600360205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010a565b348015610187575f80fd5b50610100610196366004610ae2565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090206001015490565b3480156101cb575f80fd5b506100df6101da366004610b02565b610418565b3480156101ea575f80fd5b506100df6101f9366004610b33565b610548565b348015610209575f80fd5b50610249610218366004610ae2565b60036020525f90815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff9091169082565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161010a565b348015610280575f80fd5b5061010061028f366004610ae2565b61069f565b73ffffffffffffffffffffffffffffffffffffffff8281165f90815260036020526040902054166102f1576040517fe1d0a22f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102fc8383836106de565b505050565b5f61030b3361090b565b50335f9081526002602052604090205480156103c657335f908152600260205260408082208290555173ffffffffffffffffffffffffffffffffffffffff84169083908381818185875af1925050503d805f8114610384576040519150601f19603f3d011682016040523d82523d5f602084013e610389565b606091505b50509050806103c4576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60405181815273ffffffffffffffffffffffffffffffffffffffff83169033907fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9060200160405180910390a3919050565b73ffffffffffffffffffffffffffffffffffffffff8116610465576040517fe1d0a22f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281165f90815260036020526040902054163381146104c5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001687861690811790915590519093851692917ff0476b1621059e9b7a94b31f4699ab07974f87c8e31db4cb9ad1f9892eb9b16991a4505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f9081526003602052604090205416156105a6576040517f5e26355e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166105f3576040517fe1d0a22f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201825273ffffffffffffffffffffffffffffffffffffffff8481168083525f60208085018281528985168084526003909252868320955186547fffffffffffffffffffffffff0000000000000000000000000000000000000000169516949094178555925160019094019390935592517ff0476b1621059e9b7a94b31f4699ab07974f87c8e31db4cb9ad1f9892eb9b169908390a46106998484836106de565b50505050565b5f6106a982610976565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600260205260409020546106d89190610a6d565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8381165f9081526003602052604090205416331461073d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661078a576040517f3d9eb1db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f036107c3576040517f65c555f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806107f28473ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090206001015490565b101561082a576040517fdf2d477400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108338361090b565b61083c8261090b565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526003602052604081206001018054839290610873908490610b7b565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f90815260036020526040812060010180548392906108af908490610a6d565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff808416919085169033907f4c6e7131fb69f3c2cc88b05b76a7aa4809429fefa284dda9cf14884d25e3742b9060200160405180910390a4505050565b61091481610976565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081208054909190610948908490610a6d565b90915550505f805473ffffffffffffffffffffffffffffffffffffffff909216815260016020526040902055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205481546c0c9f2c9cd04674edea40000000916109b591610b7b565b73ffffffffffffffffffffffffffffffffffffffff84165f908152600360205260409020600101546109e79190610a1e565b6106d89190610a35565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820281158282048414176106d8576106d86109f1565b5f82610a68577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b808201808211156106d8576106d86109f1565b803573ffffffffffffffffffffffffffffffffffffffff81168114610aa3575f80fd5b919050565b5f805f60608486031215610aba575f80fd5b610ac384610a80565b9250610ad160208501610a80565b929592945050506040919091013590565b5f60208284031215610af2575f80fd5b610afb82610a80565b9392505050565b5f8060408385031215610b13575f80fd5b610b1c83610a80565b9150610b2a60208401610a80565b90509250929050565b5f805f8060808587031215610b46575f80fd5b610b4f85610a80565b9350610b5d60208601610a80565b9250610b6b60408601610a80565b9396929550929360600135925050565b818103818111156106d8576106d86109f156fea2646970667358221220c1357c5e0ed53d24a71012d61b9364dfacf3e395902c1817336223c5b44a0ad564736f6c634300081a0033
Deployed Bytecode
0x60806040526004361061007c575f3560e01c8063c13886a41161004c578063c13886a4146101c0578063c6743555146101df578063eb820312146101fe578063feb7219d14610275575f80fd5b8063024e2c06146100c0578063164e68de146100e1578063396cb5971461011357806370a082311461017c575f80fd5b366100bc5761271061009b6c0c9f2c9cd04674edea4000000034610a1e565b6100a59190610a35565b5f808282546100b49190610a6d565b925050819055005b5f80fd5b3480156100cb575f80fd5b506100df6100da366004610aa8565b610294565b005b3480156100ec575f80fd5b506101006100fb366004610ae2565b610301565b6040519081526020015b60405180910390f35b34801561011e575f80fd5b5061015761012d366004610ae2565b73ffffffffffffffffffffffffffffffffffffffff9081165f908152600360205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010a565b348015610187575f80fd5b50610100610196366004610ae2565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090206001015490565b3480156101cb575f80fd5b506100df6101da366004610b02565b610418565b3480156101ea575f80fd5b506100df6101f9366004610b33565b610548565b348015610209575f80fd5b50610249610218366004610ae2565b60036020525f90815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff9091169082565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161010a565b348015610280575f80fd5b5061010061028f366004610ae2565b61069f565b73ffffffffffffffffffffffffffffffffffffffff8281165f90815260036020526040902054166102f1576040517fe1d0a22f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102fc8383836106de565b505050565b5f61030b3361090b565b50335f9081526002602052604090205480156103c657335f908152600260205260408082208290555173ffffffffffffffffffffffffffffffffffffffff84169083908381818185875af1925050503d805f8114610384576040519150601f19603f3d011682016040523d82523d5f602084013e610389565b606091505b50509050806103c4576040517f27fcd9d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60405181815273ffffffffffffffffffffffffffffffffffffffff83169033907fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9060200160405180910390a3919050565b73ffffffffffffffffffffffffffffffffffffffff8116610465576040517fe1d0a22f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281165f90815260036020526040902054163381146104c5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001687861690811790915590519093851692917ff0476b1621059e9b7a94b31f4699ab07974f87c8e31db4cb9ad1f9892eb9b16991a4505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f9081526003602052604090205416156105a6576040517f5e26355e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166105f3576040517fe1d0a22f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201825273ffffffffffffffffffffffffffffffffffffffff8481168083525f60208085018281528985168084526003909252868320955186547fffffffffffffffffffffffff0000000000000000000000000000000000000000169516949094178555925160019094019390935592517ff0476b1621059e9b7a94b31f4699ab07974f87c8e31db4cb9ad1f9892eb9b169908390a46106998484836106de565b50505050565b5f6106a982610976565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600260205260409020546106d89190610a6d565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8381165f9081526003602052604090205416331461073d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661078a576040517f3d9eb1db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f036107c3576040517f65c555f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806107f28473ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090206001015490565b101561082a576040517fdf2d477400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108338361090b565b61083c8261090b565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526003602052604081206001018054839290610873908490610b7b565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f90815260036020526040812060010180548392906108af908490610a6d565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff808416919085169033907f4c6e7131fb69f3c2cc88b05b76a7aa4809429fefa284dda9cf14884d25e3742b9060200160405180910390a4505050565b61091481610976565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081208054909190610948908490610a6d565b90915550505f805473ffffffffffffffffffffffffffffffffffffffff909216815260016020526040902055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205481546c0c9f2c9cd04674edea40000000916109b591610b7b565b73ffffffffffffffffffffffffffffffffffffffff84165f908152600360205260409020600101546109e79190610a1e565b6106d89190610a35565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820281158282048414176106d8576106d86109f1565b5f82610a68577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b808201808211156106d8576106d86109f1565b803573ffffffffffffffffffffffffffffffffffffffff81168114610aa3575f80fd5b919050565b5f805f60608486031215610aba575f80fd5b610ac384610a80565b9250610ad160208501610a80565b929592945050506040919091013590565b5f60208284031215610af2575f80fd5b610afb82610a80565b9392505050565b5f8060408385031215610b13575f80fd5b610b1c83610a80565b9150610b2a60208401610a80565b90509250929050565b5f805f8060808587031215610b46575f80fd5b610b4f85610a80565b9350610b5d60208601610a80565b9250610b6b60408601610a80565b9396929550929360600135925050565b818103818111156106d8576106d86109f156fea2646970667358221220c1357c5e0ed53d24a71012d61b9364dfacf3e395902c1817336223c5b44a0ad564736f6c634300081a0033
Deployed Bytecode Sourcemap
339:4691:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;433:6;1839:21;482:4;1839:9;:21;:::i;:::-;1838:42;;;;:::i;:::-;1828:6;;:52;;;;;;;:::i;:::-;;;;;;;;339:4691;;;;1929:238;;;;;;;;;;-1:-1:-1;1929:238:0;;;;;:::i;:::-;;:::i;:::-;;3165:379;;;;;;;;;;-1:-1:-1;3165:379:0;;;;;:::i;:::-;;:::i;:::-;;;1702:25:2;;;1690:2;1675:18;3165:379:0;;;;;;;;3929:119;;;;;;;;;;-1:-1:-1;3929:119:0;;;;;:::i;:::-;4013:21;;;;3987:7;4013:21;;;:10;:21;;;;;:28;;;3929:119;;;;1914:42:2;1902:55;;;1884:74;;1872:2;1857:18;3929:119:0;1738:226:2;3763:124:0;;;;;;;;;;-1:-1:-1;3763:124:0;;;;;:::i;:::-;3848:21;;3822:7;3848:21;;;:10;:21;;;;;:32;;;;3763:124;2751:372;;;;;;;;;;-1:-1:-1;2751:372:0;;;;;:::i;:::-;;:::i;2209:500::-;;;;;;;;;;-1:-1:-1;2209:500:0;;;;;:::i;:::-;;:::i;655:57::-;;;;;;;;;;-1:-1:-1;655:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2892:42:2;2880:55;;;2862:74;;2967:2;2952:18;;2945:34;;;;2835:18;655:57:0;2688:297:2;3586:135:0;;;;;;;;;;-1:-1:-1;3586:135:0;;;;;:::i;:::-;;:::i;1929:238::-;4013:21;;;;2078:1;4013:21;;;:10;:21;;;;;:28;;2040:61;;2089:12;;;;;;;;;;;;;;2040:61;2111:49;2121:12;2135;2149:10;2111:9;:49::i;:::-;1929:238;;;:::o;3165:379::-;3217:14;3243:23;3255:10;3243:11;:23::i;:::-;-1:-1:-1;3293:10:0;3285:19;;;;:7;:19;;;;;;3318:11;;3314:176;;3353:10;3367:1;3345:19;;;:7;:19;;;;;;:23;;;3400:26;3345:19;3400:7;;;3415:6;;3367:1;3400:26;3367:1;3400:26;3415:6;3400:7;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3382:44;;;3445:7;3440:39;;3461:18;;;;;;;;;;;;;;3440:39;3331:159;3314:176;3504:33;;1702:25:2;;;3504:33:0;;;;3514:10;;3504:33;;1690:2:2;1675:18;3504:33:0;;;;;;;3165:379;;;:::o;2751:372::-;2836:23;;;2832:48;;2868:12;;;;;;;;;;;;;;2832:48;4013:21;;;;2890;4013;;;:10;:21;;;;;:28;;2964:10;2947:27;;2943:54;;2983:14;;;;;;;;;;;;;;2943:54;3007:21;;;;;;;;:10;:21;;;;;;:40;;;;;;;;;;;;;3062:54;;3007:40;;3062:54;;;3007:21;3062:54;;;2822:301;2751:372;;:::o;2209:500::-;4013:21;;;;2427:1;4013:21;;;:10;:21;;;;;:28;;2393:36;2389:67;;2438:18;;;;;;;;;;;;;;2389:67;2470:23;;;2466:48;;2502:12;;;;;;;;;;;;;;2466:48;2551:23;;;;;;;;;;;;;;;-1:-1:-1;2551:23:0;;;;;;;2524:24;;;;;;:10;:24;;;;;;:50;;;;;;;;;;;;;;;;-1:-1:-1;2524:50:0;;;;;;;2589:54;;;;-1:-1:-1;;2589:54:0;2653:49;2663:12;2677;2691:10;2653:9;:49::i;:::-;2209:500;;;;:::o;3586:135::-;3646:7;3691:23;3706:7;3691:14;:23::i;:::-;3672:16;;;;;;;:7;:16;;;;;;:42;;;;:::i;:::-;3665:49;3586:135;-1:-1:-1;;3586:135:0:o;4054:649::-;4013:21;;;;3987:7;4013:21;;;:10;:21;;;;;:28;;4185:10;4159:36;4155:63;;4204:14;;;;;;;;;;;;;;4155:63;4232:26;;;4228:54;;4267:15;;;;;;;;;;;;;;4228:54;4296:10;4310:1;4296:15;4292:44;;4320:16;;;;;;;;;;;;;;4292:44;4376:10;4350:23;4360:12;3848:21;;3822:7;3848:21;;;:10;:21;;;;;:32;;;;3763:124;4350:23;:36;4346:73;;;4395:24;;;;;;;;;;;;;;4346:73;4429:25;4441:12;4429:11;:25::i;:::-;4464;4476:12;4464:11;:25::i;:::-;4500:24;;;;;;;:10;:24;;;;;:35;;:49;;4539:10;;4500:24;:49;;4539:10;;4500:49;:::i;:::-;;;;-1:-1:-1;;4559:24:0;;;;;;;:10;:24;;;;;:35;;:49;;4598:10;;4559:24;:49;;4598:10;;4559:49;:::i;:::-;;;;-1:-1:-1;;4623:73:0;;1702:25:2;;;4623:73:0;;;;;;;;;4645:10;;4623:73;;1690:2:2;1675:18;4623:73:0;;;;;;;4054:649;;;:::o;4709:142::-;4785:23;4800:7;4785:14;:23::i;:::-;4765:16;;;;;;;:7;:16;;;;;:43;;:16;;;:43;;;;;:::i;:::-;;;;-1:-1:-1;;4838:6:0;;;4818:17;;;;;;:8;:17;;;;;:26;4709:142::o;4857:171::-;4990:17;;;4920:7;4990:17;;;:8;:17;;;;;;4981:6;;482:4;;4981:26;;;:::i;:::-;4947:19;;;;;;;:10;:19;;;;;:30;;;:61;;;;:::i;:::-;4946:75;;;;:::i;14:184:2:-;66:77;63:1;56:88;163:4;160:1;153:15;187:4;184:1;177:15;203:168;276:9;;;307;;324:15;;;318:22;;304:37;294:71;;345:18;;:::i;376:274::-;416:1;442;432:189;;477:77;474:1;467:88;578:4;575:1;568:15;606:4;603:1;596:15;432:189;-1:-1:-1;635:9:2;;376:274::o;655:125::-;720:9;;;741:10;;;738:36;;;754:18;;:::i;785:196::-;853:20;;913:42;902:54;;892:65;;882:93;;971:1;968;961:12;882:93;785:196;;;:::o;986:374::-;1063:6;1071;1079;1132:2;1120:9;1111:7;1107:23;1103:32;1100:52;;;1148:1;1145;1138:12;1100:52;1171:29;1190:9;1171:29;:::i;:::-;1161:39;;1219:38;1253:2;1242:9;1238:18;1219:38;:::i;:::-;986:374;;1209:48;;-1:-1:-1;;;1326:2:2;1311:18;;;;1298:32;;986:374::o;1365:186::-;1424:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:52;;;1493:1;1490;1483:12;1445:52;1516:29;1535:9;1516:29;:::i;:::-;1506:39;1365:186;-1:-1:-1;;;1365:186:2:o;1969:260::-;2037:6;2045;2098:2;2086:9;2077:7;2073:23;2069:32;2066:52;;;2114:1;2111;2104:12;2066:52;2137:29;2156:9;2137:29;:::i;:::-;2127:39;;2185:38;2219:2;2208:9;2204:18;2185:38;:::i;:::-;2175:48;;1969:260;;;;;:::o;2234:449::-;2320:6;2328;2336;2344;2397:3;2385:9;2376:7;2372:23;2368:33;2365:53;;;2414:1;2411;2404:12;2365:53;2437:29;2456:9;2437:29;:::i;:::-;2427:39;;2485:38;2519:2;2508:9;2504:18;2485:38;:::i;:::-;2475:48;;2542:38;2576:2;2565:9;2561:18;2542:38;:::i;:::-;2234:449;;;;-1:-1:-1;2532:48:2;;2649:2;2634:18;2621:32;;-1:-1:-1;;2234:449:2:o;3200:128::-;3267:9;;;3288:11;;;3285:37;;;3302:18;;:::i
Swarm Source
ipfs://c1357c5e0ed53d24a71012d61b9364dfacf3e395902c1817336223c5b44a0ad5
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$1,429.52
Net Worth in ETH
0.482184
Token Allocations
ETH
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| UNI | 100.00% | $2,963.91 | 0.4823 | $1,429.52 |
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.