// SPDX-License-Identifier: MIT
pragma solidity ^0.8.29;
interface IL2Reader {
function l2Read(address _to, bytes calldata _data) external view returns (bytes memory);
}
contract MyAppContract {
address public immutable settlementPort;
constructor(address _settlementPort) {
settlementPort = _settlementPort;
}
function getL2TokenBalance(address tokenContract, address account) external view returns (uint256) {
// Encode the balanceOf function call
bytes memory data = abi.encodeWithSignature("balanceOf(address)", account);
// Perform the L2 read
bytes memory result = IL2Reader(settlementPort).l2Read(tokenContract, data);
// Decode the result
return abi.decode(result, (uint256));
}
function getL2ContractData(address targetContract, bytes calldata callData) external view returns (bytes memory) {
// Direct L2 read with custom call data
return IL2Reader(settlementPort).l2Read(targetContract, callData);
}
}