ETH Price: $2,000.54 (+0.04%)

Contract

0x1A5cA62C49cc9d52E1De31cE55EB3F4E159f8cf7
 

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Execute238368612025-11-20 1:03:59129 days ago1763600639IN
0x1A5cA62C...E159f8cf7
0 ETH0.00002790.15595095
Execute236847022025-10-29 18:00:59150 days ago1761760859IN
0x1A5cA62C...E159f8cf7
0 ETH0.000095370.60028489
Execute233373052025-09-11 4:01:59199 days ago1757563319IN
0x1A5cA62C...E159f8cf7
0 ETH0.000047550.26770015
Execute232367842025-08-28 2:58:35213 days ago1756349915IN
0x1A5cA62C...E159f8cf7
0 ETH0.000121680.48984865
Execute231434582025-08-15 2:29:35226 days ago1755224975IN
0x1A5cA62C...E159f8cf7
0 ETH0.000172330.54455995
Execute231356092025-08-14 0:07:47227 days ago1755130067IN
0x1A5cA62C...E159f8cf7
0 ETH0.000395571.52943154
Execute231153302025-08-11 4:09:11230 days ago1754885351IN
0x1A5cA62C...E159f8cf7
0 ETH0.000102170.5069794
Execute230854162025-08-06 23:50:11234 days ago1754524211IN
0x1A5cA62C...E159f8cf7
0 ETH0.000047660.28423881
Execute230849902025-08-06 22:24:47234 days ago1754519087IN
0x1A5cA62C...E159f8cf7
0 ETH0.000063090.27412897
Execute230849602025-08-06 22:18:47234 days ago1754518727IN
0x1A5cA62C...E159f8cf7
0 ETH0.000075710.28770612
Execute230190672025-07-28 17:15:11243 days ago1753722911IN
0x1A5cA62C...E159f8cf7
0 ETH0.000127140.76573833
Execute230141612025-07-28 0:47:23244 days ago1753663643IN
0x1A5cA62C...E159f8cf7
0 ETH0.000068890.38803521
Execute230137712025-07-27 23:28:59244 days ago1753658939IN
0x1A5cA62C...E159f8cf7
0 ETH0.000073660.31357339
Execute230137482025-07-27 23:24:23244 days ago1753658663IN
0x1A5cA62C...E159f8cf7
0 ETH0.000074180.3174892
Execute230136642025-07-27 23:07:23244 days ago1753657643IN
0x1A5cA62C...E159f8cf7
0 ETH0.000060520.31122976
Execute230136162025-07-27 22:57:47244 days ago1753657067IN
0x1A5cA62C...E159f8cf7
0 ETH0.000052840.29243168
Execute230135662025-07-27 22:47:47244 days ago1753656467IN
0x1A5cA62C...E159f8cf7
0 ETH0.000089210.38968598
Execute230131412025-07-27 21:21:47244 days ago1753651307IN
0x1A5cA62C...E159f8cf7
0 ETH0.000054120.30860209
Execute229838942025-07-23 19:16:47248 days ago1753298207IN
0x1A5cA62C...E159f8cf7
0 ETH0.000264921.0640803
Execute214025232024-12-14 18:24:35469 days ago1734200675IN
0x1A5cA62C...E159f8cf7
0 ETH0.000845178.97918661
Execute213963032024-12-13 21:33:35470 days ago1734125615IN
0x1A5cA62C...E159f8cf7
0 ETH0.0018086214.54966392
Execute213962902024-12-13 21:30:59470 days ago1734125459IN
0x1A5cA62C...E159f8cf7
0 ETH0.0025454814.01176437
Execute200856582024-06-13 21:43:59653 days ago1718315039IN
0x1A5cA62C...E159f8cf7
0 ETH0.0022629110.03045854
Execute200856232024-06-13 21:36:59653 days ago1718314619IN
0x1A5cA62C...E159f8cf7
0 ETH0.0012730910.90716398
Execute200423222024-06-07 20:25:11659 days ago1717791911IN
0x1A5cA62C...E159f8cf7
0 ETH0.0014792614.91888489
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Multicall238368612025-11-20 1:03:59129 days ago1763600639
0x1A5cA62C...E159f8cf7
0.06 ETH
Transfer236847022025-10-29 18:00:59150 days ago1761760859
0x1A5cA62C...E159f8cf7
0.00040112 ETH
Multicall236847022025-10-29 18:00:59150 days ago1761760859
0x1A5cA62C...E159f8cf7
0.099 ETH
Transfer233373052025-09-11 4:01:59199 days ago1757563319
0x1A5cA62C...E159f8cf7
0.00043681 ETH
Multicall233373052025-09-11 4:01:59199 days ago1757563319
0x1A5cA62C...E159f8cf7
0.4045 ETH
Transfer232367842025-08-28 2:58:35213 days ago1756349915
0x1A5cA62C...E159f8cf7
0.0006362 ETH
Transfer231434582025-08-15 2:29:35226 days ago1755224975
0x1A5cA62C...E159f8cf7
0.00063574 ETH
Multicall231434582025-08-15 2:29:35226 days ago1755224975
0x1A5cA62C...E159f8cf7
0.2 ETH
Multicall231153302025-08-11 4:09:11230 days ago1754885351
0x1A5cA62C...E159f8cf7
0.1 ETH
Transfer230854162025-08-06 23:50:11234 days ago1754524211
0x1A5cA62C...E159f8cf7
0.00042195 ETH
Multicall230854162025-08-06 23:50:11234 days ago1754524211
0x1A5cA62C...E159f8cf7
0.06 ETH
Transfer230849902025-08-06 22:24:47234 days ago1754519087
0x1A5cA62C...E159f8cf7
0.0005928 ETH
Transfer230849602025-08-06 22:18:47234 days ago1754518727
0x1A5cA62C...E159f8cf7
0.00067659 ETH
Multicall230190672025-07-28 17:15:11243 days ago1753722911
0x1A5cA62C...E159f8cf7
0.5 ETH
Transfer230141612025-07-28 0:47:23244 days ago1753663643
0x1A5cA62C...E159f8cf7
1.43127769 ETH
Multicall230136642025-07-27 23:07:23244 days ago1753657643
0x1A5cA62C...E159f8cf7
0.1 ETH
Multicall230136162025-07-27 22:57:47244 days ago1753657067
0x1A5cA62C...E159f8cf7
0.095 ETH
Multicall230135662025-07-27 22:47:47244 days ago1753656467
0x1A5cA62C...E159f8cf7
0.26 ETH
Transfer230131412025-07-27 21:21:47244 days ago1753651307
0x1A5cA62C...E159f8cf7
0.0007053 ETH
Transfer230131412025-07-27 21:21:47244 days ago1753651307
0x1A5cA62C...E159f8cf7
0.47209991 ETH
Transfer229838942025-07-23 19:16:47248 days ago1753298207
0x1A5cA62C...E159f8cf7
0.00108342 ETH
Transfer213963032024-12-13 21:33:35470 days ago1734125615
0x1A5cA62C...E159f8cf7
0.00228884 ETH
Transfer213963032024-12-13 21:33:35470 days ago1734125615
0x1A5cA62C...E159f8cf7
0.085 ETH
Transfer213962902024-12-13 21:30:59470 days ago1734125459
0x1A5cA62C...E159f8cf7
0.10820682 ETH
Transfer198479182024-05-11 16:15:47686 days ago1715444147
0x1A5cA62C...E159f8cf7
0.33503069 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Minimal Proxy Contract for 0x2a2b85eb1054d6f0c6c2e37da05ed3e5fea684ef

