This commit is contained in:
ButterflyEffect 2023-10-05 12:17:36 +00:00
commit 33b0c7382f
8 changed files with 4989 additions and 0 deletions

11
.gitignore vendored Normal file

@ -0,0 +1,11 @@
node_modules
.env
coverage
coverage.json
typechain
typechain-types
# Hardhat files
cache
artifacts

3
README.md Normal file

@ -0,0 +1,3 @@
# Rescue usdt example
This is hardhad project, install deps and run `npx hardhat test test.js`

16
hardhat.config.js Normal file

@ -0,0 +1,16 @@
require("@nomicfoundation/hardhat-toolbox");
require("@nomicfoundation/hardhat-ethers")
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
solidity: "0.8.20",
defaultNetwork: "hardhat",
networks: {
hardhat: {
forking: {
url: "https://eth.llamarpc.com",
blockNumber: 18284193
}
}
}
};

4885
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

32
package.json Normal file

@ -0,0 +1,32 @@
{
"name": "rescue-tokens-example",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"hardhat": "^2.17.4"
},
"devDependencies": {
"@nomicfoundation/hardhat-chai-matchers": "^2.0.2",
"@nomicfoundation/hardhat-ethers": "^3.0.4",
"@nomicfoundation/hardhat-network-helpers": "^1.0.9",
"@nomicfoundation/hardhat-toolbox": "^3.0.0",
"@nomicfoundation/hardhat-verify": "^1.1.1",
"@typechain/ethers-v6": "^0.4.3",
"@typechain/hardhat": "^8.0.3",
"chai": "^4.3.10",
"ethers": "^6.7.1",
"hardhat-gas-reporter": "^1.0.9",
"solidity-coverage": "^0.8.5",
"typechain": "^8.3.1"
},
"scripts": {
"test": "mocha"
},
"repository": {
"type": "git",
"url": "https://git.tornado.ws/ButterflyEffect/rescue-tokens-example"
},
"author": "",
"license": "ISC"
}

40
test.js Normal file

@ -0,0 +1,40 @@
const { expect } = require("chai");
const TornABI = require("./tornABI.json");
const UsdtABI = require('./usdtABI.json')
describe("Rescue", function(){
const governanceAddr = "0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce";
const me = "0xeb3E49Af2aB5D5D0f83A9289cF5a34d9e1f6C5b4";
const usdtAddr = "0xdAC17F958D2ee523a2206206994597C13D831ec7";
const tornAddr = "0x77777FeDdddFfC19Ff86DB637967013e6C6A116C";
async function getUsdtBalance(address){
const usdt = await ethers.getContractAt(UsdtABI, usdtAddr);
return usdt.balanceOf(address);
}
async function rescueUsdt(){
const torn = await ethers.getContractAt(TornABI, tornAddr);
const governanceSigner = await ethers.getImpersonatedSigner(governanceAddr);
const availableBalance = await getUsdtBalance(tornAddr);
await torn.connect(governanceSigner).rescueTokens(usdtAddr, me, availableBalance);
}
it("USDT balance on torn address should be more than 1500", async function(){
const usdtDecimals = 6;
const usdtBalanceOnTornAddr = await getUsdtBalance(tornAddr);
expect(Number(usdtBalanceOnTornAddr) / 10 ** usdtDecimals).greaterThan(1500);
});
it("USDT balance on torn address after rescue should be 0", async function(){
await rescueUsdt();
const usdtBalanceOnTornAddr = await getUsdtBalance(tornAddr);
expect(usdtBalanceOnTornAddr).to.eq(0);
})
it("USDT balance of my address after rescue should be more than 1500", async function(){
const usdtDecimals = 6;
const usdtBalanceOnMyAddr = await getUsdtBalance(me);
expect(Number(usdtBalanceOnMyAddr) / 10 ** usdtDecimals).greaterThan(1500);
})
})

1
tornABI.json Normal file

File diff suppressed because one or more lines are too long

1
usdtABI.json Normal file

File diff suppressed because one or more lines are too long