From 317c10262ab736af2aea8b8df5c3746dafa3b408 Mon Sep 17 00:00:00 2001 From: Jake Date: Tue, 6 Jun 2023 22:06:52 -0700 Subject: [PATCH] getInputValueForOrderValue (#59) --- .gas-snapshot | 36 +++++++++++++++++++---------------- src/issuer/BuyOrderIssuer.sol | 9 +++++++++ test/DirectBuyIssuer.t.sol | 6 ++++++ 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 4d2b797b..7c9b17a7 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -11,30 +11,34 @@ BridgedERC20Test:testTransferBannedFromReverts() (gas: 117070) BridgedERC20Test:testTransferBannedToReverts() (gas: 119329) BridgedERC20Test:testTransferRestrictedToReverts() (gas: 120257) BridgedTokenFactoryTest:testDeployToken() (gas: 1138684) -DirectBuyIssuerTest:testCancelOrder(uint128,uint128,string) (runs: 518, μ: 362662, ~: 362752) +DirectBuyIssuerTest:testCancelOrder(uint128,uint128,string) (runs: 518, μ: 354150, ~: 362336) DirectBuyIssuerTest:testCancelOrderNotFoundReverts() (gas: 32635) -DirectBuyIssuerTest:testFillOrder(uint128,uint128,uint128,uint256) (runs: 518, μ: 307491, ~: 280883) -DirectBuyIssuerTest:testFillorderNoOrderReverts() (gas: 32535) -DirectBuyIssuerTest:testInitialize(address,address) (runs: 518, μ: 6984512, ~: 6984512) -DirectBuyIssuerTest:testRequestCancel() (gas: 242113) +DirectBuyIssuerTest:testFillOrder(uint128,uint128,uint128,uint256) (runs: 518, μ: 308948, ~: 280795) +DirectBuyIssuerTest:testFillorderNoOrderReverts() (gas: 32425) +DirectBuyIssuerTest:testGetInputValue(uint128) (runs: 518, μ: 33487, ~: 33530) +DirectBuyIssuerTest:testInitialize(address,address) (runs: 518, μ: 7118821, ~: 7118821) +DirectBuyIssuerTest:testRequestCancel() (gas: 242135) DirectBuyIssuerTest:testRequestCancelNotFoundReverts() (gas: 30082) -DirectBuyIssuerTest:testRequestCancelNotRecipientReverts() (gas: 234475) -DirectBuyIssuerTest:testRequestOrder(uint128) (runs: 518, μ: 192275, ~: 250302) -DirectBuyIssuerTest:testRequestOrderCollisionReverts() (gas: 237040) -DirectBuyIssuerTest:testRequestOrderPausedReverts() (gas: 53647) -DirectBuyIssuerTest:testRequestOrderUnsupportedAssetReverts(address) (runs: 518, μ: 93015, ~: 93015) +DirectBuyIssuerTest:testRequestCancelNotRecipientReverts() (gas: 234497) +DirectBuyIssuerTest:testRequestOrder(uint128) (runs: 518, μ: 197339, ~: 250413) +DirectBuyIssuerTest:testRequestOrderCollisionReverts() (gas: 237062) +DirectBuyIssuerTest:testRequestOrderPausedReverts() (gas: 53669) +DirectBuyIssuerTest:testRequestOrderUnsupportedAssetReverts(address) (runs: 518, μ: 92971, ~: 92971) DirectBuyIssuerTest:testRequestOrderUnsupportedPaymentReverts(address) (runs: 518, μ: 95482, ~: 95482) -DirectBuyIssuerTest:testRequestOrderWithPermit() (gas: 307900) -DirectBuyIssuerTest:testReturnEscrow(uint128,uint256) (runs: 518, μ: 287727, ~: 283156) -DirectBuyIssuerTest:testSetFees(address) (runs: 518, μ: 24634, ~: 24634) -DirectBuyIssuerTest:testSetOrdersPaused(bool) (runs: 518, μ: 28092, ~: 21677) -DirectBuyIssuerTest:testSetTreasury(address) (runs: 518, μ: 24973, ~: 24973) -DirectBuyIssuerTest:testTakeEscrow(uint128,uint256) (runs: 518, μ: 259856, ~: 244696) +DirectBuyIssuerTest:testRequestOrderWithPermit() (gas: 308033) +DirectBuyIssuerTest:testReturnEscrow(uint128,uint256) (runs: 518, μ: 288098, ~: 283111) +DirectBuyIssuerTest:testSetFees(address) (runs: 518, μ: 24656, ~: 24656) +DirectBuyIssuerTest:testSetOrdersPaused(bool) (runs: 518, μ: 28153, ~: 21699) +DirectBuyIssuerTest:testSetTreasury(address) (runs: 518, μ: 24885, ~: 24885) +DirectBuyIssuerTest:testTakeEscrow(uint128,uint256) (runs: 518, μ: 259815, ~: 244718) MessagerTest:testSendMessage(uint256,address,string) (runs: 518, μ: 22472, ~: 22522) MessagerTest:testSendMessageInvalidReverts() (gas: 19518) OrderFeesTest:testRecoverInputValueFromFee(uint64,uint128) (runs: 518, μ: 20806, ~: 20842) OrderFeesTest:testRecoverInputValueFromFeeOnRemaining(uint64,uint128) (runs: 518, μ: 22200, ~: 22259) OrderFeesTest:testSetFee(uint64,uint64,uint8,uint128) (runs: 518, μ: 580608, ~: 721682) OrderFeesTest:testUSDC() (gas: 15653) +SellOrderProcessorTest:testCancelOrder(uint128,uint128,string) (runs: 518, μ: 352800, ~: 352833) +SellOrderProcessorTest:testFillOrder(uint128,uint128,uint256) (runs: 518, μ: 292053, ~: 282494) +SellOrderProcessorTest:testRequestOrder(uint128) (runs: 518, μ: 206330, ~: 211444) TransferRestrictorTest:testBanUnban(address) (runs: 518, μ: 29036, ~: 29028) TransferRestrictorTest:testSetResetKyc(address,uint8) (runs: 518, μ: 28785, ~: 32165) \ No newline at end of file diff --git a/src/issuer/BuyOrderIssuer.sol b/src/issuer/BuyOrderIssuer.sol index 7f141298..3bb3f696 100644 --- a/src/issuer/BuyOrderIssuer.sol +++ b/src/issuer/BuyOrderIssuer.sol @@ -52,6 +52,15 @@ contract BuyOrderIssuer is OrderProcessor { } } + function getInputValueForOrderValue(address token, uint256 orderValue) external view returns (uint256) { + if (address(orderFees) == address(0)) { + return orderValue; + } + uint256 flatFee = orderFees.flatFeeForOrder(token); + uint256 recoveredValue = orderFees.recoverInputValueFromFeeOnRemaining(orderValue); + return recoveredValue + flatFee; + } + function _requestOrderAccounting(OrderRequest calldata order, bytes32 salt, bytes32 orderId) internal virtual diff --git a/test/DirectBuyIssuer.t.sol b/test/DirectBuyIssuer.t.sol index 18bfb792..4131bb46 100644 --- a/test/DirectBuyIssuer.t.sol +++ b/test/DirectBuyIssuer.t.sol @@ -147,6 +147,12 @@ contract DirectBuyIssuerTest is Test { assertEq(issuer.ordersPaused(), pause); } + function testGetInputValue(uint128 orderValue) public { + uint256 inputValue = issuer.getInputValueForOrderValue(address(paymentToken), orderValue); + (uint256 flatFee, uint256 percentageFee) = issuer.getFeesForOrder(address(paymentToken), inputValue); + assertEq(inputValue - flatFee - percentageFee, orderValue); + } + function testRequestOrder(uint128 quantityIn) public { OrderProcessor.OrderRequest memory order = OrderProcessor.OrderRequest({ recipient: user,