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:
MultiSend
Compiler Version
v0.7.6+commit.7338295f
ZkSolc Version
v1.3.8
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/// @title Multi Send - Allows to batch multiple transactions into one./// @author Nick Dodson - <nick.dodson@consensys.net>/// @author Gonçalo Sá - <goncalo.sa@consensys.net>/// @author Stefan George - <stefan@gnosis.io>/// @author Richard Meissner - <richard@gnosis.io>contract MultiSend {address private immutable multisendSingleton;constructor() {multisendSingleton = address(this);}/// @dev Sends multiple transactions and reverts all if one fails./// @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of/// operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte),/// to as a address (=> 20 bytes),/// value as a uint256 (=> 32 bytes),/// data length as a uint256 (=> 32 bytes),/// data as bytes./// see abi.encodePacked for more information on packed encoding/// @notice This method is payable as delegatecalls keep the msg.value from the previous call/// If the calling method (e.g. execTransaction) received ETH this would revert otherwisefunction multiSend(bytes memory transactions) public payable {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/// @title Create Call - Allows to use the different create opcodes to deploy a contract/// @author Richard Meissner - <richard@gnosis.io>contract CreateCall {event ContractCreation(address newContract);function performCreate2(uint256 value,bytes memory deploymentData,bytes32 salt) public returns (address newContract) {// solhint-disable-next-line no-inline-assemblyassembly {newContract := create2(value, add(0x20, deploymentData), mload(deploymentData), salt)}require(newContract != address(0), "Could not deploy contract");emit ContractCreation(newContract);}function performCreate(uint256 value, bytes memory deploymentData) public returns (address newContract) {// solhint-disable-next-line no-inline-assemblyassembly {newContract := create(value, add(deploymentData, 0x20), mload(deploymentData))}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/// @title IProxy - Helper interface to access masterCopy of the Proxy on-chain/// @author Richard Meissner - <richard@gnosis.io>interface IProxy {function masterCopy() external view returns (address);}/// @title GnosisSafeProxy - Generic proxy contract allows to execute all transactions applying the code of a master contract./// @author Stefan George - <stefan@gnosis.io>/// @author Richard Meissner - <richard@gnosis.io>contract GnosisSafeProxy {// singleton always needs to be first declared variable, to ensure that it is at the same location in the contracts to which calls are delegated.// To reduce deployment costs this variable is internal and needs to be retrieved via `getStorageAt`address internal singleton;/// @dev Constructor function sets address of singleton contract./// @param _singleton Singleton address.constructor(address _singleton) {require(_singleton != address(0), "Invalid singleton address provided");singleton = _singleton;}/// @dev Fallback function forwards all transactions and returns all received return data.fallback() external payable {
123456789101112// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "./GnosisSafeProxy.sol";interface IProxyCreationCallback {function proxyCreated(GnosisSafeProxy proxy,address _singleton,bytes calldata initializer,uint256 saltNonce) external;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "./GnosisSafeProxy.sol";import "./IProxyCreationCallback.sol";/// @title Proxy Factory - Allows to create new proxy contact and execute a message call to the new proxy within one transaction./// @author Stefan George - <stefan@gnosis.pm>contract GnosisSafeProxyFactory {event ProxyCreation(GnosisSafeProxy proxy, address singleton);/// @dev Allows to create new proxy contact and execute a message call to the new proxy within one transaction./// @param singleton Address of singleton contract./// @param data Payload for message call sent to new proxy contract.function createProxy(address singleton, bytes memory data) public returns (GnosisSafeProxy proxy) {proxy = new GnosisSafeProxy(singleton);if (data.length > 0)// solhint-disable-next-line no-inline-assemblyassembly {if eq(call(gas(), proxy, 0, add(data, 0x20), mload(data), 0, 0), 0) {revert(0, 0)}}emit ProxyCreation(proxy, singleton);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/// @title Multi Send Call Only - Allows to batch multiple transactions into one, but only calls/// @author Stefan George - <stefan@gnosis.io>/// @author Richard Meissner - <richard@gnosis.io>/// @notice The guard logic is not required here as this contract doesn't support nested delegate callscontract MultiSendCallOnly {/// @dev Sends multiple transactions and reverts all if one fails./// @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of/// operation has to be uint8(0) in this version (=> 1 byte),/// to as a address (=> 20 bytes),/// value as a uint256 (=> 32 bytes),/// data length as a uint256 (=> 32 bytes),/// data as bytes./// see abi.encodePacked for more information on packed encoding/// @notice The code is for most part the same as the normal MultiSend (to keep compatibility),/// but reverts if a transaction tries to use a delegatecall./// @notice This method is payable as delegatecalls keep the msg.value from the previous call/// If the calling method (e.g. execTransaction) received ETH this would revert otherwisefunction multiSend(bytes memory transactions) public payable {// solhint-disable-next-line no-inline-assemblyassembly {let length := mload(transactions)let i := 0x20for {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../base/Executor.sol";/// @title Simulate Transaction Accessor - can be used with StorageAccessible to simulate Safe transactions/// @author Richard Meissner - <richard@gnosis.pm>contract SimulateTxAccessor is Executor {address private immutable accessorSingleton;constructor() {accessorSingleton = address(this);}modifier onlyDelegateCall() {require(address(this) != accessorSingleton, "SimulateTxAccessor should only be called via delegatecall");_;}function simulate(address to,uint256 value,bytes calldata data,Enum.Operation operation)external
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 - <richard@gnosis.pm>contract Executor {function execute(address to,uint256 value,bytes memory data,Enum.Operation operation,uint256 txGas) internal returns (bool success) {if (operation == Enum.Operation.DelegateCall) {// solhint-disable-next-line no-inline-assemblyassembly {success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)}} else {// solhint-disable-next-line no-inline-assemblyassembly {success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)}}}
12345678// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/// @title Enum - Collection of enums/// @author Richard Meissner - <richard@gnosis.pm>contract Enum {enum Operation {Call, DelegateCall}}
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 that manages modules that can execute transactions via this contract/// @author Stefan George - <stefan@gnosis.pm>/// @author Richard Meissner - <richard@gnosis.pm>contract ModuleManager is SelfAuthorized, Executor {event EnabledModule(address module);event DisabledModule(address module);event ExecutionFromModuleSuccess(address indexed module);event ExecutionFromModuleFailure(address indexed module);address internal constant SENTINEL_MODULES = address(0x1);mapping(address => address) internal modules;function setupModules(address to, bytes memory data) internal {require(modules[SENTINEL_MODULES] == address(0), "GS100");modules[SENTINEL_MODULES] = SENTINEL_MODULES;if (to != address(0))// Setup has to complete successfully or transaction fails.require(execute(to, 0, data, Enum.Operation.DelegateCall, gasleft()), "GS000");}
12345678910111213141516// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/// @title SelfAuthorized - authorizes current contract to perform actions/// @author Richard Meissner - <richard@gnosis.pm>contract SelfAuthorized {function requireSelfCall() private view {require(msg.sender == address(this), "GS031");}modifier authorized() {// 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;import "./base/ModuleManager.sol";import "./base/OwnerManager.sol";import "./base/FallbackManager.sol";import "./base/GuardManager.sol";import "./common/EtherPaymentFallback.sol";import "./common/Singleton.sol";import "./common/SignatureDecoder.sol";import "./common/SecuredTokenTransfer.sol";import "./common/StorageAccessible.sol";import "./interfaces/ISignatureValidator.sol";import "./external/GnosisSafeMath.sol";/// @title Gnosis Safe - A multisignature wallet with support for confirmations using signed messages based on ERC191./// @author Stefan George - <stefan@gnosis.io>/// @author Richard Meissner - <richard@gnosis.io>contract GnosisSafe isEtherPaymentFallback,Singleton,ModuleManager,OwnerManager,SignatureDecoder,SecuredTokenTransfer,ISignatureValidatorConstants,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../common/SelfAuthorized.sol";/// @title OwnerManager - Manages a set of owners and a threshold to perform actions./// @author Stefan George - <stefan@gnosis.pm>/// @author Richard Meissner - <richard@gnosis.pm>contract OwnerManager is SelfAuthorized {event AddedOwner(address owner);event RemovedOwner(address owner);event ChangedThreshold(uint256 threshold);address internal constant SENTINEL_OWNERS = address(0x1);mapping(address => address) internal owners;uint256 internal ownerCount;uint256 internal threshold;/// @dev Setup function sets initial storage of contract./// @param _owners List of Safe owners./// @param _threshold Number of required confirmations for a Safe transaction.function setupOwners(address[] memory _owners, uint256 _threshold) internal {// Threshold can only be 0 at initialization.// Check ensures that setup function can only be called once.require(threshold == 0, "GS200");// Validate that threshold is smaller than number of added owners.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../common/SelfAuthorized.sol";/// @title Fallback Manager - A contract that manages fallback calls made to this contract/// @author Richard Meissner - <richard@gnosis.pm>contract FallbackManager is SelfAuthorized {event ChangedFallbackHandler(address handler);// keccak256("fallback_manager.handler.address")bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;function internalSetFallbackHandler(address handler) internal {bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;// solhint-disable-next-line no-inline-assemblyassembly {sstore(slot, handler)}}/// @dev Allows to add a contract to handle fallback calls./// Only fallback calls without value and with data will be forwarded./// This can only be done via a Safe transaction./// @param handler contract to handle fallbacks calls.function setFallbackHandler(address handler) public authorized {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../common/Enum.sol";import "../common/SelfAuthorized.sol";interface Guard {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;}/// @title Fallback Manager - A contract that manages fallback calls made to this contract/// @author Richard Meissner - <richard@gnosis.pm>
12345678910111213// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/// @title EtherPaymentFallback - A contract that has a fallback to accept ether payments/// @author Richard Meissner - <richard@gnosis.pm>contract EtherPaymentFallback {event SafeReceived(address indexed sender, uint256 value);/// @dev Fallback function accepts Ether transactions.receive() external payable {emit SafeReceived(msg.sender, msg.value);}}
1234567891011// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/// @title Singleton - Base for singleton contracts (should always be first super contract)/// This contract is tightly coupled to our proxy contract (see `proxies/GnosisSafeProxy.sol`)/// @author Richard Meissner - <richard@gnosis.io>contract Singleton {// singleton always needs to be first declared variable, to ensure that it is at the same location as in the Proxy contract.// It should also always be ensured that 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 SignatureDecoder - Decodes signatures that a encoded as bytes/// @author Richard Meissner - <richard@gnosis.pm>contract SignatureDecoder {/// @dev divides bytes signature into `uint8 v, bytes32 r, bytes32 s`./// @notice Make sure to peform a bounds check for @param pos, to avoid out of bounds access on @param signatures/// @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 rsv signaturesfunction signatureSplit(bytes memory signatures, uint256 pos)internalpurereturns (uint8 v,bytes32 r,bytes32 s){// The signature format is a compact form of:// {bytes32 r}{bytes32 s}{uint8 v}// Compact means, uint8 is not padded to 32 bytes.// solhint-disable-next-line no-inline-assemblyassembly {let signaturePos := mul(0x41, pos)r := mload(add(signatures, add(signaturePos, 0x20)))
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/// @title SecuredTokenTransfer - Secure token transfer/// @author Richard Meissner - <richard@gnosis.pm>contract SecuredTokenTransfer {/// @dev Transfers a token and returns if it was a success/// @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 transferredfunction 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()case 0 {transferred := success}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/// @title StorageAccessible - generic base contract that allows callers to access all internal storage./// @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.solcontract StorageAccessible {/*** @dev 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;}/*** @dev Performs a delegetecall on a targetContract in the context of self.
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 {/*** @dev Should return whether the signature provided is valid for the provided data* @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;/*** @title GnosisSafeMath* @dev Math operations with safety checks that revert on error* Renamed from SafeMath to GnosisSafeMath to avoid conflicts* TODO: remove once open zeppelin update to solc 0.5.0*/library GnosisSafeMath {/*** @dev Multiplies two numbers, reverts on overflow.*/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 "./GnosisSafeStorage.sol";import "../GnosisSafe.sol";/// @title SignMessageLib - Allows to set an entry in the signedMessages/// @author Richard Meissner - <richard@gnosis.io>contract SignMessageLib is GnosisSafeStorage {//keccak256(// "SafeMessage(bytes message)"//);bytes32 private constant SAFE_MSG_TYPEHASH = 0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca;event SignMsg(bytes32 indexed msgHash);/// @dev Marks a message as signed, so that it can be used with EIP-1271/// @notice Marks a message (`_data`) as signed./// @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);}/// @dev Returns hash of a message that can be signed by owners.
123456789101112131415161718192021// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;/// @title GnosisSafeStorage - Storage layout of the Safe contracts to be used in libraries/// @author Richard Meissner - <richard@gnosis.io>contract GnosisSafeStorage {// 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 /GnosisSafe.soluint256 internal nonce;bytes32 internal _deprecatedDomainSeparator;mapping(bytes32 => uint256) internal signedMessages;mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../../libraries/GnosisSafeStorage.sol";/// @title Migration - migrates a Safe contract from 1.3.0 to 1.2.0/// @author Richard Meissner - <richard@gnosis.io>contract Migration is GnosisSafeStorage {bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749;address public immutable migrationSingleton;address public immutable safe120Singleton;constructor(address targetSingleton) {require(targetSingleton != address(0), "Invalid singleton address provided");safe120Singleton = targetSingleton;migrationSingleton = address(this);}event ChangedMasterCopy(address singleton);bytes32 private guard;/// @dev Allows to migrate the contract. This can only be called via a delegatecall.function migrate() public {require(address(this) != migrationSingleton, "Migration should only be called via delegatecall");// Master copy address cannot be null.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "./DefaultCallbackHandler.sol";import "../interfaces/ISignatureValidator.sol";import "../GnosisSafe.sol";/// @title Compatibility Fallback Handler - fallback handler to provider compatibility between pre 1.3.0 and 1.3.0+ Safe contracts/// @author Richard Meissner - <richard@gnosis.pm>contract CompatibilityFallbackHandler is DefaultCallbackHandler, 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;/*** Implementation of ISignatureValidator (see `interfaces/ISignatureValidator.sol`)* @dev Should return whether the signature provided is valid for the provided data.* @param _data Arbitrary length data signed on the behalf of address(msg.sender)* @param _signature Signature byte array associated with _data* @return a bool upon valid or invalid signature with corresponding _data
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 - returns true for known token callbacks/// @author Richard Meissner - <richard@gnosis.pm>contract DefaultCallbackHandler is ERC1155TokenReceiver, ERC777TokensRecipient, ERC721TokenReceiver, IERC165 {string public constant NAME = "Default Callback Handler";string public constant VERSION = "1.0.0";function onERC1155Received(address,address,uint256,uint256,bytes calldata) external pure override returns (bytes4) {return 0xf23a6e61;}function onERC1155BatchReceived(address,
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 accepts thetransfer.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,
123456789101112131415161718192021222324// 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 throwingfunction onERC721Received(address _operator,address _from,uint256 _tokenId,bytes calldata _data) external returns (bytes4);}
12345678910111213// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;interface ERC777TokensRecipient {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* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]* 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);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../interfaces/ERC1155TokenReceiver.sol";import "../external/GnosisSafeMath.sol";contract ERC1155Token {using GnosisSafeMath 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");return _balances[id][owner];}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "./GnosisSafe.sol";/// @title Gnosis Safe - A multisignature wallet with support for confirmations using signed messages based on ERC191./// @author Stefan George - <stefan@gnosis.io>/// @author Richard Meissner - <richard@gnosis.io>contract GnosisSafeL2 is GnosisSafe {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);event SafeModuleTransaction(address module, 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 "../../GnosisSafe.sol";contract ReentrancyTransactionGuard is Guard {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.}function getGuard() internal pure returns (GuardValue storage guard) {bytes32 slot = GUARD_STORAGE_SLOT;// solhint-disable-next-line no-inline-assemblyassembly {guard.slot := slot}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../../common/Enum.sol";import "../../base/GuardManager.sol";import "../../GnosisSafe.sol";contract DelegateCallTransactionGuard is Guard {address public immutable allowedTarget;constructor(address target) {allowedTarget = 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.}function checkTransaction(address to,uint256,bytes memory,Enum.Operation operation,uint256,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.7.0 <0.9.0;import "../../common/Enum.sol";import "../../base/GuardManager.sol";import "../../GnosisSafe.sol";/// @title Debug Transaction Guard - A guard that will emit events with extended information./// @notice This guard is only meant as a development tool and example/// @author Richard Meissner - <richard@gnosis.pm>contract DebugTransactionGuard is Guard {// 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,uint256 safeTxGas,bool usesRefund,
12345678910111213{"optimizer": {"enabled": true,"mode": "3"},"outputSelection": {"*": {"*": ["abi"]}}}
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes","name":"transactions","type":"bytes"}],"name":"multiSend","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
00000000000000000000000000000000000000000000000000000000000000009c4d535b00000000000000000000000000000000000000000000000000000000000000000100004bc5b24bb687f66bb0211b8bb6a14350bd2ab3035bd503c6340569aa8d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x00020000000000020003000000000002000100000001035500000060011002700000003c0010019d0000000101200190000000750000c13d0000008001000039000000400010043f0000000002000031000000040120008c000000d90000413d0000000101000367000000000301043b0000003e033001970000003f0330009c000000d90000c13d000000240420008a000000200300008a000000000434004b000000d90000813d0000000404100370000000000504043b000000400450009c000000d90000213d0000002404500039000000000624004b000000d90000213d0000000405500039000000000151034f000000000101043b000000400510009c000000d90000213d0000000005410019000000000225004b000000d90000213d000000bf02100039000000000232016f000000400020043f0000001f0210018f000000800010043f00000001034003670000000504100272000000350000613d00000000050000190000000506500210000000000763034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b0000002d0000413d000000000520004c000000440000613d0000000504400210000000000343034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000a0011000390000000000010435000000410100004100000000001004390000000001000412000000040010044300000024000004430000003c0100004100000000020004140000003c0320009c0000000001024019000000c00110021000000042011001c7000080050200003900ec00e20000040f0000000102200190000000d90000613d000000000101043b00000043011001970000000002000410000000000121004b000000850000c13d000000400100043d00000064021000390000004703000041000000000032043500000044021000390000004803000041000000000032043500000024021000390000003003000039000000000032043500000049020000410000000000210435000000040210003900000020030000390000000000320435000000400200043d000000000121004900000084011000390000003c030000410000003c0410009c00000000010380190000003c0420009c000000000203801900000040022002100000006001100210000000000121019f000000ee00010430000000a001000039000000400010043f0000000001000416000000000110004c000000d90000c13d00000000010004100000006002100210000000800020043f0000014000000443000001600010044300000020010000390000010000100443000000010100003900000120001004430000003d01000041000000ed0001042e000000800600043d000000210160008c000000db0000413d0000002007000039000100000006001d000000980000013d00000046011001c70000800902000039000000000500001900ec00dd0000040f0000000106000029000000030700002900000002080000290000000101200190000000d90000613d00000000018700190000005507100039000000000167004b000000db0000813d000000d501700039000000b50270003900000000080204330000009502700039000000000302043300000081027000390000000002020433000000600420027000000080027000390000000002020433000000440520009c000000be0000813d0000000002000414000000040540008c000000940000613d000300000007001d0000003c050000410000003c0610009c000000000105801900000040011002100000003c0680009c000200000008001d000000000605001900000000060840190000006006600210000000000116019f0000003c0620009c0000000002058019000000c002200210000000000112019f000000000230004c0000008b0000c13d000000000204001900ec00dd0000040f000000010600002900000003070000290000000208000029000000920000013d0000004502200197000000440220009c000000d90000c13d0000000002000414000000040340008c000000940000613d0000003c030000410000003c0510009c000000000103801900000040011002100000003c0580009c000000000503001900000000050840190000006005500210000000000115019f0000003c0520009c0000000002038019000000c002200210000000000112019f0000000002040019000300000007001d000200000008001d00ec00e70000040f000000020800002900000003070000290000000106000029000000920000013d0000000001000019000000ee000104300000000001000019000000ed0001042e000000e0002104210000000102000039000000000001042d0000000002000019000000000001042d000000e5002104230000000102000039000000000001042d0000000002000019000000000001042d000000ea002104250000000102000039000000000001042d0000000002000019000000000001042d000000ec00000432000000ed0001042e000000ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000080000001000000000000000000ffffffff000000000000000000000000000000000000000000000000000000008d80ff0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0200000200000000000000000000000000000044000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0100000000000000000000000000000000000000000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000007669612064656c656761746563616c6c000000000000000000000000000000004d756c746953656e642073686f756c64206f6e6c792062652063616c6c65642008c379a0000000000000000000000000000000000000000000000000000000006c159535dabcd6eea267a67de311bb086b15c371538c8bd0058bd754ca11f065
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.