40 lines
1.0 KiB
Solidity
40 lines
1.0 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity 0.8.10;
|
|
|
|
import "@openzeppelin/contracts/access/AccessControlEnumerable.sol";
|
|
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
|
|
|
|
interface IBadge is IERC721{
|
|
function burn(address owner, uint256 tokenId) external;
|
|
}
|
|
|
|
interface ISbt is IERC721{
|
|
function burn(uint256 tokenId) external;
|
|
}
|
|
|
|
|
|
contract NftBuner is AccessControlEnumerable {
|
|
event BatchBurn(
|
|
address indexed user,
|
|
uint256 indexed tokenId,
|
|
address indexed nft,
|
|
uint256[] tokenIds
|
|
);
|
|
|
|
function brunBadge(address _badge, uint256[] calldata _nftIds) external {
|
|
address user = _msgSender();
|
|
for (uint256 i = 0; i < _nftIds.length; i++) {
|
|
IBadge(_badge).burn(user, _nftIds[i]);
|
|
}
|
|
emit BatchBurn(user, 0, _badge, _nftIds);
|
|
}
|
|
|
|
function burnSbt(address _nft, uint256[] calldata _nftIds) external{
|
|
for (uint256 i = 0; i < _nftIds.length; i++) {
|
|
ISbt(_nft).burn(_nftIds[i]);
|
|
}
|
|
address user = _msgSender();
|
|
emit BatchBurn(user, 0, _nft, _nftIds);
|
|
}
|
|
}
|