增加一个用于burn nft的合约
This commit is contained in:
parent
9258f7d464
commit
89efe5253f
@ -38312,12 +38312,12 @@
|
||||
}
|
||||
},
|
||||
"links": {},
|
||||
"address": "0xe2E4D5a4045fBFcbCBECAf5b8A94303712d2FA97",
|
||||
"transactionHash": "0x6cd38599ef7660f9dfc6416bfe10bc3208699d4ab0e96cdde7beee6984c6cc8c"
|
||||
"address": "0x6a673D946a976776fd5F163d9d831b2fEB600015",
|
||||
"transactionHash": "0x891eca78035632e35ac8f5617089b7ed165c78a73deb43ac9d55e3a027925f91"
|
||||
}
|
||||
},
|
||||
"schemaVersion": "3.4.16",
|
||||
"updatedAt": "2023-12-27T06:07:59.193Z",
|
||||
"updatedAt": "2024-01-10T06:03:43.853Z",
|
||||
"networkType": "ethereum",
|
||||
"devdoc": {
|
||||
"kind": "dev",
|
||||
|
@ -46453,7 +46453,7 @@
|
||||
}
|
||||
},
|
||||
"schemaVersion": "3.4.16",
|
||||
"updatedAt": "2023-12-27T05:51:26.136Z",
|
||||
"updatedAt": "2024-01-09T02:33:38.506Z",
|
||||
"networkType": "ethereum",
|
||||
"devdoc": {
|
||||
"events": {
|
||||
|
@ -19455,7 +19455,7 @@
|
||||
}
|
||||
},
|
||||
"schemaVersion": "3.4.16",
|
||||
"updatedAt": "2023-12-27T05:51:26.126Z",
|
||||
"updatedAt": "2024-01-09T02:33:38.498Z",
|
||||
"networkType": "ethereum",
|
||||
"devdoc": {
|
||||
"kind": "dev",
|
||||
|
1966
build/contracts/IBadge.json
Normal file
1966
build/contracts/IBadge.json
Normal file
File diff suppressed because one or more lines are too long
1961
build/contracts/ISbt.json
Normal file
1961
build/contracts/ISbt.json
Normal file
File diff suppressed because one or more lines are too long
@ -3259,7 +3259,7 @@
|
||||
}
|
||||
},
|
||||
"schemaVersion": "3.4.16",
|
||||
"updatedAt": "2023-12-27T06:13:06.086Z",
|
||||
"updatedAt": "2024-01-10T06:03:43.872Z",
|
||||
"networkType": "ethereum",
|
||||
"devdoc": {
|
||||
"kind": "dev",
|
||||
|
@ -33954,8 +33954,8 @@
|
||||
}
|
||||
},
|
||||
"links": {},
|
||||
"address": "0x22Ac497e7FbdaDDB6945354F8080998f4Abbdc4b",
|
||||
"transactionHash": "0xdb9d7f9179a623c585fa0db6692df385b2731f0c8d47d701dd2754e2ead6da8d"
|
||||
"address": "0xFAA03824c38Ed5102F9F901987FA7cd9d193449B",
|
||||
"transactionHash": "0x016bbf6f248a4fe8bcb7e8839bf0715e2f5a0316bf0a05754e4b6b768972bd9c"
|
||||
},
|
||||
"1665974821170": {
|
||||
"events": {},
|
||||
@ -33965,7 +33965,7 @@
|
||||
}
|
||||
},
|
||||
"schemaVersion": "3.4.16",
|
||||
"updatedAt": "2023-12-27T06:13:06.079Z",
|
||||
"updatedAt": "2024-01-10T04:48:11.625Z",
|
||||
"networkType": "ethereum",
|
||||
"devdoc": {
|
||||
"kind": "dev",
|
||||
|
@ -183,7 +183,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
@ -196,7 +197,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
@ -209,7 +211,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
@ -246,7 +249,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
@ -265,7 +269,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
@ -284,7 +289,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
@ -326,7 +332,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
@ -350,7 +357,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
@ -363,7 +371,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
@ -376,7 +385,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
@ -395,7 +405,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
@ -513,7 +524,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
@ -526,7 +538,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
@ -545,7 +558,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
@ -569,7 +583,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
@ -582,7 +597,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
@ -624,7 +640,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
@ -656,7 +673,8 @@
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
"type": "function",
|
||||
"constant": true
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
@ -32837,9 +32855,168 @@
|
||||
"name": "solc",
|
||||
"version": "0.8.10+commit.fc410830.Emscripten.clang"
|
||||
},
|
||||
"networks": {},
|
||||
"schemaVersion": "3.4.4",
|
||||
"updatedAt": "2023-12-01T09:03:16.832Z",
|
||||
"networks": {
|
||||
"421614": {
|
||||
"events": {
|
||||
"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "owner",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "approved",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "uint256",
|
||||
"name": "tokenId",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "Approval",
|
||||
"type": "event"
|
||||
},
|
||||
"0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31": {
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "owner",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "operator",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "bool",
|
||||
"name": "approved",
|
||||
"type": "bool"
|
||||
}
|
||||
],
|
||||
"name": "ApprovalForAll",
|
||||
"type": "event"
|
||||
},
|
||||
"0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff": {
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "bytes32",
|
||||
"name": "role",
|
||||
"type": "bytes32"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "bytes32",
|
||||
"name": "previousAdminRole",
|
||||
"type": "bytes32"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "bytes32",
|
||||
"name": "newAdminRole",
|
||||
"type": "bytes32"
|
||||
}
|
||||
],
|
||||
"name": "RoleAdminChanged",
|
||||
"type": "event"
|
||||
},
|
||||
"0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d": {
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "bytes32",
|
||||
"name": "role",
|
||||
"type": "bytes32"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "account",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "sender",
|
||||
"type": "address"
|
||||
}
|
||||
],
|
||||
"name": "RoleGranted",
|
||||
"type": "event"
|
||||
},
|
||||
"0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b": {
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "bytes32",
|
||||
"name": "role",
|
||||
"type": "bytes32"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "account",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "sender",
|
||||
"type": "address"
|
||||
}
|
||||
],
|
||||
"name": "RoleRevoked",
|
||||
"type": "event"
|
||||
},
|
||||
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "from",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "to",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "uint256",
|
||||
"name": "tokenId",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "Transfer",
|
||||
"type": "event"
|
||||
}
|
||||
},
|
||||
"links": {},
|
||||
"address": "0x7b6399DFbed8Bc46F6A498C6B1040E80c2B5C4bc",
|
||||
"transactionHash": "0xe627bc394fc631866323113b35d587151e7defff1d80521525124a7969340d21"
|
||||
}
|
||||
},
|
||||
"schemaVersion": "3.4.16",
|
||||
"updatedAt": "2024-01-10T06:03:43.865Z",
|
||||
"networkType": "ethereum",
|
||||
"devdoc": {
|
||||
"kind": "dev",
|
||||
"methods": {
|
||||
|
9755
build/contracts/NftBuner.json
Normal file
9755
build/contracts/NftBuner.json
Normal file
File diff suppressed because one or more lines are too long
@ -25852,7 +25852,7 @@
|
||||
}
|
||||
},
|
||||
"schemaVersion": "3.4.16",
|
||||
"updatedAt": "2023-12-27T05:51:26.147Z",
|
||||
"updatedAt": "2024-01-09T02:33:38.519Z",
|
||||
"networkType": "ethereum",
|
||||
"devdoc": {
|
||||
"kind": "dev",
|
||||
|
39
contracts/logic/NftBuner.sol
Normal file
39
contracts/logic/NftBuner.sol
Normal file
@ -0,0 +1,39 @@
|
||||
// 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);
|
||||
}
|
||||
}
|
34
migrations/14_deploy_buner.js
Normal file
34
migrations/14_deploy_buner.js
Normal file
@ -0,0 +1,34 @@
|
||||
const base = require("../scripts/base");
|
||||
const NftBuner = artifacts.require("logic/NftBuner");
|
||||
const Badge = artifacts.require("tokens/erc721/BEBadge");
|
||||
const NFTSbt = artifacts.require("tokens/erc721/NFTSbt");
|
||||
|
||||
module.exports = async function (deployer, network, accounts) {
|
||||
await deployer.deploy(NftBuner);
|
||||
const bunerInstance = await NftBuner.deployed();
|
||||
if (bunerInstance) {
|
||||
console.log("NftBuner successfully deployed.");
|
||||
console.log("address: " + bunerInstance.address);
|
||||
}
|
||||
base.updateArray({
|
||||
name: "NftBuner",
|
||||
type: "logic",
|
||||
json: "assets/contracts/NftBuner.json",
|
||||
address: bunerInstance.address,
|
||||
network,
|
||||
});
|
||||
let cfgs = base.loadData({ network });
|
||||
const gacha = cfgs.find((c) => c.name === "Gacha").address
|
||||
const gachaInstance = await Badge.at(gacha);
|
||||
await gachaInstance.setBurnRole(bunerInstance.address);
|
||||
console.log("gacha setBurnRole successfully deployed.");
|
||||
|
||||
const candy = cfgs.find((c) => c.name === "Candy").address
|
||||
const candyInstance = await Badge.at(candy);
|
||||
await candyInstance.setBurnRole(bunerInstance.address);
|
||||
console.log("candy setBurnRole successfully deployed.");
|
||||
const explorer = cfgs.find((c) => c.name === "Explorer").address
|
||||
const explorerInstance = await NFTSbt.at(explorer);
|
||||
await explorerInstance.setBurnRole(bunerInstance.address);
|
||||
console.log("explorer setBurnRole successfully deployed.");
|
||||
};
|
@ -1,4 +1,5 @@
|
||||
const Badge = artifacts.require("tokens/erc721/BEBadge");
|
||||
const NFTSbt = artifacts.require("tokens/erc721/NFTSbt");
|
||||
const Coin = artifacts.require("tokens/erc20/BEUSDT");
|
||||
const Wallet = artifacts.require("core/BEMultiSigWallet");
|
||||
const Distributor = artifacts.require("logic/NftDistributor");
|
||||
@ -6,79 +7,106 @@ const base = require("../scripts/base");
|
||||
|
||||
module.exports = async function (deployer, network, accounts) {
|
||||
const config = require(`../config/config_${network}`);
|
||||
await deployer.deploy(Badge, "BE Badge", "Badge", "4000");
|
||||
|
||||
await deployer.deploy(NFTSbt, "BE Explorer", "Explorer", "0");
|
||||
const badgeInstance = await Badge.deployed();
|
||||
if (badgeInstance) {
|
||||
console.log("BEBadge successfully deployed. ");
|
||||
console.log("address: " + badgeInstance.address);
|
||||
}
|
||||
base.updateArray({
|
||||
name: "BEBadge",
|
||||
name: "Explorer",
|
||||
type: "erc721",
|
||||
json: "assets/contracts/BEBadge.json",
|
||||
json: "assets/contracts/NFTSbt.json",
|
||||
address: badgeInstance.address,
|
||||
network,
|
||||
});
|
||||
// await deployer.deploy(Badge, "BE Candy", "Candy", "0");
|
||||
// const badgeInstance = await Badge.deployed();
|
||||
// if (badgeInstance) {
|
||||
// console.log("BEBadge successfully deployed. ");
|
||||
// console.log("address: " + badgeInstance.address);
|
||||
// }
|
||||
// base.updateArray({
|
||||
// name: "Candy",
|
||||
// type: "erc721",
|
||||
// json: "assets/contracts/BEBadge.json",
|
||||
// address: badgeInstance.address,
|
||||
// network,
|
||||
// });
|
||||
// await deployer.deploy(Badge, "BE Badge", "Badge", "4000");
|
||||
// const badgeInstance = await Badge.deployed();
|
||||
// if (badgeInstance) {
|
||||
// console.log("BEBadge successfully deployed. ");
|
||||
// console.log("address: " + badgeInstance.address);
|
||||
// }
|
||||
// base.updateArray({
|
||||
// name: "BEBadge",
|
||||
// type: "erc721",
|
||||
// json: "assets/contracts/BEBadge.json",
|
||||
// address: badgeInstance.address,
|
||||
// network,
|
||||
// });
|
||||
|
||||
await deployer.deploy(Coin, "BE test USDT", "USDT");
|
||||
const coinInstance = await Coin.deployed();
|
||||
if (coinInstance) {
|
||||
console.log("BEUSDT successfully deployed. ");
|
||||
console.log("address: " + coinInstance.address);
|
||||
}
|
||||
base.updateArray({
|
||||
name: "BEUSDT",
|
||||
type: "erc20",
|
||||
json: "assets/contracts/BEUSDT.json",
|
||||
address: coinInstance.address,
|
||||
network,
|
||||
});
|
||||
await deployer.deploy(
|
||||
Wallet,
|
||||
60,
|
||||
1,
|
||||
config.admins.proposers,
|
||||
config.admins.confirmers,
|
||||
config.admins.executors
|
||||
);
|
||||
const walletInstance = await Wallet.deployed();
|
||||
if (walletInstance) {
|
||||
console.log("BEMultiSigWallet successfully deployed.");
|
||||
console.log("address: " + walletInstance.address);
|
||||
}
|
||||
base.updateArray({
|
||||
name: "BEMultiSigWallet",
|
||||
type: "logic",
|
||||
json: "assets/contracts/BEMultiSigWallet.json",
|
||||
address: walletInstance.address,
|
||||
network,
|
||||
});
|
||||
await badgeInstance.setMintRole(walletInstance.address);
|
||||
console.log("success add wallet to badge's mint role");
|
||||
await coinInstance.setMintRole(walletInstance.address);
|
||||
console.log("success add wallet to usdt's mint role");
|
||||
// await deployer.deploy(Coin, "BE test USDT", "USDT");
|
||||
// const coinInstance = await Coin.deployed();
|
||||
// if (coinInstance) {
|
||||
// console.log("BEUSDT successfully deployed. ");
|
||||
// console.log("address: " + coinInstance.address);
|
||||
// }
|
||||
// base.updateArray({
|
||||
// name: "BEUSDT",
|
||||
// type: "erc20",
|
||||
// json: "assets/contracts/BEUSDT.json",
|
||||
// address: coinInstance.address,
|
||||
// network,
|
||||
// });
|
||||
// await deployer.deploy(
|
||||
// Wallet,
|
||||
// 60,
|
||||
// 1,
|
||||
// config.admins.proposers,
|
||||
// config.admins.confirmers,
|
||||
// config.admins.executors
|
||||
// );
|
||||
// const walletInstance = await Wallet.deployed();
|
||||
// if (walletInstance) {
|
||||
// console.log("BEMultiSigWallet successfully deployed.");
|
||||
// console.log("address: " + walletInstance.address);
|
||||
// }
|
||||
// base.updateArray({
|
||||
// name: "BEMultiSigWallet",
|
||||
// type: "logic",
|
||||
// json: "assets/contracts/BEMultiSigWallet.json",
|
||||
// address: walletInstance.address,
|
||||
// network,
|
||||
// });
|
||||
// await badgeInstance.setMintRole(walletInstance.address);
|
||||
// console.log("success add wallet to badge's mint role");
|
||||
// await coinInstance.setMintRole(walletInstance.address);
|
||||
// console.log("success add wallet to usdt's mint role");
|
||||
|
||||
await deployer.deploy(
|
||||
Distributor,
|
||||
badgeInstance.address,
|
||||
config.admins.executors
|
||||
);
|
||||
const distributorInstance = await Distributor.deployed();
|
||||
if (distributorInstance) {
|
||||
console.log("NftDistributor successfully deployed.");
|
||||
console.log("address: " + distributorInstance.address);
|
||||
}
|
||||
base.updateArray({
|
||||
name: "NftDistributor",
|
||||
type: "logic",
|
||||
json: "assets/contracts/NftDistributor.json",
|
||||
address: distributorInstance.address,
|
||||
network,
|
||||
});
|
||||
await badgeInstance.setMintRole(distributorInstance.address);
|
||||
await distributorInstance.grantRole(
|
||||
"0xa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb557091",
|
||||
walletInstance.address
|
||||
);
|
||||
console.log("success add distributor to badge's mint role");
|
||||
// await deployer.deploy(
|
||||
// Distributor,
|
||||
// badgeInstance.address,
|
||||
// config.admins.executors
|
||||
// );
|
||||
// const distributorInstance = await Distributor.deployed();
|
||||
// if (distributorInstance) {
|
||||
// console.log("NftDistributor successfully deployed.");
|
||||
// console.log("address: " + distributorInstance.address);
|
||||
// }
|
||||
// base.updateArray({
|
||||
// name: "NftDistributor",
|
||||
// type: "logic",
|
||||
// json: "assets/contracts/NftDistributor.json",
|
||||
// address: distributorInstance.address,
|
||||
// network,
|
||||
// });
|
||||
// await badgeInstance.setMintRole(distributorInstance.address);
|
||||
// await distributorInstance.grantRole(
|
||||
// "0xa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb557091",
|
||||
// walletInstance.address
|
||||
// );
|
||||
// console.log("success add distributor to badge's mint role");
|
||||
};
|
||||
|
@ -3,10 +3,10 @@ const base = require("../scripts/base");
|
||||
module.exports = async function (deployer, network, accounts) {
|
||||
// const tokens = [{ name: "HERO", desc: "CRYPTO ELITE'S HERO", limit: 0 }];
|
||||
const tokens = [
|
||||
{ name: "HERO", desc: "CRYPTO ELITE'S HERO", limit: 0 },
|
||||
{ name: "PLANET", desc: "CF PLANET", limit: 0 },
|
||||
// { name: "HERO", desc: "CRYPTO ELITE'S HERO", limit: 0 },
|
||||
// { name: "PLANET", desc: "CF PLANET", limit: 0 },
|
||||
{ name: "TestHERO", desc: "CRYPTO ELITE'S HERO", limit: 0 },
|
||||
{ name: "GoldBrick", desc: "CRYPTO ELITE'S GOLDBRICK", limit: 0 },
|
||||
// { name: "GoldBrick", desc: "CRYPTO ELITE'S GOLDBRICK", limit: 0 },
|
||||
];
|
||||
for (let i = 0, l = tokens.length; i < l; i++) {
|
||||
const { name, desc, limit } = tokens[i];
|
||||
|
@ -53,12 +53,6 @@
|
||||
"json": "assets/contracts/NFT.json",
|
||||
"address": "0x8ee0a9D6025A46f21c9b0b75a8472D001d94e8A7"
|
||||
},
|
||||
{
|
||||
"name": "TestHERO",
|
||||
"type": "erc721",
|
||||
"json": "assets/contracts/NFT.json",
|
||||
"address": "0xCD4bb3402f1a444a1AF10F31946Ed37DaC0eaC4d"
|
||||
},
|
||||
{
|
||||
"name": "GoldBrick",
|
||||
"type": "erc721",
|
||||
@ -136,5 +130,29 @@
|
||||
"type": "logic",
|
||||
"json": "assets/contracts/GoldBricksFactory.json",
|
||||
"address": "0x45E2Eae3634a69Fb9242397A75dd5751aEa8041e"
|
||||
},
|
||||
{
|
||||
"name": "Candy",
|
||||
"type": "erc721",
|
||||
"json": "assets/contracts/BEBadge.json",
|
||||
"address": "0x6a673D946a976776fd5F163d9d831b2fEB600015"
|
||||
},
|
||||
{
|
||||
"name": "Explorer",
|
||||
"type": "erc721",
|
||||
"json": "assets/contracts/NFTSbt.json",
|
||||
"address": "0x7b6399DFbed8Bc46F6A498C6B1040E80c2B5C4bc"
|
||||
},
|
||||
{
|
||||
"name": "TestHERO",
|
||||
"type": "erc721",
|
||||
"json": "assets/contracts/NFT.json",
|
||||
"address": "0xCD4bb3402f1a444a1AF10F31946Ed37DaC0eaC4d"
|
||||
},
|
||||
{
|
||||
"name": "NftBuner",
|
||||
"type": "logic",
|
||||
"json": "assets/contracts/NftBuner.json",
|
||||
"address": "0xca5525178b0826A7C0835F0b7a383C802e10b6c7"
|
||||
}
|
||||
]
|
54
test/burn.test.js
Normal file
54
test/burn.test.js
Normal file
@ -0,0 +1,54 @@
|
||||
const NftBuner = artifacts.require("NftBuner");
|
||||
const BEBadge = artifacts.require("BEBadge");
|
||||
const NFTSbt = artifacts.require("NFTSbt");
|
||||
const {
|
||||
BN,
|
||||
constants,
|
||||
expectEvent,
|
||||
expectRevert,
|
||||
} = require("@openzeppelin/test-helpers");
|
||||
const Web3 = require("web3");
|
||||
|
||||
contract("NftBuner", (accounts) => {
|
||||
let nftBuner;
|
||||
let badge;
|
||||
let sbt;
|
||||
const owner = accounts[0];
|
||||
const user = accounts[1];
|
||||
const executor = accounts[2];
|
||||
let web3 = new Web3(Web3.givenProvider);
|
||||
|
||||
beforeEach(async () => {
|
||||
badge = await BEBadge.new("CRYPTO ELITE'S HERO", "HERO", 0);
|
||||
sbt = await NFTSbt.new("CRYPTO ELITE'S HERO", "SBT", 0);
|
||||
nftBuner = await NftBuner.new();
|
||||
await badge.setBurnRole(nftBuner.address);
|
||||
await sbt.setBurnRole(nftBuner.address);
|
||||
});
|
||||
|
||||
it("should burn the badge", async () => {
|
||||
await badge.batchMint(user, 2, { from: owner });
|
||||
const receipt = await nftBuner.brunBadge(
|
||||
badge.address,
|
||||
[1, 2],
|
||||
{ from: user }
|
||||
);
|
||||
|
||||
const balanceOfUser = await badge.balanceOf(user);
|
||||
assert.equal(balanceOfUser, 0, "Incorrect user balance");
|
||||
});
|
||||
|
||||
it("should burn the sbt", async () => {
|
||||
await sbt.batchMint(user, 2, { from: owner });
|
||||
await sbt.setApprovalForAll(nftBuner.address, true, { from: user });
|
||||
const receipt = await nftBuner.burnSbt(
|
||||
sbt.address,
|
||||
[1, 2],
|
||||
{ from: user }
|
||||
);
|
||||
console.log(receipt);
|
||||
|
||||
const balanceOfUser = await sbt.balanceOf(user);
|
||||
assert.equal(balanceOfUser, 0, "Incorrect user balance");
|
||||
});
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user