Source Code
Overview
SOPH Balance
More Info
ContractCreator
Multichain Info
N/A
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
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:
CompatibilityFallbackHandler
Compiler Version
v0.7.6+commit.7338295f
ZkSolc Version
v1.5.4
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "./TokenCallbackHandler.sol";import "../interfaces/ISignatureValidator.sol";import "../Safe.sol";/*** @title Compatibility Fallback Handler - Provides compatibility between pre 1.3.0 and 1.3.0+ Safe contracts.* @author Richard Meissner - @rmeissner*/contract CompatibilityFallbackHandler is TokenCallbackHandler, ISignatureValidator {// keccak256("SafeMessage(bytes message)");bytes32 private constant SAFE_MSG_TYPEHASH = 0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca;bytes4 internal constant SIMULATE_SELECTOR = bytes4(keccak256("simulate(address,bytes)"));address internal constant SENTINEL_MODULES = address(0x1);bytes4 internal constant UPDATED_MAGIC_VALUE = 0x1626ba7e;/*** @notice Legacy EIP-1271 signature validation method.* @dev Implementation of ISignatureValidator (see `interfaces/ISignatureValidator.sol`)* @param _data Arbitrary length data signed on the behalf of address(msg.sender).* @param _signature Signature byte array associated with _data.* @return The EIP-1271 magic value.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../base/Executor.sol";/*** @title Simulate Transaction Accessor.* @notice Can be used with StorageAccessible to simulate Safe transactions.* @author Richard Meissner - @rmeissner*/contract SimulateTxAccessor is Executor {address private immutable accessorSingleton;constructor() {accessorSingleton = address(this);}/*** @notice Modifier to make a function callable via delegatecall only.* If the function is called via a regular call, it will revert.*/modifier onlyDelegateCall() {require(address(this) != accessorSingleton, "SimulateTxAccessor should only be called via delegatecall");_;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../common/Enum.sol";/*** @title Executor - A contract that can execute transactions* @author Richard Meissner - @rmeissner*/abstract contract Executor {/*** @notice Executes either a delegatecall or a call with provided parameters.* @dev This method doesn't perform any sanity check of the transaction, such as:* - if the contract at `to` address has code or not* It is the responsibility of the caller to perform such checks.* @param to Destination address.* @param value Ether value.* @param data Data payload.* @param operation Operation type.* @return success boolean flag indicating if the call succeeded.*/function execute(address to,uint256 value,bytes memory data,Enum.Operation operation,uint256 txGas
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../common/SelfAuthorized.sol";/*** @title Fallback Manager - A contract managing fallback calls made to this contract* @author Richard Meissner - @rmeissner*/abstract contract FallbackManager is SelfAuthorized {event ChangedFallbackHandler(address indexed handler);// keccak256("fallback_manager.handler.address")bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;/*** @notice Internal function to set the fallback handler.* @param handler contract to handle fallback calls.*/function internalSetFallbackHandler(address handler) internal {/*If a fallback handler is set to self, then the following attack vector is opened:Imagine we have a function like this:function withdraw() internal authorized {withdrawalAddress.call.value(address(this).balance)("");}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../common/Enum.sol";import "../common/SelfAuthorized.sol";import "../interfaces/IERC165.sol";interface Guard is IERC165 {function checkTransaction(address to,uint256 value,bytes memory data,Enum.Operation operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address payable refundReceiver,bytes memory signatures,address msgSender) external;function checkAfterExecution(bytes32 txHash, bool success) external;}abstract contract BaseGuard is Guard {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../common/Enum.sol";import "../common/SelfAuthorized.sol";import "./Executor.sol";/*** @title Module Manager - A contract managing Safe modules* @notice Modules are extensions with unlimited access to a Safe that can be added to a Safe by its owners.⚠️ WARNING: Modules are a security risk since they can execute arbitrary transactions,so only trusted and audited modules should be added to a Safe. A malicious module cancompletely takeover a Safe.* @author Stefan George - @Georgi87* @author Richard Meissner - @rmeissner*/abstract contract ModuleManager is SelfAuthorized, Executor {event EnabledModule(address indexed module);event DisabledModule(address indexed module);event ExecutionFromModuleSuccess(address indexed module);event ExecutionFromModuleFailure(address indexed module);address internal constant SENTINEL_MODULES = address(0x1);mapping(address => address) internal modules;/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../common/SelfAuthorized.sol";/*** @title OwnerManager - Manages Safe owners and a threshold to authorize transactions.* @dev Uses a linked list to store the owners because the code generate by the solidity compiler* is more efficient than using a dynamic array.* @author Stefan George - @Georgi87* @author Richard Meissner - @rmeissner*/abstract contract OwnerManager is SelfAuthorized {event AddedOwner(address indexed owner);event RemovedOwner(address indexed owner);event ChangedThreshold(uint256 threshold);address internal constant SENTINEL_OWNERS = address(0x1);mapping(address => address) internal owners;uint256 internal ownerCount;uint256 internal threshold;/*** @notice Sets the initial storage of the contract.* @param _owners List of Safe owners.* @param _threshold Number of required confirmations for a Safe transaction.
12345678910111213// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/*** @title Enum - Collection of enums used in Safe contracts.* @author Richard Meissner - @rmeissner*/abstract contract Enum {enum Operation {Call,DelegateCall}}
123456789101112131415161718// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/*** @title NativeCurrencyPaymentFallback - A contract that has a fallback to accept native currency payments.* @author Richard Meissner - @rmeissner*/abstract contract NativeCurrencyPaymentFallback {event SafeReceived(address indexed sender, uint256 value);/*** @notice Receive function accepts native currency transactions.* @dev Emits an event with sender and received value.*/receive() external payable {emit SafeReceived(msg.sender, msg.value);}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/*** @title SecuredTokenTransfer - Secure token transfer.* @author Richard Meissner - @rmeissner*/abstract contract SecuredTokenTransfer {/*** @notice Transfers a token and returns a boolean if it was a success* @dev It checks the return data of the transfer call and returns true if the transfer was successful.* It doesn't check if the `token` address is a contract or not.* @param token Token that should be transferred* @param receiver Receiver to whom the token should be transferred* @param amount The amount of tokens that should be transferred* @return transferred Returns true if the transfer was successful*/function transferToken(address token, address receiver, uint256 amount) internal returns (bool transferred) {// 0xa9059cbb - keccack("transfer(address,uint256)")bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);// solhint-disable-next-line no-inline-assemblyassembly {// We write the return value to scratch space.// See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memorylet success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20)switch returndatasize()
123456789101112131415161718// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/*** @title SelfAuthorized - Authorizes current contract to perform actions to itself.* @author Richard Meissner - @rmeissner*/abstract contract SelfAuthorized {function requireSelfCall() private view {require(msg.sender == address(this), "GS031");}modifier authorized() {// Modifiers are copied around during compilation. This is a function call as it minimized the bytecode sizerequireSelfCall();_;}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/*** @title SignatureDecoder - Decodes signatures encoded as bytes* @author Richard Meissner - @rmeissner*/abstract contract SignatureDecoder {/*** @notice Splits signature bytes into `uint8 v, bytes32 r, bytes32 s`.* @dev Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures* The signature format is a compact form of {bytes32 r}{bytes32 s}{uint8 v}* Compact means uint8 is not padded to 32 bytes.* @param pos Which signature to read.* A prior bounds check of this parameter should be performed, to avoid out of bounds access.* @param signatures Concatenated {r, s, v} signatures.* @return v Recovery ID or Safe signature type.* @return r Output value r of the signature.* @return s Output value s of the signature.*/function signatureSplit(bytes memory signatures, uint256 pos) internal pure returns (uint8 v, bytes32 r, bytes32 s) {// solhint-disable-next-line no-inline-assemblyassembly {let signaturePos := mul(0x41, pos)r := mload(add(signatures, add(signaturePos, 0x20)))s := mload(add(signatures, add(signaturePos, 0x40)))
12345678910111213// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/*** @title Singleton - Base for singleton contracts (should always be the first super contract)* This contract is tightly coupled to our proxy contract (see `proxies/SafeProxy.sol`)* @author Richard Meissner - @rmeissner*/abstract contract Singleton {// singleton always has to be the first declared variable to ensure the same location as in the Proxy contract.// It should also always be ensured the address is stored alone (uses a full word)address private singleton;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/*** @title StorageAccessible - A generic base contract that allows callers to access all internal storage.* @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol* It removes a method from the original contract not needed for the Safe contracts.* @author Gnosis Developers*/abstract contract StorageAccessible {/*** @notice Reads `length` bytes of storage in the currents contract* @param offset - the offset in the current contract's storage in words to start reading from* @param length - the number of words (32 bytes) of data to read* @return the bytes that were read.*/function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {bytes memory result = new bytes(length * 32);for (uint256 index = 0; index < length; index++) {// solhint-disable-next-line no-inline-assemblyassembly {let word := sload(add(offset, index))mstore(add(add(result, 0x20), mul(index, 0x20)), word)}}return result;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../../common/Enum.sol";import "../../base/GuardManager.sol";import "../../Safe.sol";/*** @title Debug Transaction Guard - Emits transaction events with extended information.* @dev This guard is only meant as a development tool and example* @author Richard Meissner - @rmeissner*/contract DebugTransactionGuard is BaseGuard {// solhint-disable-next-line payable-fallbackfallback() external {// We don't revert on fallback to avoid issues in case of a Safe upgrade// E.g. The expected check method might change and then the Safe would be locked.}event TransactionDetails(address indexed safe,bytes32 indexed txHash,address to,uint256 value,bytes data,Enum.Operation operation,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../../common/Enum.sol";import "../../base/GuardManager.sol";import "../../Safe.sol";/*** @title DelegateCallTransactionGuard - Limits delegate calls to a specific target.* @author Richard Meissner - @rmeissner*/contract DelegateCallTransactionGuard is BaseGuard {address public immutable ALLOWED_TARGET;constructor(address target) {ALLOWED_TARGET = target;}// solhint-disable-next-line payable-fallbackfallback() external {// We don't revert on fallback to avoid issues in case of a Safe upgrade// E.g. The expected check method might change and then the Safe would be locked.}/*** @notice Called by the Safe contract before a transaction is executed.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../../common/Enum.sol";import "../../base/GuardManager.sol";import "../../Safe.sol";interface ISafe {function getOwners() external view returns (address[] memory);}/*** @title OnlyOwnersGuard - Only allows owners to execute transactions.* @author Richard Meissner - @rmeissner*/contract OnlyOwnersGuard is BaseGuard {ISafe public safe;constructor() {}// solhint-disable-next-line payable-fallbackfallback() external {// We don't revert on fallback to avoid issues in case of a Safe upgrade// E.g. The expected check method might change and then the Safe would be locked.}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../../common/Enum.sol";import "../../base/GuardManager.sol";import "../../Safe.sol";/*** @title ReentrancyTransactionGuard - Prevents reentrancy into the transaction execution function.* @author Richard Meissner - @rmeissner*/contract ReentrancyTransactionGuard is BaseGuard {bytes32 internal constant GUARD_STORAGE_SLOT = keccak256("reentrancy_guard.guard.struct");struct GuardValue {bool active;}// solhint-disable-next-line payable-fallbackfallback() external {// We don't revert on fallback to avoid issues in case of a Safe upgrade// E.g. The expected check method might change and then the Safe would be locked.}/*** @notice Returns the guard value for the current context.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../../libraries/SafeStorage.sol";/*** @title Migration - Migrates a Safe contract from 1.3.0 to 1.2.0* @author Richard Meissner - @rmeissner*/contract Migration is SafeStorage {bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749;address public immutable migrationSingleton;address public immutable safe120Singleton;constructor(address targetSingleton) {// Singleton address cannot be zero address.require(targetSingleton != address(0), "Invalid singleton address provided");safe120Singleton = targetSingleton;migrationSingleton = address(this);}event ChangedMasterCopy(address singleton);/*** @notice Migrates the Safe to the Singleton contract at `migrationSingleton`.* @dev This can only be called via a delegatecall.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/*** @title SafeMath* @notice Math operations with safety checks that revert on error (overflow/underflow)*/library SafeMath {/*** @notice Multiplies two numbers, reverts on overflow.* @param a First number* @param b Second number* @return Product of a and b*/function mul(uint256 a, uint256 b) internal pure returns (uint256) {// Gas optimization: this is cheaper than requiring 'a' not being zero, but the// benefit is lost if 'b' is also tested.// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522if (a == 0) {return 0;}uint256 c = a * b;require(c / a == b);return c;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../interfaces/ERC1155TokenReceiver.sol";import "../interfaces/ERC721TokenReceiver.sol";import "../interfaces/ERC777TokensRecipient.sol";import "../interfaces/IERC165.sol";/*** @title Default Callback Handler - Handles supported tokens' callbacks, allowing Safes receiving these tokens.* @author Richard Meissner - @rmeissner*/contract TokenCallbackHandler is ERC1155TokenReceiver, ERC777TokensRecipient, ERC721TokenReceiver, IERC165 {/*** @notice Handles ERC1155 Token callback.* return Standardized onERC1155Received return value.*/function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure override returns (bytes4) {return 0xf23a6e61;}/*** @notice Handles ERC1155 Token batch callback.* return Standardized onERC1155BatchReceived return value.*/function onERC1155BatchReceived(
123456789101112131415161718192021222324// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;// Note: The ERC-165 identifier for this interface is 0x4e2312e0.interface ERC1155TokenReceiver {/*** @notice Handle the receipt of a single ERC1155 token type.* @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after thebalance has been updated.* This function MUST return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61) if it acceptsthe transfer.* This function MUST revert if it rejects the transfer.* Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.* @param _operator The address which initiated the transfer (i.e. msg.sender).* @param _from The address which previously owned the token.* @param _id The ID of the token being transferred.* @param _value The amount of tokens being transferred.* @param _data Additional data with no specified format.* @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`.*/function onERC1155Received(address _operator,address _from,uint256 _id,uint256 _value,bytes calldata _data
123456789101112131415161718192021// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.interface ERC721TokenReceiver {/*** @notice Handle the receipt of an NFT* @dev The ERC721 smart contract calls this function on the recipient* after a `transfer`. This function MAY throw to revert and reject the* transfer. Return of other than the magic value MUST result in the* transaction being reverted.* Note: the contract address is always the message sender.* @param _operator The address which called `safeTransferFrom` function.* @param _from The address which previously owned the token.* @param _tokenId The NFT identifier which is being transferred.* @param _data Additional data with no specified format.* @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.* unless throwing*/function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns (bytes4);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/*** @title ERC777TokensRecipient* @dev Interface for contracts that will be called with the ERC777 token's `tokensReceived` method.* The contract receiving the tokens must implement this interface in order to receive the tokens.*/interface ERC777TokensRecipient {/*** @dev Called by the ERC777 token contract after a successful transfer or a minting operation.* @param operator The address of the operator performing the transfer or minting operation.* @param from The address of the sender.* @param to The address of the recipient.* @param amount The amount of tokens that were transferred or minted.* @param data Additional data that was passed during the transfer or minting operation.* @param operatorData Additional data that was passed by the operator during the transfer or minting operation.*/function tokensReceived(address operator,address from,address to,uint256 amount,bytes calldata data,bytes calldata operatorData) external;
123456789101112131415// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.solinterface IERC165 {/*** @dev Returns true if this contract implements the interface defined by `interfaceId`.* See the corresponding EIP section* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;contract ISignatureValidatorConstants {// bytes4(keccak256("isValidSignature(bytes,bytes)")bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;}abstract contract ISignatureValidator is ISignatureValidatorConstants {/*** @notice Legacy EIP1271 method to validate a signature.* @param _data Arbitrary length data signed on the behalf of address(this).* @param _signature Signature byte array associated with _data.** MUST return the bytes4 magic value 0x20c13b0b when function passes.* MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)* MUST allow external calls*/function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import {SafeStorage} from "../libraries/SafeStorage.sol";interface ISafe {function setFallbackHandler(address handler) external;}/*** @title Migration Contract for Safe Upgrade* @notice This is a generic contract that facilitates Safe and SafeL2 proxy contracts to migrate their singleton address.* The supported target Safe version is immutable and set in the constructor during the deployment of the contract.* This contract also supports migration with fallback handler update.* @author @safe-global/safe-protocol* @dev IMPORTANT: The library is intended to be used with the Safe standard proxy that stores the singleton address* at the storage slot 0. Use at your own risk with custom proxy implementations. The contract will allow invocations* to the migration functions only via delegatecall.*/contract SafeMigration is SafeStorage {/*** @notice Address of this contract*/address public immutable MIGRATION_SINGLETON;/*** @notice Address of the Safe Singleton implementation
123456789101112131415161718192021222324// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/*** @title SafeStorage - Storage layout of the Safe contracts to be used in libraries.* @dev Should be always the first base contract of a library that is used with a Safe.* @author Richard Meissner - @rmeissner*/contract SafeStorage {// From /common/Singleton.soladdress internal singleton;// From /common/ModuleManager.solmapping(address => address) internal modules;// From /common/OwnerManager.solmapping(address => address) internal owners;uint256 internal ownerCount;uint256 internal threshold;// From /Safe.soluint256 internal nonce;bytes32 internal _deprecatedDomainSeparator;mapping(bytes32 => uint256) internal signedMessages;mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;}
12345678910111213141516171819202122232425// SPDX-License-Identifier: LGPL-3.0-only/* solhint-disable one-contract-per-file */pragma solidity >=0.7.0 <0.9.0;import {SafeStorage} from "../libraries/SafeStorage.sol";import {Enum} from "../common/Enum.sol";interface ISafe {// solhint-disable-next-linefunction VERSION() external view returns (string memory);function setFallbackHandler(address handler) external;}/*** @title Migration Contract for updating a Safe from 1.1.1/1.3.0/1.4.1 versions to a L2 version. Useful when replaying a Safe from a non L2 networkin a L2 network.* @notice This contract facilitates the migration of a Safe contract from version 1.1.1 to 1.3.0/1.4.1 L2, 1.3.0 to 1.3.0L2 or from 1.4.1 to 1.4.1L2* Other versions are not supported* @dev IMPORTANT: The migration will only work with proxies that store the implementation address in the storage slot 0.*/contract SafeToL2Migration is SafeStorage {// Address of this contractaddress public immutable MIGRATION_SINGLETON;/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import {SafeStorage} from "../libraries/SafeStorage.sol";/*** @title Safe to L2 Setup Contract* @dev This contract expects the singleton to be the {Safe} by default. Even if there are more* {SafeL2} proxies deployed, the average gas cost on L2s is significantly lower, making the* current design more economically efficient overall.* @notice This contract facilitates the deployment of a Safe to the same address on all networks by* automatically changing the singleton to the L2 version when not on chain ID 1.*/contract SafeToL2Setup is SafeStorage {/*** @dev Address of the contract.* This is used to ensure that the contract is only ever `DELEGATECALL`-ed.*/address private immutable SELF;/*** @notice Event indicating a change of master copy address.* @param singleton New master copy address*/event ChangedMasterCopy(address singleton);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "./SafeStorage.sol";import "../Safe.sol";/*** @title SignMessageLib - Allows to sign messages on-chain by writing the signed message hashes on-chain.* @author Richard Meissner - @rmeissner*/contract SignMessageLib is SafeStorage {// keccak256("SafeMessage(bytes message)");bytes32 private constant SAFE_MSG_TYPEHASH = 0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca;event SignMsg(bytes32 indexed msgHash);/*** @notice Marks a message (`_data`) as signed.* @dev Can be verified using EIP-1271 validation method by passing the pre-image of the message hash and empty bytes as the signature.* @param _data Arbitrary length data that should be marked as signed on the behalf of address(this).*/function signMessage(bytes calldata _data) external {bytes32 msgHash = getMessageHash(_data);signedMessages[msgHash] = 1;emit SignMsg(msgHash);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "./base/ModuleManager.sol";import "./base/OwnerManager.sol";import "./base/FallbackManager.sol";import "./base/GuardManager.sol";import "./common/NativeCurrencyPaymentFallback.sol";import "./common/Singleton.sol";import "./common/SignatureDecoder.sol";import "./common/SecuredTokenTransfer.sol";import "./common/StorageAccessible.sol";import "./interfaces/ISignatureValidator.sol";import "./external/SafeMath.sol";/*** @title Safe - A multisignature wallet with support for confirmations using signed messages based on EIP-712.* @dev Most important concepts:* - Threshold: Number of required confirmations for a Safe transaction.* - Owners: List of addresses that control the Safe. They are the only ones that can add/remove owners, change the threshold and* approve transactions. Managed in `OwnerManager`.* - Transaction Hash: Hash of a transaction is calculated using the EIP-712 typed structured data hashing scheme.* - Nonce: Each transaction should have a different nonce to prevent replay attacks.* - Signature: A valid signature of an owner of the Safe for a transaction hash.* - Guard: Guard is a contract that can execute pre- and post- transaction checks. Managed in `GuardManager`.* - Modules: Modules are contracts that can be used to extend the write functionality of a Safe. Managed in `ModuleManager`.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "./Safe.sol";/*** @title SafeL2 - An implementation of the Safe contract that emits additional events on transaction executions.* @notice For a more complete description of the Safe contract, please refer to the main Safe contract `Safe.sol`.* @author Stefan George - @Georgi87* @author Richard Meissner - @rmeissner*/contract SafeL2 is Safe {event SafeMultiSigTransaction(address to,uint256 value,bytes data,Enum.Operation operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address payable refundReceiver,bytes signatures,// We combine nonce, sender and threshold into one to avoid stack too deep// Dev note: additionalInfo should not contain `bytes`, as this complicates decodingbytes additionalInfo
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;pragma abicoder v2;import "../../libraries/SafeStorage.sol";struct UserOperation {address sender;uint256 nonce;bytes initCode;bytes callData;uint256 callGasLimit;uint256 verificationGasLimit;uint256 preVerificationGas;uint256 maxFeePerGas;uint256 maxPriorityFeePerGas;bytes paymasterAndData;bytes signature;}interface ISafe {function execTransactionFromModule(address to, uint256 value, bytes memory data, uint8 operation) external returns (bool success);}/// @dev A Dummy 4337 Module/Handler for testing purposes/// ⚠️ ⚠️ ⚠️ DO NOT USE IN PRODUCTION ⚠️ ⚠️ ⚠️
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../interfaces/ERC1155TokenReceiver.sol";import "../external/SafeMath.sol";/*** @title ERC1155Token - A test ERC1155 token contract*/contract ERC1155Token {using SafeMath for uint256;// Mapping from token ID to owner balancesmapping(uint256 => mapping(address => uint256)) private _balances;// Mapping from owner to operator approvalsmapping(address => mapping(address => bool)) private _operatorApprovals;/*** @dev Get the specified address' balance for token with specified ID.* @param owner The address of the token holder* @param id ID of the token* @return The owner's balance of the token type requested*/function balanceOf(address owner, uint256 id) public view returns (uint256) {require(owner != address(0), "ERC1155: balance query for the zero address");
1234567891011121314151617{"optimizer": {"enabled": true,"mode": "3"},"outputSelection": {"*": {"*": ["abi"]}},"forceEVMLA": false,"detectMissingLibraries": false,"enableEraVMExtensions": false,"libraries": {}}
Contract ABI
API[{"inputs":[{"internalType":"contract Safe","name":"safe","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"name":"encodeMessageDataForSafe","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"message","type":"bytes"}],"name":"getMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Safe","name":"safe","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"name":"getMessageHashForSafe","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getModules","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_dataHash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"targetContract","type":"address"},{"internalType":"bytes","name":"calldataPayload","type":"bytes"}],"name":"simulate","outputs":[{"internalType":"bytes","name":"response","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"tokensReceived","outputs":[],"stateMutability":"pure","type":"function"}]
Contract Creation Code
00000000000000000000000000000000000000000000000000000000000000009c4d535b000000000000000000000000000000000000000000000000000000000000000001000227ab67505fb2fa65c81aceddb0a46ddbf3b974583188beda4c5e90417c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x0002000000000002000600000000000200000000030100190000006003300270000001f30330019700010000003103550000008004000039000000400040043f00000000050004160000000100200190000000e10000c13d000000000005004b0000078b0000c13d000000040230008c0000078b0000413d000000000601043b000000e005600270000001f50060009c000000e80000813d0000020f0050009c0000010f0000213d000002130050009c000001e30000613d000002140050009c000002060000613d000002150050009c0000078b0000c13d000000240230008a000002200020009c0000078b0000813d0000000402100370000000000202043b000001fd0020009c0000078b0000213d0000002406200039000000000036004b0000078b0000213d0000000405200039000000000251034f000000000202043b000001fd0020009c0000078b0000213d0000000006620019000000000036004b0000078b0000213d0000001f032000390000022003300197000000a003300039000000400030043f0000002003500039000000000331034f000000800020043f00000220042001980000001f0520018f000000a0014000390000003e0000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000016004b0000003a0000c13d000000000005004b0000004b0000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000a0012000390000000000010435000000800100043d000001f30010009c000001f30100804100000060011002100000000002000414000001f30020009c000001f302008041000000c002200210000000000121019f00000209011001c7000080100200003907c807c30000040f00000001002001900000078b0000613d000000000101043b000000400400043d00000020024000390000020a03000041000000000032043500000040024000390000000000120435000000400100043d00000000021200490000000002210436000500000004001d0000006003400039000600000003001d000000400030043f000001f30020009c000001f30200804100000040022002100000000001010433000001f30010009c000001f3010080410000006001100210000000000121019f0000000002000414000001f30020009c000001f302008041000000c002200210000000000112019f0000020b011001c7000080100200003907c807c30000040f00000001002001900000078b0000613d0000000002000411000000000101043b000300000001001d0000020c0100004100000006030000290000000000130435000000400100043d000400000001001d000002040100004100000000001004430000020501200197000600000001001d00000004001004430000000001000414000001f30010009c000001f301008041000000c00110021000000206011001c7000080020200003907c807c30000040f00000001002001900000073e0000613d000000000101043b000000000001004b0000078b0000613d00000000010004140000000602000029000000040020008c000003180000613d000000040300002900000005023000690000006402200039000001f30030009c000001f3030080410000004003300210000001f30020009c000001f3020080410000006002200210000000000232019f000001f30010009c000001f301008041000000c001100210000000000121019f000000060200002907c807c30000040f000000040900002900000000030100190000006003300270000001f303300197000000200030008c000000200400003900000000040340190000001f0540018f00000020064001900000000004690019000000b80000613d000000000701034f000000007807043c0000000009890436000000000049004b000000b40000c13d000000000005004b000000c50000613d000000000661034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000000000003001f00010000000103550000000100200190000003190000c13d0000001f0430018f0000020802300198000000d20000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000026004b000000ce0000c13d000000000004004b000000df0000613d000000000121034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000007ca00010430000000000005004b0000078b0000c13d000000200100003900000100001004430000012000000443000001f401000041000007c90001042e000001f60050009c000001c70000213d000001fa0050009c000002160000613d000001fb0050009c000002980000613d000001fc0050009c0000078b0000c13d0000020301000041000000800010043f0000000101000039000000840010043f0000000a01000039000000a40010043f0000020401000041000000000010044300000000010004110000020501100197000600000001001d00000004001004430000000001000414000001f30010009c000001f301008041000000c00110021000000206011001c7000080020200003907c807c30000040f00000001002001900000073e0000613d000000000101043b000000000001004b0000078b0000613d00000000010004140000000602000029000000040020008c000004120000c13d000000010100036700000000030000310000041e0000013d000002100050009c000003370000613d000002110050009c0000034d0000613d000002120050009c0000078b0000c13d000000440230008a000002210020009c0000078b0000813d0000000402100370000000000402043b000001fd0040009c0000078b0000213d0000002402400039000000000032004b0000078b0000213d0000000405400039000000000451034f000000000404043b000001fd0040009c0000078b0000213d0000000002240019000000000032004b0000078b0000213d0000001f064000390000022006600197000000a006600039000000400060043f0000002005500039000000000651034f000000800040043f00000220074001980000001f0840018f000000a005700039000001380000613d000000a009000039000000000a06034f00000000ab0a043c0000000009b90436000000000059004b000001340000c13d000000000008004b000001450000613d000000000676034f0000000307800210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000000a00440003900000000000404350000002404100370000000000404043b000001fd0040009c0000078b0000213d0000002406400039000000000036004b0000078b0000213d0000000405400039000000000451034f000000000404043b000001fd0040009c0000078b0000213d0000000006640019000000000036004b0000078b0000213d0000001f034000390000022003300197000000400600043d00000020096000390000000003390019000000400030043f0000002003500039000000000331034f000600000006001d000000000046043500000220024001980000001f0540018f00000000012900190000016a0000613d000000000603034f0000000007090019000000006806043c0000000007870436000000000017004b000001660000c13d000000000005004b000001770000613d000000000223034f0000000303500210000000000501043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f0000000000210435000500000009001d00000000014900190000000000010435000000800100043d000001f30010009c000001f30100804100000060011002100000000002000414000001f30020009c000001f302008041000000c002200210000000000121019f00000209011001c7000080100200003907c807c30000040f00000001002001900000078b0000613d000000000101043b000000400400043d00000020024000390000020a03000041000000000032043500000040024000390000000000120435000000400100043d00000000021200490000000002210436000300000004001d0000006003400039000400000003001d000000400030043f000001f30020009c000001f30200804100000040022002100000000001010433000001f30010009c000001f3010080410000006001100210000000000121019f0000000002000414000001f30020009c000001f302008041000000c002200210000000000112019f0000020b011001c7000080100200003907c807c30000040f00000001002001900000078b0000613d0000000002000411000000000101043b000100000001001d0000020c0100004100000004030000290000000000130435000000400100043d000200000001001d000002040100004100000000001004430000020501200197000400000001001d00000004001004430000000001000414000001f30010009c000001f301008041000000c00110021000000206011001c7000080020200003907c807c30000040f00000001002001900000073e0000613d000000000101043b000000000001004b0000078b0000613d00000000010004140000000402000029000000040020008c000006250000c13d0000000003000031000006560000013d000001f70050009c000003a60000613d000001f80050009c000003dc0000613d000001f90050009c0000078b0000c13d000000a40230008a000002220020009c0000078b0000813d0000008402100370000000000402043b000001fd0040009c0000078b0000213d0000002402400039000000000032004b0000078b0000213d0000000404400039000000000141034f000000000101043b000001fd0010009c0000078b0000213d0000000001210019000000000031004b0000078b0000213d000001fe01000041000000800010043f000001ff01000041000007c90001042e000000c40230008a000002230020009c0000078b0000813d0000008402100370000000000402043b000001fd0040009c0000078b0000213d0000002402400039000000000032004b0000078b0000213d0000000404400039000000000441034f000000000404043b000001fd0040009c0000078b0000213d0000000002240019000000000032004b0000078b0000213d000000a402100370000000000402043b000001fd0040009c0000078b0000213d0000002402400039000000000032004b0000078b0000213d0000000404400039000000000141034f000000000101043b000001fd0010009c0000078b0000213d0000000001210019000000000031004b0000078b0000213d0000000001000019000007c90001042e000000240230008a000002200020009c0000078b0000813d0000000401100370000000000101043b0000021b011001970000021d0010009c000000000200003900000001020060390000021e0010009c00000001022061bf0000021f0010009c00000001022061bf000000800020043f000001ff01000041000007c90001042e000000440230008a000002210020009c0000078b0000813d0000000402100370000000000202043b000600000002001d0000002402100370000000000202043b000001fd0020009c0000078b0000213d0000002405200039000000000035004b0000078b0000213d0000000404200039000000000241034f000000000202043b000001fd0020009c0000078b0000213d0000000005520019000000000035004b0000078b0000213d0000001f032000390000022003300197000000a003300039000000400030043f0000002003400039000000000331034f000000800020043f00000220042001980000001f0520018f000000a0014000390000023c0000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000016004b000002380000c13d000000000005004b000002490000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000a0012000390000000000010435000000800100043d000001f30010009c000001f30100804100000060011002100000000002000414000001f30020009c000001f302008041000000c002200210000000000121019f00000209011001c7000080100200003907c807c30000040f00000001002001900000078b0000613d000000000101043b000000400400043d00000020024000390000020a03000041000000000032043500000040024000390000000000120435000000400100043d00000000021200490000000002210436000400000004001d0000006003400039000500000003001d000000400030043f000001f30020009c000001f30200804100000040022002100000000001010433000001f30010009c000001f3010080410000006001100210000000000121019f0000000002000414000001f30020009c000001f302008041000000c002200210000000000112019f0000020b011001c7000080100200003907c807c30000040f00000001002001900000078b0000613d00000006020000290000020502200197000000000101043b000300000001001d0000020c0100004100000005030000290000000000130435000000400100043d000500000001001d00000204010000410000000000100443000600000002001d00000004002004430000000001000414000001f30010009c000001f301008041000000c00110021000000206011001c7000080020200003907c807c30000040f00000001002001900000073e0000613d000000000101043b000000000001004b0000078b0000613d00000000010004140000000602000029000000040020008c0000055d0000c13d00000000030000310000058e0000013d000000440230008a000002210020009c0000078b0000813d0000000402100370000000000202043b000600000002001d0000002402100370000000000202043b000001fd0020009c0000078b0000213d0000002405200039000000000035004b0000078b0000213d0000000404200039000000000241034f000000000202043b000001fd0020009c0000078b0000213d0000000005520019000000000035004b0000078b0000213d0000001f032000390000022003300197000000a003300039000000400030043f0000002003400039000000000331034f000000800020043f00000220042001980000001f0520018f000000a001400039000002be0000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000016004b000002ba0000c13d000000000005004b000002cb0000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000a0012000390000000000010435000000800100043d000001f30010009c000001f30100804100000060011002100000000002000414000001f30020009c000001f302008041000000c002200210000000000121019f00000209011001c7000080100200003907c807c30000040f00000001002001900000078b0000613d000000000101043b000000400400043d00000020024000390000020a03000041000000000032043500000040024000390000000000120435000000400100043d00000000021200490000000002210436000400000004001d0000006003400039000500000003001d000000400030043f000001f30020009c000001f30200804100000040022002100000000001010433000001f30010009c000001f3010080410000006001100210000000000121019f0000000002000414000001f30020009c000001f302008041000000c002200210000000000112019f0000020b011001c7000080100200003907c807c30000040f00000001002001900000078b0000613d00000006020000290000020502200197000000000101043b000300000001001d0000020c0100004100000005030000290000000000130435000000400100043d000500000001001d00000204010000410000000000100443000600000002001d00000004002004430000000001000414000001f30010009c000001f301008041000000c00110021000000206011001c7000080020200003907c807c30000040f00000001002001900000073e0000613d000000000101043b000000000001004b0000078b0000613d00000000010004140000000602000029000000040020008c000005ae0000c13d00000000030000310000001f0030008c0000078b0000a13d000000400300043d000600000003001d00000020013000390000020d02000041000000000021043500000021013000390000020e020000410000000000210435000000000103043300000022023000390000000000120435000000420130003900000003020000290000000000210435000000400200043d000000000121004900000000011204360000006203300039000500000003001d000000400030043f000000000202043307c807a90000040f00000005020000290000000000120435000000400100043d00000006021000690000008202200039000004f50000013d000000840230008a000002240020009c0000078b0000813d0000006402100370000000000402043b000001fd0040009c0000078b0000213d0000002402400039000000000032004b0000078b0000213d0000000404400039000000000141034f000000000101043b000001fd0010009c0000078b0000213d0000000001210019000000000031004b0000078b0000213d0000021d01000041000000800010043f000001ff01000041000007c90001042e000000440230008a000002210020009c0000078b0000813d0000000402100370000000000202043b0000002405100370000000000505043b000001fd0050009c0000078b0000213d0000002406500039000000000036004b0000078b0000213d0000000405500039000000000751034f000000000707043b000600000007001d000001fd0070009c0000078b0000213d0000000606600029000000000036004b0000078b0000213d000000a00020043f0000002003000039000000800030043f000000c006000039000000400060043f0000021806000041000000c00060043f0000004006000039000000c40060043f000001040030043f000001240020043f000000e40040043f0000002002500039000000000221034f00000006010000290000022003100198000001440010043f0000001f0410018f000000000500041100000164013000390000037d0000613d0000016406000039000000000702034f000000007807043c0000000006860436000000000016004b000003790000c13d0000020505500197000000000004004b0000038b0000613d000000000232034f0000000303400210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f0000000000210435000000060100002900000164011000390000000000010435000000400100043d000400000001001d00000204010000410000000000100443000500000005001d00000004005004430000000001000414000001f30010009c000001f301008041000000c00110021000000206011001c7000080020200003907c807c30000040f00000001002001900000073e0000613d000000000101043b000000000001004b0000078b0000613d00000000010004140000000504000029000000040040008c000004fd0000c13d0000000003000031000005310000013d000000a40230008a000002220020009c0000078b0000813d0000004402100370000000000402043b000001fd0040009c0000078b0000213d0000002402400039000000000032004b0000078b0000213d0000000404400039000000000441034f000000000404043b000001fd0040009c0000078b0000213d00000005044002100000000002240019000000000032004b0000078b0000213d0000006402100370000000000402043b000001fd0040009c0000078b0000213d0000002402400039000000000032004b0000078b0000213d0000000404400039000000000441034f000000000404043b000001fd0040009c0000078b0000213d00000005044002100000000002240019000000000032004b0000078b0000213d0000008402100370000000000402043b000001fd0040009c0000078b0000213d0000002402400039000000000032004b0000078b0000213d0000000404400039000000000141034f000000000101043b000001fd0010009c0000078b0000213d0000000001210019000000000031004b0000078b0000213d0000020201000041000000800010043f000001ff01000041000007c90001042e000000440430008a000002210040009c0000078b0000813d0000002404100370000000000504043b000001fd0050009c0000078b0000213d0000002404500039000000000034004b0000078b0000213d0000000405500039000000000551034f000000000505043b000001fd0050009c0000078b0000213d0000000004450019000000000034004b0000078b0000213d0000020004000041000000800040043f0000000404100370000000200a00008a0000000005a201700000001f0620018f0000008402500039000003fc0000613d0000008407000039000000000804034f000000008908043c0000000007970436000000000027004b000003f80000c13d000000000006004b000004090000613d000000000454034f0000000305600210000000000602043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000042043500000000040004140000000002000411000000040020008c000004850000c13d000000000131034f000000800200043d000000000020043f0000000002000031000004ab0000013d000001f30010009c000001f301008041000000c00110021000000207011001c707c807c30000040f00000000030100190000006003300270000001f30030019d000001f303300197000100000001035500000001002001900000046d0000613d00000220063001980000001f0730018f000000400200043d0000000005620019000004290000613d000000000801034f0000000009020019000000008a08043c0000000009a90436000000000059004b000004250000c13d000000000007004b000004360000613d000000000161034f0000000306700210000000000705043300000000076701cf000000000767022f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f00000000001504350000001f0130003900000220011001970000000001210019000000400010043f000000400030008c0000078b0000413d0000000004020433000001fd0040009c0000078b0000213d000000000532001900000000042400190000002003400039000000000053004b0000078b0000213d0000000002040433000001fd0020009c0000078b0000213d00000005062002100000000006360019000000000056004b0000078b0000213d000000000221043600000000040404330000000504400212000004570000613d000000000500001900000000062500190000000007350019000000000707043300000000007604350000002005500039000000000045004b000004500000413d0000000003240019000000400030043f0000002004000039000000000443043600000000050104330000000000540435000000400330003900000000010104330000000501100212000004690000613d000000000400001900000000053400190000000006240019000000000606043300000000006504350000002004400039000000000014004b000004620000413d0000000001310019000000400200043d00000000012100490000053d0000013d0000001f0430018f0000020802300198000004760000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000026004b000004720000c13d000000000004004b000004830000613d000000000121034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000007ca000104300000006001300210000001f30040009c000001f304008041000000c003400210000000000113019f00000201011001c707c807be0000040f00000000020100190000006002200270000001f302200197000000200020008c000000200300003900000000030240190000001f0430018f00000020033001900000049b0000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000036004b000004970000c13d000000000004004b000000200a00008a000004a90000613d000000000531034f0000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f0000000000430435000000000002001f0001000000010355000000200520008a000000400200043d0000000003520019000000400030043f00000020031003700000000004a501700000001f0550018f0000000001420019000004ba0000613d000000000603034f0000000007020019000000006806043c0000000007870436000000000017004b000004b60000c13d000000000005004b000004c70000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003104350000002003200039000000000100043d000000000001004b000004d40000c13d000001f30030009c000001f30300804100000040013002100000000002020433000001f30020009c000001f3020080410000006002200210000000000112019f000007ca00010430000000400400043d000000200100003900000000051404360000000006020433000000000065043500000040044000390000000002020433000000000002004b000004e00000c13d00000000010400190000000002000019000004f20000013d000000000500001900000000064500190000000007530019000000000707043300000000007604350000002005500039000000000025004b000004e10000413d00000000034200190000001f04200190000004f30000613d0000000002430049000000030340021000000100033000890000000004020433000000000434022f00000000033401cf00000000003204350000000003120019000000400100043d0000000002130049000001f30020009c000001f3020080410000006002200210000001f30010009c000001f3010080410000004001100210000000000112019f000007c90001042e00000006020000290000001f022000390000022002200197000000040300002900000000023200490000016402200039000001f30030009c000001f3030080410000004003300210000001f30020009c000001f3020080410000006002200210000000000232019f000001f30010009c000001f301008041000000c001100210000000000121019f000000000204001907c807c30000040f000000040900002900000000030100190000006003300270000001f303300197000000200030008c000000200400003900000000040340190000001f0540018f00000020064001900000000004690019000005200000613d000000000701034f000000007807043c0000000009890436000000000049004b0000051c0000c13d000000000005004b0000052d0000613d000000000661034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000000000003001f00010000000103550000000100200190000005450000613d000000200030008c0000078b0000413d000000400100043d00000000020104330000021b02200197000002180020009c00000000020000190000021c020060410000000000210435000000400200043d00000000012100490000002001100039000001f30010009c000001f3010080410000006001100210000001f30020009c000001f3020080410000004002200210000000000121019f000007c90001042e0000001f0430018f00000208023001980000054e0000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000026004b0000054a0000c13d000000000004004b0000055b0000613d000000000121034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000007ca00010430000000050300002900000004023000690000006402200039000001f30030009c000001f3030080410000004003300210000001f30020009c000001f3020080410000006002200210000000000232019f000001f30010009c000001f301008041000000c001100210000000000121019f000000060200002907c807c30000040f000000050900002900000000030100190000006003300270000001f303300197000000200030008c000000200400003900000000040340190000001f0540018f000000200640019000000000046900190000057d0000613d000000000701034f000000007807043c0000000009890436000000000049004b000005790000c13d000000000005004b0000058a0000613d000000000661034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000000000003001f00010000000103550000000100200190000005f70000613d0000001f0030008c0000078b0000a13d000000400300043d00000020013000390000020d02000041000000000021043500000021013000390000020e020000410000000000210435000000000103043300000022023000390000000000120435000000420130003900000003020000290000000000210435000000400400043d000000000141004900000000021404360000006205300039000000400050043f00000020010000390000000000150435000000820530003900000000060404330000000000650435000000a2033000390000000004040433000000000004004b0000060f0000c13d00000000010300190000000002000019000006210000013d000000050300002900000004023000690000006402200039000001f30030009c000001f3030080410000004003300210000001f30020009c000001f3020080410000006002200210000000000232019f000001f30010009c000001f301008041000000c001100210000000000121019f000000060200002907c807c30000040f000000050900002900000000030100190000006003300270000001f303300197000000200030008c000000200400003900000000040340190000001f0540018f00000020064001900000000004690019000005ce0000613d000000000701034f000000007807043c0000000009890436000000000049004b000005ca0000c13d000000000005004b000005db0000613d000000000661034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000000000003001f00010000000103550000000100200190000003190000c13d0000001f0430018f0000020802300198000005e80000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000026004b000005e40000c13d000000000004004b000005f50000613d000000000121034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000007ca000104300000001f0430018f0000020802300198000006000000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000026004b000005fc0000c13d000000000004004b0000060d0000613d000000000121034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000007ca00010430000000000500001900000000063500190000000007520019000000000707043300000000007604350000002005500039000000000045004b000006100000413d00000000023400190000001f03400190000006220000613d0000000002320049000000030330021000000100033000890000000004020433000000000434022f00000000033401cf00000000003204350000000002120019000000400100043d0000000002120049000004f50000013d000000020300002900000003023000690000006402200039000001f30030009c000001f3030080410000004003300210000001f30020009c000001f3020080410000006002200210000000000232019f000001f30010009c000001f301008041000000c001100210000000000121019f000000040200002907c807c30000040f000000020900002900000000030100190000006003300270000001f303300197000000200030008c000000200400003900000000040340190000001f0540018f00000020064001900000000004690019000006450000613d000000000701034f000000007807043c0000000009890436000000000049004b000006410000c13d000000000005004b000006520000613d000000000661034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000000000003001f00010000000103550000000100200190000006a20000613d0000001f0030008c0000078b0000a13d000000400100043d00000020021000390000020d03000041000000000032043500000021021000390000020e030000410000000000320435000000000201043300000022031000390000000000230435000000420210003900000001030000290000000000320435000000400300043d000000000232004900000000022304360000006201100039000000400010043f000001f30020009c000200000002001d000001f30100004100000000010240190000004001100210000300000003001d0000000002030433000001f30020009c000001f3020080410000006002200210000000000112019f0000000002000414000001f30020009c000001f302008041000000c002200210000000000112019f0000020b011001c7000080100200003907c807c30000040f00000001002001900000078b0000613d000000400400043d000100240040003d0000000402400039000000000101043b00000006030000290000000003030433000000000003004b000006ba0000c13d000002170300004100000000003404350000000000120435000000400100043d000600000001001d00000204010000410000000000100443000000040100002900000004001004430000000001000414000001f30010009c000001f301008041000000c00110021000000206011001c7000080020200003907c807c30000040f00000001002001900000073e0000613d000000000101043b000000000001004b0000078b0000613d00000000010004140000000402000029000000040020008c0000073f0000c13d00000000030000310000076f0000013d0000001f0430018f0000020802300198000006ab0000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000026004b000006a70000c13d000000000004004b000006b80000613d000000000121034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000007ca000104300000021603000041000000000034043500000000001204350000006001000039000000010300002900000000001304350000006401400039000000030500002900000000030504330000000000310435000000840340003900000044014000390000000004050433000000000004004b000006dc0000613d0000000005000019000000020800002900000000063500190000000007850019000000000707043300000000007604350000002005500039000000000045004b000006cb0000413d00000000033400190000001f04400190000006dc0000613d0000000005430049000000030340021000000100043000890000000036050434000000000646022f00000000044601cf000000000045043500000000022300490000000000210435000000060200002900000000010204330000000001130436000300000001001d0000000001020433000000000001004b000006fa0000613d00000000020000190000000505000029000000030600002900000000036200190000000004520019000000000404043300000000004304350000002002200039000000000012004b000006e80000413d000300000061001d0000001f01100190000006fa0000613d0000000302100069000000030110021000000100011000890000000043020434000300000004001d000000000313022f00000000011301cf0000000000120435000000400100043d000600000001001d00000204010000410000000000100443000000040100002900000004001004430000000001000414000001f30010009c000001f301008041000000c00110021000000206011001c7000080020200003907c807c30000040f00000001002001900000073e0000613d000000000101043b000000000001004b0000078b0000613d00000000010004140000000402000029000000040020008c0000078d0000613d00000006030000290000000302300069000001f30030009c000001f3030080410000004003300210000001f30020009c000001f3020080410000006002200210000000000232019f000001f30010009c000001f301008041000000c001100210000000000121019f000000040200002907c807c30000040f00000000030100190000006003300270000001f30030019d000100000001035500000001002001900000078d0000c13d000001f3023001970000001f0420018f00000208032001980000072f0000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000036004b0000072b0000c13d000000000004004b0000073c0000613d000000000131034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000006001200210000007ca00010430000000000001042f00000006030000290000000102300069000001f30030009c000001f3030080410000004003300210000001f30020009c000001f3020080410000006002200210000000000232019f000001f30010009c000001f301008041000000c001100210000000000121019f000000040200002907c807c30000040f000000060900002900000000030100190000006003300270000001f303300197000000200030008c000000200400003900000000040340190000001f0540018f000000200640019000000000046900190000075e0000613d000000000701034f000000007807043c0000000009890436000000000049004b0000075a0000c13d000000000005004b0000076b0000613d000000000661034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000000000003001f00010000000103550000000100200190000007900000613d000000200030008c0000078b0000413d000000400100043d0000000002010433000000000002004b0000078d0000c13d0000004402100039000002190300004100000000003204350000002402100039000000110300003900000000003204350000021a020000410000000000210435000000040210003900000020030000390000000000320435000000400200043d00000000012100490000006401100039000001f30010009c000001f3010080410000006001100210000001f30020009c000001f3020080410000004002200210000000000121019f000007ca000104300000000001000019000007ca00010430000000400100043d0000021802000041000005390000013d0000001f0430018f0000020802300198000007990000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000026004b000007950000c13d000000000004004b000007a60000613d000000000121034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000007ca00010430000000000001042f000001f30010009c000001f3010080410000004001100210000001f30020009c000001f3020080410000006002200210000000000112019f0000000002000414000001f30020009c000001f302008041000000c002200210000000000112019f0000020b011001c7000080100200003907c807c30000040f0000000100200190000007bc0000613d000000000101043b000000000001042d0000000001000019000007ca00010430000007c1002104210000000102000039000000000001042d0000000002000019000000000001042d000007c6002104230000000102000039000000000001042d0000000002000019000000000001042d000007c800000432000007c90001042e000007ca00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000230316400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bc197c8000000000000000000000000000000000000000000000000000000000bc197c8100000000000000000000000000000000000000000000000000000000bd61951d00000000000000000000000000000000000000000000000000000000f23a6e610000000000000000000000000000000000000000000000000000000023031640000000000000000000000000000000000000000000000000000000006ac2478400000000000000000000000000000000000000000000000000000000b2494df30000000000000000000000000000000000000000000000000000000100000000f23a6e61000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000800000000000000000b4faba09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000bc197c8100000000000000000000000000000000000000000000000000000000cc2f8452000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000004400000080000000000000000000000000000000000000000000000000000000000000000000000000ffffffe00200000000000000000000000000000000000000000000a0000000000000000060b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca0200000000000000000000000000000000000000000000000000000000000000f698da25000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000150b7a0100000000000000000000000000000000000000000000000000000000150b7a02000000000000000000000000000000000000000000000000000000001626ba7e0000000000000000000000000000000000000000000000000000000020c13b0b000000000000000000000000000000000000000000000000000000000023de290000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000000a1028c4934f3a11000000000000000000000000000000000000000000000000000000005ae6bd370000000000000000000000000000000000000000000000000000000020c13b0b0000000000000000000000000000000000000000000000000000000048617368206e6f7420617070726f76656400000000000000000000000000000008c379a000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000000000001626ba7e00000000000000000000000000000000000000000000000000000000150b7a02000000000000000000000000000000000000000000000000000000004e2312e00000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000005f4734fe181059e70638f5ab4a5b2864d3edb22aa60b6c1334ea3c1f3ec7232c
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.