//contracts/eth/EthVerifierHooks.sol

    function verifyStorageValue(
        bytes32 storageRoot,
        address /* target */,
        uint256 slot,
        bytes memory proof
    ) external pure returns (bytes32) {
        (bool exists, bytes memory v) = SecureMerkleTrie.get(
            abi.encodePacked(slot),
            abi.decode(proof, (bytes[])),
            storageRoot
        );
|>      return exists ? RLPReaderExt.bytes32FromRLP(RLPReader.readBytes(v)) : bytes32(0);
    }
//contracts/RLPReaderExt.sol

    function bytes32FromRLP(bytes memory v) internal pure returns (bytes32) {
        if (v.length > 32) revert ContentLengthMismatch();
        return bytes32(v) >> ((32 - v.length) << 3);
    }
