Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17518336 | 508 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Minimal Proxy Contract for 0x93befc3b8258bfd12d9cbc7e8eff5b6ac8b51606
Contract Name:
BatcherV2
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-25 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; struct TransactionData { address target; bytes data; uint256 value; } contract BatcherV2 { // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1167.md address private immutable original; bytes32 private byteCode; uint n; address private immutable deployer; constructor(uint _n) { original = address(this); deployer = msg.sender; createProxies(_n); } function createProxies(uint _n) internal { bytes memory miniProxy = bytes.concat(bytes20(0x3D602d80600A3D3981F3363d3d373d3D3D363d73), bytes20(address(this)), bytes15(0x5af43d82803e903d91602b57fd5bf3)); byteCode = keccak256(abi.encodePacked(miniProxy)); address proxy; uint oldN = n; for(uint i=0; i<_n; i++) { bytes32 salt = keccak256(abi.encodePacked(msg.sender, i+oldN)); assembly { proxy := create2(0, add(miniProxy, 32), mload(miniProxy), salt) } require(proxy != address(0), "Failed to deploy contract."); } // update n n = oldN + _n; } function callback(TransactionData calldata txData) external { require(msg.sender == original, "Only original can call this function."); (bool success, ) = txData.target.call{value: txData.value}(txData.data); } function proxyFor(address sender, uint i) public view returns (address proxy) { bytes32 salt = keccak256(abi.encodePacked(sender, i)); proxy = address(uint160(uint(keccak256(abi.encodePacked( hex'ff', address(this), salt, byteCode ))))); } // increase proxy count function increase(uint _n) external { require(msg.sender == deployer, "Only deployer can call this function."); createProxies(_n); } function execute(uint _start, uint _count, TransactionData[] memory txs) external { require(msg.sender == deployer, "Only deployer can call this function."); for(uint i=_start; i<_start+_count; i++) { address proxy = proxyFor(msg.sender, i); for (uint j=0; j<txs.length; j++) { TransactionData memory txData = txs[j]; BatcherV2(proxy).callback(txData); } } } }
[{"inputs":[{"internalType":"uint256","name":"_n","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct TransactionData","name":"txData","type":"tuple"}],"name":"callback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"},{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct TransactionData[]","name":"txs","type":"tuple[]"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_n","type":"uint256"}],"name":"increase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"i","type":"uint256"}],"name":"proxyFor","outputs":[{"internalType":"address","name":"proxy","type":"address"}],"stateMutability":"view","type":"function"}]
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.