From 81d2a11c2fd436805dbe139e5b8726a04e56f24f Mon Sep 17 00:00:00 2001 From: CounterFire2023 <136581895+CounterFire2023@users.noreply.github.com> Date: Thu, 15 Jun 2023 16:13:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0market=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=EF=BC=8C=20=E5=A2=9E=E5=8A=A0=E5=AE=98?= =?UTF-8?q?=E6=96=B9=E5=95=86=E5=9F=8E=E7=9A=84=E9=85=8D=E7=BD=AE=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/market/BENftMarket.sol | 2 +- init_scripts/update_market_setting.js | 96 +++++++++++++++++++++++++++ migrations/7_deploy_market.js | 48 +++++++++++++- out_arbitrum_testnet_dev.json | 30 +++++++-- 4 files changed, 166 insertions(+), 10 deletions(-) create mode 100644 init_scripts/update_market_setting.js diff --git a/contracts/market/BENftMarket.sol b/contracts/market/BENftMarket.sol index 9e96b9e..8610fbb 100644 --- a/contracts/market/BENftMarket.sol +++ b/contracts/market/BENftMarket.sol @@ -10,7 +10,7 @@ import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; -contract BENFTMarket is Ownable, ReentrancyGuard, ERC1155Holder, ERC721Holder { +contract BENftMarket is Ownable, ReentrancyGuard, ERC1155Holder, ERC721Holder { using SafeERC20 for IERC20; struct OrderInfo { diff --git a/init_scripts/update_market_setting.js b/init_scripts/update_market_setting.js new file mode 100644 index 0000000..4f2020a --- /dev/null +++ b/init_scripts/update_market_setting.js @@ -0,0 +1,96 @@ +const FT = artifacts.require("tokens/erc20/FT"); +const NFT = artifacts.require("tokens/erc20/NFT"); +const BENftMarket = artifacts.require("market/BENftMarket"); +const BENftMall = artifacts.require("market/BENftMall"); +const GameItemMarket = artifacts.require("market/GameItemMarket"); +const GameItemMall = artifacts.require("market/GameItemMall"); + +const config = require("../config/config"); +const base = require("../scripts/base"); + +module.exports = async function main(callback) { + try { + // Our code will go here + const network = "arbitrum_testnet"; + let cfgs = base.loadData({ network }); + const accounts = await web3.eth.getAccounts(); + console.log(accounts); + + const heroInstance = await NFT.at( + cfgs.find((c) => c.name === "HERO").address + ); + const equipInstance = await NFT.at( + cfgs.find((c) => c.name === "WEAPON").address + ); + const chipInstance = await NFT.at( + cfgs.find((c) => c.name === "CHIP").address + ); + + const coinInstance = await FT.at( + cfgs.find((c) => c.name === "CEC").address + ); + const goldInstance = await FT.at( + cfgs.find((c) => c.name === "CEG").address + ); + + config.market.paymentTokens.push(coinInstance.address); + config.market.paymentTokens.push(goldInstance.address); + + const marketInstance = await BENftMarket.at( + cfgs.find((c) => c.name === "BENFTMarket").address + ); + const ROUND = 1000000; + const DECIMALS = 1000000000000000000; + if (marketInstance) { + await marketInstance.setFeeToAddress(config.market.feeToAddress); + console.log( + `market receive fee address set to : ${config.market.feeToAddress}` + ); + await marketInstance.setFeeToAddress(config.market.feeToAddress); + console.log( + `market receive tax address set to : ${config.market.feeToAddress}` + ); + await marketInstance.setTransactionFee((3 * ROUND) / 100); + await marketInstance.setTransactionTax((1 * ROUND) / 100); + await marketInstance.addERC721Support(heroInstance.address); + await marketInstance.addERC721Support(equipInstance.address); + await marketInstance.addERC721Support(chipInstance.address); + + const maxPrice = web3.utils.toWei("99990000"); + const minPrice = web3.utils.toWei("0.01"); + await marketInstance.setNFTPriceMaxLimit(heroInstance.address, maxPrice); + await marketInstance.setNFTPriceMinLimit(heroInstance.address, minPrice); + await marketInstance.setNFTPriceMaxLimit(equipInstance.address, maxPrice); + await marketInstance.setNFTPriceMinLimit(equipInstance.address, minPrice); + await marketInstance.setNFTPriceMaxLimit(chipInstance.address, maxPrice); + await marketInstance.setNFTPriceMinLimit(chipInstance.address, minPrice); + for (let token of config.market.paymentTokens) { + await marketInstance.addERC20Support(token); + console.log(`add token for market payment: ${token}`); + } + console.log(`finish update market config`); + } + const gameMallInstance = await GameItemMall.at( + cfgs.find((c) => c.name === "GameItemMall").address + ); + if (gameMallInstance) { + await gameMallInstance.setFeeToAddress(config.market.feeToAddress); + console.log( + `mall receive fee address set to : ${config.market.feeToAddress}` + ); + + await gameMallInstance.updateExecutor(config.admins.admin); + console.log(`mall executor set to : ${config.admins.admin}`); + + for (let token of config.market.paymentTokens) { + await gameMallInstance.addERC20Support(token); + console.log(`add token for mall payment: ${token}`); + } + } + + callback(0); + } catch (error) { + console.error(error); + callback(1); + } +}; diff --git a/migrations/7_deploy_market.js b/migrations/7_deploy_market.js index 1fc176a..b20e7c3 100644 --- a/migrations/7_deploy_market.js +++ b/migrations/7_deploy_market.js @@ -1,9 +1,12 @@ -const MarketPlace = artifacts.require("market/BENftMarket"); +const BENftMarket = artifacts.require("market/BENftMarket"); +const BENftMall = artifacts.require("market/BENftMall"); +const GameItemMarket = artifacts.require("market/GameItemMarket"); +const GameItemMall = artifacts.require("market/GameItemMall"); const base = require("../scripts/base"); module.exports = async function (deployer, network, accounts) { - await deployer.deploy(MarketPlace); - const marketInstance = await MarketPlace.deployed(); + await deployer.deploy(BENftMarket); + const marketInstance = await BENftMarket.deployed(); if (marketInstance) { console.log("MarketPlace successfully deployed."); } @@ -14,4 +17,43 @@ module.exports = async function (deployer, network, accounts) { address: marketInstance.address, network, }); + + await deployer.deploy(BENftMall); + const nftMallInstance = await BENftMall.deployed(); + if (nftMallInstance) { + console.log("BENftMall successfully deployed."); + } + base.updateArray({ + name: "BENftMall", + type: "logic", + json: "assets/contracts/BENftMall.json", + address: nftMallInstance.address, + network, + }); + + await deployer.deploy(GameItemMarket); + const gameMarketInstance = await GameItemMarket.deployed(); + if (gameMarketInstance) { + console.log("GameItemMarket successfully deployed."); + } + base.updateArray({ + name: "GameItemMarket", + type: "logic", + json: "assets/contracts/GameItemMarket.json", + address: gameMarketInstance.address, + network, + }); + + await deployer.deploy(GameItemMall); + const gameMallInstance = await GameItemMall.deployed(); + if (gameMallInstance) { + console.log("GameItemMall successfully deployed."); + } + base.updateArray({ + name: "GameItemMall", + type: "logic", + json: "assets/contracts/GameItemMall.json", + address: gameMallInstance.address, + network, + }); }; diff --git a/out_arbitrum_testnet_dev.json b/out_arbitrum_testnet_dev.json index 9e201bb..227a5d0 100644 --- a/out_arbitrum_testnet_dev.json +++ b/out_arbitrum_testnet_dev.json @@ -41,12 +41,6 @@ "json": "assets/contracts/BEBadge.json", "address": "0xB469331cEC98E52b7Eab07dFB586253bE232BBF7" }, - { - "name": "BENFTMarket", - "type": "logic", - "json": "assets/contracts/BENFTMarket.json", - "address": "0xb80E19c50747972E735c68C0BA5651AD952d70BC" - }, { "name": "UserMinterFactory", "type": "logic", @@ -64,5 +58,29 @@ "type": "logic", "json": "assets/contracts/ClaimBoxFactory.json", "address": "0x41a7f94f0B3b615F84c7084F45556FEf1bd18A18" + }, + { + "name": "BENFTMarket", + "type": "logic", + "json": "assets/contracts/BENFTMarket.json", + "address": "0x1d33b4E045ce595B6346C3D0e334814dd4Af5418" + }, + { + "name": "BENftMall", + "type": "logic", + "json": "assets/contracts/BENftMall.json", + "address": "0x38Bf9f3C29D8384B6A79435745AE796cd2465545" + }, + { + "name": "GameItemMarket", + "type": "logic", + "json": "assets/contracts/GameItemMarket.json", + "address": "0x19a13Da2E7EB33210c98B589888EA68267ee61d6" + }, + { + "name": "GameItemMall", + "type": "logic", + "json": "assets/contracts/GameItemMall.json", + "address": "0x52e3Eb12A2e7f6F9BEAcEd3C2122eD508091A2F1" } ]