Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .env.sample
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@

TESTNET_MNEMONIC=<insert your mnemonic here for testnet deployments>
MAINNET_MNEMONIC=<insert your mnemonic here for mainnet deployments>
MAINNET_PRIVATE_KEY=<insert private key here>
MAINNET_PRIVATE_KEY=<insert private key here>
DEFENDER_TEAM_API_KEY=<insert key>
DEFENDER_TEAM_API_SECRET=<insert secret>
779 changes: 779 additions & 0 deletions .openzeppelin/mainnet-backup.json

Large diffs are not rendered by default.

613 changes: 107 additions & 506 deletions .openzeppelin/mainnet.json

Large diffs are not rendered by default.

194 changes: 0 additions & 194 deletions .openzeppelin/wildertoken-mainnet.json

This file was deleted.

17 changes: 17 additions & 0 deletions contracts/ZeroToken.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import "./oz/ERC20Upgradeable.sol";
import "./oz/ERC20SnapshotUpgradeable.sol";
import "./oz/ERC20PausableUpgradeable.sol";

import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";

contract ZeroToken is
Expand Down Expand Up @@ -196,6 +198,21 @@ contract ZeroToken is
return true;
}

/**
* Recovers tokens that may have been transferred to this contract in error.
* Transfers all of a specific ERC20 token from this contract to a given address.
* @param token The ERC20 token to target
* @param sendTo The address to send tokens to
*/
function recoverTokensFromContract(IERC20Upgradeable token, address sendTo)
external
onlyOwner
{
uint256 balance = token.balanceOf(address(this));
require(balance > 0, "no balance");
SafeERC20Upgradeable.safeTransfer(token, sendTo, balance);
}

function _beforeTokenTransfer(
address from,
address to,
Expand Down
5 changes: 5 additions & 0 deletions hardhat.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { task, HardhatUserConfig } from "hardhat/config";
import "@nomiclabs/hardhat-waffle";
import "@nomiclabs/hardhat-etherscan";
import "@nomiclabs/hardhat-ethers";
import "@openzeppelin/hardhat-defender";
import "@typechain/hardhat";
import "@openzeppelin/hardhat-upgrades";
import "solidity-coverage";
Expand Down Expand Up @@ -83,5 +84,9 @@ const config: HardhatUserConfig = {
etherscan: {
apiKey: "FZ1ANB251FC8ISFDXFGFCUDCANSJNWPF9Q",
},
defender: {
apiKey: process.env.DEFENDER_TEAM_API_KEY || "",
apiSecret: process.env.DEFENDER_TEAM_API_SECRET || "",
},
};
export default config;
13 changes: 8 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
{
"devDependencies": {
"@ethersproject/abi": "5.5.0",
"@ethersproject/bignumber": "5.5.0",
"@ethersproject/bytes": "5.5.0",
"@ethersproject/providers": "5.5.0",
"@nomiclabs/hardhat-ethers": "2.0.2",
"@nomiclabs/hardhat-etherscan": "2.1.1",
"@nomiclabs/hardhat-waffle": "2.0.1",
"@ethersproject/bignumber": "5.5.0",
"@ethersproject/abi": "5.5.0",
"@ethersproject/providers": "5.5.0",
"@ethersproject/bytes": "5.5.0",
"@openzeppelin/contracts": "4.0.0",
"@openzeppelin/contracts-upgradeable": "4.0.0",
"@openzeppelin/hardhat-upgrades": "1.12.0",
Expand Down Expand Up @@ -59,5 +59,8 @@
},
"name": "zToken",
"version": "0.0.0",
"license": "MIT"
"license": "MIT",
"dependencies": {
"@openzeppelin/hardhat-defender": "^1.7.1"
}
}
12 changes: 12 additions & 0 deletions scripts/upgradeWILDToken.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { ethers, defender } from "hardhat";

const main = async () => {
const proxy = "0x2a3bFF78B79A009976EeA096a51A948a3dC00e34";

const tokenContractFactory = await ethers.getContractFactory("ZeroToken");

const c = await defender.proposeUpgrade(proxy, tokenContractFactory);
console.log(c);
};

main();
Loading