diff --git a/contracts/Marketplace.sol b/contracts/Marketplace.sol index 8b0a29c..91a210c 100644 --- a/contracts/Marketplace.sol +++ b/contracts/Marketplace.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import "./Configuration.sol"; @@ -45,6 +46,7 @@ contract Marketplace is SlotReservations, Proofs, StateRetrieval, Endian { using EnumerableSet for EnumerableSet.AddressSet; using Requests for Request; using AskHelpers for Ask; + using SafeERC20 for IERC20; IERC20 private immutable _token; MarketplaceConfig private _config; @@ -687,7 +689,7 @@ contract Marketplace is SlotReservations, Proofs, StateRetrieval, Endian { function _transferFrom(address sender, uint256 amount) internal { address receiver = address(this); - if (!_token.transferFrom(sender, receiver, amount)) + if (!_token.trySafeTransferFrom(sender, receiver, amount)) revert Marketplace_TransferFailed(); } diff --git a/test/Marketplace.test.js b/test/Marketplace.test.js index 9904a40..c2352a6 100644 --- a/test/Marketplace.test.js +++ b/test/Marketplace.test.js @@ -215,7 +215,7 @@ describe("Marketplace", function () { let insufficient = maxPrice(request) - 1 await token.approve(marketplace.address, insufficient) await expect(marketplace.requestStorage(request)).to.be.revertedWith( - "ERC20InsufficientAllowance" + "Marketplace_TransferFailed" ) }) @@ -456,7 +456,7 @@ describe("Marketplace", function () { await marketplace.reserveSlot(slot.request, slot.index) await expect( marketplace.fillSlot(slot.request, slot.index, proof) - ).to.be.revertedWith("ERC20InsufficientAllowance") + ).to.be.revertedWith("Marketplace_TransferFailed") }) it("collects only requested collateral and not more", async function () {