/ test / Test.js
Test.js
  1  // Import the ethers library
  2  const { ethers } = require("hardhat");
  3  const provider = new ethers.AlchemyProvider("goerli", process.env.ALCHEMY_KEY)
  4  const { TokenboundClient } = require("@tokenbound/sdk");
  5  
  6  async function Main() {
  7  
  8  
  9    // Get the signers from ethers
 10    const wallet = new ethers.Wallet(process.env.TEST_PRIVATE_KEY, provider)
 11    const tokenboundClient = new TokenboundClient({ signer: wallet, chainId: 5 })
 12    console.log(`SERVER_WALLET_PRIVATE_KEY=${process.env.TEST_PRIVATE_KEY}`)
 13    console.log(`SERVER_WALLET_ADDRESS=${wallet.address}`)
 14  
 15    // Deploy NPC contract
 16    const NPCContract = await ethers.getContractFactory("CosmicCowboys");
 17    const npcContract = await NPCContract.deploy(wallet.address);
 18    const npcContractAddress = await npcContract.getAddress()
 19    console.log(`NPC_CONTRACT_ADDRESS=${npcContractAddress}`);
 20  
 21    // Deploy ERC-20 Contract
 22    const CurrencyContract = await ethers.getContractFactory("GoldenCorn");
 23    const currencyContract = await CurrencyContract.deploy(wallet.address);
 24    const currencyContractAddress = await currencyContract.getAddress()
 25    console.log(`CURRENCY_CONTRACT_ADDRESS=${currencyContractAddress}`)
 26  
 27    // Deploy 1155 Contracts
 28    const FoodContract = await ethers.getContractFactory("SpaceSlop");
 29    const foodContract = await FoodContract.deploy(wallet.address);
 30    const foodContractAddress = await foodContract.getAddress()
 31    console.log(`FOOD_CONTRACT_ADDRESS=${foodContractAddress}`);
 32  
 33    const SupplyContract = await ethers.getContractFactory("JupiterJunk");
 34    const supplyContract = await SupplyContract.deploy(wallet.address);
 35    const supplyContractAddress = await supplyContract.getAddress()
 36    console.log(`SUPPLY_CONTRACT_ADDRESS=${supplyContractAddress}`);
 37  
 38    // Deploy ERC6551
 39    /* const RegistryContract = await ethers.getContractFactory("ERC6551Registry");
 40    const registryContract = await RegistryContract.deploy();
 41    const registryContractAddress = await registryContract.getAddress()
 42    console.log("Registry Contract deployed to address:", registryContractAddress);
 43  
 44    const AccountContract = await ethers.getContractFactory("ERC6551Account");
 45    const accountContract = await AccountContract.deploy();
 46    const accountContractAddress = await accountContract.getAddress()
 47    console.log("Account Contract deployed to address:", accountContractAddress); */
 48  
 49    // Deploy Operator Contract
 50    const OperatorContract = await ethers.getContractFactory("Operator");
 51    const operatorContract = await OperatorContract.deploy(wallet.address, npcContractAddress, currencyContractAddress, foodContractAddress, supplyContractAddress)
 52    const operatorContractAddress = await operatorContract.getAddress()
 53    console.log(`OPERATOR_CONTRACT_ADDRESS=${operatorContractAddress}`)
 54  
 55    // Transfer NPC contract to Operator
 56    await npcContract.transferOwnership(operatorContractAddress);
 57    await currencyContract.transferOwnership(operatorContractAddress);
 58    await foodContract.transferOwnership(operatorContractAddress);
 59    await supplyContract.transferOwnership(operatorContractAddress);
 60    console.log("ownership transferred")
 61  
 62    // create NPC
 63    const npcTx = await operatorContract.createNPC(wallet.address, `ipfs://QmQbwCMwDETHHZ1g8YaSHqLBwCRgVHqFuRNRfiGyNqCcXj/0.json`)
 64    const npcTxReceipt = await npcTx.wait()
 65    console.log("NPC Created")
 66  
 67    // After the NPC is created
 68    const latestTokenId = await operatorContract.getLatestTokenId();
 69  
 70    // create TBA for NPC
 71    const tba = await tokenboundClient.createAccount({
 72      tokenContract: npcContractAddress,
 73      tokenId: latestTokenId,
 74    })
 75    console.log("TBA:", tba)
 76  
 77    // equip NPC via TBA
 78  
 79    /* const feedNpcTx = await operatorContract.feedNPC(tba, 5)
 80    const feedNpcTxReceipt = await feedNpcTx.wait()
 81    console.log("NPC Fed") */
 82  
 83    const whitelistNpcTx = await operatorContract.whitelist(tba, true)
 84    const whitelistNpcTxReceipt = await whitelistNpcTx.wait()
 85    console.log("NPC Whitelisted")
 86  
 87    const fundNpcTx = await operatorContract.fundNPC(tba, 20)
 88    const fundNpxTxReceipt = await fundNpcTx.wait()
 89    console.log("NPC Funded")
 90  
 91    /* const supplyNpcTx = await operatorContract.supplyNPC(tba, 5)
 92    const supplyNpcTxReceipt = await supplyNpcTx.wait()
 93    console.log("NPC Supplied") */
 94  
 95    const donationAmount = ethers.parseEther("0.001")
 96    const donateNpcTx = await operatorContract.donate(tba, { value: donationAmount })
 97    const donateNpcTxReceipt = await donateNpcTx.wait()
 98    console.log("NPC Donated")
 99  
100  }
101  
102  Main()