Skip to content

Commit

Permalink
refactored and added assume !=Sentinel
Browse files Browse the repository at this point in the history
  • Loading branch information
Erikd-dev committed Aug 10, 2024
1 parent 2984625 commit c53362d
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 28 deletions.
23 changes: 2 additions & 21 deletions test/abstract/FlowBasicTest.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,11 @@
pragma solidity ^0.8.18;

import {Vm} from "forge-std/Test.sol";
import {
FlowUtilsAbstractTest,
ERC1155Transfer,
ERC721Transfer,
ERC20Transfer
} from "test/abstract/FlowUtilsAbstractTest.sol";
import {FlowUtilsAbstractTest} from "test/abstract/FlowUtilsAbstractTest.sol";
import {InterpreterMockTest} from "test/abstract/InterpreterMockTest.sol";
import {IFlowV5} from "src/interface/unstable/IFlowV5.sol";
import {Flow} from "src/concrete/basic/Flow.sol";
import {EvaluableConfigV3, SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV2.sol";
import {EvaluableConfigV3} from "rain.interpreter.interface/interface/IInterpreterCallerV2.sol";
import {STUB_EXPRESSION_BYTECODE} from "./TestConstants.sol";
import {EvaluableV2} from "rain.interpreter.interface/lib/caller/LibEvaluable.sol";
import {CloneFactory} from "rain.factory/src/concrete/CloneFactory.sol";
Expand All @@ -38,18 +33,4 @@ abstract contract FlowBasicTest is FlowUtilsAbstractTest, InterpreterMockTest {
Vm.Log memory concreteEvent = findEvent(logs, keccak256("FlowInitialized(address,(address,address,address))"));
(, evaluable) = abi.decode(concreteEvent.data, (address, EvaluableV2));
}

function performFlow(
IFlowV5 flow,
EvaluableV2 memory evaluable,
ERC20Transfer[] memory erc20Transfers,
ERC721Transfer[] memory erc721Transfers,
ERC1155Transfer[] memory erc1155Transfers
) internal {
vm.pauseGasMetering();
uint256[] memory stack = generateTokenTransferStack(erc1155Transfers, erc721Transfers, erc20Transfers);
interpreterEval2MockCall(stack, new uint256[](0));
vm.resumeGasMetering();
flow.flow(evaluable, new uint256[](0), new SignedContextV1[](0));
}
}
18 changes: 12 additions & 6 deletions test/abstract/FlowUtilsAbstractTest.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,25 @@ import {ERC20Transfer, ERC721Transfer, ERC1155Transfer, RAIN_FLOW_SENTINEL} from
import {Sentinel} from "rain.solmem/lib/LibStackSentinel.sol";

abstract contract FlowUtilsAbstractTest is Test {
uint256 internal immutable sentinel;

constructor() {
vm.pauseGasMetering();
sentinel = Sentinel.unwrap(RAIN_FLOW_SENTINEL);
vm.resumeGasMetering();
}

function generateTokenTransferStack(
ERC1155Transfer[] memory erc1155Transfers,
ERC721Transfer[] memory erc721Transfers,
ERC20Transfer[] memory erc20Transfers
) internal pure returns (uint256[] memory stack) {
) internal view returns (uint256[] memory stack) {
uint256 totalItems =
1 + (erc1155Transfers.length * 5) + 1 + (erc721Transfers.length * 4) + 1 + (erc20Transfers.length * 4);
stack = new uint256[](totalItems);
uint256 index = 0;

uint256 separator = Sentinel.unwrap(RAIN_FLOW_SENTINEL);

stack[index++] = separator;
stack[index++] = sentinel;
for (uint256 i = 0; i < erc1155Transfers.length; i++) {
stack[index++] = uint256(uint160(erc1155Transfers[i].token));
stack[index++] = uint256(uint160(erc1155Transfers[i].from));
Expand All @@ -27,15 +33,15 @@ abstract contract FlowUtilsAbstractTest is Test {
stack[index++] = erc1155Transfers[i].amount;
}

stack[index++] = separator;
stack[index++] = sentinel;
for (uint256 i = 0; i < erc721Transfers.length; i++) {
stack[index++] = uint256(uint160(erc721Transfers[i].token));
stack[index++] = uint256(uint160(erc721Transfers[i].from));
stack[index++] = uint256(uint160(erc721Transfers[i].to));
stack[index++] = erc721Transfers[i].id;
}

stack[index++] = separator;
stack[index++] = sentinel;
for (uint256 i = 0; i < erc20Transfers.length; i++) {
stack[index++] = uint256(uint160(erc20Transfers[i].token));
stack[index++] = uint256(uint160(erc20Transfers[i].from));
Expand Down
12 changes: 11 additions & 1 deletion test/concrete/flowBasic/FlowTest.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {IFlowV5, ERC20Transfer, ERC721Transfer, ERC1155Transfer} from "src/inter
import {EvaluableV2} from "rain.interpreter.interface/lib/caller/LibEvaluable.sol";
import {IERC1155} from "openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol";
import {REVERTING_MOCK_BYTECODE} from "test/abstract/TestConstants.sol";
import {EvaluableConfigV3, SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV2.sol";

contract FlowTest is FlowBasicTest {
address internal immutable iERC721;
Expand All @@ -28,6 +29,11 @@ contract FlowTest is FlowBasicTest {
uint256 erc1155OutAmmount
) external {
vm.assume(alice != address(0));
vm.assume(sentinel != uint256(uint160(alice)));
vm.assume(sentinel != erc721InTokenId);
vm.assume(sentinel != erc1155OutTokenId);
vm.assume(sentinel != erc1155OutAmmount);

vm.label(alice, "Alice");

(IFlowV5 flow, EvaluableV2 memory evaluable) = deployFlow();
Expand Down Expand Up @@ -73,8 +79,12 @@ contract FlowTest is FlowBasicTest {
)
);

uint256[] memory stack = generateTokenTransferStack(erc1155Transfers, erc721Transfers, new ERC20Transfer[](0));

interpreterEval2MockCall(stack, new uint256[](0));

vm.startPrank(alice);
performFlow(flow, evaluable, new ERC20Transfer[](0), erc721Transfers, erc1155Transfers);
flow.flow(evaluable, new uint256[](0), new SignedContextV1[](0));
vm.stopPrank();
}
}

0 comments on commit c53362d

Please sign in to comment.