Skip to content

Commit

Permalink
feat!: proposal events prefixed with swap type as <T>Proposal (#48)
Browse files Browse the repository at this point in the history
  • Loading branch information
ARR4N authored Oct 29, 2024
1 parent 78e2c41 commit ae13269
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 12 deletions.
8 changes: 5 additions & 3 deletions src/TMPL/TMPLSwapperDeployer.tmpl.sol
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,11 @@ abstract contract TMPLSwapperDeployer is TMPLSwapperPredictor, ETDeployer, Swapp
}
}

abstract contract TMPLSwapperProposer is TMPLSwapperPredictor, SwapperProposerBase {
event Proposal(address indexed swapper, address indexed seller, address indexed buyer, TMPLSwap, bytes32 salt);
interface ITMPLSwapperProposerEvents {
event TMPLProposal(address indexed swapper, address indexed seller, address indexed buyer, TMPLSwap, bytes32 salt);
}

abstract contract TMPLSwapperProposer is TMPLSwapperPredictor, ITMPLSwapperProposerEvents, SwapperProposerBase {
/**
* @notice "Announces" a propsed swap (in the form of a `Proposal` event), using the last block's hash as the salt
* for the predicted swapper address.
Expand All @@ -87,7 +89,7 @@ abstract contract TMPLSwapperProposer is TMPLSwapperPredictor, SwapperProposerBa
bytes32 salt = blockhash(block.number - 1);
(address deployer, uint256 chainId) = _swapperDeployer();
address swapper_ = _swapper(swap, salt, deployer, chainId);
emit Proposal(swapper_, swap.parties.seller, swap.parties.buyer, swap, salt);
emit TMPLProposal(swapper_, swap.parties.seller, swap.parties.buyer, swap, salt);
return (salt, swapper_);
}

Expand Down
12 changes: 10 additions & 2 deletions test/ERC721ForERC20.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,16 @@ import {ERC20Test} from "./ERC20Test.t.sol";

import {ERC721TransferLib} from "../src/ERC721TransferLib.sol";
import {ERC721ForERC20Swap} from "../src/ERC721ForERC20/ERC721ForERC20Swap.sol";
import {ERC721ForERC20SwapperDeployer} from "../src/ERC721ForERC20/ERC721ForERC20SwapperDeployer.gen.sol";
import {
ERC721ForERC20SwapperDeployer,
IERC721ForERC20SwapperProposerEvents
} from "../src/ERC721ForERC20/ERC721ForERC20SwapperDeployer.gen.sol";
import {InsufficientBalance, Parties} from "../src/TypesAndConstants.sol";

import {IERC721Errors} from "@openzeppelin/contracts/interfaces/draft-IERC6093.sol";

/// @dev Couples an `ERC721ForXTest` with an `ERC20Test` to test swapping of an ERC721 for ERC20 tokens.
contract ERC721ForERC20Test is ERC721ForXTest, ERC20Test {
contract ERC721ForERC20Test is IERC721ForERC20SwapperProposerEvents, ERC721ForXTest, ERC20Test {
using SwapperTestLib for TestCase;

function setUp() public override(SwapperTestBase, ERC20Test) {
Expand Down Expand Up @@ -61,6 +64,11 @@ contract ERC721ForERC20Test is ERC721ForXTest, ERC20Test {
return ERC721ForERC20SwapperDeployer.cancelERC721ForERC20.selector;
}

/// @inheritdoc ERC721ForXTest
function _proposalEventTopic() internal pure override returns (bytes32) {
return ERC721ForERC20Proposal.selector;
}

/// @inheritdoc ERC721ForXTest
function _fill(ERC721TestCase memory t) internal override {
factory.fillERC721ForERC20(_asSwap(t), t.base.salt);
Expand Down
12 changes: 10 additions & 2 deletions test/ERC721ForNative.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,16 @@ import {NativeTokenTest} from "./NativeTokenTest.t.sol";

import {ERC721TransferLib} from "../src/ERC721TransferLib.sol";
import {ERC721ForNativeSwap} from "../src/ERC721ForNative/ERC721ForNativeSwap.sol";
import {ERC721ForNativeSwapperDeployer} from "../src/ERC721ForNative/ERC721ForNativeSwapperDeployer.gen.sol";
import {
ERC721ForNativeSwapperDeployer,
IERC721ForNativeSwapperProposerEvents
} from "../src/ERC721ForNative/ERC721ForNativeSwapperDeployer.gen.sol";
import {InsufficientBalance, Parties} from "../src/TypesAndConstants.sol";

import {IERC721Errors} from "@openzeppelin/contracts/interfaces/draft-IERC6093.sol";

/// @dev Couples an `ERC721ForXTest` with a `NativeTokenTest` to test swapping of an ERC721 for native token.
contract ERC721ForNativeTest is ERC721ForXTest, NativeTokenTest {
contract ERC721ForNativeTest is IERC721ForNativeSwapperProposerEvents, ERC721ForXTest, NativeTokenTest {
using SwapperTestLib for TestCase;

/**
Expand Down Expand Up @@ -56,6 +59,11 @@ contract ERC721ForNativeTest is ERC721ForXTest, NativeTokenTest {
return ERC721ForNativeSwapperDeployer.cancelERC721ForNative.selector;
}

/// @inheritdoc ERC721ForXTest
function _proposalEventTopic() internal pure override returns (bytes32) {
return ERC721ForNativeProposal.selector;
}

/// @inheritdoc ERC721ForXTest
function _fill(ERC721TestCase memory t) internal override {
_fill(t, t.base.native.callValue);
Expand Down
5 changes: 5 additions & 0 deletions test/ERC721ForXTest.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ abstract contract ERC721ForXTest is SwapperTestBase {

function _cancelSelector() internal pure virtual returns (bytes4);

function _proposalEventTopic() internal pure virtual returns (bytes32);

function _callDataToFill(ERC721TestCase memory t) internal view returns (bytes memory) {
return abi.encodePacked(_fillSelector(), _encodedSwapAndSalt(t, t.base.salt));
}
Expand Down Expand Up @@ -284,6 +286,9 @@ abstract contract ERC721ForXTest is SwapperTestBase {
{
Vm.Log[] memory logs = vm.getRecordedLogs();
assertEq(logs.length, 1, "# logged events");
assertEq(
logs[0].topics[0], _proposalEventTopic(), "logged topic-0 matches swap-type-specific proposal event"
);
assertEq(logs[0].topics[1], bytes32(abi.encode(swapper)), "logged and returned swapper addresses match");
assertEq(logs[0].topics[2], bytes32(abi.encode(t.base.seller())), "seller logged");
assertEq(logs[0].topics[3], bytes32(abi.encode(t.base.buyer())), "buyer logged");
Expand Down
12 changes: 10 additions & 2 deletions test/MultiERC721ForERC20.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ import {ERC20Test} from "./ERC20Test.t.sol";

import {ERC721TransferLib} from "../src/ERC721TransferLib.sol";
import {MultiERC721ForERC20Swap} from "../src/MultiERC721ForERC20/MultiERC721ForERC20Swap.sol";
import {MultiERC721ForERC20SwapperDeployer} from "../src/MultiERC721ForERC20/MultiERC721ForERC20SwapperDeployer.gen.sol";
import {
MultiERC721ForERC20SwapperDeployer,
IMultiERC721ForERC20SwapperProposerEvents
} from "../src/MultiERC721ForERC20/MultiERC721ForERC20SwapperDeployer.gen.sol";
import {InsufficientBalance, Parties} from "../src/TypesAndConstants.sol";

import {IERC721Errors} from "@openzeppelin/contracts/interfaces/draft-IERC6093.sol";
Expand All @@ -18,7 +21,7 @@ import {IERC721Errors} from "@openzeppelin/contracts/interfaces/draft-IERC6093.s
* @dev Couples an `ERC721ForXTest` with an `ERC20Test` to test swapping of an ERC721 for ERC20 tokens, but using the
* MultiERC721 swapper.
*/
contract MultiERC721ForERC20Test is ERC721ForXTest, ERC20Test {
contract MultiERC721ForERC20Test is IMultiERC721ForERC20SwapperProposerEvents, ERC721ForXTest, ERC20Test {
using SwapperTestLib for TestCase;

function setUp() public override(SwapperTestBase, ERC20Test) {
Expand Down Expand Up @@ -69,6 +72,11 @@ contract MultiERC721ForERC20Test is ERC721ForXTest, ERC20Test {
return MultiERC721ForERC20SwapperDeployer.cancelMultiERC721ForERC20.selector;
}

/// @inheritdoc ERC721ForXTest
function _proposalEventTopic() internal pure override returns (bytes32) {
return MultiERC721ForERC20Proposal.selector;
}

/// @inheritdoc ERC721ForXTest
function _fill(ERC721TestCase memory t) internal override {
factory.fillMultiERC721ForERC20(_asSwap(t), t.base.salt);
Expand Down
13 changes: 10 additions & 3 deletions test/MultiERC721ForNative.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ import {NativeTokenTest} from "./NativeTokenTest.t.sol";

import {ERC721TransferLib} from "../src/ERC721TransferLib.sol";
import {MultiERC721ForNativeSwap} from "../src/MultiERC721ForNative/MultiERC721ForNativeSwap.sol";
import {MultiERC721ForNativeSwapperDeployer} from
"../src/MultiERC721ForNative/MultiERC721ForNativeSwapperDeployer.gen.sol";
import {
MultiERC721ForNativeSwapperDeployer,
IMultiERC721ForNativeSwapperProposerEvents
} from "../src/MultiERC721ForNative/MultiERC721ForNativeSwapperDeployer.gen.sol";
import {InsufficientBalance, Parties} from "../src/TypesAndConstants.sol";

import {IERC721Errors} from "@openzeppelin/contracts/interfaces/draft-IERC6093.sol";
Expand All @@ -19,7 +21,7 @@ import {IERC721Errors} from "@openzeppelin/contracts/interfaces/draft-IERC6093.s
* @dev Couples an `ERC721ForXTest` with a `NativeTokenTest` to test swapping of an ERC721 for ERC20 tokens, but using
* the MultiERC721 swapper.
*/
contract MultiERC721ForNativeTest is ERC721ForXTest, NativeTokenTest {
contract MultiERC721ForNativeTest is IMultiERC721ForNativeSwapperProposerEvents, ERC721ForXTest, NativeTokenTest {
using SwapperTestLib for TestCase;

/**
Expand Down Expand Up @@ -65,6 +67,11 @@ contract MultiERC721ForNativeTest is ERC721ForXTest, NativeTokenTest {
return MultiERC721ForNativeSwapperDeployer.cancelMultiERC721ForNative.selector;
}

/// @inheritdoc ERC721ForXTest
function _proposalEventTopic() internal pure override returns (bytes32) {
return MultiERC721ForNativeProposal.selector;
}

/// @inheritdoc ERC721ForXTest
function _fill(ERC721TestCase memory t) internal override {
_fill(t, t.base.native.callValue);
Expand Down

0 comments on commit ae13269

Please sign in to comment.