Contract Name:
Identity

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-14
*/

pragma solidity 0.8.7;

// @TODO: Formatting
library LibBytes {
  // @TODO: see if we can just set .length = 
  function trimToSize(bytes memory b, uint newLen)
    internal
    pure
  {
    require(b.length > newLen, "BytesLib: only shrinking");
    assembly {
      mstore(b, newLen)
    }
  }


  /***********************************|
  |        Read Bytes Functions       |
  |__________________________________*/

  /**
   * @dev Reads a bytes32 value from a position in a byte array.
   * @param b Byte array containing a bytes32 value.
   * @param index Index in byte array of bytes32 value.
   * @return result bytes32 value from byte array.
   */
  function readBytes32(
    bytes memory b,
    uint256 index
  )
    internal
    pure
    returns (bytes32 result)
  {
    // Arrays are prefixed by a 256 bit length parameter
    index += 32;

    require(b.length >= index, "BytesLib: length");

    // Read the bytes32 from array memory
    assembly {
      result := mload(add(b, index))
    }
    return result;
  }
}



interface IERC1271Wallet {
	function isValidSignature(bytes32 hash, bytes calldata signature) external view returns (bytes4 magicValue);
}

library SignatureValidator {
	using LibBytes for bytes;

	enum SignatureMode {
		EIP712,
		EthSign,
		SmartWallet,
		Spoof
	}

	// bytes4(keccak256("isValidSignature(bytes32,bytes)"))
	bytes4 constant internal ERC1271_MAGICVALUE_BYTES32 = 0x1626ba7e;

	function recoverAddr(bytes32 hash, bytes memory sig) internal view returns (address) {
		return recoverAddrImpl(hash, sig, false);
	}

	function recoverAddrImpl(bytes32 hash, bytes memory sig, bool allowSpoofing) internal view returns (address) {
		require(sig.length >= 1, "SV_SIGLEN");
		uint8 modeRaw;
		unchecked { modeRaw = uint8(sig[sig.length - 1]); }
		SignatureMode mode = SignatureMode(modeRaw);

		// {r}{s}{v}{mode}
		if (mode == SignatureMode.EIP712 || mode == SignatureMode.EthSign) {
			require(sig.length == 66, "SV_LEN");
			bytes32 r = sig.readBytes32(0);
			bytes32 s = sig.readBytes32(32);
			uint8 v = uint8(sig[64]);
			// Hesitant about this check: seems like this is something that has no business being checked on-chain
			require(v == 27 || v == 28, "SV_INVALID_V");
			if (mode == SignatureMode.EthSign) hash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
			address signer = ecrecover(hash, v, r, s);
			require(signer != address(0), "SV_ZERO_SIG");
			return signer;
		// {sig}{verifier}{mode}
		} else if (mode == SignatureMode.SmartWallet) {
			// 32 bytes for the addr, 1 byte for the type = 33
			require(sig.length > 33, "SV_LEN_WALLET");
			uint newLen;
			unchecked {
				newLen = sig.length - 33;
			}
			IERC1271Wallet wallet = IERC1271Wallet(address(uint160(uint256(sig.readBytes32(newLen)))));
			sig.trimToSize(newLen);
			require(ERC1271_MAGICVALUE_BYTES32 == wallet.isValidSignature(hash, sig), "SV_WALLET_INVALID");
			return address(wallet);
		// {address}{mode}; the spoof mode is used when simulating calls
		} else if (mode == SignatureMode.Spoof && allowSpoofing) {
			require(tx.origin == address(1), "SV_SPOOF_ORIGIN");
			require(sig.length == 33, "SV_SPOOF_LEN");
			sig.trimToSize(32);
			return abi.decode(sig, (address));
		} else revert("SV_SIGMODE");
	}
}


