ETH Price: $1,975.69 (+0.09%)

Transaction Decoder

Block:
24343166 at Jan-29-2026 09:21:11 PM +UTC
Transaction Fee:
0.00029160683859908 ETH $0.58
Gas Used:
137,807 Gas / 2.11605244 Gwei

Emitted Events:

0 DepositContract.DepositEvent( pubkey=0x8DBA6EE802BF107E062FAE39C497A0061CA3570E3B1D76A7684D1987D59DA1187CC6D7A8CA582754C8476BE2AF9272F8, withdrawal_credentials=0x0100000000000000000000009023D33AB8A18606BF6F0FF624C38D4716EB7F1F, amount=0x0040597307000000, signature=0xAC237D4CF152C4B819D96890DA30FD1B14DBCF92898FAC83589BB1180C15E402AEC642A4EAB321AED30E151F52C5CA230059808D22E8FCAD5FA6A0265FAC8B861A2762B8AD19B5F5B6BCD676F9609B629F587C2DEAB804ADCB3211C78B500D99, index=0x5EAD240000000000 )
1 DepositContract.DepositEvent( pubkey=0x8E42655CBBA36ADB5CF5335CEFE8C6C1CA753229DB6A069A19687785C0F3F651B184ECC223D440943895DEED844E9B10, withdrawal_credentials=0x0100000000000000000000009023D33AB8A18606BF6F0FF624C38D4716EB7F1F, amount=0x0040597307000000, signature=0x8609FD6C4F998565475A67C01787A26FA5EE10326A1A8383240F906496351AD573EF6427F79DEE5C9855AA3E52104F431906C720E52A90081B89120F0DBB062E9F551DF8D9C1963FBA4DBF6B9592BCE840952E7C306B587F6BCF142B6345E084, index=0x5FAD240000000000 )
2 DepositContract.DepositEvent( pubkey=0x8AEE899F7F8C4B48303F6EC4892E8A67EB1F8C618BE1D10097C40BCCB61587383E07DAA8AF2B841A73987B1405E406E8, withdrawal_credentials=0x0100000000000000000000009023D33AB8A18606BF6F0FF624C38D4716EB7F1F, amount=0x0040597307000000, signature=0x85A1DF9B2A8D659F19F0F0129F7131F856E4EC8A7388715B5659220E42883061685956D84D4B2C431122C356BAD115F60A7A9DF60B026DFFA53BCE7095E461C15D647AB6CAF051DD2DF9393D4BD46C31C3F3F704FECA5EA9D0831337384B2BD4, index=0x60AD240000000000 )

Account State Difference:

  Address   Before After State Difference Code
0x00000000...03d7705Fa
(Beacon Deposit Contract)
79,744,509.958925051172899779 Eth79,744,605.958925051172899779 Eth96
(Titan Builder)
12.709220757642806904 Eth12.709496371642806904 Eth0.000275614
0xc27C52de...073c42Fd2
(Kraken 241)
210.151002135900015732 Eth
Nonce: 232
114.150710529061416652 Eth
Nonce: 233
96.00029160683859908

Execution Trace

