From d5dc539b4274184b06553e1f403662042af893b4 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Sun, 7 Jul 2024 20:16:24 +0400 Subject: [PATCH 1/4] 165 support --- src/concrete/parser/OrderBookSubParser.sol | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/concrete/parser/OrderBookSubParser.sol b/src/concrete/parser/OrderBookSubParser.sol index 24defbfc5..6db601b5e 100644 --- a/src/concrete/parser/OrderBookSubParser.sol +++ b/src/concrete/parser/OrderBookSubParser.sol @@ -51,22 +51,27 @@ import { SUB_PARSER_WORD_PARSERS, OPERAND_HANDLER_FUNCTION_POINTERS as SUB_PARSER_OPERAND_HANDLERS } from "../../generated/OrderBookSubParser.pointers.sol"; +import {IDescribedByMetaV1} from "rain.metadata/interface/unstable/IDescribedByMetaV1.sol"; contract OrderBookSubParser is BaseRainterpreterSubParserNPE2 { using LibUint256Matrix for uint256[][]; + /// @inheritdoc IDescribedByMetaV1 function describedByMetaV1() external pure returns (bytes32) { return DESCRIBED_BY_META_HASH; } + /// @inheritdoc BaseRainterpreterSubParserNPE2 function subParserParseMeta() internal pure virtual override returns (bytes memory) { return SUB_PARSER_PARSE_META; } + /// @inheritdoc BaseRainterpreterSubParserNPE2 function subParserWordParsers() internal pure virtual override returns (bytes memory) { return SUB_PARSER_WORD_PARSERS; } + /// @inheritdoc BaseRainterpreterSubParserNPE2 function subParserOperandHandlers() internal pure virtual override returns (bytes memory) { return SUB_PARSER_OPERAND_HANDLERS; } From 02010977e49180672e8acd3943b94a7e0fd516d9 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Sun, 7 Jul 2024 20:17:44 +0400 Subject: [PATCH 2/4] rain interpreter --- lib/rain.interpreter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rain.interpreter b/lib/rain.interpreter index 66a087d42..5b15f0750 160000 --- a/lib/rain.interpreter +++ b/lib/rain.interpreter @@ -1 +1 @@ -Subproject commit 66a087d427b1277920338ae854818859f8355130 +Subproject commit 5b15f0750dfd6773091d8577746d3d5f2a4281b3 From 77246e253023d8842a233a110b51d12f9d3ef800 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Sun, 7 Jul 2024 20:18:50 +0400 Subject: [PATCH 3/4] pointers --- src/generated/OrderBookSubParser.pointers.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/generated/OrderBookSubParser.pointers.sol b/src/generated/OrderBookSubParser.pointers.sol index 24a7506b6..e264d0b76 100644 --- a/src/generated/OrderBookSubParser.pointers.sol +++ b/src/generated/OrderBookSubParser.pointers.sol @@ -9,7 +9,7 @@ pragma solidity =0.8.25; /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xa6e8aeaad0bc26812d8e1af94bc45ea29b4d1cdbe4f33cf5317c0d3b9d04de44); +bytes32 constant BYTECODE_HASH = bytes32(0xa24098eea11f3a83e475674e649959ac6d6b382fea5e47b47376e8c15a4a6863); /// @dev The hash of the meta that describes the contract. bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0xa90cf581ab38cb58f1502cd049627a3a1f49857ec6a26c8bcc6da98b05bd4696); @@ -42,13 +42,13 @@ uint8 constant PARSE_META_BUILD_DEPTH = 1; /// to things that happen entirely on the interpreter such as well known /// constants and references to the context grid. bytes constant SUB_PARSER_WORD_PARSERS = - hex"102710461057106810781089109a10ab10bc10cd10de10ee10ff111011211132114311531163"; + hex"1073109210a310b410c410d510e610f711081119112a113a114b115c116d117e118f119f11af"; /// @dev Every two bytes is a function pointer for an operand handler. /// These positional indexes all map to the same indexes looked up in the parse /// meta. bytes constant OPERAND_HANDLER_FUNCTION_POINTERS = - hex"12a812a812a812a812a812a812a812a812a812a812a812a812a812a812a812a812a812ed137c"; + hex"12f412f412f412f412f412f412f412f412f412f412f412f412f412f412f412f412f4133913c8"; /// @dev Every two bytes is a function pointer for a literal parser. /// Literal dispatches are determined by the first byte(s) of the literal From 790042aca936340c77782e1ddc2b9cb6827b2d6b Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Sun, 7 Jul 2024 20:29:03 +0400 Subject: [PATCH 4/4] ierc165 tests --- .../parser/OrderBookSubParser.ierc165.t.sol | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 test/concrete/parser/OrderBookSubParser.ierc165.t.sol diff --git a/test/concrete/parser/OrderBookSubParser.ierc165.t.sol b/test/concrete/parser/OrderBookSubParser.ierc165.t.sol new file mode 100644 index 000000000..e8767c321 --- /dev/null +++ b/test/concrete/parser/OrderBookSubParser.ierc165.t.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: CAL +pragma solidity =0.8.25; + +import {Test} from "forge-std/Test.sol"; + +import {IERC165} from "openzeppelin-contracts/contracts/utils/introspection/IERC165.sol"; +import {OrderBookSubParser} from "src/concrete/parser/OrderBookSubParser.sol"; +import {ISubParserV2} from "rain.interpreter.interface/interface/ISubParserV2.sol"; +import {IDescribedByMetaV1} from "rain.metadata/interface/unstable/IDescribedByMetaV1.sol"; + +contract OrderBookSubParserIERC165Test is Test { + function testOrderBookSubParserIERC165(bytes4 badInterfaceId) external { + vm.assume(badInterfaceId != type(IERC165).interfaceId); + vm.assume(badInterfaceId != type(ISubParserV2).interfaceId); + vm.assume(badInterfaceId != type(IDescribedByMetaV1).interfaceId); + + OrderBookSubParser subParser = new OrderBookSubParser(); + assertTrue(subParser.supportsInterface(type(IERC165).interfaceId)); + assertTrue(subParser.supportsInterface(type(ISubParserV2).interfaceId)); + assertTrue(subParser.supportsInterface(type(IDescribedByMetaV1).interfaceId)); + assertFalse(subParser.supportsInterface(badInterfaceId)); + } +}