contract Identity {
	mapping (address => bytes32) public privileges;
	// The next allowed nonce
	uint public nonce;

	// Events
	event LogPrivilegeChanged(address indexed addr, bytes32 priv);
	event LogErr(address indexed to, uint value, bytes data, bytes returnData); // only used in tryCatch

	// Transaction structure
	// we handle replay protection separately by requiring (address(this), chainID, nonce) as part of the sig
	struct Transaction {
		address to;
		uint value;
		bytes data;
	}

	constructor(address[] memory addrs) {
		uint len = addrs.length;
		for (uint i=0; i<len; i++) {
			// @TODO should we allow setting to any arb value here?
			privileges[addrs[i]] = bytes32(uint(1));
			emit LogPrivilegeChanged(addrs[i], bytes32(uint(1)));
		}
	}

	// This contract can accept ETH without calldata
	receive() external payable {}

	// This contract can accept ETH with calldata
	// However, to support EIP 721 and EIP 1155, we need to respond to those methods with their own method signature
	fallback() external payable {
		bytes4 method = msg.sig;
		if (
			method == 0x150b7a02 // bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))
				|| method == 0xf23a6e61 // bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))
				|| method == 0xbc197c81 // bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))
		) {
			// Copy back the method
			// solhint-disable-next-line no-inline-assembly
			assembly {
				calldatacopy(0, 0, 0x04)
				return (0, 0x20)
			}
		}
	}

	function setAddrPrivilege(address addr, bytes32 priv)
		external
	{
		require(msg.sender == address(this), 'ONLY_IDENTITY_CAN_CALL');
		// Anti-bricking measure: if the privileges slot is used for special data (not 0x01),
		// don't allow to set it to true
		if (uint(privileges[addr]) > 1) require(priv != bytes32(uint(1)), 'UNSETTING_SPECIAL_DATA');
		privileges[addr] = priv;
		emit LogPrivilegeChanged(addr, priv);
	}

	function tipMiner(uint amount)
		external
	{
		require(msg.sender == address(this), 'ONLY_IDENTITY_CAN_CALL');
		// See https://docs.flashbots.net/flashbots-auction/searchers/advanced/coinbase-payment/#managing-payments-to-coinbaseaddress-when-it-is-a-contract
		// generally this contract is reentrancy proof cause of the nonce
		executeCall(block.coinbase, amount, new bytes(0));
	}

	function tryCatch(address to, uint value, bytes calldata data)
		external
	{
		require(msg.sender == address(this), 'ONLY_IDENTITY_CAN_CALL');
		(bool success, bytes memory returnData) = to.call{value: value, gas: gasleft()}(data);
		if (!success) emit LogErr(to, value, data, returnData);
	}


	// WARNING: if the signature of this is changed, we have to change IdentityFactory
	function execute(Transaction[] calldata txns, bytes calldata signature)
		external
	{
		require(txns.length > 0, 'MUST_PASS_TX');
		uint currentNonce = nonce;
		// NOTE: abi.encode is safer than abi.encodePacked in terms of collision safety
		bytes32 hash = keccak256(abi.encode(address(this), block.chainid, currentNonce, txns));
		// We have to increment before execution cause it protects from reentrancies
		nonce = currentNonce + 1;

		address signer = SignatureValidator.recoverAddrImpl(hash, signature, true);
		require(privileges[signer] != bytes32(0), 'INSUFFICIENT_PRIVILEGE');
		uint len = txns.length;
		for (uint i=0; i<len; i++) {
			Transaction memory txn = txns[i];
			executeCall(txn.to, txn.value, txn.data);
		}
		// The actual anti-bricking mechanism - do not allow a signer to drop their own priviledges
		require(privileges[signer] != bytes32(0), 'PRIVILEGE_NOT_DOWNGRADED');
	}

	// no need for nonce management here cause we're not dealing with sigs
	function executeBySender(Transaction[] calldata txns) external {
		require(txns.length > 0, 'MUST_PASS_TX');
		require(privileges[msg.sender] != bytes32(0), 'INSUFFICIENT_PRIVILEGE');
		uint len = txns.length;
		for (uint i=0; i<len; i++) {
			Transaction memory txn = txns[i];
			executeCall(txn.to, txn.value, txn.data);
		}
		// again, anti-bricking
		require(privileges[msg.sender] != bytes32(0), 'PRIVILEGE_NOT_DOWNGRADED');
	}

	function executeBySelf(Transaction[] calldata txns) external {
		require(msg.sender == address(this), 'ONLY_IDENTITY_CAN_CALL');
		require(txns.length > 0, 'MUST_PASS_TX');
		uint len = txns.length;
		for (uint i=0; i<len; i++) {
			Transaction memory txn = txns[i];
			executeCall(txn.to, txn.value, txn.data);
		}
	}

	// we shouldn't use address.call(), cause: https://github.com/ethereum/solidity/issues/2884
	// copied from https://github.com/uport-project/uport-identity/blob/develop/contracts/Proxy.sol
	// there's also
	// https://github.com/gnosis/MultiSigWallet/commit/e1b25e8632ca28e9e9e09c81bd20bf33fdb405ce
	// https://github.com/austintgriffith/bouncer-proxy/blob/master/BouncerProxy/BouncerProxy.sol
	// https://github.com/gnosis/safe-contracts/blob/7e2eeb3328bb2ae85c36bc11ea6afc14baeb663c/contracts/base/Executor.sol
	function executeCall(address to, uint256 value, bytes memory data)
		internal
	{
		assembly {
			let result := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0)

			switch result case 0 {
				let size := returndatasize()
				let ptr := mload(0x40)
				returndatacopy(ptr, 0, size)
				revert(ptr, size)
			}
			default {}
		}
		// A single call consumes around 477 more gas with the pure solidity version, for whatever reason
		// WARNING: do not use this, it corrupts the returnData string (returns it in a slightly different format)
		//(bool success, bytes memory returnData) = to.call{value: value, gas: gasleft()}(data);
		//if (!success) revert(string(data));
	}

	// EIP 1271 implementation
	// see https://eips.ethereum.org/EIPS/eip-1271
	function isValidSignature(bytes32 hash, bytes calldata signature) external view returns (bytes4) {
		if (privileges[SignatureValidator.recoverAddr(hash, signature)] != bytes32(0)) {
			// bytes4(keccak256("isValidSignature(bytes32,bytes)")
			return 0x1626ba7e;
		} else {
			return 0xffffffff;
		}
	}

	// EIP 1155 implementation
	// we pretty much only need to signal that we support the interface for 165, but for 1155 we also need the fallback function
	function supportsInterface(bytes4 interfaceID) external pure returns (bool) {
		return
			interfaceID == 0x01ffc9a7 ||    // ERC-165 support (i.e. `bytes4(keccak256('supportsInterface(bytes4)'))`).
			interfaceID == 0x4e2312e0;      // ERC-1155 `ERC1155TokenReceiver` support (i.e. `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")) ^ bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`).
	}
}

