Contract Source Code:
<i class='far fa-question-circle text-muted ms-2' data-bs-trigger='hover' data-bs-toggle='tooltip' data-bs-html='true' data-bs-title='Click on the check box to select individual contract to compare. Only 1 contract can be selected from each side.'></i>
pragma solidity ^0.8.0;
interface IERC721 {
function safeTransferFrom(address _from, address _to, uint256 _tokenId) external;
function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}
interface IERC1155 {
function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external;
function setApprovalForAll(address _operator, bool _approved) external;
function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}
// Create a contract for the receiver to simplify approval process
contract SweepNFTs {
address public sweepTo;
constructor(address _to) {
sweepTo = _to;
}
function sweep721(address _nft, address _from, uint256[] calldata _ids) public {
IERC721 nft = IERC721(_nft);
require(nft.isApprovedForAll(_from, address(this)), "not approved");
for (uint i=0; i < _ids.length; i++) {
nft.safeTransferFrom(_from, sweepTo, _ids[i]);
}
}
function sweep1155(address _nft, address _from, uint256[] calldata _ids, uint256[] calldata _values) public {
IERC1155 nft = IERC1155(_nft);
require(nft.isApprovedForAll(_from, address(this)), "not approved");
nft.safeBatchTransferFrom(_from, sweepTo, _ids, _values, "");
}
}