ETH Price: $2,196.13 (-5.68%)

Transaction Decoder

Block:
24027844 at Dec-16-2025 09:26:35 PM +UTC
Transaction Fee:
0.00000704931371258 ETH $0.02
Gas Used:
194,345 Gas / 0.036272164 Gwei

Emitted Events:

908 0x01791f726b4103694969820be083196cc7c045ff.0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef( 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x0000000000000000000000000000000000000000000000000000000000000000, 0x0000000000000000000000001be14811a3a06f6af4fa64310a636e1df04c1c21, 00000000000000000000000000000000000000000000019e364875e5f85d3795 )
909 0x01791f726b4103694969820be083196cc7c045ff.0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef( 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x0000000000000000000000001be14811a3a06f6af4fa64310a636e1df04c1c21, 0x000000000000000000000000bc56e3edb67b56d598ace07668b138815f45d7aa, 000000000000000000000000000000000000000000000089b50b482fe90e590e )
910 0x01791f726b4103694969820be083196cc7c045ff.0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef( 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x000000000000000000000000bc56e3edb67b56d598ace07668b138815f45d7aa, 0x000000000000000000000000820fde592f5b7a42152163b0eb5b80d78ef7a0cc, 0000000000000000000000000000000000000000000000278936bf4be7c6e1a5 )

Account State Difference:

  Address   Before After State Difference Code
0x01791F72...cC7c045fF
0x1Be14811...Df04c1c21
(Yield Basis: Gauge Controller)
0x820fdE59...78ef7A0cC
0.026926612664524986 Eth
Nonce: 20
0.026919563350812406 Eth
Nonce: 21
0.00000704931371258
0xbc56e3ed...15F45d7aa
(BuilderNet)
112.968851948041277538 Eth112.968851948123291128 Eth0.00000000008201359

Execution Trace

