Source Code
Latest 25 from a total of 3,843 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Execute | 426797340 | 3 days ago | IN | 0 ETH | 0.00001089 | ||||
| Execute | 426567295 | 4 days ago | IN | 0 ETH | 0.00000672 | ||||
| Execute | 426437370 | 4 days ago | IN | 0 ETH | 0.00000389 | ||||
| Execute | 426435684 | 4 days ago | IN | 0 ETH | 0.0000059 | ||||
| Execute | 426425037 | 4 days ago | IN | 0 ETH | 0.00018687 | ||||
| Execute | 426388107 | 4 days ago | IN | 0 ETH | 0.00003597 | ||||
| Execute | 426386168 | 4 days ago | IN | 0 ETH | 0.00005307 | ||||
| Execute | 426386155 | 4 days ago | IN | 0 ETH | 0.00008065 | ||||
| Execute | 426386141 | 4 days ago | IN | 0 ETH | 0.00008291 | ||||
| Execute | 426386127 | 4 days ago | IN | 0 ETH | 0.00008333 | ||||
| Execute | 426383277 | 4 days ago | IN | 0 ETH | 0.00003049 | ||||
| Execute | 426383267 | 4 days ago | IN | 0 ETH | 0.00002893 | ||||
| Execute | 426382542 | 4 days ago | IN | 0 ETH | 0.0000156 | ||||
| Execute | 426352507 | 4 days ago | IN | 0 ETH | 0.0000495 | ||||
| Execute | 426346367 | 4 days ago | IN | 0 ETH | 0.00000809 | ||||
| Execute | 426346357 | 4 days ago | IN | 0 ETH | 0.00000822 | ||||
| Execute | 426346347 | 4 days ago | IN | 0 ETH | 0.00000796 | ||||
| Execute | 426346337 | 4 days ago | IN | 0 ETH | 0.00000872 | ||||
| Execute | 426346318 | 4 days ago | IN | 0 ETH | 0.00000359 | ||||
| Execute | 426346308 | 4 days ago | IN | 0 ETH | 0.00000786 | ||||
| Execute | 426346298 | 4 days ago | IN | 0 ETH | 0.00001092 | ||||
| Execute | 426346288 | 4 days ago | IN | 0 ETH | 0.00000922 | ||||
| Execute | 426346278 | 4 days ago | IN | 0 ETH | 0.00001338 | ||||
| Execute | 426346268 | 4 days ago | IN | 0 ETH | 0.00001082 | ||||
| Execute | 426346258 | 4 days ago | IN | 0 ETH | 0.00001075 |
Latest 1 internal transaction
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 218627474 | 607 days ago | Contract Creation | 0 ETH |
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:
AllMight
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/**
*Submitted for verification at Arbiscan.io on 2024-06-05
*/
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity =0.8.20 ^0.8.11 ^0.8.4;
// lib/solady/src/utils/SafeTransferLib.sol
/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/SafeTransferLib.sol)
/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol)
///
/// @dev Note:
/// - For ETH transfers, please use `forceSafeTransferETH` for gas griefing protection.
/// - For ERC20s, this implementation won't check that a token has code,
/// responsibility is delegated to the caller.
library SafeTransferLib {
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* CUSTOM ERRORS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @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();
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* CONSTANTS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Suggested gas stipend for contract receiving ETH that disallows any storage writes.
uint256 internal constant GAS_STIPEND_NO_STORAGE_WRITES = 2300;
/// @dev Suggested gas stipend for contract receiving ETH to perform a few
/// storage reads and writes, but low enough to prevent griefing.
uint256 internal constant GAS_STIPEND_NO_GRIEF = 100000;
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* ETH OPERATIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
// If gas griefing protection is needed, please use the force variants.
//
// The regular variants:
// - Forwards all remaining gas to the target.
// - Reverts if the target reverts.
// - Reverts if the current contract has insufficient balance.
//
// The force variants:
// - Forwards with an optional gas stipend
// (defaults to `GAS_STIPEND_NO_GRIEF`, which is sufficient for most cases).
// - If the target reverts, or if the gas stipend is exhausted,
// creates a temporary contract to force send the ETH via `SELFDESTRUCT`.
// Future compatible with `SENDALL`: https://eips.ethereum.org/EIPS/eip-4758.
// - Reverts if the current contract has insufficient balance.
//
// The try variants:
// - Forwards with a mandatory gas stipend.
// - Instead of reverting, returns whether the transfer succeeded.
/// @dev Sends `amount` (in wei) ETH to `to`.
function safeTransferETH(address to, uint256 amount) internal {
/// @solidity memory-safe-assembly
assembly {
if iszero(call(gas(), to, amount, gas(), 0x00, gas(), 0x00)) {
mstore(0x00, 0xb12d13eb) // `ETHTransferFailed()`.
revert(0x1c, 0x04)
}
}
}
/// @dev Sends all the ETH in the current contract to `to`.
function safeTransferAllETH(address to) internal {
/// @solidity memory-safe-assembly
assembly {
// Transfer all the ETH and check if it succeeded or not.
if iszero(call(gas(), to, selfbalance(), gas(), 0x00, gas(), 0x00)) {
mstore(0x00, 0xb12d13eb) // `ETHTransferFailed()`.
revert(0x1c, 0x04)
}
}
}
/// @dev Force sends `amount` (in wei) ETH to `to`, with a `gasStipend`.
function forceSafeTransferETH(address to, uint256 amount, uint256 gasStipend) internal {
/// @solidity memory-safe-assembly
assembly {
if lt(selfbalance(), amount) {
mstore(0x00, 0xb12d13eb) // `ETHTransferFailed()`.
revert(0x1c, 0x04)
}
if iszero(call(gasStipend, to, amount, gas(), 0x00, gas(), 0x00)) {
mstore(0x00, to) // Store the address in scratch space.
mstore8(0x0b, 0x73) // Opcode `PUSH20`.
mstore8(0x20, 0xff) // Opcode `SELFDESTRUCT`.
if iszero(create(amount, 0x0b, 0x16)) {
returndatacopy(gas(), returndatasize(), shr(20, gas())) // For gas estimation.
}
}
}
}
/// @dev Force sends all the ETH in the current contract to `to`, with a `gasStipend`.
function forceSafeTransferAllETH(address to, uint256 gasStipend) internal {
/// @solidity memory-safe-assembly
assembly {
if iszero(call(gasStipend, to, selfbalance(), gas(), 0x00, gas(), 0x00)) {
mstore(0x00, to) // Store the address in scratch space.
mstore8(0x0b, 0x73) // Opcode `PUSH20`.
mstore8(0x20, 0xff) // Opcode `SELFDESTRUCT`.
if iszero(create(selfbalance(), 0x0b, 0x16)) {
returndatacopy(gas(), returndatasize(), shr(20, gas())) // For gas estimation.
}
}
}
}
/// @dev Force sends `amount` (in wei) ETH to `to`, with `GAS_STIPEND_NO_GRIEF`.
function forceSafeTransferETH(address to, uint256 amount) internal {
/// @solidity memory-safe-assembly
assembly {
if lt(selfbalance(), amount) {
mstore(0x00, 0xb12d13eb) // `ETHTransferFailed()`.
revert(0x1c, 0x04)
}
if iszero(call(GAS_STIPEND_NO_GRIEF, to, amount, gas(), 0x00, gas(), 0x00)) {
mstore(0x00, to) // Store the address in scratch space.
mstore8(0x0b, 0x73) // Opcode `PUSH20`.
mstore8(0x20, 0xff) // Opcode `SELFDESTRUCT`.
if iszero(create(amount, 0x0b, 0x16)) {
returndatacopy(gas(), returndatasize(), shr(20, gas())) // For gas estimation.
}
}
}
}
/// @dev Force sends all the ETH in the current contract to `to`, with `GAS_STIPEND_NO_GRIEF`.
function forceSafeTransferAllETH(address to) internal {
/// @solidity memory-safe-assembly
assembly {
if iszero(call(GAS_STIPEND_NO_GRIEF, to, selfbalance(), gas(), 0x00, gas(), 0x00)) {
mstore(0x00, to) // Store the address in scratch space.
mstore8(0x0b, 0x73) // Opcode `PUSH20`.
mstore8(0x20, 0xff) // Opcode `SELFDESTRUCT`.
if iszero(create(selfbalance(), 0x0b, 0x16)) {
returndatacopy(gas(), returndatasize(), shr(20, gas())) // For gas estimation.
}
}
}
}
/// @dev Sends `amount` (in wei) ETH to `to`, with a `gasStipend`.
function trySafeTransferETH(address to, uint256 amount, uint256 gasStipend)
internal
returns (bool success)
{
/// @solidity memory-safe-assembly
assembly {
success := call(gasStipend, to, amount, gas(), 0x00, gas(), 0x00)
}
}
/// @dev Sends all the ETH in the current contract to `to`, with a `gasStipend`.
function trySafeTransferAllETH(address to, uint256 gasStipend)
internal
returns (bool success)
{
/// @solidity memory-safe-assembly
assembly {
success := call(gasStipend, to, selfbalance(), gas(), 0x00, gas(), 0x00)
}
}
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* ERC20 OPERATIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Sends `amount` of ERC20 `token` from `from` to `to`.
/// Reverts upon failure.
///
/// The `from` account must have at least `amount` approved for
/// the current contract to manage.
function safeTransferFrom(address token, address from, address to, uint256 amount) internal {
/// @solidity memory-safe-assembly
assembly {
let m := mload(0x40) // Cache the free memory pointer.
mstore(0x60, amount) // Store the `amount` argument.
mstore(0x40, to) // Store the `to` argument.
mstore(0x2c, shl(96, from)) // Store the `from` argument.
mstore(0x0c, 0x23b872dd000000000000000000000000) // `transferFrom(address,address,uint256)`.
// Perform the transfer, reverting upon failure.
if iszero(
and( // The arguments of `and` are evaluated from right to left.
or(eq(mload(0x00), 1), iszero(returndatasize())), // Returned 1 or nothing.
call(gas(), token, 0, 0x1c, 0x64, 0x00, 0x20)
)
) {
mstore(0x00, 0x7939f424) // `TransferFromFailed()`.
revert(0x1c, 0x04)
}
mstore(0x60, 0) // Restore the zero slot to zero.
mstore(0x40, m) // Restore the free memory pointer.
}
}
/// @dev Sends all of ERC20 `token` from `from` to `to`.
/// Reverts upon failure.
///
/// The `from` account must have their entire balance approved for
/// the current contract to manage.
function safeTransferAllFrom(address token, address from, address to)
internal
returns (uint256 amount)
{
/// @solidity memory-safe-assembly
assembly {
let m := mload(0x40) // Cache the free memory pointer.
mstore(0x40, to) // Store the `to` argument.
mstore(0x2c, shl(96, from)) // Store the `from` argument.
mstore(0x0c, 0x70a08231000000000000000000000000) // `balanceOf(address)`.
// Read the balance, reverting upon failure.
if iszero(
and( // The arguments of `and` are evaluated from right to left.
gt(returndatasize(), 0x1f), // At least 32 bytes returned.
staticcall(gas(), token, 0x1c, 0x24, 0x60, 0x20)
)
) {
mstore(0x00, 0x7939f424) // `TransferFromFailed()`.
revert(0x1c, 0x04)
}
mstore(0x00, 0x23b872dd) // `transferFrom(address,address,uint256)`.
amount := mload(0x60) // The `amount` is already at 0x60. We'll need to return it.
// Perform the transfer, reverting upon failure.
if iszero(
and( // The arguments of `and` are evaluated from right to left.
or(eq(mload(0x00), 1), iszero(returndatasize())), // Returned 1 or nothing.
call(gas(), token, 0, 0x1c, 0x64, 0x00, 0x20)
)
) {
mstore(0x00, 0x7939f424) // `TransferFromFailed()`.
revert(0x1c, 0x04)
}
mstore(0x60, 0) // Restore the zero slot to zero.
mstore(0x40, m) // Restore the free memory pointer.
}
}
/// @dev Sends `amount` of ERC20 `token` from the current contract to `to`.
/// Reverts upon failure.
function safeTransfer(address token, address to, uint256 amount) internal {
/// @solidity memory-safe-assembly
assembly {
mstore(0x14, to) // Store the `to` argument.
mstore(0x34, amount) // Store the `amount` argument.
mstore(0x00, 0xa9059cbb000000000000000000000000) // `transfer(address,uint256)`.
// Perform the transfer, reverting upon failure.
if iszero(
and( // The arguments of `and` are evaluated from right to left.
or(eq(mload(0x00), 1), iszero(returndatasize())), // Returned 1 or nothing.
call(gas(), token, 0, 0x10, 0x44, 0x00, 0x20)
)
) {
mstore(0x00, 0x90b8ec18) // `TransferFailed()`.
revert(0x1c, 0x04)
}
mstore(0x34, 0) // Restore the part of the free memory pointer that was overwritten.
}
}
/// @dev Sends all of ERC20 `token` from the current contract to `to`.
/// Reverts upon failure.
function safeTransferAll(address token, address to) internal returns (uint256 amount) {
/// @solidity memory-safe-assembly
assembly {
mstore(0x00, 0x70a08231) // Store the function selector of `balanceOf(address)`.
mstore(0x20, address()) // Store the address of the current contract.
// Read the balance, reverting upon failure.
if iszero(
and( // The arguments of `and` are evaluated from right to left.
gt(returndatasize(), 0x1f), // At least 32 bytes returned.
staticcall(gas(), token, 0x1c, 0x24, 0x34, 0x20)
)
) {
mstore(0x00, 0x90b8ec18) // `TransferFailed()`.
revert(0x1c, 0x04)
}
mstore(0x14, to) // Store the `to` argument.
amount := mload(0x34) // The `amount` is already at 0x34. We'll need to return it.
mstore(0x00, 0xa9059cbb000000000000000000000000) // `transfer(address,uint256)`.
// Perform the transfer, reverting upon failure.
if iszero(
and( // The arguments of `and` are evaluated from right to left.
or(eq(mload(0x00), 1), iszero(returndatasize())), // Returned 1 or nothing.
call(gas(), token, 0, 0x10, 0x44, 0x00, 0x20)
)
) {
mstore(0x00, 0x90b8ec18) // `TransferFailed()`.
revert(0x1c, 0x04)
}
mstore(0x34, 0) // Restore the part of the free memory pointer that was overwritten.
}
}
/// @dev Sets `amount` of ERC20 `token` for `to` to manage on behalf of the current contract.
/// Reverts upon failure.
function safeApprove(address token, address to, uint256 amount) internal {
/// @solidity memory-safe-assembly
assembly {
mstore(0x14, to) // Store the `to` argument.
mstore(0x34, amount) // Store the `amount` argument.
mstore(0x00, 0x095ea7b3000000000000000000000000) // `approve(address,uint256)`.
// Perform the approval, reverting upon failure.
if iszero(
and( // The arguments of `and` are evaluated from right to left.
or(eq(mload(0x00), 1), iszero(returndatasize())), // Returned 1 or nothing.
call(gas(), token, 0, 0x10, 0x44, 0x00, 0x20)
)
) {
mstore(0x00, 0x3e3f8f73) // `ApproveFailed()`.
revert(0x1c, 0x04)
}
mstore(0x34, 0) // Restore the part of the free memory pointer that was overwritten.
}
}
/// @dev Sets `amount` of ERC20 `token` for `to` to manage on behalf of the current contract.
/// If the initial attempt to approve fails, attempts to reset the approved amount to zero,
/// then retries the approval again (some tokens, e.g. USDT, requires this).
/// Reverts upon failure.
function safeApproveWithRetry(address token, address to, uint256 amount) internal {
/// @solidity memory-safe-assembly
assembly {
mstore(0x14, to) // Store the `to` argument.
mstore(0x34, amount) // Store the `amount` argument.
mstore(0x00, 0x095ea7b3000000000000000000000000) // `approve(address,uint256)`.
// Perform the approval, retrying upon failure.
if iszero(
and( // The arguments of `and` are evaluated from right to left.
or(eq(mload(0x00), 1), iszero(returndatasize())), // Returned 1 or nothing.
call(gas(), token, 0, 0x10, 0x44, 0x00, 0x20)
)
) {
mstore(0x34, 0) // Store 0 for the `amount`.
mstore(0x00, 0x095ea7b3000000000000000000000000) // `approve(address,uint256)`.
pop(call(gas(), token, 0, 0x10, 0x44, 0x00, 0x00)) // Reset the approval.
mstore(0x34, amount) // Store back the original `amount`.
// Retry the approval, reverting upon failure.
if iszero(
and(
or(eq(mload(0x00), 1), iszero(returndatasize())), // Returned 1 or nothing.
call(gas(), token, 0, 0x10, 0x44, 0x00, 0x20)
)
) {
mstore(0x00, 0x3e3f8f73) // `ApproveFailed()`.
revert(0x1c, 0x04)
}
}
mstore(0x34, 0) // Restore the part of the free memory pointer that was overwritten.
}
}
/// @dev Returns the amount of ERC20 `token` owned by `account`.
/// Returns zero if the `token` does not exist.
function balanceOf(address token, address account) internal view returns (uint256 amount) {
/// @solidity memory-safe-assembly
assembly {
mstore(0x14, account) // Store the `account` argument.
mstore(0x00, 0x70a08231000000000000000000000000) // `balanceOf(address)`.
amount :=
mul(
mload(0x20),
and( // The arguments of `and` are evaluated from right to left.
gt(returndatasize(), 0x1f), // At least 32 bytes returned.
staticcall(gas(), token, 0x10, 0x24, 0x20, 0x20)
)
)
}
}
}
// src/weiroll/CommandBuilder.sol
library CommandBuilder {
uint256 constant IDX_VARIABLE_LENGTH = 0x80;
uint256 constant IDX_VALUE_MASK = 0x7f;
uint256 constant IDX_END_OF_ARGS = 0xff;
uint256 constant IDX_USE_STATE = 0xfe;
function buildInputs(bytes[] memory state, bytes4 selector, bytes32 indices)
internal
view
returns (bytes memory ret)
{
uint256 free; // Pointer to first free byte in tail part of message
uint256 idx;
// Determine the length of the encoded data
for (uint256 i; i < 32;) {
idx = uint8(indices[i]);
if (idx == IDX_END_OF_ARGS) break;
unchecked {
free += 32;
}
unchecked {
++i;
}
}
// Encode it
uint256 bytesWritten;
assembly {
ret := mload(0x40)
bytesWritten := add(bytesWritten, 4)
mstore(0x40, add(ret, and(add(add(bytesWritten, 0x20), 0x1f), not(0x1f))))
mstore(add(ret, 32), selector)
}
uint256 count = 0;
bytes memory stateData; // Optionally encode the current state if the call requires it
for (uint256 i; i < 32;) {
idx = uint8(indices[i]);
if (idx == IDX_END_OF_ARGS) break;
if (idx & IDX_VARIABLE_LENGTH != 0) {
if (idx == IDX_USE_STATE) {
assembly {
bytesWritten := add(bytesWritten, 32)
mstore(0x40, add(ret, and(add(add(bytesWritten, 0x20), 0x1f), not(0x1f))))
mstore(add(add(ret, 36), count), free)
}
if (stateData.length == 0) {
stateData = abi.encode(state);
}
assembly {
bytesWritten := add(bytesWritten, mload(stateData))
mstore(0x40, add(ret, and(add(add(bytesWritten, 0x20), 0x1f), not(0x1f))))
}
memcpy(stateData, 32, ret, free + 4, stateData.length - 32);
free += stateData.length - 32;
} else {
bytes memory stateVar = state[idx & IDX_VALUE_MASK];
uint256 arglen = stateVar.length;
// Variable length data; put a pointer in the slot and write the data at the end
assembly {
bytesWritten := add(bytesWritten, 32)
mstore(0x40, add(ret, and(add(add(bytesWritten, 0x20), 0x1f), not(0x1f))))
mstore(add(add(ret, 36), count), free)
}
assembly {
bytesWritten := add(bytesWritten, arglen)
mstore(0x40, add(ret, and(add(add(bytesWritten, 0x20), 0x1f), not(0x1f))))
}
memcpy(stateVar, 0, ret, free + 4, arglen);
free += arglen;
}
} else {
// Fixed length data; write it directly
bytes memory stateVar = state[idx & IDX_VALUE_MASK];
assembly {
bytesWritten := add(bytesWritten, mload(stateVar))
mstore(0x40, add(ret, and(add(add(bytesWritten, 0x20), 0x1f), not(0x1f))))
mstore(add(add(ret, 36), count), mload(add(stateVar, 32)))
}
}
unchecked {
count += 32;
}
unchecked {
++i;
}
}
assembly {
mstore(ret, bytesWritten)
}
}
function writeOutputs(bytes[] memory state, bytes1 index, bytes memory output)
internal
pure
returns (bytes[] memory)
{
uint256 idx = uint8(index);
if (idx == IDX_END_OF_ARGS) return state;
if (idx & IDX_VARIABLE_LENGTH != 0) {
if (idx == IDX_USE_STATE) {
state = abi.decode(output, (bytes[]));
} else {
// Check the first field is 0x20 (because we have only a single return value)
uint256 argptr;
assembly {
argptr := mload(add(output, 32))
}
require(argptr == 32, "Only one return value permitted (variable)");
assembly {
// Overwrite the first word of the return data with the length - 32
mstore(add(output, 32), sub(mload(output), 32))
// Insert a pointer to the return data, starting at the second word, into state
mstore(add(add(state, 32), mul(and(idx, IDX_VALUE_MASK), 32)), add(output, 32))
}
}
} else {
// Single word
require(output.length == 32, "Only one return value permitted (static)");
state[idx & IDX_VALUE_MASK] = output;
}
return state;
}
function writeTuple(bytes[] memory state, bytes1 index, bytes memory output) internal view {
uint256 idx = uint256(uint8(index));
if (idx == IDX_END_OF_ARGS) return;
bytes memory entry = state[idx & IDX_VALUE_MASK] = new bytes(output.length + 32);
memcpy(output, 0, entry, 32, output.length);
assembly {
let l := mload(output)
mstore(add(entry, 32), l)
}
}
function memcpy(bytes memory src, uint256 srcidx, bytes memory dest, uint256 destidx, uint256 len) internal view {
assembly {
pop(staticcall(gas(), 4, add(add(src, 32), srcidx), len, add(add(dest, 32), destidx), len))
}
}
}
// src/weiroll/VM.sol
abstract contract VM {
using CommandBuilder for bytes[];
uint256 constant FLAG_CT_DELEGATECALL = 0x00;
uint256 constant FLAG_CT_CALL = 0x01;
uint256 constant FLAG_CT_STATICCALL = 0x02;
uint256 constant FLAG_CT_VALUECALL = 0x03;
uint256 constant FLAG_CT_MASK = 0x03;
uint256 constant FLAG_EXTENDED_COMMAND = 0x40;
uint256 constant FLAG_TUPLE_RETURN = 0x80;
uint256 constant SHORT_COMMAND_FILL = 0x000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
address immutable self;
error ExecutionFailed(uint256 command_index, address target, string message);
constructor() {
self = address(this);
}
function _execute(bytes32[] calldata commands, bytes[] memory state) internal returns (bytes[] memory) {
bytes32 command;
uint256 flags;
bytes32 indices;
bool success;
bytes memory outdata;
uint256 commandsLength = commands.length;
for (uint256 i; i < commandsLength;) {
command = commands[i];
flags = uint256(command >> 216) & 0xFF; // more efficient
// flags = uint256(uint8(bytes1(command << 32))); // more readable
if (flags & FLAG_EXTENDED_COMMAND != 0) {
indices = commands[++i];
} else {
indices = bytes32(uint256(command << 40) | SHORT_COMMAND_FILL);
}
if (flags & FLAG_CT_MASK == FLAG_CT_DELEGATECALL) {
(success, outdata) = address(uint160(uint256(command))).delegatecall( // target
// inputs
state.buildInputs(
//selector
bytes4(command),
indices
)
);
} else if (flags & FLAG_CT_MASK == FLAG_CT_CALL) {
(success, outdata) = address(uint160(uint256(command))).call( // target
// inputs
state.buildInputs(
//selector
bytes4(command),
indices
)
);
} else if (flags & FLAG_CT_MASK == FLAG_CT_STATICCALL) {
(success, outdata) = address(uint160(uint256(command))).staticcall( // target
// inputs
state.buildInputs(
//selector
bytes4(command),
indices
)
);
} else if (flags & FLAG_CT_MASK == FLAG_CT_VALUECALL) {
uint256 callEth;
bytes memory v = state[uint8(bytes1(indices))];
require(v.length == 32, "_execute: value call has no value indicated.");
assembly {
callEth := mload(add(v, 0x20))
}
(success, outdata) = address(uint160(uint256(command))).call{ // target
value: callEth
}(
// inputs
state.buildInputs(
//selector
bytes4(command),
bytes32(uint256(indices << 8) | CommandBuilder.IDX_END_OF_ARGS)
)
);
} else {
revert("Invalid calltype");
}
if (!success) {
if (outdata.length > 0) {
assembly {
outdata := add(outdata, 68)
}
}
revert ExecutionFailed({
command_index: 0,
target: address(uint160(uint256(command))),
message: outdata.length > 0 ? string(outdata) : "Unknown"
});
}
if (flags & FLAG_TUPLE_RETURN != 0) {
state.writeTuple(bytes1(command << 88), outdata);
} else {
state = state.writeOutputs(bytes1(command << 88), outdata);
}
unchecked {
++i;
}
}
return state;
}
}
// src/AllMight.sol
/// @title AllMight
/// @notice Weiroll implementation that allow to do literally anything.
/// @author Stake DAO
/// @custom:contact [email protected]
contract AllMight is VM {
using SafeTransferLib for address;
/// @notice Address of the governance contract.
address public governance;
/// @notice Address of the future governance contract.
address public futureGovernance;
/// @notice Address authorized to call the execute function.
mapping(address => bool) public isAllowed;
////////////////////////////////////////////////////////////////
/// --- EVENTS & ERRORS
///////////////////////////////////////////////////////////////
/// @notice Event emitted when a new governance is proposed.
event GovernanceProposed(address indexed newGovernance);
/// @notice Event emitted when the governance is changed.
event GovernanceChanged(address indexed newGovernance);
/// @notice Throws if caller is not the governance.
error GOVERNANCE();
/// @notice Throws if caller is not allowed.
error NOT_ALLOWED();
/// @notice Throws if the length of the tokens and amounts arrays are not equal.
error WRONG_LENGTH();
////////////////////////////////////////////////////////////////
/// --- MODIFIERS
///////////////////////////////////////////////////////////////
modifier onlyGovernance() {
if (msg.sender != governance) revert GOVERNANCE();
_;
}
modifier onlyAllowed() {
if (!isAllowed[msg.sender]) revert NOT_ALLOWED();
_;
}
constructor(address _governance) {
governance = _governance;
}
////////////////////////////////////////////////////////////////
/// --- ADMIN FUNCTIONS
///////////////////////////////////////////////////////////////
/// @notice Allow an address to call the execute function.
/// @param _address Address to allow.
function allowAddress(address _address) external onlyGovernance {
isAllowed[_address] = true;
}
/// @notice Disallow an address to call the execute function.
/// @param _address Address to disallow.
function disallowAddress(address _address) external onlyGovernance {
isAllowed[_address] = false;
}
/// @notice Transfer the governance to a new address.
/// @param _governance Address of the new governance.
function transferGovernance(address _governance) external onlyGovernance {
emit GovernanceProposed(futureGovernance = _governance);
}
/// @notice Accept the governance transfer.
function acceptGovernance() external {
if (msg.sender != futureGovernance) revert GOVERNANCE();
emit GovernanceChanged(governance = msg.sender);
}
/// @notice Withdraw ETH or ERC20 tokens from the contract.
function withdraw(address[] calldata _tokens, uint256[] calldata _amount, address _recipient)
external
onlyGovernance
{
if (_tokens.length != _amount.length) revert WRONG_LENGTH();
for (uint256 i = 0; i < _tokens.length; i++) {
if (_tokens[i] == address(0)) {
SafeTransferLib.safeTransferETH(_recipient, _amount[i]);
} else {
SafeTransferLib.safeTransfer(_tokens[i], _recipient, _amount[i]);
}
}
}
////////////////////////////////////////////////////////////////
/// --- EXECUTE FUNCTION
///////////////////////////////////////////////////////////////
/// @notice Execute a list of commands.
/// @param commands List of commands to execute.
/// @param state State to execute the commands on.
function execute(bytes32[] calldata commands, bytes[] memory state) external onlyAllowed returns (bytes[] memory) {
return _execute(commands, state);
}
receive() external payable {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"command_index","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"string","name":"message","type":"string"}],"name":"ExecutionFailed","type":"error"},{"inputs":[],"name":"GOVERNANCE","type":"error"},{"inputs":[],"name":"NOT_ALLOWED","type":"error"},{"inputs":[],"name":"WRONG_LENGTH","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newGovernance","type":"address"}],"name":"GovernanceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newGovernance","type":"address"}],"name":"GovernanceProposed","type":"event"},{"inputs":[],"name":"acceptGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"allowAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"disallowAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"commands","type":"bytes32[]"},{"internalType":"bytes[]","name":"state","type":"bytes[]"}],"name":"execute","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"futureGovernance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"transferGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a060405234801561001057600080fd5b5060405161130238038061130283398101604081905261002f91610058565b30608052600080546001600160a01b0319166001600160a01b0392909216919091179055610088565b60006020828403121561006a57600080fd5b81516001600160a01b038116811461008157600080fd5b9392505050565b6080516112626100a0600039600050506112626000f3fe60806040526004361061008a5760003560e01c80638070c503116100595780638070c5031461012a578063b7c58d7a1461014a578063babcc5391461016a578063d38bfff4146101aa578063de792d5f146101ca57600080fd5b806308af4d8814610096578063238efcbc146100b857806326f91506146100cd5780635aa6e675146100ed57600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100b66100b1366004610d35565b6101f7565b005b3480156100c457600080fd5b506100b6610246565b3480156100d957600080fd5b506100b66100e8366004610d9c565b6102af565b3480156100f957600080fd5b5060005461010d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013657600080fd5b5060015461010d906001600160a01b031681565b34801561015657600080fd5b506100b6610165366004610d35565b6103c6565b34801561017657600080fd5b5061019a610185366004610d35565b60026020526000908152604090205460ff1681565b6040519015158152602001610121565b3480156101b657600080fd5b506100b66101c5366004610d35565b610412565b3480156101d657600080fd5b506101ea6101e5366004610eb0565b610487565b604051610121919061101d565b6000546001600160a01b03163314610222576040516305189e0d60e21b815260040160405180910390fd5b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6001546001600160a01b03163314610271576040516305189e0d60e21b815260040160405180910390fd5b600080546001600160a01b03191633908117825560405190917fa6a85f15b976d399f39ad43e515e75910bac714bc55eeff6131fb90780d6f74691a2565b6000546001600160a01b031633146102da576040516305189e0d60e21b815260040160405180910390fd5b8382146102fa57604051632aa3c3bf60e11b815260040160405180910390fd5b60005b848110156103be5760008686838181106103195761031961107f565b905060200201602081019061032e9190610d35565b6001600160a01b0316036103635761035e828585848181106103525761035261107f565b905060200201356104cf565b6103ac565b6103ac8686838181106103785761037861107f565b905060200201602081019061038d9190610d35565b838686858181106103a0576103a061107f565b905060200201356104ef565b806103b6816110ab565b9150506102fd565b505050505050565b6000546001600160a01b031633146103f1576040516305189e0d60e21b815260040160405180910390fd5b6001600160a01b03166000908152600260205260409020805460ff19169055565b6000546001600160a01b0316331461043d576040516305189e0d60e21b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517f1f95fb40be3a947982072902a887b521248d1d8931a39eb38f84f4d6fd758b6990600090a250565b3360009081526002602052604090205460609060ff166104ba57604051634ae18d2b60e11b815260040160405180910390fd5b6104c5848484610535565b90505b9392505050565b60005a60005a84865af16104eb5763b12d13eb6000526004601cfd5b5050565b816014528060345263a9059cbb60601b60005260206000604460106000875af13d15600160005114171661052b576390b8ec186000526004601cfd5b6000603452505050565b606060008080808487825b818110156108f0578a8a8281811061055a5761055a61107f565b90506020020135965060d887901c60001c60ff169550604086166000146105a6578a8a610586836110ab565b9250828181106105985761059861107f565b9050602002013594506105b7565b602887901b6001600160d01b031794505b6003861661062c576001600160a01b0387166105d48a89886108ff565b6040516105e191906110c4565b600060405180830381855af49150503d806000811461061c576040519150601f19603f3d011682016040523d82523d6000602084013e610621565b606091505b509094509250610854565b60016003871603610696576001600160a01b03871661064c8a89886108ff565b60405161065991906110c4565b6000604051808303816000865af19150503d806000811461061c576040519150601f19603f3d011682016040523d82523d6000602084013e610621565b600260038716036106fe576001600160a01b0387166106b68a89886108ff565b6040516106c391906110c4565b600060405180830381855afa9150503d806000811461061c576040519150601f19603f3d011682016040523d82523d6000602084013e610621565b600380871603610819576000808a8760f81c60ff16815181106107235761072361107f565b6020026020010151905080516020146107985760405162461bcd60e51b815260206004820152602c60248201527f5f657865637574653a2076616c75652063616c6c20686173206e6f2076616c7560448201526b329034b73234b1b0ba32b21760a11b60648201526084015b60405180910390fd5b602081015191506001600160a01b038916826107bc8d8c60088c901b60ff176108ff565b6040516107c991906110c4565b60006040518083038185875af1925050503d8060008114610806576040519150601f19603f3d011682016040523d82523d6000602084013e61080b565b606091505b509096509450610854915050565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063616c6c7479706560801b604482015260640161078f565b836108b957825115610867576044830192505b60008760001c600085511161089b57604051806040016040528060078152602001662ab735b737bbb760c91b81525061089d565b845b60405163ef3dcb2f60e01b815260040161078f939291906110e0565b60808616156108d6576108d189605889901b85610aff565b6108e8565b6108e589605889901b85610ba7565b98505b600101610540565b50969998505050505050505050565b606060008060005b602081101561093e578481602081106109225761092261107f565b1a915060fe1982011561093e5760209290920191600101610907565b5060408051808201909152602081018690529250600460006060815b6020811015610af0578781602081106109755761097561107f565b1a945060fe19850115610af0576080851615610aa15760fe8503610a3157601f19605f850116870160405260248388010186905281516020909401936000036109db57896040516020016109c9919061101d565b60405160208183030381529060405291505b8151603f9401938401601f19168701604052610a12826020896109ff8a6004611113565b60208751610a0d919061112c565b610cff565b60208251610a20919061112c565b610a2a9087611113565b9550610ae1565b60008a607f871681518110610a4857610a4861107f565b6020908102919091018101518051868b016024018a9052968701605f8101601f19168b0160405290910195909150610a8e8260008b610a888c6004611113565b85610cff565b610a988189611113565b97505050610ae1565b60008a607f871681518110610ab857610ab861107f565b6020908102919091018101518051603f9701968701601f19168a01604052015184890160240152505b6020929092019160010161095a565b50505083525090949350505050565b60f882901c60fe198101610b135750505050565b600082516020610b239190611113565b67ffffffffffffffff811115610b3b57610b3b610e1d565b6040519080825280601f01601f191660200182016040528015610b65576020820181803683370190505b5085607f841681518110610b7b57610b7b61107f565b602002602001018190529050610b978360008360208751610cff565b8251806020830152505050505050565b606060f883901c60fe198101610bc057849150506104c8565b6080811615610c725760fe8103610bec5782806020019051810190610be5919061113f565b9450610cf6565b602083810151908114610c545760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79206f6e652072657475726e2076616c7565207065726d697474656420604482015269287661726961626c652960b01b606482015260840161078f565b508251601f19016020848101918252607f8316810287010152610cf6565b8251602014610cd45760405162461bcd60e51b815260206004820152602860248201527f4f6e6c79206f6e652072657475726e2076616c7565207065726d697474656420604482015267287374617469632960c01b606482015260840161078f565b8285607f831681518110610cea57610cea61107f565b60200260200101819052505b50929392505050565b808260208501018286602089010160045afa505050505050565b80356001600160a01b0381168114610d3057600080fd5b919050565b600060208284031215610d4757600080fd5b6104c882610d19565b60008083601f840112610d6257600080fd5b50813567ffffffffffffffff811115610d7a57600080fd5b6020830191508360208260051b8501011115610d9557600080fd5b9250929050565b600080600080600060608688031215610db457600080fd5b853567ffffffffffffffff80821115610dcc57600080fd5b610dd889838a01610d50565b90975095506020880135915080821115610df157600080fd5b50610dfe88828901610d50565b9094509250610e11905060408701610d19565b90509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e5c57610e5c610e1d565b604052919050565b600067ffffffffffffffff821115610e7e57610e7e610e1d565b5060051b60200190565b600067ffffffffffffffff821115610ea257610ea2610e1d565b50601f01601f191660200190565b60008060006040808587031215610ec657600080fd5b843567ffffffffffffffff80821115610ede57600080fd5b610eea88838901610d50565b9096509450602091508682013581811115610f0457600080fd5b8701601f81018913610f1557600080fd5b8035610f28610f2382610e64565b610e33565b81815260059190911b8201840190848101908b831115610f4757600080fd5b8584015b83811015610fbb57803586811115610f635760008081fd5b8501603f81018e13610f755760008081fd5b87810135610f85610f2382610e88565b8181528f8b838501011115610f9a5760008081fd5b818b84018b83013760009181018a0191909152845250918601918601610f4b565b50809750505050505050509250925092565b60005b83811015610fe8578181015183820152602001610fd0565b50506000910152565b60008151808452611009816020860160208601610fcd565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561107257603f19888603018452611060858351610ff1565b94509285019290850190600101611044565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016110bd576110bd611095565b5060010190565b600082516110d6818460208701610fcd565b9190910192915050565b8381526001600160a01b038316602082015260606040820181905260009061110a90830184610ff1565b95945050505050565b8082018082111561112657611126611095565b92915050565b8181038181111561112657611126611095565b6000602080838503121561115257600080fd5b825167ffffffffffffffff8082111561116a57600080fd5b818501915085601f83011261117e57600080fd5b815161118c610f2382610e64565b81815260059190911b830184019084810190888311156111ab57600080fd5b8585015b8381101561121f578051858111156111c75760008081fd5b8601603f81018b136111d95760008081fd5b8781015160406111eb610f2383610e88565b8281528d828486010111156112005760008081fd5b61120f838c8301848701610fcd565b86525050509186019186016111af565b509897505050505050505056fea264697066735822122039f30b6c89c5285ba3c20f26762735734a91cf327793e6c497ac42094598a39b64736f6c6343000814003300000000000000000000000090569d8a1cf801709577b24da526118f0c83fc75
Deployed Bytecode
0x60806040526004361061008a5760003560e01c80638070c503116100595780638070c5031461012a578063b7c58d7a1461014a578063babcc5391461016a578063d38bfff4146101aa578063de792d5f146101ca57600080fd5b806308af4d8814610096578063238efcbc146100b857806326f91506146100cd5780635aa6e675146100ed57600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100b66100b1366004610d35565b6101f7565b005b3480156100c457600080fd5b506100b6610246565b3480156100d957600080fd5b506100b66100e8366004610d9c565b6102af565b3480156100f957600080fd5b5060005461010d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013657600080fd5b5060015461010d906001600160a01b031681565b34801561015657600080fd5b506100b6610165366004610d35565b6103c6565b34801561017657600080fd5b5061019a610185366004610d35565b60026020526000908152604090205460ff1681565b6040519015158152602001610121565b3480156101b657600080fd5b506100b66101c5366004610d35565b610412565b3480156101d657600080fd5b506101ea6101e5366004610eb0565b610487565b604051610121919061101d565b6000546001600160a01b03163314610222576040516305189e0d60e21b815260040160405180910390fd5b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6001546001600160a01b03163314610271576040516305189e0d60e21b815260040160405180910390fd5b600080546001600160a01b03191633908117825560405190917fa6a85f15b976d399f39ad43e515e75910bac714bc55eeff6131fb90780d6f74691a2565b6000546001600160a01b031633146102da576040516305189e0d60e21b815260040160405180910390fd5b8382146102fa57604051632aa3c3bf60e11b815260040160405180910390fd5b60005b848110156103be5760008686838181106103195761031961107f565b905060200201602081019061032e9190610d35565b6001600160a01b0316036103635761035e828585848181106103525761035261107f565b905060200201356104cf565b6103ac565b6103ac8686838181106103785761037861107f565b905060200201602081019061038d9190610d35565b838686858181106103a0576103a061107f565b905060200201356104ef565b806103b6816110ab565b9150506102fd565b505050505050565b6000546001600160a01b031633146103f1576040516305189e0d60e21b815260040160405180910390fd5b6001600160a01b03166000908152600260205260409020805460ff19169055565b6000546001600160a01b0316331461043d576040516305189e0d60e21b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517f1f95fb40be3a947982072902a887b521248d1d8931a39eb38f84f4d6fd758b6990600090a250565b3360009081526002602052604090205460609060ff166104ba57604051634ae18d2b60e11b815260040160405180910390fd5b6104c5848484610535565b90505b9392505050565b60005a60005a84865af16104eb5763b12d13eb6000526004601cfd5b5050565b816014528060345263a9059cbb60601b60005260206000604460106000875af13d15600160005114171661052b576390b8ec186000526004601cfd5b6000603452505050565b606060008080808487825b818110156108f0578a8a8281811061055a5761055a61107f565b90506020020135965060d887901c60001c60ff169550604086166000146105a6578a8a610586836110ab565b9250828181106105985761059861107f565b9050602002013594506105b7565b602887901b6001600160d01b031794505b6003861661062c576001600160a01b0387166105d48a89886108ff565b6040516105e191906110c4565b600060405180830381855af49150503d806000811461061c576040519150601f19603f3d011682016040523d82523d6000602084013e610621565b606091505b509094509250610854565b60016003871603610696576001600160a01b03871661064c8a89886108ff565b60405161065991906110c4565b6000604051808303816000865af19150503d806000811461061c576040519150601f19603f3d011682016040523d82523d6000602084013e610621565b600260038716036106fe576001600160a01b0387166106b68a89886108ff565b6040516106c391906110c4565b600060405180830381855afa9150503d806000811461061c576040519150601f19603f3d011682016040523d82523d6000602084013e610621565b600380871603610819576000808a8760f81c60ff16815181106107235761072361107f565b6020026020010151905080516020146107985760405162461bcd60e51b815260206004820152602c60248201527f5f657865637574653a2076616c75652063616c6c20686173206e6f2076616c7560448201526b329034b73234b1b0ba32b21760a11b60648201526084015b60405180910390fd5b602081015191506001600160a01b038916826107bc8d8c60088c901b60ff176108ff565b6040516107c991906110c4565b60006040518083038185875af1925050503d8060008114610806576040519150601f19603f3d011682016040523d82523d6000602084013e61080b565b606091505b509096509450610854915050565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063616c6c7479706560801b604482015260640161078f565b836108b957825115610867576044830192505b60008760001c600085511161089b57604051806040016040528060078152602001662ab735b737bbb760c91b81525061089d565b845b60405163ef3dcb2f60e01b815260040161078f939291906110e0565b60808616156108d6576108d189605889901b85610aff565b6108e8565b6108e589605889901b85610ba7565b98505b600101610540565b50969998505050505050505050565b606060008060005b602081101561093e578481602081106109225761092261107f565b1a915060fe1982011561093e5760209290920191600101610907565b5060408051808201909152602081018690529250600460006060815b6020811015610af0578781602081106109755761097561107f565b1a945060fe19850115610af0576080851615610aa15760fe8503610a3157601f19605f850116870160405260248388010186905281516020909401936000036109db57896040516020016109c9919061101d565b60405160208183030381529060405291505b8151603f9401938401601f19168701604052610a12826020896109ff8a6004611113565b60208751610a0d919061112c565b610cff565b60208251610a20919061112c565b610a2a9087611113565b9550610ae1565b60008a607f871681518110610a4857610a4861107f565b6020908102919091018101518051868b016024018a9052968701605f8101601f19168b0160405290910195909150610a8e8260008b610a888c6004611113565b85610cff565b610a988189611113565b97505050610ae1565b60008a607f871681518110610ab857610ab861107f565b6020908102919091018101518051603f9701968701601f19168a01604052015184890160240152505b6020929092019160010161095a565b50505083525090949350505050565b60f882901c60fe198101610b135750505050565b600082516020610b239190611113565b67ffffffffffffffff811115610b3b57610b3b610e1d565b6040519080825280601f01601f191660200182016040528015610b65576020820181803683370190505b5085607f841681518110610b7b57610b7b61107f565b602002602001018190529050610b978360008360208751610cff565b8251806020830152505050505050565b606060f883901c60fe198101610bc057849150506104c8565b6080811615610c725760fe8103610bec5782806020019051810190610be5919061113f565b9450610cf6565b602083810151908114610c545760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79206f6e652072657475726e2076616c7565207065726d697474656420604482015269287661726961626c652960b01b606482015260840161078f565b508251601f19016020848101918252607f8316810287010152610cf6565b8251602014610cd45760405162461bcd60e51b815260206004820152602860248201527f4f6e6c79206f6e652072657475726e2076616c7565207065726d697474656420604482015267287374617469632960c01b606482015260840161078f565b8285607f831681518110610cea57610cea61107f565b60200260200101819052505b50929392505050565b808260208501018286602089010160045afa505050505050565b80356001600160a01b0381168114610d3057600080fd5b919050565b600060208284031215610d4757600080fd5b6104c882610d19565b60008083601f840112610d6257600080fd5b50813567ffffffffffffffff811115610d7a57600080fd5b6020830191508360208260051b8501011115610d9557600080fd5b9250929050565b600080600080600060608688031215610db457600080fd5b853567ffffffffffffffff80821115610dcc57600080fd5b610dd889838a01610d50565b90975095506020880135915080821115610df157600080fd5b50610dfe88828901610d50565b9094509250610e11905060408701610d19565b90509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e5c57610e5c610e1d565b604052919050565b600067ffffffffffffffff821115610e7e57610e7e610e1d565b5060051b60200190565b600067ffffffffffffffff821115610ea257610ea2610e1d565b50601f01601f191660200190565b60008060006040808587031215610ec657600080fd5b843567ffffffffffffffff80821115610ede57600080fd5b610eea88838901610d50565b9096509450602091508682013581811115610f0457600080fd5b8701601f81018913610f1557600080fd5b8035610f28610f2382610e64565b610e33565b81815260059190911b8201840190848101908b831115610f4757600080fd5b8584015b83811015610fbb57803586811115610f635760008081fd5b8501603f81018e13610f755760008081fd5b87810135610f85610f2382610e88565b8181528f8b838501011115610f9a5760008081fd5b818b84018b83013760009181018a0191909152845250918601918601610f4b565b50809750505050505050509250925092565b60005b83811015610fe8578181015183820152602001610fd0565b50506000910152565b60008151808452611009816020860160208601610fcd565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561107257603f19888603018452611060858351610ff1565b94509285019290850190600101611044565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016110bd576110bd611095565b5060010190565b600082516110d6818460208701610fcd565b9190910192915050565b8381526001600160a01b038316602082015260606040820181905260009061110a90830184610ff1565b95945050505050565b8082018082111561112657611126611095565b92915050565b8181038181111561112657611126611095565b6000602080838503121561115257600080fd5b825167ffffffffffffffff8082111561116a57600080fd5b818501915085601f83011261117e57600080fd5b815161118c610f2382610e64565b81815260059190911b830184019084810190888311156111ab57600080fd5b8585015b8381101561121f578051858111156111c75760008081fd5b8601603f81018b136111d95760008081fd5b8781015160406111eb610f2383610e88565b8281528d828486010111156112005760008081fd5b61120f838c8301848701610fcd565b86525050509186019186016111af565b509897505050505050505056fea264697066735822122039f30b6c89c5285ba3c20f26762735734a91cf327793e6c497ac42094598a39b64736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000090569d8a1cf801709577b24da526118f0c83fc75
-----Decoded View---------------
Arg [0] : _governance (address): 0x90569D8A1cF801709577B24dA526118f0C83Fc75
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000090569d8a1cf801709577b24da526118f0c83fc75
Deployed Bytecode Sourcemap
28800:3809:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30628:109;;;;;;;;;;-1:-1:-1;30628:109:0;;;;;:::i;:::-;;:::i;:::-;;31301:169;;;;;;;;;;;;;:::i;31543:527::-;;;;;;;;;;-1:-1:-1;31543:527:0;;;;;:::i;:::-;;:::i;28926:25::-;;;;;;;;;;-1:-1:-1;28926:25:0;;;;-1:-1:-1;;;;;28926:25:0;;;;;;-1:-1:-1;;;;;1771:32:1;;;1753:51;;1741:2;1726:18;28926:25:0;;;;;;;;29020:31;;;;;;;;;;-1:-1:-1;29020:31:0;;;;-1:-1:-1;;;;;29020:31:0;;;30858:113;;;;;;;;;;-1:-1:-1;30858:113:0;;;;;:::i;:::-;;:::i;29126:41::-;;;;;;;;;;-1:-1:-1;29126:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1980:14:1;;1973:22;1955:41;;1943:2;1928:18;29126:41:0;1815:187:1;31097:147:0;;;;;;;;;;-1:-1:-1;31097:147:0;;;;;:::i;:::-;;:::i;32404:165::-;;;;;;;;;;-1:-1:-1;32404:165:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;30628:109::-;30098:10;;-1:-1:-1;;;;;30098:10:0;30084;:24;30080:49;;30117:12;;-1:-1:-1;;;30117:12:0;;;;;;;;;;;30080:49;-1:-1:-1;;;;;30703:19:0::1;;::::0;;;:9:::1;:19;::::0;;;;:26;;-1:-1:-1;;30703:26:0::1;30725:4;30703:26;::::0;;30628:109::o;31301:169::-;31367:16;;-1:-1:-1;;;;;31367:16:0;31353:10;:30;31349:55;;31392:12;;-1:-1:-1;;;31392:12:0;;;;;;;;;;;31349:55;31438:10;:23;;-1:-1:-1;;;;;;31438:23:0;31451:10;31438:23;;;;;31420:42;;31451:10;;31420:42;;;31301:169::o;31543:527::-;30098:10;;-1:-1:-1;;;;;30098:10:0;30084;:24;30080:49;;30117:12;;-1:-1:-1;;;30117:12:0;;;;;;;;;;;30080:49;31699:32;;::::1;31695:59;;31740:14;;-1:-1:-1::0;;;31740:14:0::1;;;;;;;;;;;31695:59;31772:9;31767:296;31787:18:::0;;::::1;31767:296;;;31853:1;31831:7:::0;;31839:1;31831:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31831:24:0::1;::::0;31827:225:::1;;31876:55;31908:10;31920:7;;31928:1;31920:10;;;;;;;:::i;:::-;;;;;;;31876:31;:55::i;:::-;31827:225;;;31972:64;32001:7;;32009:1;32001:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;32013;32025:7;;32033:1;32025:10;;;;;;;:::i;:::-;;;;;;;31972:28;:64::i;:::-;31807:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31767:296;;;;31543:527:::0;;;;;:::o;30858:113::-;30098:10;;-1:-1:-1;;;;;30098:10:0;30084;:24;30080:49;;30117:12;;-1:-1:-1;;;30117:12:0;;;;;;;;;;;30080:49;-1:-1:-1;;;;;30936:19:0::1;30958:5;30936:19:::0;;;:9:::1;:19;::::0;;;;:27;;-1:-1:-1;;30936:27:0::1;::::0;;30858:113::o;31097:147::-;30098:10;;-1:-1:-1;;;;;30098:10:0;30084;:24;30080:49;;30117:12;;-1:-1:-1;;;30117:12:0;;;;;;;;;;;30080:49;31205:16:::1;:30:::0;;-1:-1:-1;;;;;;31205:30:0::1;-1:-1:-1::0;;;;;31205:30:0;::::1;::::0;;::::1;::::0;;;31186:50:::1;::::0;::::1;::::0;-1:-1:-1;;31186:50:0::1;31097:147:::0;:::o;32404:165::-;30206:10;30196:21;;;;:9;:21;;;;;;32502:14;;30196:21;;30191:48;;30226:13;;-1:-1:-1;;;30226:13:0;;;;;;;;;;;30191:48;32536:25:::1;32545:8;;32555:5;32536:8;:25::i;:::-;32529:32;;30250:1;32404:165:::0;;;;;:::o;3230:340::-;3425:4;3418:5;3412:4;3405:5;3397:6;3393:2;3386:5;3381:49;3371:181;;3464:10;3458:4;3451:24;3532:4;3526;3519:18;3371:181;3230:340;;:::o;11811:957::-;11977:2;11971:4;11964:16;12035:6;12029:4;12022:20;-1:-1:-1;;;12095:4:0;12088:48;12495:4;12489;12483;12477;12474:1;12467:5;12460;12455:45;12388:16;12381:24;12377:1;12370:4;12364:11;12361:18;12358:48;12272:247;12244:408;;12567:10;12561:4;12554:24;12632:4;12626;12619:18;12244:408;12679:1;12673:4;12666:15;11811:957;;;:::o;25048:3562::-;25135:14;25162:15;;;;25135:14;25321:8;25162:15;25347:3233;25367:14;25363:1;:18;25347:3233;;;25409:8;;25418:1;25409:11;;;;;;;:::i;:::-;;;;;;;25399:21;;25462:3;25451:7;:14;;25443:23;;25469:4;25443:30;25435:38;;24697:4;25592:5;:29;25625:1;25592:34;25588:201;;25657:8;;25666:3;;;:::i;:::-;;;;25657:13;;;;;;;:::i;:::-;;;;;;;25647:23;;25588:201;;;25748:2;25737:13;;;-1:-1:-1;;;;;25729:43:0;;-1:-1:-1;25588:201:0;24645:4;25809:20;;25805:2006;;-1:-1:-1;;;;;25895:47:0;;26006:152;:5;25919:7;26128;26006:17;:152::i;:::-;25895:282;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25874:303:0;;-1:-1:-1;25874:303:0;-1:-1:-1;25805:2006:0;;;24505:4;24645;26203:5;:20;:36;26199:1612;;-1:-1:-1;;;;;26281:39:0;;26384:152;:5;26305:7;26506;26384:17;:152::i;:::-;26281:274;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26199:1612;24554:4;24645;26581:5;:20;:42;26577:1234;;-1:-1:-1;;;;;26665:45:0;;26774:152;:5;26689:7;26896;26774:17;:152::i;:::-;26665:280;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26577:1234;24602:4;24645;26971:5;:20;:41;26967:844;;27033:15;27067:14;27084:5;27103:7;27090:22;;27084:29;;;;;;;;;;:::i;:::-;;;;;;;27067:46;;27140:1;:8;27152:2;27140:14;27132:71;;;;-1:-1:-1;;;27132:71:0;;7023:2:1;27132:71:0;;;7005:21:1;7062:2;7042:18;;;7035:30;7101:34;7081:18;;;7074:62;-1:-1:-1;;;7152:18:1;;;7145:42;7204:19;;27132:71:0;;;;;;;;;27278:4;27271:12;;27265:19;;-1:-1:-1;;;;;;27342:39:0;;27265:19;27501:208;:5;27366:7;27650:1;27639:12;;;18610:4;27631:54;27501:17;:208::i;:::-;27342:386;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27321:407:0;;-1:-1:-1;27321:407:0;-1:-1:-1;26967:844:0;;-1:-1:-1;;26967:844:0;;27769:26;;-1:-1:-1;;;27769:26:0;;7436:2:1;27769:26:0;;;7418:21:1;7475:2;7455:18;;;7448:30;-1:-1:-1;;;7494:18:1;;;7487:46;7550:18;;27769:26:0;7234:340:1;26967:844:0;27832:7;27827:446;;27864:14;;:18;27860:152;;27967:2;27958:7;27954:16;27943:27;;27860:152;28091:1;28147:7;28139:16;;28206:1;28189:7;:14;:18;:48;;;;;;;;;;;;;;;-1:-1:-1;;;28189:48:0;;;;;;28217:7;28189:48;28037:220;;-1:-1:-1;;;28037:220:0;;;;;;;;;;:::i;27827:446::-;24745:4;28293:25;;:30;28289:218;;28344:48;:5;28379:2;28368:13;;;28384:7;28344:16;:48::i;:::-;28289:218;;;28441:50;:5;28478:2;28467:13;;;28483:7;28441:18;:50::i;:::-;28433:58;;28289:218;28550:3;;25347:3233;;;-1:-1:-1;28597:5:0;;25048:3562;-1:-1:-1;;;;;;;;;25048:3562:0:o;18667:3553::-;18794:16;18828:12;18905:11;18987:9;18982:254;19002:2;18998:1;:6;18982:254;;;19034:7;19042:1;19034:10;;;;;;;:::i;:::-;;;-1:-1:-1;;;19064:22:0;;19060:33;19088:5;19060:33;19145:2;19137:10;;;;;19206:3;;18982:254;;;-1:-1:-1;19338:4:0;19332:11;;19420:60;;;19407:74;;;19455:4;19502:12;;19495:30;;;19332:11;-1:-1:-1;19391:1:0;19270:20;19574:22;19270:20;19670:2473;19690:2;19686:1;:6;19670:2473;;;19722:7;19730:1;19722:10;;;;;;;:::i;:::-;;;-1:-1:-1;;;19752:22:0;;19748:33;19776:5;19748:33;18519:4;19802:25;;:30;19798:2202;;18654:4;19857:3;:20;19853:1688;;-1:-1:-1;;20027:34:0;;;20023:50;20014:60;;20031:23;20001:74;20121:2;20108:24;;;;20101:38;;;20188:16;;19972:2;19954:21;;;;20208:1;20188:21;20184:107;;20261:5;20250:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;20238:29;;20184:107;20383:16;;20452:34;20365:35;;20452:34;;;-1:-1:-1;;20448:50:0;20439:60;;20433:4;20426:74;20545:59;20389:9;20474:4;20443:3;20572:8;:4;20579:1;20572:8;:::i;:::-;20601:2;20582:9;:16;:21;;;;:::i;:::-;20545:6;:59::i;:::-;20654:2;20635:9;:16;:21;;;;:::i;:::-;20627:29;;;;:::i;:::-;;;19798:2202;;19853:1688;20705:21;20729:5;18564:4;20735:3;:20;20729:27;;;;;;;;:::i;:::-;;;;;;;;;;;;20796:15;;21144:24;;;21157:2;21144:24;21137:38;;;21272:25;;;21063:34;21349;;-1:-1:-1;;21345:50:0;21336:60;;21067:23;21323:74;21272:25;;;;20729:27;;-1:-1:-1;21442:42:0;20729:27;20779:14;21054:3;21467:8;21170:4;21474:1;21467:8;:::i;:::-;21477:6;21442;:42::i;:::-;21507:14;21515:6;21507:14;;:::i;:::-;;;20682:859;;19798:2202;;;21638:21;21662:5;18564:4;21668:3;:20;21662:27;;;;;;;;:::i;:::-;;;;;;;;;;;;21774:15;;21838:34;21756;;21838;;;-1:-1:-1;;21834:50:0;21825:60;;21819:4;21812:74;21947:17;21941:24;21915;;;21928:2;21915:24;21908:58;-1:-1:-1;19798:2202:0;22052:2;22043:11;;;;;22113:3;;19670:2473;;;-1:-1:-1;;;22177:25:0;;-1:-1:-1;22184:3:0;;18667:3553;-1:-1:-1;;;;18667:3553:0:o;23611:445::-;23735:12;;;;-1:-1:-1;;23763:22:0;;23759:35;;23787:7;23611:445;;;:::o;23759:35::-;23806:18;23867:6;:13;23883:2;23867:18;;;;:::i;:::-;23857:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23857:29:0;;23827:5;18564:4;23833:3;:20;23827:27;;;;;;;;:::i;:::-;;;;;;:59;;;23806:80;;23899:43;23906:6;23914:1;23917:5;23924:2;23928:6;:13;23899:6;:43::i;:::-;23992:6;23986:13;24036:1;24031:2;24024:5;24020:14;24013:25;;23962:87;;23611:445;;;:::o;22228:1375::-;22357:14;22403:12;;;;-1:-1:-1;;22430:22:0;;22426:40;;22461:5;22454:12;;;;;22426:40;18519:4;22483:25;;:30;22479:1092;;18654:4;22534:3;:20;22530:844;;22594:6;22583:29;;;;;;;;;;;;:::i;:::-;22575:37;;22479:1092;;22530:844;22841:2;22829:15;;;22823:22;;22890:12;;22882:67;;;;-1:-1:-1;;;22882:67:0;;10085:2:1;22882:67:0;;;10067:21:1;10124:2;10104:18;;;10097:30;10163:34;10143:18;;;10136:62;-1:-1:-1;;;10214:18:1;;;10207:40;10264:19;;22882:67:0;9883:406:1;22882:67:0;-1:-1:-1;23119:13:0;;-1:-1:-1;;23115:22:0;23134:2;23098:15;;;23091:47;;;23301:14;23292:24;;23288:33;;23268:54;;;23261:79;22479:1092;;;23442:6;:13;23459:2;23442:19;23434:72;;;;-1:-1:-1;;;23434:72:0;;10496:2:1;23434:72:0;;;10478:21:1;10535:2;10515:18;;;10508:30;10574:34;10554:18;;;10547:62;-1:-1:-1;;;10625:18:1;;;10618:38;10673:19;;23434:72:0;10294:404:1;23434:72:0;23553:6;23523:5;18564:4;23529:3;:20;23523:27;;;;;;;;:::i;:::-;;;;;;:36;;;;22479:1092;-1:-1:-1;23590:5:0;;22228:1375;-1:-1:-1;;;22228:1375:0:o;24064:257::-;24298:3;24288:7;24283:2;24277:4;24273:13;24269:27;24264:3;24255:6;24250:2;24245:3;24241:12;24237:25;24234:1;24227:5;24216:86;24212:91;24064:257;;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:367::-;446:8;456:6;510:3;503:4;495:6;491:17;487:27;477:55;;528:1;525;518:12;477:55;-1:-1:-1;551:20:1;;594:18;583:30;;580:50;;;626:1;623;616:12;580:50;663:4;655:6;651:17;639:29;;723:3;716:4;706:6;703:1;699:14;691:6;687:27;683:38;680:47;677:67;;;740:1;737;730:12;677:67;383:367;;;;;:::o;755:847::-;886:6;894;902;910;918;971:2;959:9;950:7;946:23;942:32;939:52;;;987:1;984;977:12;939:52;1027:9;1014:23;1056:18;1097:2;1089:6;1086:14;1083:34;;;1113:1;1110;1103:12;1083:34;1152:70;1214:7;1205:6;1194:9;1190:22;1152:70;:::i;:::-;1241:8;;-1:-1:-1;1126:96:1;-1:-1:-1;1329:2:1;1314:18;;1301:32;;-1:-1:-1;1345:16:1;;;1342:36;;;1374:1;1371;1364:12;1342:36;;1413:72;1477:7;1466:8;1455:9;1451:24;1413:72;:::i;:::-;1504:8;;-1:-1:-1;1387:98:1;-1:-1:-1;1558:38:1;;-1:-1:-1;1592:2:1;1577:18;;1558:38;:::i;:::-;1548:48;;755:847;;;;;;;;:::o;2007:127::-;2068:10;2063:3;2059:20;2056:1;2049:31;2099:4;2096:1;2089:15;2123:4;2120:1;2113:15;2139:275;2210:2;2204:9;2275:2;2256:13;;-1:-1:-1;;2252:27:1;2240:40;;2310:18;2295:34;;2331:22;;;2292:62;2289:88;;;2357:18;;:::i;:::-;2393:2;2386:22;2139:275;;-1:-1:-1;2139:275:1:o;2419:181::-;2477:4;2510:18;2502:6;2499:30;2496:56;;;2532:18;;:::i;:::-;-1:-1:-1;2577:1:1;2573:14;2589:4;2569:25;;2419:181::o;2605:186::-;2653:4;2686:18;2678:6;2675:30;2672:56;;;2708:18;;:::i;:::-;-1:-1:-1;2774:2:1;2753:15;-1:-1:-1;;2749:29:1;2780:4;2745:40;;2605:186::o;2796:1989::-;2925:6;2933;2941;2972:2;3015;3003:9;2994:7;2990:23;2986:32;2983:52;;;3031:1;3028;3021:12;2983:52;3071:9;3058:23;3100:18;3141:2;3133:6;3130:14;3127:34;;;3157:1;3154;3147:12;3127:34;3196:70;3258:7;3249:6;3238:9;3234:22;3196:70;:::i;:::-;3285:8;;-1:-1:-1;3170:96:1;-1:-1:-1;3339:2:1;;-1:-1:-1;3379:18:1;;;3366:32;3410:16;;;3407:36;;;3439:1;3436;3429:12;3407:36;3462:24;;3517:4;3509:13;;3505:27;-1:-1:-1;3495:55:1;;3546:1;3543;3536:12;3495:55;3582:2;3569:16;3605:58;3621:41;3659:2;3621:41;:::i;:::-;3605:58;:::i;:::-;3697:15;;;3779:1;3775:10;;;;3767:19;;3763:28;;;3728:12;;;;3803:19;;;3800:39;;;3835:1;3832;3825:12;3800:39;3867:2;3863;3859:11;3879:876;3895:6;3890:3;3887:15;3879:876;;;3981:3;3968:17;4017:2;4004:11;4001:19;3998:109;;;4061:1;4090:2;4086;4079:14;3998:109;4130:20;;4185:2;4177:11;;4173:25;-1:-1:-1;4163:123:1;;4240:1;4269:2;4265;4258:14;4163:123;4330:2;4326;4322:11;4309:25;4360:48;4376:31;4404:2;4376:31;:::i;4360:48::-;4435:2;4428:5;4421:17;4479:7;4474:2;4469;4465;4461:11;4457:20;4454:33;4451:126;;;4529:1;4559:3;4554;4547:16;4451:126;4632:2;4627;4623;4619:11;4614:2;4607:5;4603:14;4590:45;4680:1;4659:14;;;4655:23;;4648:34;;;;4695:18;;-1:-1:-1;4733:12:1;;;;3912;;3879:876;;;3883:3;4774:5;4764:15;;;;;;;;;2796:1989;;;;;:::o;4790:250::-;4875:1;4885:113;4899:6;4896:1;4893:13;4885:113;;;4975:11;;;4969:18;4956:11;;;4949:39;4921:2;4914:10;4885:113;;;-1:-1:-1;;5032:1:1;5014:16;;5007:27;4790:250::o;5045:270::-;5086:3;5124:5;5118:12;5151:6;5146:3;5139:19;5167:76;5236:6;5229:4;5224:3;5220:14;5213:4;5206:5;5202:16;5167:76;:::i;:::-;5297:2;5276:15;-1:-1:-1;;5272:29:1;5263:39;;;;5304:4;5259:50;;5045:270;-1:-1:-1;;5045:270:1:o;5320:800::-;5480:4;5509:2;5549;5538:9;5534:18;5579:2;5568:9;5561:21;5602:6;5637;5631:13;5668:6;5660;5653:22;5706:2;5695:9;5691:18;5684:25;;5768:2;5758:6;5755:1;5751:14;5740:9;5736:30;5732:39;5718:53;;5806:2;5798:6;5794:15;5827:1;5837:254;5851:6;5848:1;5845:13;5837:254;;;5944:2;5940:7;5928:9;5920:6;5916:22;5912:36;5907:3;5900:49;5972:39;6004:6;5995;5989:13;5972:39;:::i;:::-;5962:49;-1:-1:-1;6069:12:1;;;;6034:15;;;;5873:1;5866:9;5837:254;;;-1:-1:-1;6108:6:1;;5320:800;-1:-1:-1;;;;;;;5320:800:1:o;6125:127::-;6186:10;6181:3;6177:20;6174:1;6167:31;6217:4;6214:1;6207:15;6241:4;6238:1;6231:15;6257:127;6318:10;6313:3;6309:20;6306:1;6299:31;6349:4;6346:1;6339:15;6373:4;6370:1;6363:15;6389:135;6428:3;6449:17;;;6446:43;;6469:18;;:::i;:::-;-1:-1:-1;6516:1:1;6505:13;;6389:135::o;6529:287::-;6658:3;6696:6;6690:13;6712:66;6771:6;6766:3;6759:4;6751:6;6747:17;6712:66;:::i;:::-;6794:16;;;;;6529:287;-1:-1:-1;;6529:287:1:o;7579:395::-;7774:25;;;-1:-1:-1;;;;;7835:32:1;;7830:2;7815:18;;7808:60;7904:2;7899;7884:18;;7877:30;;;-1:-1:-1;;7924:44:1;;7949:18;;7941:6;7924:44;:::i;:::-;7916:52;7579:395;-1:-1:-1;;;;;7579:395:1:o;7979:125::-;8044:9;;;8065:10;;;8062:36;;;8078:18;;:::i;:::-;7979:125;;;;:::o;8109:128::-;8176:9;;;8197:11;;;8194:37;;;8211:18;;:::i;8242:1636::-;8346:6;8377:2;8420;8408:9;8399:7;8395:23;8391:32;8388:52;;;8436:1;8433;8426:12;8388:52;8469:9;8463:16;8498:18;8539:2;8531:6;8528:14;8525:34;;;8555:1;8552;8545:12;8525:34;8593:6;8582:9;8578:22;8568:32;;8638:7;8631:4;8627:2;8623:13;8619:27;8609:55;;8660:1;8657;8650:12;8609:55;8689:2;8683:9;8712:58;8728:41;8766:2;8728:41;:::i;8712:58::-;8804:15;;;8886:1;8882:10;;;;8874:19;;8870:28;;;8835:12;;;;8910:19;;;8907:39;;;8942:1;8939;8932:12;8907:39;8974:2;8970;8966:11;8986:862;9002:6;8997:3;8994:15;8986:862;;;9081:3;9075:10;9117:2;9104:11;9101:19;9098:109;;;9161:1;9190:2;9186;9179:14;9098:109;9230:20;;9285:2;9277:11;;9273:25;-1:-1:-1;9263:123:1;;9340:1;9369:2;9365;9358:14;9263:123;9423:2;9419;9415:11;9409:18;9450:2;9478:48;9494:31;9522:2;9494:31;:::i;9478:48::-;9553:2;9546:5;9539:17;9597:7;9592:2;9587;9583;9579:11;9575:20;9572:33;9569:126;;;9647:1;9677:3;9672;9665:16;9569:126;9708:67;9772:2;9767;9760:5;9756:14;9751:2;9747;9743:11;9708:67;:::i;:::-;9788:18;;-1:-1:-1;;;9826:12:1;;;;9019;;8986:862;;;-1:-1:-1;9867:5:1;8242:1636;-1:-1:-1;;;;;;;;8242:1636:1:o
Swarm Source
ipfs://39f30b6c89c5285ba3c20f26762735734a91cf327793e6c497ac42094598a39b
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$1,454.97
Net Worth in ETH
0.621087
Token Allocations
WETH
28.20%
RSUP
22.59%
FXN
13.56%
Others
35.66%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 22.59% | $0.26103 | 1,258.8896 | $328.61 | |
| ETH | 13.56% | $0.00 | 10.6881 | $0.00 | |
| ETH | 13.06% | $2,340.99 | 0.0812 | $190.08 | |
| ETH | 5.29% | $1.27 | 60.565 | $76.92 | |
| ETH | 4.92% | $2,541.57 | 0.0282 | $71.58 | |
| ETH | 2.33% | $1.85 | 18.3083 | $33.93 | |
| ETH | 2.24% | $0.996425 | 32.6538 | $32.54 | |
| ETH | 2.23% | $6.05 | 5.3748 | $32.52 | |
| ETH | 2.18% | $0.999424 | 31.6911 | $31.67 | |
| ETH | 1.38% | $0.999138 | 20.1451 | $20.13 | |
| ETH | 1.32% | $23.45 | 0.821 | $19.25 | |
| ETH | 1.24% | $1 | 18.0595 | $18.09 | |
| ETH | 0.89% | $0.000216 | 59,927.6156 | $12.95 | |
| ETH | 0.84% | $0.000065 | 189,074.315 | $12.29 | |
| ETH | 0.45% | $0.996094 | 6.553 | $6.53 | |
| ETH | 0.44% | $2,925.39 | 0.0021847 | $6.39 | |
| ETH | 0.27% | $1.57 | 2.5079 | $3.94 | |
| ETH | 0.23% | $2,872.02 | 0.00116964 | $3.36 | |
| ETH | 0.17% | $0.121729 | 19.9236 | $2.43 | |
| ETH | 0.08% | $0.245937 | 4.9192 | $1.21 | |
| ETH | 0.04% | $0.049676 | 11.7499 | $0.5836 | |
| ETH | 0.03% | $0.009705 | 41.1822 | $0.3996 | |
| ETH | 0.02% | $0.288893 | 0.891 | $0.2574 | |
| ETH | 0.02% | $0.024721 | 9.2004 | $0.2274 | |
| ETH | <0.01% | $0.061222 | 2.0575 | $0.1259 | |
| BASE | 9.05% | $2,335.96 | 0.0564 | $131.66 | |
| BASE | 5.32% | $0.005832 | 13,265.504 | $77.37 | |
| BASE | 0.35% | $0.288594 | 17.6515 | $5.09 | |
| ARB | 6.08% | $2,338.49 | 0.0379 | $88.52 | |
| BSC | 2.74% | $0.999159 | 39.8841 | $39.85 | |
| BSC | 0.56% | $0.002103 | 3,887.2618 | $8.17 | |
| BSC | 0.07% | $0.007088 | 141.9331 | $1.01 | |
| FRAXTAL | <0.01% | $0.808592 | 0.000000003352 | <$0.000001 |
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.