Contract ABI

API
[{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"returnData","type":"bytes"}],"name":"LogErr","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bytes32","name":"priv","type":"bytes32"}],"name":"LogPrivilegeChanged","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct Identity.Transaction[]","name":"txns","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct Identity.Transaction[]","name":"txns","type":"tuple[]"}],"name":"executeBySelf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct Identity.Transaction[]","name":"txns","type":"tuple[]"}],"name":"executeBySender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"privileges","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes32","name":"priv","type":"bytes32"}],"name":"setAddrPrivilege","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tipMiner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"tryCatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
0x1A5cA62C49cc9d52E1De31cE55EB3F4E159f8cf7
Net Worth in USD
$6,118.49

Net Worth in ETH
3.058421

Token Allocations
TURBO 63.00%
REKT 8.46%
NEAR 6.25%
Others 22.30%
Chain Token Portfolio % Price Amount Value
ETH63.00%$0.0010283,750,000.62$3,854.36
ETH8.46%<$0.0000013,660,838,754.0748$517.36
ETH6.25%$1.17326.786$382.34
ETH5.76%$0.03521510,007.2474$352.4
ETH4.17%<$0.000001659,517,288,090.0728$254.96
ETH3.87%<$0.000001164,980,853,993.2914$236.91
ETH3.34%$0.071482,854.9731$204.07
ETH2.27%$0.00128108,690.719$139.13
ETH
Ether (ETH)
1.31%$2,000.540.0402$80.43
ETH0.97%<$0.0000011,448,860,840.3629$59.23
ETH0.60%$0.0099263,681.597$36.54
ETH0.01%$0.9997910.7453$0.7451
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.