Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 456,393 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
Amount
|
||||
|---|---|---|---|---|---|---|---|---|---|
| 0x01000000 | 35597988 | 21 secs ago | IN | 0 ETH | 0.000000066043 | ||||
| 0x01000000 | 35597957 | 1 min ago | IN | 0 ETH | 0.000000065995 | ||||
| 0x01000000 | 35597926 | 2 mins ago | IN | 0 ETH | 0.000000233921 | ||||
| 0x01000000 | 35597895 | 3 mins ago | IN | 0 ETH | 0.000000066043 | ||||
| 0x01000000 | 35597864 | 4 mins ago | IN | 0 ETH | 0.000000048467 | ||||
| 0x01000000 | 35597833 | 5 mins ago | IN | 0 ETH | 0.000000783245 | ||||
| 0x01000000 | 35597802 | 6 mins ago | IN | 0 ETH | 0.000002135428 | ||||
| 0x01000000 | 35597771 | 7 mins ago | IN | 0 ETH | 0.000000221878 | ||||
| 0x01000000 | 35597740 | 8 mins ago | IN | 0 ETH | 0.000000048479 | ||||
| 0x01000000 | 35597709 | 9 mins ago | IN | 0 ETH | 0.000000066043 | ||||
| 0x01000000 | 35597678 | 10 mins ago | IN | 0 ETH | 0.000000066043 | ||||
| 0x01000000 | 35597647 | 11 mins ago | IN | 0 ETH | 0.000000048479 | ||||
| 0x01000000 | 35597616 | 12 mins ago | IN | 0 ETH | 0.000000228001 | ||||
| 0x01000000 | 35597585 | 13 mins ago | IN | 0 ETH | 0.000000066043 | ||||
| 0x01000000 | 35597554 | 14 mins ago | IN | 0 ETH | 0.000000227094 | ||||
| 0x01000000 | 35597523 | 15 mins ago | IN | 0 ETH | 0.000000066043 | ||||
| 0x01000000 | 35597492 | 16 mins ago | IN | 0 ETH | 0.000000048479 | ||||
| 0x01000000 | 35597461 | 17 mins ago | IN | 0 ETH | 0.000000066043 | ||||
| 0x01000000 | 35597430 | 18 mins ago | IN | 0 ETH | 0.00000137919 | ||||
| 0x01000000 | 35597399 | 19 mins ago | IN | 0 ETH | 0.000002163928 | ||||
| 0x01000000 | 35597368 | 21 mins ago | IN | 0 ETH | 0.000000066043 | ||||
| 0x01000000 | 35597337 | 22 mins ago | IN | 0 ETH | 0.000000066043 | ||||
| 0x01000000 | 35597306 | 23 mins ago | IN | 0 ETH | 0.000000146094 | ||||
| 0x01000000 | 35597275 | 24 mins ago | IN | 0 ETH | 0.000000066043 | ||||
| 0x01000000 | 35597244 | 25 mins ago | IN | 0 ETH | 0.000000066043 |
Latest 1 internal transaction
| Parent Transaction Hash | Block | From | To | Amount | ||
|---|---|---|---|---|---|---|
| 30175167 | 125 days ago | Contract Creation | 0 ETH |
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 Source Code Verified (Exact Match)
Contract Name:
UpgradeableProxyADFS
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: Copyright (c) 2024-2025 Schelling Point Labs Inc.
pragma solidity ^0.8.28;
// ___ __ __ _ __ __ __
// / _ )/ /__ ____/ /__ ___ ___ ___ ___ ___ / |/ /__ / /__ _____ ____/ /__
// / _ / / _ \/ __/ '_/(_-</ -_) _ \(_-</ -_) / / -_) __/ |/|/ / _ \/ __/ '_/
// /____/_/\___/\__/_/\_\/___/\__/_//_/___/\__/ /_/|_/\__/\__/|__,__/\___/_/ /_/\_\
// _____ ____ ___ ___ ___ ________
// / __/ | / / |/ / / _ | / _ \/ __/ __/
// / _/ | |/ / /|_/ / / __ |/ // / _/_\ \
// /___/ |___/_/ /_/ /_/ |_/____/_/ /___/
//
// Website: https://blocksense.network/
// Git Repository: https://github.com/blocksense-network/blocksense
/// @title UpgradeableProxyADFS
/// @author Aneta Tsvetkova
/// @notice Implements an upgradeable proxy for the Blocksense
/// Aggregated Data Feed Store (ADFS) contract.
///
/// @dev Non-management calls are delegated to the contract address stored in
/// IMPLEMENTATION_SLOT, which is upgradeable by the admin stored in the
/// ADMIN_SLOT.
///
/// Storage layout:
/// * Management space: [0 to 2**128-2**116)
/// * ADFS data space: [2**128-2**116 to 2**160)
///
/// This contract intentionally deviates from the EIP-1967 slot scheme.
/// It was co-designed with ADFS to accommodate its custom low-level
/// storage management requirements.
///
/// Note that this deviation has implications on storage isolation and
/// upgrade safety.
contract UpgradeableProxyADFS {
/// @notice Storage slot for the implementation address.
/// @dev Non-management calls are delegated to this address.
bytes32 internal constant IMPLEMENTATION_SLOT =
0x0000000000000000000000000000000000000000000000000000000000000001;
/// @notice Storage slot for the admin address of the upgradeable proxy.
/// @dev This address is authorized to perform management operations, such as
/// upgrading the implementation.
bytes32 internal constant ADMIN_SLOT =
0x0000000000000000000000000000000000000000000000000000000000000002;
/// @notice The selector for the _upgradeToAndCall function.
bytes4 internal constant UPGRADE_TO_AND_CALL_SELECTOR = 0x00000001;
/// @notice The selector for the _setAdmin function.
bytes4 internal constant SET_ADMIN_SELECTOR = 0x00000002;
/// @notice Emitted when the implementation is upgraded
/// @param implementation The new implementation address
event Upgraded(address indexed implementation);
/// @notice Emitted when the admin is changed
/// @param newAdmin The new admin address
event AdminSet(address indexed newAdmin);
/// @notice Thrown when a non-admin attempts to perform an admin-only action.
error ProxyDeniedAdminAccess();
/// @notice Thrown when attempting to upgrade to an invalid implementation address.
/// @param value The address that was attempted for upgrade
error InvalidUpgrade(address value);
/// @notice Thrown when an upgrade function sees `msg.value > 0` that may be lost.
error ERC1967NonPayable();
/// @notice Construct the UpgradeableProxy contract
/// @param owner The address of the admin
constructor(address owner) payable {
_setAdmin(owner);
}
/// @notice Fallback function
/// @dev Fallback function for delegating calls to the implementation contract.
///
/// This function delegates non-management calls to the implementation address.
///
/// Management operations are reserved for calls whose first 4 bytes (msg.sig) equal:
/// * 0x00000001 - _upgradeToAndCall(address newImplementation, bytes memory data)
/// * 0x00000002 - _setAdmin(address newAdmin)
/// Only the admin is allowed to execute these management operations;
/// all others will revert with ProxyDeniedAdminAccess.
///
/// Note: Unlike OpenZeppelin's Transparent Proxy, the admin can invoke both
/// management functions and delegate calls. The implementation contract is responsible
/// for enforcing any further security measures.
///
/// Note: The 0x00 prefix in the calldata helps avoid clashes in ADFS' custom
/// function selector.
fallback() external payable {
if (
msg.sig == UPGRADE_TO_AND_CALL_SELECTOR || msg.sig == SET_ADMIN_SELECTOR
) {
bool isAdmin;
assembly {
isAdmin := eq(caller(), sload(ADMIN_SLOT))
}
if (!isAdmin) revert ProxyDeniedAdminAccess();
if (msg.sig == UPGRADE_TO_AND_CALL_SELECTOR) {
_upgradeToAndCall(address(bytes20(msg.data[4:])), msg.data[24:]);
return;
} else if (msg.sig == SET_ADMIN_SELECTOR) {
_setAdmin(address(bytes20(msg.data[4:])));
return;
}
}
assembly {
// Copy msg.data. We take full control of memory in this inline assembly
// block because it will not return to Solidity code. We overwrite the
// Solidity scratch pad at memory position 0.
calldatacopy(0, 0, calldatasize())
// Call the implementation.
// out and outsize are 0 because we don't know the size yet.
let result := delegatecall(
gas(),
sload(IMPLEMENTATION_SLOT),
0,
calldatasize(),
0,
0
)
if iszero(result) {
revert(0, returndatasize())
}
// Copy the returned data.
returndatacopy(0, 0, returndatasize())
return(0, returndatasize())
}
}
/// @notice Upgrades the implementation to a new contract.
/// @param newImplementation The address of the new implementation
/// @dev Validates that the new address contains contract code before
/// storing.
function _upgradeToAndCall(
address newImplementation,
bytes memory data
) internal {
if (newImplementation.code.length == 0) {
revert InvalidUpgrade(newImplementation);
}
assembly {
sstore(IMPLEMENTATION_SLOT, newImplementation)
}
emit Upgraded(newImplementation);
if (data.length > 0) {
assembly {
let result := delegatecall(
gas(),
newImplementation,
add(data, 0x20),
mload(data),
0,
0
)
if iszero(result) {
revert(0, 0)
}
}
} else if (msg.value > 0) {
revert ERC1967NonPayable();
}
}
/// @notice Sets a new admin address for the proxy.
/// @param newAdmin The address of the new admin.
/// @dev Passing address(0) revokes further upgrade permissions.
function _setAdmin(address newAdmin) internal {
assembly {
sstore(ADMIN_SLOT, newAdmin)
}
emit AdminSet(newAdmin);
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract ABI
API[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"ERC1967NonPayable","type":"error"},{"inputs":[{"internalType":"address","name":"value","type":"address"}],"name":"InvalidUpgrade","type":"error"},{"inputs":[],"name":"ProxyDeniedAdminAccess","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"}]Contract Creation Code
608060405260405161037d38038061037d8339810160408190526020916068565b602781602c565b506096565b60028190556040516001600160a01b038216907f8fe72c3e0020beb3234e76ae6676fa576fbfcae600af1c4fea44784cf0db329c90600090a250565b600060208284031215607957600080fd5b81516001600160a01b0381168114608f57600080fd5b9392505050565b6102d8806100a56000396000f3fe60806040526000356001600160e01b031916600160e01b148061003157506000356001600160e01b031916600160e11b145b1561011257600254331480610059576040516334ad5dbb60e21b815260040160405180910390fd5b6001600160e01b03196000358116016100d3576100d161007d36600481600061022b565b61008691610255565b60601c61009736601881600061022b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061013792505050565b005b6001600160e11b03196000356001600160e01b03191601610110576100d16100ff36600481600061022b565b61010891610255565b60601c6101ef565b505b36600080376000803660006001545af48061012c573d6000fd5b503d6000803e3d6000f35b816001600160a01b03163b6000036101715760405163c72492e960e01b81526001600160a01b038316600482015260240160405180910390fd5b60018290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101cc57600080825160208401855af4806101c757600080fd5b505050565b34156101eb5760405163b398979f60e01b815260040160405180910390fd5b5050565b60028190556040516001600160a01b038216907f8fe72c3e0020beb3234e76ae6676fa576fbfcae600af1c4fea44784cf0db329c90600090a250565b6000808585111561023b57600080fd5b8386111561024857600080fd5b5050820193919092039150565b80356bffffffffffffffffffffffff19811690601484101561029b576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b509291505056fea2646970667358221220ee6afe6f70e3f9ad43bbba2deef819367c3918c08f465c79969256686fff85b764736f6c634300081c003300000000000000000000000053adbdaa3ee8725de80bf97173b1f1a0a48036de
Deployed Bytecode
0x60806040526000356001600160e01b031916600160e01b148061003157506000356001600160e01b031916600160e11b145b1561011257600254331480610059576040516334ad5dbb60e21b815260040160405180910390fd5b6001600160e01b03196000358116016100d3576100d161007d36600481600061022b565b61008691610255565b60601c61009736601881600061022b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061013792505050565b005b6001600160e11b03196000356001600160e01b03191601610110576100d16100ff36600481600061022b565b61010891610255565b60601c6101ef565b505b36600080376000803660006001545af48061012c573d6000fd5b503d6000803e3d6000f35b816001600160a01b03163b6000036101715760405163c72492e960e01b81526001600160a01b038316600482015260240160405180910390fd5b60018290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101cc57600080825160208401855af4806101c757600080fd5b505050565b34156101eb5760405163b398979f60e01b815260040160405180910390fd5b5050565b60028190556040516001600160a01b038216907f8fe72c3e0020beb3234e76ae6676fa576fbfcae600af1c4fea44784cf0db329c90600090a250565b6000808585111561023b57600080fd5b8386111561024857600080fd5b5050820193919092039150565b80356bffffffffffffffffffffffff19811690601484101561029b576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b509291505056fea2646970667358221220ee6afe6f70e3f9ad43bbba2deef819367c3918c08f465c79969256686fff85b764736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000053adbdaa3ee8725de80bf97173b1f1a0a48036de
-----Decoded View---------------
Arg [0] : owner (address): 0x53AdbDAA3EE8725De80Bf97173B1f1A0a48036De
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000053adbdaa3ee8725de80bf97173b1f1a0a48036de
Loading...
Loading
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.