ETH Price: $3,136.08 (+1.79%)

Contract

0x6a0Ed0A9193FCBe7ae9B0F3D90F88e365Cca64fC

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Sponsored

Transaction Hash
Method
Block
From
To
Value

There are no matching entries

Please try again later

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To Value
1193871872024-04-29 6:45:5175 days ago1714373151  Contract Creation0 ETH

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ActionStorageV4

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
shanghai EvmVersion
File 1 of 3 : ActionStorageV4.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.17;

import "../interfaces/IPActionStorageV4.sol";
import "./RouterStorage.sol";

contract ActionStorageV4 is RouterStorage, IPActionStorageV4 {
    modifier onlyOwner() {
        require(msg.sender == owner(), "Ownable: caller is not the owner");
        _;
    }

    function owner() public view returns (address) {
        return _getCoreStorage().owner;
    }

    function pendingOwner() public view returns (address) {
        return _getCoreStorage().pendingOwner;
    }

    function setSelectorToFacets(SelectorsToFacet[] calldata arr) external onlyOwner {
        CoreStorage storage $ = _getCoreStorage();

        for (uint256 i = 0; i < arr.length; i++) {
            SelectorsToFacet memory s = arr[i];
            for (uint256 j = 0; j < s.selectors.length; j++) {
                $.selectorToFacet[s.selectors[j]] = s.facet;
                emit SelectorToFacetSet(s.selectors[j], s.facet);
            }
        }
    }

    function selectorToFacet(bytes4 selector) external view returns (address) {
        CoreStorage storage $ = _getCoreStorage();
        return $.selectorToFacet[selector];
    }

    // Ownable
    function transferOwnership(address newOwner, bool direct, bool renounce) external onlyOwner {
        CoreStorage storage $ = _getCoreStorage();

        if (direct) {
            require(newOwner != address(0) || renounce, "Ownable: zero address");

            emit OwnershipTransferred($.owner, newOwner);
            $.owner = newOwner;
            $.pendingOwner = address(0);
        } else {
            $.pendingOwner = newOwner;
        }
    }

    function claimOwnership() external {
        CoreStorage storage $ = _getCoreStorage();

        address _pendingOwner = $.pendingOwner;

        require(msg.sender == _pendingOwner, "Ownable: caller != pending owner");

        emit OwnershipTransferred($.owner, _pendingOwner);
        $.owner = _pendingOwner;
        $.pendingOwner = address(0);
    }
}

File 2 of 3 : IPActionStorageV4.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.0;

interface IPActionStorageV4 {
    struct SelectorsToFacet {
        address facet;
        bytes4[] selectors;
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    event SelectorToFacetSet(bytes4 indexed selector, address indexed facet);

    function owner() external view returns (address);

    function pendingOwner() external view returns (address);

    function transferOwnership(address newOwner, bool direct, bool renounce) external;

    function claimOwnership() external;

    function setSelectorToFacets(SelectorsToFacet[] calldata arr) external;

