Source Code
Overview
ETH Balance
531.464953575666442355 ETH
More Info
ContractCreator
Multichain Info
N/A
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
24811534 | 6 hrs ago | 0.003 ETH | ||||
24811534 | 6 hrs ago | 0.0089 ETH | ||||
24811367 | 6 hrs ago | 0.003 ETH | ||||
24811367 | 6 hrs ago | 0.0089 ETH | ||||
24811359 | 6 hrs ago | 0.003 ETH | ||||
24811359 | 6 hrs ago | 0.0089 ETH | ||||
24811328 | 6 hrs ago | 0.003 ETH | ||||
24811328 | 6 hrs ago | 0.0089 ETH | ||||
24768688 | 30 hrs ago | 0.003 ETH | ||||
24768688 | 30 hrs ago | 0.0089 ETH | ||||
24768684 | 30 hrs ago | 0.003 ETH | ||||
24768684 | 30 hrs ago | 0.0089 ETH | ||||
24767950 | 30 hrs ago | 0.003 ETH | ||||
24767950 | 30 hrs ago | 0.0089 ETH | ||||
24722487 | 2 days ago | 0.003 ETH | ||||
24722487 | 2 days ago | 0.0089 ETH | ||||
24718365 | 2 days ago | 0.003 ETH | ||||
24718365 | 2 days ago | 0.0089 ETH | ||||
24718356 | 2 days ago | 0.003 ETH | ||||
24718356 | 2 days ago | 0.0089 ETH | ||||
24714667 | 2 days ago | 0.003 ETH | ||||
24714667 | 2 days ago | 0.0179 ETH | ||||
24712577 | 2 days ago | 0.003 ETH | ||||
24712577 | 2 days ago | 0.0089 ETH | ||||
24679716 | 3 days ago | 0.003 ETH |
Loading...
Loading
Minimal Proxy Contract for 0x5ff7bee00fee7480a31b43750e40cab9b9270a1a
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x3e6F45B0...91575E391 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
StaticAggregationHook
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 999999 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT OR Apache-2.0 pragma solidity >=0.8.0; /*@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@ HYPERLANE @@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@*/ import {StandardHookMetadata} from "../libs/StandardHookMetadata.sol"; import {AbstractPostDispatchHook} from "../libs/AbstractPostDispatchHook.sol"; import {IPostDispatchHook} from "../../interfaces/hooks/IPostDispatchHook.sol"; import {MetaProxy} from "../../libs/MetaProxy.sol"; contract StaticAggregationHook is AbstractPostDispatchHook { using StandardHookMetadata for bytes; // ============ External functions ============ /// @inheritdoc IPostDispatchHook function hookType() external pure override returns (uint8) { return uint8(IPostDispatchHook.Types.AGGREGATION); } /// @inheritdoc AbstractPostDispatchHook function _postDispatch(bytes calldata metadata, bytes calldata message) internal override { address[] memory _hooks = hooks(message); uint256 count = _hooks.length; for (uint256 i = 0; i < count; i++) { uint256 quote = IPostDispatchHook(_hooks[i]).quoteDispatch( metadata, message ); IPostDispatchHook(_hooks[i]).postDispatch{value: quote}( metadata, message ); } } /// @inheritdoc AbstractPostDispatchHook function _quoteDispatch(bytes calldata metadata, bytes calldata message) internal view override returns (uint256) { address[] memory _hooks = hooks(message); uint256 count = _hooks.length; uint256 total = 0; for (uint256 i = 0; i < count; i++) { total += IPostDispatchHook(_hooks[i]).quoteDispatch( metadata, message ); } return total; } function hooks(bytes calldata) public pure returns (address[] memory) { return abi.decode(MetaProxy.metadata(), (address[])); } }
// SPDX-License-Identifier: MIT OR Apache-2.0 pragma solidity >=0.8.0; /*@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@ HYPERLANE @@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@*/ /** * Format of metadata: * * [0:1] variant * [2:33] msg.value * [34:65] Gas limit for message (IGP) * [66:85] Refund address for message (IGP) * [86:] Custom metadata */ library StandardHookMetadata { uint8 private constant VARIANT_OFFSET = 0; uint8 private constant MSG_VALUE_OFFSET = 2; uint8 private constant GAS_LIMIT_OFFSET = 34; uint8 private constant REFUND_ADDRESS_OFFSET = 66; uint256 private constant MIN_METADATA_LENGTH = 86; uint16 public constant VARIANT = 1; /** * @notice Returns the variant of the metadata. * @param _metadata ABI encoded global hook metadata. * @return variant of the metadata as uint8. */ function variant(bytes calldata _metadata) internal pure returns (uint16) { if (_metadata.length < VARIANT_OFFSET + 2) return 0; return uint16(bytes2(_metadata[VARIANT_OFFSET:VARIANT_OFFSET + 2])); } /** * @notice Returns the specified value for the message. * @param _metadata ABI encoded global hook metadata. * @param _default Default fallback value. * @return Value for the message as uint256. */ function msgValue(bytes calldata _metadata, uint256 _default) internal pure returns (uint256) { if (_metadata.length < MSG_VALUE_OFFSET + 32) return _default; return uint256(bytes32(_metadata[MSG_VALUE_OFFSET:MSG_VALUE_OFFSET + 32])); } /** * @notice Returns the specified gas limit for the message. * @param _metadata ABI encoded global hook metadata. * @param _default Default fallback gas limit. * @return Gas limit for the message as uint256. */ function gasLimit(bytes calldata _metadata, uint256 _default) internal pure returns (uint256) { if (_metadata.length < GAS_LIMIT_OFFSET + 32) return _default; return uint256(bytes32(_metadata[GAS_LIMIT_OFFSET:GAS_LIMIT_OFFSET + 32])); } /** * @notice Returns the specified refund address for the message. * @param _metadata ABI encoded global hook metadata. * @param _default Default fallback refund address. * @return Refund address for the message as address. */ function refundAddress(bytes calldata _metadata, address _default) internal pure returns (address) { if (_metadata.length < REFUND_ADDRESS_OFFSET + 20) return _default; return address( bytes20( _metadata[REFUND_ADDRESS_OFFSET:REFUND_ADDRESS_OFFSET + 20] ) ); } /** * @notice Returns the specified refund address for the message. * @param _metadata ABI encoded global hook metadata. * @return Refund address for the message as address. */ function getCustomMetadata(bytes calldata _metadata) internal pure returns (bytes calldata) { if (_metadata.length < MIN_METADATA_LENGTH) return _metadata[0:0]; return _metadata[MIN_METADATA_LENGTH:]; } /** * @notice Formats the specified gas limit and refund address into global hook metadata. * @param _msgValue msg.value for the message. * @param _gasLimit Gas limit for the message. * @param _refundAddress Refund address for the message. * @param _customMetadata Additional metadata to include in the global hook metadata. * @return ABI encoded global hook metadata. */ function formatMetadata( uint256 _msgValue, uint256 _gasLimit, address _refundAddress, bytes memory _customMetadata ) internal pure returns (bytes memory) { return abi.encodePacked( VARIANT, _msgValue, _gasLimit, _refundAddress, _customMetadata ); } /** * @notice Formats the specified gas limit and refund address into global hook metadata. * @param _msgValue msg.value for the message. * @return ABI encoded global hook metadata. */ function formatMetadata(uint256 _msgValue) internal view returns (bytes memory) { return formatMetadata(_msgValue, uint256(0), msg.sender, ""); } /** * @notice Formats the specified gas limit and refund address into global hook metadata. * @param _gasLimit Gas limit for the message. * @param _refundAddress Refund address for the message. * @return ABI encoded global hook metadata. */ function formatMetadata(uint256 _gasLimit, address _refundAddress) internal pure returns (bytes memory) { return formatMetadata(uint256(0), _gasLimit, _refundAddress, ""); } }
// SPDX-License-Identifier: MIT OR Apache-2.0 pragma solidity >=0.8.0; /*@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@ HYPERLANE @@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@*/ // ============ Internal Imports ============ import {StandardHookMetadata} from "./StandardHookMetadata.sol"; import {IPostDispatchHook} from "../../interfaces/hooks/IPostDispatchHook.sol"; /** * @title AbstractPostDispatch * @notice Abstract post dispatch hook supporting the current global hook metadata variant. */ abstract contract AbstractPostDispatchHook is IPostDispatchHook { using StandardHookMetadata for bytes; // ============ External functions ============ /// @inheritdoc IPostDispatchHook function supportsMetadata(bytes calldata metadata) public pure virtual override returns (bool) { return metadata.length == 0 || metadata.variant() == StandardHookMetadata.VARIANT; } /// @inheritdoc IPostDispatchHook function postDispatch(bytes calldata metadata, bytes calldata message) external payable override { require( supportsMetadata(metadata), "AbstractPostDispatchHook: invalid metadata variant" ); _postDispatch(metadata, message); } /// @inheritdoc IPostDispatchHook function quoteDispatch(bytes calldata metadata, bytes calldata message) public view override returns (uint256) { require( supportsMetadata(metadata), "AbstractPostDispatchHook: invalid metadata variant" ); return _quoteDispatch(metadata, message); } // ============ Internal functions ============ /** * @notice Post dispatch hook implementation. * @param metadata The metadata of the message being dispatched. * @param message The message being dispatched. */ function _postDispatch(bytes calldata metadata, bytes calldata message) internal virtual; /** * @notice Quote dispatch hook implementation. * @param metadata The metadata of the message being dispatched. * @param message The message being dispatched. * @return The quote for the dispatch. */ function _quoteDispatch(bytes calldata metadata, bytes calldata message) internal view virtual returns (uint256); }
// SPDX-License-Identifier: MIT OR Apache-2.0 pragma solidity >=0.8.0; /*@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@ HYPERLANE @@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@*/ interface IPostDispatchHook { enum Types { UNUSED, ROUTING, AGGREGATION, MERKLE_TREE, INTERCHAIN_GAS_PAYMASTER, FALLBACK_ROUTING, ID_AUTH_ISM, PAUSABLE, PROTOCOL_FEE } /** * @notice Returns an enum that represents the type of hook */ function hookType() external view returns (uint8); /** * @notice Returns whether the hook supports metadata * @param metadata metadata * @return Whether the hook supports metadata */ function supportsMetadata(bytes calldata metadata) external view returns (bool); /** * @notice Post action after a message is dispatched via the Mailbox * @param metadata The metadata required for the hook * @param message The message passed from the Mailbox.dispatch() call */ function postDispatch(bytes calldata metadata, bytes calldata message) external payable; /** * @notice Compute the payment required by the postDispatch call * @param metadata The metadata required for the hook * @param message The message passed from the Mailbox.dispatch() call * @return Quoted payment for the postDispatch call */ function quoteDispatch(bytes calldata metadata, bytes calldata message) external view returns (uint256); }
// SPDX-License-Identifier: CC0-1.0 pragma solidity >=0.7.6; /// @dev Adapted from https://eips.ethereum.org/EIPS/eip-3448 library MetaProxy { bytes32 private constant PREFIX = hex"600b380380600b3d393df3363d3d373d3d3d3d60368038038091363936013d73"; bytes13 private constant SUFFIX = hex"5af43d3d93803e603457fd5bf3"; function bytecode(address _implementation, bytes memory _metadata) internal pure returns (bytes memory) { return abi.encodePacked( PREFIX, bytes20(_implementation), SUFFIX, _metadata, _metadata.length ); } function metadata() internal pure returns (bytes memory) { bytes memory data; assembly { let posOfMetadataSize := sub(calldatasize(), 32) let size := calldataload(posOfMetadataSize) let dataPtr := sub(posOfMetadataSize, size) data := mload(64) // increment free memory pointer by metadata size + 32 bytes (length) mstore(64, add(data, add(size, 32))) mstore(data, size) let memPtr := add(data, 32) calldatacopy(memPtr, dataPtr, size) } return data; } }
{ "remappings": [ "@openzeppelin/=../node_modules/@openzeppelin/", "@eth-optimism/=../node_modules/@eth-optimism/", "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/" ], "optimizer": { "enabled": true, "runs": 999999 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "viaIR": false, "libraries": {} }
Contract ABI
API[{"inputs":[],"name":"hookType","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"hooks","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"metadata","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"name":"postDispatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"metadata","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"name":"quoteDispatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"metadata","type":"bytes"}],"name":"supportsMetadata","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}]
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.