Skip to content

Commit

Permalink
perf: <T>SwapperDeployer accepts structs as calldata to reduce me…
Browse files Browse the repository at this point in the history
…mory/gas (#10)
  • Loading branch information
ARR4N authored May 15, 2024
1 parent 1d23911 commit 06596c2
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 33 deletions.
56 changes: 28 additions & 28 deletions .gas-snapshot
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
ERC721ForERC20Test:testCancel((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address,bool) (runs: 257, μ: 8937393460516571440, ~: 8937393460516583868)
ERC721ForERC20Test:testExcessPlatformFee((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 375287, ~: 346216)
ERC721ForERC20Test:testGas() (gas: 285824)
ERC721ForERC20Test:testHappyPath((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 393914, ~: 374830)
ERC721ForERC20Test:testInsufficientBalance((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 258, μ: 385178, ~: 368820)
ERC721ForERC20Test:testNotApproved((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 321941, ~: 311523)
ERC721ForERC20Test:testReplayProtection((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address) (runs: 256, μ: 8937393460516572906, ~: 8937393460516581026)
ERC721ForNativeTest:testCancel((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address,bool) (runs: 260, μ: 8937393460516616514, ~: 8937393460516630279)
ERC721ForNativeTest:testExcessPlatformFee((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 302922, ~: 283778)
ERC721ForNativeTest:testGas() (gas: 251830)
ERC721ForNativeTest:testHappyPath((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 339764, ~: 339258)
ERC721ForNativeTest:testInsufficientBalance((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 257, μ: 314952, ~: 303097)
ERC721ForNativeTest:testNotApproved((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 257, μ: 256788, ~: 249007)
ERC721ForNativeTest:testReplayProtection((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address) (runs: 256, μ: 8937393460516575204, ~: 8937393460516579477)
ERC721ForERC20Test:testCancel((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address,bool) (runs: 259, μ: 8937393460516570493, ~: 8937393460516583634)
ERC721ForERC20Test:testExcessPlatformFee((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 371973, ~: 344490)
ERC721ForERC20Test:testGas() (gas: 284156)
ERC721ForERC20Test:testHappyPath((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 393730, ~: 373222)
ERC721ForERC20Test:testInsufficientBalance((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 383887, ~: 366969)
ERC721ForERC20Test:testNotApproved((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 319193, ~: 308983)
ERC721ForERC20Test:testReplayProtection((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address) (runs: 256, μ: 8937393460516572932, ~: 8937393460516580949)
ERC721ForNativeTest:testCancel((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address,bool) (runs: 261, μ: 8937393460516616172, ~: 8937393460516629874)
ERC721ForNativeTest:testExcessPlatformFee((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 301854, ~: 282206)
ERC721ForNativeTest:testGas() (gas: 249923)
ERC721ForNativeTest:testHappyPath((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 258, μ: 337958, ~: 337637)
ERC721ForNativeTest:testInsufficientBalance((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 314414, ~: 303452)
ERC721ForNativeTest:testNotApproved((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 257, μ: 254354, ~: 246744)
ERC721ForNativeTest:testReplayProtection((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address) (runs: 257, μ: 8937393460516574888, ~: 8937393460516579376)
ERC721SwapperLibTest:testMultiERC721TokenTransfer(address[5],uint256[5][5],(address,address)) (runs: 261, μ: 1058029, ~: 1058029)
ETTest:testArbitraryRevert(bytes32) (runs: 263, μ: 43770, ~: 43770)
ETTest:testPhoneHome(bytes32,bytes32) (runs: 263, μ: 52212, ~: 52212)
ETTest:testRecreateRevert(bytes32,bytes32,bytes32[5]) (runs: 263, μ: 9223372028659688781, ~: 9223372028659687920)
ETTest:testValueSend(address,bytes32,bytes32,uint256) (runs: 263, μ: 60155, ~: 60487)
MultiERC721ForERC20Test:testCancel((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address,bool) (runs: 259, μ: 8937393460516572333, ~: 8937393460516584267)
MultiERC721ForERC20Test:testExcessPlatformFee((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 257, μ: 378860, ~: 351835)
MultiERC721ForERC20Test:testGas() (gas: 291588)
MultiERC721ForERC20Test:testHappyPath((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 397878, ~: 380637)
MultiERC721ForERC20Test:testInsufficientBalance((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 392234, ~: 358327)
MultiERC721ForERC20Test:testNotApproved((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 329158, ~: 319371)
MultiERC721ForERC20Test:testReplayProtection((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address) (runs: 256, μ: 8937393460516572586, ~: 8937393460516581249)
MultiERC721ForNativeTest:testCancel((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address,bool) (runs: 261, μ: 8937393460516616009, ~: 8937393460516630322)
MultiERC721ForNativeTest:testExcessPlatformFee((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 257, μ: 309208, ~: 289557)
MultiERC721ForNativeTest:testGas() (gas: 259041)
MultiERC721ForNativeTest:testHappyPath((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 258, μ: 344447, ~: 345028)
MultiERC721ForNativeTest:testInsufficientBalance((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 322824, ~: 308885)
MultiERC721ForNativeTest:testNotApproved((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 257, μ: 264943, ~: 256897)
MultiERC721ForNativeTest:testReplayProtection((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address) (runs: 258, μ: 8937393460516574318, ~: 8937393460516579590)
MultiERC721ForERC20Test:testCancel((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address,bool) (runs: 259, μ: 8937393460516572846, ~: 8937393460516584218)
MultiERC721ForERC20Test:testExcessPlatformFee((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 375629, ~: 349222)
MultiERC721ForERC20Test:testGas() (gas: 288968)
MultiERC721ForERC20Test:testHappyPath((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 397115, ~: 378016)
MultiERC721ForERC20Test:testInsufficientBalance((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 257, μ: 388202, ~: 372238)
MultiERC721ForERC20Test:testNotApproved((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 324608, ~: 315437)
MultiERC721ForERC20Test:testReplayProtection((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address) (runs: 256, μ: 8937393460516571846, ~: 8937393460516581168)
MultiERC721ForNativeTest:testCancel((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address,bool) (runs: 261, μ: 8937393460516616989, ~: 8937393460516630373)
MultiERC721ForNativeTest:testExcessPlatformFee((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 306529, ~: 286911)
MultiERC721ForNativeTest:testGas() (gas: 255770)
MultiERC721ForNativeTest:testHappyPath((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 341363, ~: 342327)
MultiERC721ForNativeTest:testInsufficientBalance((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 256, μ: 321152, ~: 309902)
MultiERC721ForNativeTest:testNotApproved((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256)) (runs: 257, μ: 259900, ~: 252924)
MultiERC721ForNativeTest:testReplayProtection((((address,address),address,uint16,uint256,(address,uint256)[5],uint256,uint256,uint8,address,bytes32,(uint128,uint128,uint128),(uint256,uint256)),uint256),address) (runs: 256, μ: 8937393460516574138, ~: 8937393460516579445)
TypesTest:testAsNonPayableParties((address,address)) (runs: 263, μ: 1653, ~: 1653)
TypesTest:testFeeConfigRoundTrip(bytes4,address,uint16) (runs: 263, μ: 1180, ~: 1180)
10 changes: 5 additions & 5 deletions src/TMPL/TMPLSwapperDeployer.tmpl.sol
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ import {OnlyPartyCanCancel, Action, ActionMessageLib, FILL, CANCEL_MSG} from "..

/// @dev Predictor of TMPLSwapper contract addresses.
contract TMPLSwapperPredictor is ETPredictor {
function _swapper(TMPLSwap memory swap, bytes32 salt) internal view returns (address) {
function _swapper(TMPLSwap calldata swap, bytes32 salt) internal view returns (address) {
return _predictDeploymentAddress(_bytecode(swap), salt);
}

function _bytecode(TMPLSwap memory swap) internal pure returns (bytes memory) {
function _bytecode(TMPLSwap calldata swap) internal pure returns (bytes memory) {
return abi.encodePacked(type(TMPLSwapper).creationCode, abi.encode(swap));
}
}
Expand All @@ -26,14 +26,14 @@ contract TMPLSwapperPredictor is ETPredictor {
abstract contract TMPLSwapperDeployer is TMPLSwapperPredictor, ETDeployer, SwapperDeployerBase {
using ActionMessageLib for Action;

function fill(TMPLSwap memory swap, bytes32 salt) external payable returns (address) {
function fill(TMPLSwap calldata swap, bytes32 salt) external payable returns (address) {
(address payable feeRecipient, uint16 basisPoints) = _platformFeeConfig();
address a = _deploy(_bytecode(swap), msg.value, salt, FILL.withFeeConfig(feeRecipient, basisPoints));
emit Filled(a);
return a;
}

function cancel(TMPLSwap memory swap, bytes32 salt) external returns (address) {
function cancel(TMPLSwap calldata swap, bytes32 salt) external returns (address) {
if (msg.sender != swap.parties.seller && msg.sender != swap.parties.buyer) {
revert OnlyPartyCanCancel();
}
Expand All @@ -42,7 +42,7 @@ abstract contract TMPLSwapperDeployer is TMPLSwapperPredictor, ETDeployer, Swapp
return a;
}

function swapper(TMPLSwap memory swap, bytes32 salt) external view returns (address) {
function swapper(TMPLSwap calldata swap, bytes32 salt) external view returns (address) {
return _swapper(swap, salt);
}
}
Expand Down

0 comments on commit 06596c2

Please sign in to comment.