Multicall3.aggregate3( calls= ) => ( returnData= )
  • 0xbc56e3edb67b56d598ace07668b138815f45d7aa.21c0b342( )
    • Yield Basis: Gauge Controller.CALL( )
      • 0xbc56e3edb67b56d598ace07668b138815f45d7aa.STATICCALL( )
        • 0xfbf3c16676055776ab9b286492d8f13e30e2e763.70a08231( )
        • 0xfbf3c16676055776ab9b286492d8f13e30e2e763.STATICCALL( )
        • Yield Basis: YB Token.f1fb05e9( )
        • Yield Basis: YB Token.a9059cbb( )
        • Yield Basis: YB Token.a9059cbb( )
          // SPDX-License-Identifier: MIT
          pragma solidity 0.8.12;
          
          /// @title Multicall3
          /// @notice Aggregate results from multiple function calls
          /// @dev Multicall & Multicall2 backwards-compatible
          /// @dev Aggregate methods are marked `payable` to save 24 gas per call
          /// @author Michael Elliot <mike@makerdao.com>
          /// @author Joshua Levine <joshua@makerdao.com>
          /// @author Nick Johnson <arachnid@notdot.net>
          /// @author Andreas Bigger <andreas@nascent.xyz>
          /// @author Matt Solomon <matt@mattsolomon.dev>
          contract Multicall3 {
              struct Call {
                  address target;
                  bytes callData;
              }
          
              struct Call3 {
                  address target;
                  bool allowFailure;
                  bytes callData;
              }
          
              struct Call3Value {
                  address target;
                  bool allowFailure;
                  uint256 value;
                  bytes callData;
              }
          
              struct Result {
                  bool success;
                  bytes returnData;
              }
          
              /// @notice Backwards-compatible call aggregation with Multicall
              /// @param calls An array of Call structs
              /// @return blockNumber The block number where the calls were executed
              /// @return returnData An array of bytes containing the responses
              function aggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes[] memory returnData) {
                  blockNumber = block.number;
                  uint256 length = calls.length;
                  returnData = new bytes[](length);
                  Call calldata call;
                  for (uint256 i = 0; i < length;) {
                      bool success;
                      call = calls[i];
                      (success, returnData[i]) = call.target.call(call.callData);
                      require(success, "Multicall3: call failed");
                      unchecked { ++i; }
                  }
              }
          
              /// @notice Backwards-compatible with Multicall2
              /// @notice Aggregate calls without requiring success
              /// @param requireSuccess If true, require all calls to succeed
              /// @param calls An array of Call structs
              /// @return returnData An array of Result structs
              function tryAggregate(bool requireSuccess, Call[] calldata calls) public payable returns (Result[] memory returnData) {
                  uint256 length = calls.length;
                  returnData = new Result[](length);
                  Call calldata call;
                  for (uint256 i = 0; i < length;) {
                      Result memory result = returnData[i];
                      call = calls[i];
                      (result.success, result.returnData) = call.target.call(call.callData);
                      if (requireSuccess) require(result.success, "Multicall3: call failed");
                      unchecked { ++i; }
                  }
              }
          
              /// @notice Backwards-compatible with Multicall2
              /// @notice Aggregate calls and allow failures using tryAggregate
              /// @param calls An array of Call structs
              /// @return blockNumber The block number where the calls were executed
              /// @return blockHash The hash of the block where the calls were executed
              /// @return returnData An array of Result structs
              function tryBlockAndAggregate(bool requireSuccess, Call[] calldata calls) public payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData) {
                  blockNumber = block.number;
                  blockHash = blockhash(block.number);
                  returnData = tryAggregate(requireSuccess, calls);
              }
          
              /// @notice Backwards-compatible with Multicall2
              /// @notice Aggregate calls and allow failures using tryAggregate
              /// @param calls An array of Call structs
              /// @return blockNumber The block number where the calls were executed
              /// @return blockHash The hash of the block where the calls were executed
              /// @return returnData An array of Result structs
              function blockAndAggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData) {
                  (blockNumber, blockHash, returnData) = tryBlockAndAggregate(true, calls);
              }
          
              /// @notice Aggregate calls, ensuring each returns success if required
              /// @param calls An array of Call3 structs
              /// @return returnData An array of Result structs
              function aggregate3(Call3[] calldata calls) public payable returns (Result[] memory returnData) {
                  uint256 length = calls.length;
                  returnData = new Result[](length);
                  Call3 calldata calli;
                  for (uint256 i = 0; i < length;) {
                      Result memory result = returnData[i];
                      calli = calls[i];
                      (result.success, result.returnData) = calli.target.call(calli.callData);
                      assembly {
                          // Revert if the call fails and failure is not allowed
                          // `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)`
                          if iszero(or(calldataload(add(calli, 0x20)), mload(result))) {
                              // set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)")))
                              mstore(0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000)
                              // set data offset
                              mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020)
                              // set length of revert string
                              mstore(0x24, 0x0000000000000000000000000000000000000000000000000000000000000017)
                              // set revert string: bytes32(abi.encodePacked("Multicall3: call failed"))
                              mstore(0x44, 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000)
                              revert(0x00, 0x64)
                          }
                      }
                      unchecked { ++i; }
                  }
              }
          
              /// @notice Aggregate calls with a msg value
              /// @notice Reverts if msg.value is less than the sum of the call values
              /// @param calls An array of Call3Value structs
              /// @return returnData An array of Result structs
              function aggregate3Value(Call3Value[] calldata calls) public payable returns (Result[] memory returnData) {
                  uint256 valAccumulator;
                  uint256 length = calls.length;
                  returnData = new Result[](length);
                  Call3Value calldata calli;
                  for (uint256 i = 0; i < length;) {
                      Result memory result = returnData[i];
                      calli = calls[i];
                      uint256 val = calli.value;
                      // Humanity will be a Type V Kardashev Civilization before this overflows - andreas
                      // ~ 10^25 Wei in existence << ~ 10^76 size uint fits in a uint256
                      unchecked { valAccumulator += val; }
                      (result.success, result.returnData) = calli.target.call{value: val}(calli.callData);
                      assembly {
                          // Revert if the call fails and failure is not allowed
                          // `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)`
                          if iszero(or(calldataload(add(calli, 0x20)), mload(result))) {
                              // set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)")))
                              mstore(0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000)
                              // set data offset
                              mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020)
                              // set length of revert string
                              mstore(0x24, 0x0000000000000000000000000000000000000000000000000000000000000017)
                              // set revert string: bytes32(abi.encodePacked("Multicall3: call failed"))
                              mstore(0x44, 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000)
                              revert(0x00, 0x84)
                          }
                      }
                      unchecked { ++i; }
                  }
                  // Finally, make sure the msg.value = SUM(call[0...i].value)
                  require(msg.value == valAccumulator, "Multicall3: value mismatch");
              }
          
              /// @notice Returns the block hash for the given block number
              /// @param blockNumber The block number
              function getBlockHash(uint256 blockNumber) public view returns (bytes32 blockHash) {
                  blockHash = blockhash(blockNumber);
              }
          
              /// @notice Returns the block number
              function getBlockNumber() public view returns (uint256 blockNumber) {
                  blockNumber = block.number;
              }
          
              /// @notice Returns the block coinbase
              function getCurrentBlockCoinbase() public view returns (address coinbase) {
                  coinbase = block.coinbase;
              }
          
              /// @notice Returns the block difficulty
              function getCurrentBlockDifficulty() public view returns (uint256 difficulty) {
                  difficulty = block.difficulty;
              }
          
              /// @notice Returns the block gas limit
              function getCurrentBlockGasLimit() public view returns (uint256 gaslimit) {
                  gaslimit = block.gaslimit;
              }
          
              /// @notice Returns the block timestamp
              function getCurrentBlockTimestamp() public view returns (uint256 timestamp) {
                  timestamp = block.timestamp;
              }
          
              /// @notice Returns the (ETH) balance of a given address
              function getEthBalance(address addr) public view returns (uint256 balance) {
                  balance = addr.balance;
              }
          
              /// @notice Returns the block hash of the last block
              function getLastBlockHash() public view returns (bytes32 blockHash) {
                  unchecked {
                      blockHash = blockhash(block.number - 1);
                  }
              }
          
              /// @notice Gets the base fee of the given block
              /// @notice Can revert if the BASEFEE opcode is not implemented by the given chain
              function getBasefee() public view returns (uint256 basefee) {
                  basefee = block.basefee;
              }
          
              /// @notice Returns the chain id
              function getChainId() public view returns (uint256 chainid) {
                  chainid = block.chainid;
              }
          }