    function selectorToFacet(bytes4 selector) external view returns (address);
}

File 3 of 3 : RouterStorage.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.17;

abstract contract RouterStorage {
    struct CoreStorage {
        address owner;
        address pendingOwner;
        mapping(bytes4 => address) selectorToFacet;
    }

    // keccak256(abi.encode(uint256(keccak256("pendle.routerv4.Core")) - 1)) & ~bytes32(uint256(0xff))
    bytes32 private constant CORE_STORAGE_LOCATION = 0xf168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab800;

    function _getCoreStorage() internal pure returns (CoreStorage storage $) {
        assembly {
            $.slot := CORE_STORAGE_LOCATION
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "viaIR": true,
  "evmVersion": "shanghai",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":true,"internalType":"address","name":"facet","type":"address"}],"name":"SelectorToFacetSet","type":"event"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"selectorToFacet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facet","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct IPActionStorageV4.SelectorsToFacet[]","name":"arr","type":"tuple[]"}],"name":"setSelectorToFacets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60808060405234610016576109b4908161001b8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8063078dfbe7146106f95780634e71e0c8146105b25780638da5cb5b14610542578063a47dbf8214610176578063ae7473ac146100cf5763e30c39781461005b575f80fd5b346100cb575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cb57602073ffffffffffffffffffffffffffffffffffffffff7ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab8015416604051908152f35b5f80fd5b346100cb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cb576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036100cb575f527ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab802602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346100cb576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cb5767ffffffffffffffff600435116100cb573660236004350112156100cb5767ffffffffffffffff60043560040135116100cb573660246004356004013560051b6004350101116100cb5761023273ffffffffffffffffffffffffffffffffffffffff7ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab800541633146108d8565b5f905b60043560040135821061024457005b60248260051b6004350101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9d6004353603018112156100cb576004350160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82360301126100cb57604051906040820182811067ffffffffffffffff82111761051557604052602481013573ffffffffffffffffffffffffffffffffffffffff811681036100cb578252604481013567ffffffffffffffff81116100cb573660438284010112156100cb5767ffffffffffffffff6024828401013511610515576040519167ffffffffffffffff8282016024013560051b603f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016840190811190841117610515578082016024810135600581901b603f81017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168601604052908552016044019185840191903684116100cb5701604401905b8282106104dd575050508282019081525f5b815180518210156104cf578160019692879273ffffffffffffffffffffffffffffffffffffffff8751169061042a7fffffffff0000000000000000000000000000000000000000000000000000000093849261093d565b51165f527ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab802885260405f20907fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905561048882865161093d565b511673ffffffffffffffffffffffffffffffffffffffff865116907e38aaccfeca40ea50135fcc37980765ee22033e320eaf575624561bdbbe93005f80a3019094506103d3565b505050509060010190610235565b81357fffffffff00000000000000000000000000000000000000000000000000000000811681036100cb5781529085019085016103c1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b346100cb575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cb57602073ffffffffffffffffffffffffffffffffffffffff7ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab8005416604051908152f35b346100cb575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cb577ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab801805473ffffffffffffffffffffffffffffffffffffffff9081811680330361069b577ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab800908082549485167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff0000000000000000000000000000000000000000938416179055169055005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152fd5b346100cb5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cb5760043573ffffffffffffffffffffffffffffffffffffffff908181168091036100cb576024359081151582036100cb5760443580151581036100cb577ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab800926107948585541633146108d8565b1561088b57811590811591610883575b5015610825578082549384167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790557ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab80180549091169055005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152fd5b9050846107a4565b507ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab80180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055005b156108df57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b80518210156109515760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea2646970667358221220ff9e11393dd79e3f2c34e356573dc93fbc86ec74763402d43c814d6e59b7e0a864736f6c63430008180033

Deployed Bytecode

0x60806040526004361015610011575f80fd5b5f3560e01c8063078dfbe7146106f95780634e71e0c8146105b25780638da5cb5b14610542578063a47dbf8214610176578063ae7473ac146100cf5763e30c39781461005b575f80fd5b346100cb575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cb57602073ffffffffffffffffffffffffffffffffffffffff7ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab8015416604051908152f35b5f80fd5b346100cb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cb576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036100cb575f527ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab802602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346100cb576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cb5767ffffffffffffffff600435116100cb573660236004350112156100cb5767ffffffffffffffff60043560040135116100cb573660246004356004013560051b6004350101116100cb5761023273ffffffffffffffffffffffffffffffffffffffff7ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab800541633146108d8565b5f905b60043560040135821061024457005b60248260051b6004350101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9d6004353603018112156100cb576004350160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82360301126100cb57604051906040820182811067ffffffffffffffff82111761051557604052602481013573ffffffffffffffffffffffffffffffffffffffff811681036100cb578252604481013567ffffffffffffffff81116100cb573660438284010112156100cb5767ffffffffffffffff6024828401013511610515576040519167ffffffffffffffff8282016024013560051b603f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016840190811190841117610515578082016024810135600581901b603f81017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168601604052908552016044019185840191903684116100cb5701604401905b8282106104dd575050508282019081525f5b815180518210156104cf578160019692879273ffffffffffffffffffffffffffffffffffffffff8751169061042a7fffffffff0000000000000000000000000000000000000000000000000000000093849261093d565b51165f527ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab802885260405f20907fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905561048882865161093d565b511673ffffffffffffffffffffffffffffffffffffffff865116907e38aaccfeca40ea50135fcc37980765ee22033e320eaf575624561bdbbe93005f80a3019094506103d3565b505050509060010190610235565b81357fffffffff00000000000000000000000000000000000000000000000000000000811681036100cb5781529085019085016103c1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b346100cb575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cb57602073ffffffffffffffffffffffffffffffffffffffff7ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab8005416604051908152f35b346100cb575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cb577ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab801805473ffffffffffffffffffffffffffffffffffffffff9081811680330361069b577ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab800908082549485167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff0000000000000000000000000000000000000000938416179055169055005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152fd5b346100cb5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cb5760043573ffffffffffffffffffffffffffffffffffffffff908181168091036100cb576024359081151582036100cb5760443580151581036100cb577ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab800926107948585541633146108d8565b1561088b57811590811591610883575b5015610825578082549384167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790557ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab80180549091169055005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152fd5b9050846107a4565b507ff168c5b0cb4aca9a68f931815c18a144c61ad01d6dd7ca15bd6741672a0ab80180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055005b156108df57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b80518210156109515760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea2646970667358221220ff9e11393dd79e3f2c34e356573dc93fbc86ec74763402d43c814d6e59b7e0a864736f6c63430008180033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.