Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion crates/test_fixtures/abis/RaindexV6.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion crates/test_fixtures/abis/RaindexV6SubParser.json

Large diffs are not rendered by default.

Binary file modified meta/RaindexV6SubParser.rain.meta
Binary file not shown.
Binary file modified meta/RaindexV6SubParserAuthoringMeta.rain.meta
Binary file not shown.
7 changes: 4 additions & 3 deletions src/concrete/parser/RaindexV6SubParser.sol
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ import {
CONTEXT_CALCULATIONS_ROWS,
CONTEXT_CALLING_CONTEXT_ROW_ORDER_COUNTERPARTY,
CONTEXT_DEPOSIT_COLUMN,
CONTEXT_WITHDRAW_COLUMN,
CONTEXT_CALLING_CONTEXT_ROW_ORDER_OWNER,
CONTEXT_CALLING_CONTEXT_ROW_ORDER_HASH,
CONTEXT_CALLING_CONTEXT_ROWS,
Expand Down Expand Up @@ -180,7 +181,7 @@ contract RaindexV6SubParser is BaseRainlangSubParser {
contextWithdrawContextHandlers[WITHDRAW_WORD_TARGET_AMOUNT] = LibParseOperand.handleOperandDisallowed;
contextWithdrawContextHandlers[WITHDRAW_WORD_TOKEN_DECIMALS] = LibParseOperand.handleOperandDisallowed;

handlers[CONTEXT_SIGNED_CONTEXT_START_COLUMN + 1] = contextWithdrawContextHandlers;
handlers[CONTEXT_WITHDRAW_COLUMN] = contextWithdrawContextHandlers;

uint256[][] memory handlersUint256;
assembly ("memory-safe") {
Expand Down Expand Up @@ -293,15 +294,15 @@ contract RaindexV6SubParser is BaseRainlangSubParser {
internal
view returns (bool, bytes memory, bytes32[] memory)[](WITHDRAW_WORDS_LENGTH);

withdrawParsers[WITHDRAW_WORD_WITHDRAWER] = LibRaindexSubParser.subParserSender;
withdrawParsers[WITHDRAW_WORD_WITHDRAWER] = LibRaindexSubParser.subParserWithdrawer;
withdrawParsers[WITHDRAW_WORD_TOKEN] = LibRaindexSubParser.subParserWithdrawToken;
withdrawParsers[WITHDRAW_WORD_VAULT_ID] = LibRaindexSubParser.subParserWithdrawVaultId;
withdrawParsers[WITHDRAW_WORD_VAULT_BEFORE] = LibRaindexSubParser.subParserWithdrawVaultBalanceBefore;
withdrawParsers[WITHDRAW_WORD_VAULT_AFTER] = LibRaindexSubParser.subParserWithdrawVaultBalanceAfter;
withdrawParsers[WITHDRAW_WORD_TARGET_AMOUNT] = LibRaindexSubParser.subParserWithdrawTargetAmount;
withdrawParsers[WITHDRAW_WORD_TOKEN_DECIMALS] = LibRaindexSubParser.subParserWithdrawTokenDecimals;

parsers[CONTEXT_SIGNED_CONTEXT_START_COLUMN + 1] = withdrawParsers;
parsers[CONTEXT_WITHDRAW_COLUMN] = withdrawParsers;

uint256[][] memory parsersUint256;
assembly ("memory-safe") {
Expand Down
28 changes: 16 additions & 12 deletions src/concrete/raindex/RaindexV6.sol
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ import {
CALLING_CONTEXT_COLUMNS,
CONTEXT_CALLING_CONTEXT_COLUMN,
CONTEXT_DEPOSIT_COLUMN,
CONTEXT_WITHDRAW_COLUMN,
CONTEXT_CALCULATIONS_COLUMN,
CONTEXT_CALCULATIONS_ROWS,
CONTEXT_VAULT_IO_BALANCE_DIFF,
Expand Down Expand Up @@ -220,19 +221,22 @@ contract RaindexV6 is IRaindexV6, IMetaV1_2, ReentrancyGuard, Multicall, Raindex
emit WithdrawV2(msg.sender, token, vaultId, targetAmount, withdrawAmount, withdrawAmountUint256);
}

bytes32[] memory contextColumn = LibBytes32Array.arrayFrom(
bytes32(uint256(uint160(token))),
vaultId,
Float.unwrap(beforeBalance),
Float.unwrap(afterBalance),
Float.unwrap(targetAmount),
bytes32(uint256(decimals))
);

bytes32[][] memory context = LibBytes32Matrix.matrixFrom(contextColumn);

if (post.length != 0) {
LibRaindex.doPost(context, post);
LibRaindex.doPost(
LibRaindex.callingContextColumn(
CONTEXT_WITHDRAW_COLUMN,
LibBytes32Array.arrayFrom(
bytes32(uint256(uint160(token))),
vaultId,
Float.unwrap(beforeBalance),
Float.unwrap(afterBalance),
Float.unwrap(targetAmount),
bytes32(uint256(decimals)),
bytes32(uint256(uint160(msg.sender)))
)
),
post
);
}
}

Expand Down
10 changes: 5 additions & 5 deletions src/generated/RaindexV6SubParserPointers.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ pragma solidity ^0.8.25;
// THIS FILE IS AUTOGENERATED BY THE BUILD SCRIPT. DO NOT EDIT BY HAND.

/// @dev Hash of the known bytecode.
bytes32 constant BYTECODE_HASH = bytes32(0x1229c3e90ccea550ef1fb1a77f54ff7b8b3339800da312a645093454b964a007);
bytes32 constant BYTECODE_HASH = bytes32(0xabceaad67b2bfb22234dced976036095d341129762d317512657852774711ece);

/// @dev The hash of the meta that describes the contract.
bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0x7e92d4e954f131b7ce6471bc48157dc3125be0b90c8c9e26855b88218d95eb20);
bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0xa18bcfb6026768fff923ba3f6d2ab7c37c7a6ab3f226e540ca92278af8d56f2c);

/// @dev The parse meta that is used to lookup word definitions.
/// The structure of the parse meta is:
Expand All @@ -27,7 +27,7 @@ bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0x7e92d4e954f131b7ce6471bc4815
/// bit count of the previous bloom filter. If we reach the end of the bloom
/// filters then we have a miss.
bytes constant PARSE_META =
hex"0101180010800082000100010480300038412a001810000010020004200004002038038ff54900cc66c61ff3dcab0616592209895f0b14fec9301b02e0920c5bfe561d21609201e959460b1974270f844db208bcd3bf1e989376171049db11b934301a0ae9a00af82a7805c138f40d28083f0742ef2104d561fd1215a13315716a6119d260cc107b9bfc0eec7ade13cba2891c6b14a518792bdb02e0f14716565589";
hex"0101180010800082000100010480300038412a001810000010020004200004002038038ff54900cc66c61df3dcab0616592209895f0b14fec9301902e0920c5bfe561b21609201e959460b1974270f844db208bcd3bf1c9893761e1049db11b93430180ae9a00af82a7805c138f40d28083f0742ef2104d561fd1215a13315716a6117d260cc107b9bfc0eec7ade13cba2891a6b14a51f792bdb02e0f14716565589";

/// @dev The build depth of the parser meta.

Expand All @@ -39,13 +39,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"170617231732174117501760176f177f178e179e17ae17bd17cd17dc17ec17fc180c1880188f189e18ae18be18ce181b1834170617321741175018de18ee18fe";
hex"16ee170b171a1729173817481757176717761786179617a517b517c417d417e417f4186818771886189618a618b618c618d518e418f41904191419241803181c";

/// @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"1ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51ca51cce1d6a1ca51ca51ca51ca51ca51ca51ca5";
hex"1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1ccb1cf41d90";

/// @dev Every two bytes is a function pointer for a literal parser.
/// Literal dispatches are determined by the first byte(s) of the literal
Expand Down
10 changes: 5 additions & 5 deletions src/generated/candidate/GenericPoolRaindexV6ArbOrderTaker.sol

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions src/generated/candidate/GenericPoolRaindexV6FlashBorrower.sol

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions src/generated/candidate/RaindexV6.sol

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions src/generated/candidate/RaindexV6SubParser.sol

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions src/generated/candidate/RouteProcessorRaindexV6ArbOrderTaker.sol

Large diffs are not rendered by default.

13 changes: 7 additions & 6 deletions src/lib/LibRaindex.sol
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ import {LibContext} from "rainlang-interface-0.2.13/src/lib/caller/LibContext.so
/// Each entrypoint fills only its own columns and leaves the rest empty, so a
/// word read outside the entrypoints that fill its cell reverts out of bounds
/// instead of reading another entrypoint's value.
uint256 constant CALLING_CONTEXT_COLUMNS = 5;
uint256 constant CALLING_CONTEXT_COLUMNS = 6;

uint256 constant CONTEXT_COLUMNS = CALLING_CONTEXT_COLUMNS + 1;

/// @dev Number of sub parser word tables: one per context column up to and
/// including the first signed context column, plus the withdraw table.
uint256 constant CONTEXT_COLUMNS_EXTENDED = CONTEXT_SIGNED_CONTEXT_START_COLUMN + 2;
/// @dev Number of sub parser word tables, one per context column up to and
/// including the first signed context column.
uint256 constant CONTEXT_COLUMNS_EXTENDED = CONTEXT_SIGNED_CONTEXT_START_COLUMN + 1;

/// @dev Contextual data available to both calculate order and handle IO. The
/// order hash, order owner and order counterparty. IMPORTANT NOTE that the
Expand All @@ -50,14 +50,15 @@ uint256 constant CONTEXT_CALLING_CONTEXT_ROW_DEPOSIT_VAULT_AFTER = 3;
uint256 constant CONTEXT_CALLING_CONTEXT_ROW_DEPOSIT_TOKEN_DECIMALS = 4;
uint256 constant CONTEXT_CALLING_CONTEXT_ROW_DEPOSIT_DEPOSITOR = 5;

/// @dev Context rows for the withdraw calling context column. Available to the
/// withdraw post-action entrypoint.
/// @dev Withdraw column. Filled only for withdraw tasks.
uint256 constant CONTEXT_WITHDRAW_COLUMN = 6;
uint256 constant CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_TOKEN = 0;
uint256 constant CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_VAULT_ID = 1;
uint256 constant CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_VAULT_BEFORE = 2;
uint256 constant CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_VAULT_AFTER = 3;
uint256 constant CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_TARGET_AMOUNT = 4;
uint256 constant CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_TOKEN_DECIMALS = 5;
uint256 constant CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_WITHDRAWER = 6;

/// @dev Calculations column contains the DECIMAL RESCALED calculations but
/// otherwise provided as-is according to calculate order entrypoint
Expand Down
54 changes: 28 additions & 26 deletions src/lib/LibRaindexSubParser.sol
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ import {
CONTEXT_SIGNED_CONTEXT_START_ROWS,
CONTEXT_DEPOSIT_COLUMN,
CONTEXT_CALLING_CONTEXT_ROW_DEPOSIT_DEPOSITOR,
CONTEXT_WITHDRAW_COLUMN,
CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_WITHDRAWER,
CONTEXT_CALLING_CONTEXT_ROW_DEPOSIT_TOKEN,
CONTEXT_CALLING_CONTEXT_ROW_DEPOSIT_VAULT_ID,
CONTEXT_CALLING_CONTEXT_ROW_DEPOSIT_VAULT_BEFORE,
Expand Down Expand Up @@ -126,6 +128,16 @@ library LibRaindexSubParser {
return LibSubParse.subParserContext(CONTEXT_DEPOSIT_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_DEPOSIT_DEPOSITOR);
}

/// @dev Maps the "withdrawer" word to the withdraw column.
function subParserWithdrawer(uint256, uint256, OperandV2)
internal
pure
returns (bool, bytes memory, bytes32[] memory)
{
//slither-disable-next-line unused-return
return LibSubParse.subParserContext(CONTEXT_WITHDRAW_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_WITHDRAWER);
}

/// @dev Maps the "calling-contract" word to the base context column.
function subParserCallingContract(uint256, uint256, OperandV2)
internal
Expand Down Expand Up @@ -348,75 +360,65 @@ library LibRaindexSubParser {
return LibSubParse.subParserContext(CONTEXT_DEPOSIT_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_DEPOSIT_TOKEN_DECIMALS);
}

/// @dev Maps the "withdraw-token" word to the calling context column.
/// @dev Maps the "withdraw-token" word to the withdraw column.
function subParserWithdrawToken(uint256, uint256, OperandV2)
internal
pure
returns (bool, bytes memory, bytes32[] memory)
{
//slither-disable-next-line unused-return
return LibSubParse.subParserContext(CONTEXT_CALLING_CONTEXT_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_TOKEN);
return LibSubParse.subParserContext(CONTEXT_WITHDRAW_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_TOKEN);
}

/// @dev Maps the "withdraw-vault-id" word to the calling context column.
/// @dev Maps the "withdraw-vault-id" word to the withdraw column.
function subParserWithdrawVaultId(uint256, uint256, OperandV2)
internal
pure
returns (bool, bytes memory, bytes32[] memory)
{
//slither-disable-next-line unused-return
return
LibSubParse.subParserContext(CONTEXT_CALLING_CONTEXT_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_VAULT_ID);
return LibSubParse.subParserContext(CONTEXT_WITHDRAW_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_VAULT_ID);
}

/// @dev Maps the "withdraw-vault-balance-before" word to the calling context column.
/// @dev Maps the "withdraw-vault-balance-before" word to the withdraw column.
function subParserWithdrawVaultBalanceBefore(uint256, uint256, OperandV2)
internal
pure
returns (bool, bytes memory, bytes32[] memory)
{
//slither-disable-next-line unused-return
return
LibSubParse.subParserContext(
CONTEXT_CALLING_CONTEXT_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_VAULT_BEFORE
);
return LibSubParse.subParserContext(CONTEXT_WITHDRAW_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_VAULT_BEFORE);
}

/// @dev Maps the "withdraw-vault-balance-after" word to the calling context column.
/// @dev Maps the "withdraw-vault-balance-after" word to the withdraw column.
function subParserWithdrawVaultBalanceAfter(uint256, uint256, OperandV2)
internal
pure
returns (bool, bytes memory, bytes32[] memory)
{
//slither-disable-next-line unused-return
return
LibSubParse.subParserContext(
CONTEXT_CALLING_CONTEXT_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_VAULT_AFTER
);
return LibSubParse.subParserContext(CONTEXT_WITHDRAW_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_VAULT_AFTER);
}

/// @dev Maps the "withdraw-target-amount" word to the calling context column.
/// @dev Maps the "withdraw-target-amount" word to the withdraw column.
function subParserWithdrawTargetAmount(uint256, uint256, OperandV2)
internal
pure
returns (bool, bytes memory, bytes32[] memory)
{
//slither-disable-next-line unused-return
return LibSubParse.subParserContext(
CONTEXT_CALLING_CONTEXT_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_TARGET_AMOUNT
);
return LibSubParse.subParserContext(CONTEXT_WITHDRAW_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_TARGET_AMOUNT);
}

/// @dev Maps the "withdraw-token-decimals" word to the calling context column.
/// @dev Maps the "withdraw-token-decimals" word to the withdraw column.
function subParserWithdrawTokenDecimals(uint256, uint256, OperandV2)
internal
pure
returns (bool, bytes memory, bytes32[] memory)
{
//slither-disable-next-line unused-return
return LibSubParse.subParserContext(
CONTEXT_CALLING_CONTEXT_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_TOKEN_DECIMALS
);
return
LibSubParse.subParserContext(CONTEXT_WITHDRAW_COLUMN, CONTEXT_CALLING_CONTEXT_ROW_WITHDRAW_TOKEN_DECIMALS);
}

/// @dev Maps the "signed-context" word to a signed context column/row.
Expand All @@ -434,8 +436,8 @@ library LibRaindexSubParser {

/// @dev Builds the complete authoring metadata for all raindex context
/// words. Returns ABI-encoded `AuthoringMetaV2[]` covering every context
/// column (base, calling, calculations, vault IO, deposit, signers, signed
/// context, withdraw). The inner arrays are flattened before encoding.
/// column (base, calling, calculations, vault IO, deposit, withdraw,
/// signers, signed context). The inner arrays are flattened before encoding.
//slither-disable-next-line dead-code
function authoringMetaV2() internal pure returns (bytes memory) {
AuthoringMetaV2[][] memory meta = new AuthoringMetaV2[][](CONTEXT_COLUMNS_EXTENDED);
Expand Down Expand Up @@ -660,7 +662,7 @@ library LibRaindexSubParser {
// forge-lint: disable-next-line(unsafe-typecast)
AuthoringMetaV2(bytes32(WORD_WITHDRAW_TOKEN_DECIMALS), "The decimals of the token that is being withdrawn.");

meta[CONTEXT_SIGNED_CONTEXT_START_COLUMN + 1] = withdrawMeta;
meta[CONTEXT_WITHDRAW_COLUMN] = withdrawMeta;

uint256[][] memory metaUint256;
assembly {
Expand Down
29 changes: 13 additions & 16 deletions test/concrete/parser/RaindexV6SubParser.operandHandlersWiring.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ import {RaindexV6SubParser} from "../../../src/concrete/parser/RaindexV6SubParse
/// (base / calling / calculations / vault-in / vault-out / deposit / withdraw)
/// is wired to the SAME `LibParseOperand.handleOperandDisallowed` function, so
/// those slots all share one 16-bit pointer. Only TWO slots are different:
/// - signers (column 6, row 0) -> `handleOperandSingleFullNoDefault`
/// - signed-context (column 7, row 0) -> `handleOperandDoublePerByteNoDefault`
/// - signers (column 7, row 0) -> `handleOperandSingleFullNoDefault`
/// - signed-context (column 8, row 0) -> `handleOperandDoublePerByteNoDefault`
/// Because the build function is a freshly compiled `external pure`, this test
/// runs against a fresh deployment WITHOUT etching or pointer regeneration. The
/// absolute pointer values are unstable across source edits (solc reorders its
Expand All @@ -25,7 +25,7 @@ import {RaindexV6SubParser} from "../../../src/concrete/parser/RaindexV6SubParse
/// deterministically covers the operand-handler outer length, the column
/// assignments, and the deposit/withdraw column offsets: any of those mutations
/// changes the table length and/or relocates the two distinct handler pointers
/// off slots 23/24.
/// off slots 30/31.
contract RaindexV6SubParserOperandHandlersWiringTest is Test {
RaindexV6SubParser internal subParser;

Expand All @@ -40,12 +40,12 @@ contract RaindexV6SubParserOperandHandlersWiringTest is Test {
// col 3 vault inputs (5 rows) -> 7..11
// col 4 vault outputs (5 rows) -> 12..16
// col 5 deposit (6 rows) -> 17..22
// col 6 signers (1 row) -> 23
// col 7 signed context (1 row) -> 24
// col 8 withdraw (7 rows) -> 25..31
// col 6 withdraw (7 rows) -> 23..29
// col 7 signers (1 row) -> 30
// col 8 signed context (1 row) -> 31
uint256 internal constant TABLE_SLOTS = 32;
uint256 internal constant SLOT_SIGNERS = 23;
uint256 internal constant SLOT_SIGNED_CONTEXT = 24;
uint256 internal constant SLOT_SIGNERS = 30;
uint256 internal constant SLOT_SIGNED_CONTEXT = 31;

/// @dev Read the big-endian 16-bit function pointer at flat `slot` from the
/// freshly built operand-handler table, asserting the table is the expected
Expand All @@ -64,8 +64,8 @@ contract RaindexV6SubParserOperandHandlersWiringTest is Test {
pointerAt(0);
}

/// Every slot before signers (base through deposit) is the shared
/// disallowed pointer; the signers slot (column 6, row 0) differs.
/// Every slot before signers (base through withdraw) is the shared
/// disallowed pointer; the signers slot (column 7, row 0) differs.
function testSignersOperandHandlerIsDistinct() external view {
uint16 disallowed = pointerAt(0);
for (uint256 slot = 0; slot < SLOT_SIGNERS; slot++) {
Expand All @@ -74,7 +74,7 @@ contract RaindexV6SubParserOperandHandlersWiringTest is Test {
assertTrue(pointerAt(SLOT_SIGNERS) != disallowed, "signers handler must differ from handleOperandDisallowed");
}

/// The signed-context handler (column 7, row 0) differs from both the
/// The signed-context handler (column 8, row 0) differs from both the
/// disallowed default and the signers handler.
function testSignedContextOperandHandlerIsDistinct() external view {
uint16 disallowed = pointerAt(0);
Expand All @@ -88,15 +88,12 @@ contract RaindexV6SubParserOperandHandlersWiringTest is Test {
);
}

/// Every deposit (slots 17..22) and withdraw (slots 25..31) slot is the
/// Every deposit (slots 17..22) and withdraw (slots 23..29) slot is the
/// shared disallowed pointer.
function testDepositWithdrawOperandHandlersAllDisallowed() external view {
uint16 disallowed = pointerAt(0);
for (uint256 slot = 17; slot < SLOT_SIGNERS; slot++) {
assertEq(pointerAt(slot), disallowed, "deposit operand slot uses handleOperandDisallowed");
}
for (uint256 slot = SLOT_SIGNED_CONTEXT + 1; slot < TABLE_SLOTS; slot++) {
assertEq(pointerAt(slot), disallowed, "withdraw operand slot uses handleOperandDisallowed");
assertEq(pointerAt(slot), disallowed, "deposit/withdraw operand slot uses handleOperandDisallowed");
}
}
}
Loading
Loading