ETH 96 Kraken: ETH Staking.f4b53a11( )
  • ETH 32 DepositContract.deposit( pubkey=0x8DBA6EE802BF107E062FAE39C497A0061CA3570E3B1D76A7684D1987D59DA1187CC6D7A8CA582754C8476BE2AF9272F8, withdrawal_credentials=0x0100000000000000000000009023D33AB8A18606BF6F0FF624C38D4716EB7F1F, signature=0xAC237D4CF152C4B819D96890DA30FD1B14DBCF92898FAC83589BB1180C15E402AEC642A4EAB321AED30E151F52C5CA230059808D22E8FCAD5FA6A0265FAC8B861A2762B8AD19B5F5B6BCD676F9609B629F587C2DEAB804ADCB3211C78B500D99, deposit_data_root=6E41287B68F61483F825DA89BA5D5DD056C9B6F2587555D0C3CA3710AED3A7EB )
    • Null: 0x000...002.8dba6ee8( )
    • Null: 0x000...002.ac237d4c( )
    • Null: 0x000...002.1a2762b8( )
    • Null: 0x000...002.86f8e8a5( )
    • Null: 0x000...002.8f9befda( )
    • Null: 0x000...002.00405973( )
    • Null: 0x000...002.09d88ec2( )
    • ETH 32 DepositContract.deposit( pubkey=0x8E42655CBBA36ADB5CF5335CEFE8C6C1CA753229DB6A069A19687785C0F3F651B184ECC223D440943895DEED844E9B10, withdrawal_credentials=0x0100000000000000000000009023D33AB8A18606BF6F0FF624C38D4716EB7F1F, signature=0x8609FD6C4F998565475A67C01787A26FA5EE10326A1A8383240F906496351AD573EF6427F79DEE5C9855AA3E52104F431906C720E52A90081B89120F0DBB062E9F551DF8D9C1963FBA4DBF6B9592BCE840952E7C306B587F6BCF142B6345E084, deposit_data_root=0285D76381A56A86CB3D81D94E46202900B90F33E58D75676DEBE685E4074BCA )
      • Null: 0x000...002.8e42655c( )
      • Null: 0x000...002.8609fd6c( )
      • Null: 0x000...002.9f551df8( )
      • Null: 0x000...002.1444e815( )
      • Null: 0x000...002.31990fe1( )
      • Null: 0x000...002.00405973( )
      • Null: 0x000...002.b2ad2c18( )
      • Null: 0x000...002.6e41287b( )
      • Null: 0x000...002.75c45d82( )
      • Null: 0x000...002.1af0ff2e( )
      • Null: 0x000...002.e09d5465( )
      • Null: 0x000...002.10b46611( )
      • ETH 32 DepositContract.deposit( pubkey=0x8AEE899F7F8C4B48303F6EC4892E8A67EB1F8C618BE1D10097C40BCCB61587383E07DAA8AF2B841A73987B1405E406E8, withdrawal_credentials=0x0100000000000000000000009023D33AB8A18606BF6F0FF624C38D4716EB7F1F, signature=0x85A1DF9B2A8D659F19F0F0129F7131F856E4EC8A7388715B5659220E42883061685956D84D4B2C431122C356BAD115F60A7A9DF60B026DFFA53BCE7095E461C15D647AB6CAF051DD2DF9393D4BD46C31C3F3F704FECA5EA9D0831337384B2BD4, deposit_data_root=66C8DB9284782EF842FC0E20D9A2887F746FC51FDF48FA5296374EBA9467D99C )
        • Null: 0x000...002.8aee899f( )
        • Null: 0x000...002.85a1df9b( )
        • Null: 0x000...002.5d647ab6( )
        • Null: 0x000...002.455345d5( )
        • Null: 0x000...002.01413da2( )
        • Null: 0x000...002.00405973( )
        • Null: 0x000...002.7e55367d( )
          // ┏━━━┓━┏┓━┏┓━━┏━━━┓━━┏━━━┓━━━━┏━━━┓━━━━━━━━━━━━━━━━━━━┏┓━━━━━┏━━━┓━━━━━━━━━┏┓━━━━━━━━━━━━━━┏┓━
          // ┃┏━━┛┏┛┗┓┃┃━━┃┏━┓┃━━┃┏━┓┃━━━━┗┓┏┓┃━━━━━━━━━━━━━━━━━━┏┛┗┓━━━━┃┏━┓┃━━━━━━━━┏┛┗┓━━━━━━━━━━━━┏┛┗┓
          // ┃┗━━┓┗┓┏┛┃┗━┓┗┛┏┛┃━━┃┃━┃┃━━━━━┃┃┃┃┏━━┓┏━━┓┏━━┓┏━━┓┏┓┗┓┏┛━━━━┃┃━┗┛┏━━┓┏━┓━┗┓┏┛┏━┓┏━━┓━┏━━┓┗┓┏┛
          // ┃┏━━┛━┃┃━┃┏┓┃┏━┛┏┛━━┃┃━┃┃━━━━━┃┃┃┃┃┏┓┃┃┏┓┃┃┏┓┃┃━━┫┣┫━┃┃━━━━━┃┃━┏┓┃┏┓┃┃┏┓┓━┃┃━┃┏┛┗━┓┃━┃┏━┛━┃┃━
          // ┃┗━━┓━┃┗┓┃┃┃┃┃┃┗━┓┏┓┃┗━┛┃━━━━┏┛┗┛┃┃┃━┫┃┗┛┃┃┗┛┃┣━━┃┃┃━┃┗┓━━━━┃┗━┛┃┃┗┛┃┃┃┃┃━┃┗┓┃┃━┃┗┛┗┓┃┗━┓━┃┗┓
          // ┗━━━┛━┗━┛┗┛┗┛┗━━━┛┗┛┗━━━┛━━━━┗━━━┛┗━━┛┃┏━┛┗━━┛┗━━┛┗┛━┗━┛━━━━┗━━━┛┗━━┛┗┛┗┛━┗━┛┗┛━┗━━━┛┗━━┛━┗━┛
          // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┃┃━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
          // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┗┛━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
          
          // SPDX-License-Identifier: CC0-1.0
          
          pragma solidity 0.6.11;
          
          // This interface is designed to be compatible with the Vyper version.
          /// @notice This is the Ethereum 2.0 deposit contract interface.
          /// For more information see the Phase 0 specification under https://github.com/ethereum/eth2.0-specs
          interface IDepositContract {
              /// @notice A processed deposit event.
              event DepositEvent(
                  bytes pubkey,
                  bytes withdrawal_credentials,
                  bytes amount,
                  bytes signature,
                  bytes index
              );
          
              /// @notice Submit a Phase 0 DepositData object.
              /// @param pubkey A BLS12-381 public key.
              /// @param withdrawal_credentials Commitment to a public key for withdrawals.
              /// @param signature A BLS12-381 signature.
              /// @param deposit_data_root The SHA-256 hash of the SSZ-encoded DepositData object.
              /// Used as a protection against malformed input.
              function deposit(
                  bytes calldata pubkey,
                  bytes calldata withdrawal_credentials,
                  bytes calldata signature,
                  bytes32 deposit_data_root
              ) external payable;
          
              /// @notice Query the current deposit root hash.
              /// @return The deposit root hash.
              function get_deposit_root() external view returns (bytes32);
          
              /// @notice Query the current deposit count.
              /// @return The deposit count encoded as a little endian 64-bit number.
              function get_deposit_count() external view returns (bytes memory);
          }
          
          // Based on official specification in https://eips.ethereum.org/EIPS/eip-165
          interface ERC165 {
              /// @notice Query if a contract implements an interface
              /// @param interfaceId The interface identifier, as specified in ERC-165
              /// @dev Interface identification is specified in ERC-165. This function
              ///  uses less than 30,000 gas.
              /// @return `true` if the contract implements `interfaceId` and
              ///  `interfaceId` is not 0xffffffff, `false` otherwise
              function supportsInterface(bytes4 interfaceId) external pure returns (bool);
          }
          
          // This is a rewrite of the Vyper Eth2.0 deposit contract in Solidity.
          // It tries to stay as close as possible to the original source code.
          /// @notice This is the Ethereum 2.0 deposit contract interface.
          /// For more information see the Phase 0 specification under https://github.com/ethereum/eth2.0-specs
          contract DepositContract is IDepositContract, ERC165 {
              uint constant DEPOSIT_CONTRACT_TREE_DEPTH = 32;
              // NOTE: this also ensures `deposit_count` will fit into 64-bits
              uint constant MAX_DEPOSIT_COUNT = 2**DEPOSIT_CONTRACT_TREE_DEPTH - 1;
          
              bytes32[DEPOSIT_CONTRACT_TREE_DEPTH] branch;
              uint256 deposit_count;
          
              bytes32[DEPOSIT_CONTRACT_TREE_DEPTH] zero_hashes;
          
              constructor() public {
                  // Compute hashes in empty sparse Merkle tree
                  for (uint height = 0; height < DEPOSIT_CONTRACT_TREE_DEPTH - 1; height++)
                      zero_hashes[height + 1] = sha256(abi.encodePacked(zero_hashes[height], zero_hashes[height]));
              }
          
              function get_deposit_root() override external view returns (bytes32) {
                  bytes32 node;
                  uint size = deposit_count;
                  for (uint height = 0; height < DEPOSIT_CONTRACT_TREE_DEPTH; height++) {
                      if ((size & 1) == 1)
                          node = sha256(abi.encodePacked(branch[height], node));
                      else
                          node = sha256(abi.encodePacked(node, zero_hashes[height]));
                      size /= 2;
                  }
                  return sha256(abi.encodePacked(
                      node,
                      to_little_endian_64(uint64(deposit_count)),
                      bytes24(0)
                  ));
              }
          
              function get_deposit_count() override external view returns (bytes memory) {
                  return to_little_endian_64(uint64(deposit_count));
              }
          
              function deposit(
                  bytes calldata pubkey,
                  bytes calldata withdrawal_credentials,
                  bytes calldata signature,
                  bytes32 deposit_data_root
              ) override external payable {
                  // Extended ABI length checks since dynamic types are used.
                  require(pubkey.length == 48, "DepositContract: invalid pubkey length");
                  require(withdrawal_credentials.length == 32, "DepositContract: invalid withdrawal_credentials length");
                  require(signature.length == 96, "DepositContract: invalid signature length");
          
                  // Check deposit amount
                  require(msg.value >= 1 ether, "DepositContract: deposit value too low");
                  require(msg.value % 1 gwei == 0, "DepositContract: deposit value not multiple of gwei");
                  uint deposit_amount = msg.value / 1 gwei;
                  require(deposit_amount <= type(uint64).max, "DepositContract: deposit value too high");
          
                  // Emit `DepositEvent` log
                  bytes memory amount = to_little_endian_64(uint64(deposit_amount));
                  emit DepositEvent(
                      pubkey,
                      withdrawal_credentials,
                      amount,
                      signature,
                      to_little_endian_64(uint64(deposit_count))
                  );
          
                  // Compute deposit data root (`DepositData` hash tree root)
                  bytes32 pubkey_root = sha256(abi.encodePacked(pubkey, bytes16(0)));
                  bytes32 signature_root = sha256(abi.encodePacked(
                      sha256(abi.encodePacked(signature[:64])),
                      sha256(abi.encodePacked(signature[64:], bytes32(0)))
                  ));
                  bytes32 node = sha256(abi.encodePacked(
                      sha256(abi.encodePacked(pubkey_root, withdrawal_credentials)),
                      sha256(abi.encodePacked(amount, bytes24(0), signature_root))
                  ));
          
                  // Verify computed and expected deposit data roots match
                  require(node == deposit_data_root, "DepositContract: reconstructed DepositData does not match supplied deposit_data_root");
          
                  // Avoid overflowing the Merkle tree (and prevent edge case in computing `branch`)
                  require(deposit_count < MAX_DEPOSIT_COUNT, "DepositContract: merkle tree full");
          
                  // Add deposit data root to Merkle tree (update a single `branch` node)
                  deposit_count += 1;
                  uint size = deposit_count;
                  for (uint height = 0; height < DEPOSIT_CONTRACT_TREE_DEPTH; height++) {
                      if ((size & 1) == 1) {
                          branch[height] = node;
                          return;
                      }
                      node = sha256(abi.encodePacked(branch[height], node));
                      size /= 2;
                  }
                  // As the loop should always end prematurely with the `return` statement,
                  // this code should be unreachable. We assert `false` just to be safe.
                  assert(false);
              }
          
              function supportsInterface(bytes4 interfaceId) override external pure returns (bool) {
                  return interfaceId == type(ERC165).interfaceId || interfaceId == type(IDepositContract).interfaceId;
              }
          
              function to_little_endian_64(uint64 value) internal pure returns (bytes memory ret) {
                  ret = new bytes(8);
                  bytes8 bytesValue = bytes8(value);
                  // Byteswapping during copying to bytes.
                  ret[0] = bytesValue[7];
                  ret[1] = bytesValue[6];
                  ret[2] = bytesValue[5];
                  ret[3] = bytesValue[4];
                  ret[4] = bytesValue[3];
                  ret[5] = bytesValue[2];
                  ret[6] = bytesValue[1];
                  ret[7] = bytesValue[0];
              }
          }