FTM Testnet

Contract

0x335aaaC2d8a37bB85Ac2DEc944c1bDbaCd012B77
Source Code

Overview

FTM Balance

Fantom LogoFantom LogoFantom Logo0 FTM

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Value

There are no matching entries

Please try again later

Latest 1 internal transaction

Parent Txn Hash Block From To Value
3756852021-02-25 8:58:271096 days 19 hrs ago1614243507  Contract Creation0 FTM
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MultiSend

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at testnet.ftmscan.com on 2022-10-09
*/

/**
 *Submitted for verification at FtmScan.com on 2021-05-18
*/

pragma solidity >=0.5.0 <0.7.0;


/// @title Multi Send - Allows to batch multiple transactions into one.
/// @author Nick Dodson - <[email protected]>
/// @author Gonçalo Sá - <[email protected]>
/// @author Stefan George - <[email protected]>
/// @author Richard Meissner - <[email protected]>
contract MultiSend {

    bytes32 constant private GUARD_VALUE = keccak256("multisend.guard.bytes32");

    bytes32 guard;

    constructor() public {
        guard = GUARD_VALUE;
    }

    /// @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
    function multiSend(bytes memory transactions)
        public
    {
        require(guard != GUARD_VALUE, "MultiSend should only be called via delegatecall");
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            let length := mload(transactions)
            let i := 0x20
            for { } lt(i, length) { } {
                // First byte of the data is the operation.
                // We shift by 248 bits (256 - 8 [operation byte]) it right since mload will always load 32 bytes (a word).
                // This will also zero out unused data.
                let operation := shr(0xf8, mload(add(transactions, i)))
                // We offset the load address by 1 byte (operation byte)
                // We shift it right by 96 bits (256 - 160 [20 address bytes]) to right-align the data and zero out unused data.
                let to := shr(0x60, mload(add(transactions, add(i, 0x01))))
                // We offset the load address by 21 byte (operation byte + 20 address bytes)
                let value := mload(add(transactions, add(i, 0x15)))
                // We offset the load address by 53 byte (operation byte + 20 address bytes + 32 value bytes)
                let dataLength := mload(add(transactions, add(i, 0x35)))
                // We offset the load address by 85 byte (operation byte + 20 address bytes + 32 value bytes + 32 data length bytes)
                let data := add(transactions, add(i, 0x55))
                let success := 0
                switch operation
                case 0 { success := call(gas, to, value, data, dataLength, 0, 0) }
                case 1 { success := delegatecall(gas, to, data, dataLength, 0, 0) }
                if eq(success, 0) { revert(0, 0) }
                // Next entry starts at 85 byte + data length
                i := add(i, add(0x55, dataLength))
            }
        }
    }
}

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":false,"inputs":[{"internalType":"bytes","name":"transactions","type":"bytes"}],"name":"multiSend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5060405180807f6d756c746973656e642e67756172642e627974657333320000000000000000008152506017019050604051809103902060008190555061026c8061005c6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80638d80ff0a14610030575b600080fd5b6100e96004803603602081101561004657600080fd5b810190808035906020019064010000000081111561006357600080fd5b82018360208201111561007557600080fd5b8035906020019184600183028401116401000000008311171561009757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100eb565b005b60405180807f6d756c746973656e642e67756172642e6279746573333200000000000000000081525060170190506040518091039020600054141561017b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806102086030913960400191505060405180910390fd5b805160205b81811015610202578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146101c557600181146101d5576101e0565b6000808585888a5af191506101e0565b6000808585895af491505b5060008114156101ef57600080fd5b8260550187019650505050505050610180565b50505056fe4d756c746953656e642073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca265627a7a7231582011d1395952a8247edbe75f23bd348aa7299f1985aebe5a14c084d03fbd0d11c964736f6c63430005110032

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80638d80ff0a14610030575b600080fd5b6100e96004803603602081101561004657600080fd5b810190808035906020019064010000000081111561006357600080fd5b82018360208201111561007557600080fd5b8035906020019184600183028401116401000000008311171561009757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100eb565b005b60405180807f6d756c746973656e642e67756172642e6279746573333200000000000000000081525060170190506040518091039020600054141561017b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806102086030913960400191505060405180910390fd5b805160205b81811015610202578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146101c557600181146101d5576101e0565b6000808585888a5af191506101e0565b6000808585895af491505b5060008114156101ef57600080fd5b8260550187019650505050505050610180565b50505056fe4d756c746953656e642073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca265627a7a7231582011d1395952a8247edbe75f23bd348aa7299f1985aebe5a14c084d03fbd0d11c964736f6c63430005110032

Deployed Bytecode Sourcemap

390:2744:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;390:2744:0;;;;;;;;;;;;;;;;;;;1194:1937;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1194:1937:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1194:1937:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1194:1937:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1194:1937:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1194:1937:0;;;;;;;;;;;;;;;:::i;:::-;;;457:36;;;;;;;;;;;;;;;;;;;1280:5;;:20;;1272:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1473:12;1467:19;1509:4;1527:1586;1541:6;1538:1;1535:13;1527:1586;;;1866:1;1852:12;1848:20;1842:27;1836:4;1832:38;2143:4;2140:1;2136:12;2122;2118:31;2112:38;2106:4;2102:49;2307:4;2304:1;2300:12;2286;2282:31;2276:38;2492:4;2489:1;2485:12;2471;2467:31;2461:38;2688:4;2685:1;2681:12;2667;2663:31;2727:1;2753:9;2785:1;2780:66;;;;2869:1;2864:67;;;;2746:185;;2780:66;2842:1;2839;2827:10;2821:4;2814:5;2810:2;2805:3;2800:44;2789:55;;2780:66;;2864:67;2927:1;2924;2912:10;2906:4;2902:2;2897:3;2884:45;2873:56;;2746:185;;2964:1;2955:7;2952:14;2949:2;;;2979:1;2976;2969:12;2949:2;3086:10;3080:4;3076:21;3073:1;3069:29;3064:34;;1553:1560;;;;;;1527:1586;;;1438:1686;;;:::o

Swarm Source

bzzr://11d1395952a8247edbe75f23bd348aa7299f1985aebe5a14c084d03fbd0d11c9

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.