ETH Price: $3,344.28 (-0.84%)

Contract

0x2D36f2A022D1170f33fDFD5670833C447c0c9Ff3
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

1 Internal Transaction found.

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block
From
To
197367652024-04-26 3:10:11241 days ago1714101011  Contract Creation0 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x6a0Ed0A9...65Cca64fC
The constructor portion of the code might be different and could alter the actual behaviour of the contract

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"}]

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
Loading...
Loading
[ 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.