@@ -7,9 +7,11 @@ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
77import {IERC1155 } from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol " ;
88import {ERC721Holder } from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol " ;
99import {ERC1155Holder } from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol " ;
10+ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol " ;
1011import { TokenBundle, ITokenBundle } from "./TokenBundle.sol " ;
1112
1213contract TokenStore is TokenBundle , ERC721Holder , ERC1155Holder {
14+ using SafeERC20 for IERC20 ;
1315
1416 /// @dev Store / escrow multiple ERC1155, ERC721, ERC20 tokens.
1517 function _storeTokens (
@@ -40,7 +42,11 @@ contract TokenStore is TokenBundle, ERC721Holder, ERC1155Holder {
4042 /// @dev Transfers an arbitrary ERC20 / ERC721 / ERC1155 token.
4143 function _transferToken (address _from , address _to , Token memory _token ) internal {
4244 if (_token.tokenType == TokenType.ERC20 ) {
43- IERC20 (_token.assetContract).transferFrom (_from, _to, _token.totalAmount);
45+ if (_from == address (this )) {
46+ IERC20 (_token.assetContract).transfer (_to, _token.totalAmount);
47+ } else {
48+ IERC20 (_token.assetContract).safeTransferFrom (_from, _to, _token.totalAmount);
49+ }
4450 } else if (_token.tokenType == TokenType.ERC721 ) {
4551 IERC721 (_token.assetContract).safeTransferFrom (_from, _to, _token.tokenId);
4652 } else if (_token.tokenType == TokenType.ERC1155 ) {
0 commit comments