From a0df7214911dadb50fe59579ed97a85013613fad Mon Sep 17 00:00:00 2001 From: Andres Martin Aiello <50411235+andresaiello@users.noreply.github.com> Date: Tue, 17 Sep 2024 17:08:16 -0300 Subject: [PATCH] feat: Deploy instant rewards contracts (#187) --- .../.openzeppelin/unknown-7000.json | 311 ++++++++++++++++++ .../zevm-app-contracts/data/addresses.json | 3 +- .../scripts/explorer.helpers.ts | 15 + .../scripts/instant-rewards/deploy.ts | 36 ++ .../scripts/xp-nft/deploy.ts | 17 +- 5 files changed, 366 insertions(+), 16 deletions(-) create mode 100644 packages/zevm-app-contracts/.openzeppelin/unknown-7000.json create mode 100644 packages/zevm-app-contracts/scripts/explorer.helpers.ts create mode 100644 packages/zevm-app-contracts/scripts/instant-rewards/deploy.ts diff --git a/packages/zevm-app-contracts/.openzeppelin/unknown-7000.json b/packages/zevm-app-contracts/.openzeppelin/unknown-7000.json new file mode 100644 index 0000000..7842ce4 --- /dev/null +++ b/packages/zevm-app-contracts/.openzeppelin/unknown-7000.json @@ -0,0 +1,311 @@ +{ + "manifestVersion": "3.2", + "admin": { + "address": "0x39Fc9A85f79c6C9a49291Efd4127A4f31790aCa9", + "txHash": "0x3039cf4ac44a3ebce0fc46d00d36a6ab9b1d9aadb49349be6389d3f8b30ca680" + }, + "proxies": [ + { + "address": "0x9A4e8bB5FFD8088ecF1DdE823e97Be8080BD38cb", + "txHash": "0x57b0d69400a636ae9906ffcdc563b511cbaac77dd472593ef8d8c3e26284a35a", + "kind": "transparent" + } + ], + "impls": { + "13a169f740030ae647ec8fe7854343f525daae2331d89d270ef7671880e59ae0": { + "address": "0xD4f7204cFde7ED1b00bF1d59269aa0f4e053d9d9", + "txHash": "0x8b45dbe398fa1387ea7aaebf9450756b7f20788114bdb60eed92d8ea3fcec7d1", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC165Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "101", + "type": "t_string_storage", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:25" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "102", + "type": "t_string_storage", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:28" + }, + { + "label": "_owners", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_uint256,t_address)", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:31" + }, + { + "label": "_balances", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:34" + }, + { + "label": "_tokenApprovals", + "offset": 0, + "slot": "105", + "type": "t_mapping(t_uint256,t_address)", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:37" + }, + { + "label": "_operatorApprovals", + "offset": 0, + "slot": "106", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "107", + "type": "t_array(t_uint256)44_storage", + "contract": "ERC721Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:477" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_pendingOwner", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:27" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "Ownable2StepUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:70" + }, + { + "label": "_hashedName", + "offset": 0, + "slot": "251", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:40", + "renamedFrom": "_HASHED_NAME" + }, + { + "label": "_hashedVersion", + "offset": 0, + "slot": "252", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:42", + "renamedFrom": "_HASHED_VERSION" + }, + { + "label": "_name", + "offset": 0, + "slot": "253", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:44" + }, + { + "label": "_version", + "offset": 0, + "slot": "254", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:45" + }, + { + "label": "__gap", + "offset": 0, + "slot": "255", + "type": "t_array(t_uint256)48_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:204" + }, + { + "label": "lastUpdateTimestampByTokenId", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_uint256,t_uint256)", + "contract": "ZetaXP", + "src": "contracts/xp-nft/xpNFT.sol:22" + }, + { + "label": "tagByTokenId", + "offset": 0, + "slot": "304", + "type": "t_mapping(t_uint256,t_bytes32)", + "contract": "ZetaXP", + "src": "contracts/xp-nft/xpNFT.sol:23" + }, + { + "label": "tokenByUserTag", + "offset": 0, + "slot": "305", + "type": "t_mapping(t_address,t_mapping(t_bytes32,t_uint256))", + "contract": "ZetaXP", + "src": "contracts/xp-nft/xpNFT.sol:24" + }, + { + "label": "baseTokenURI", + "offset": 0, + "slot": "306", + "type": "t_string_storage", + "contract": "ZetaXP", + "src": "contracts/xp-nft/xpNFT.sol:27" + }, + { + "label": "signerAddress", + "offset": 0, + "slot": "307", + "type": "t_address", + "contract": "ZetaXP", + "src": "contracts/xp-nft/xpNFT.sol:28" + }, + { + "label": "_currentTokenId", + "offset": 0, + "slot": "308", + "type": "t_uint256", + "contract": "ZetaXP", + "src": "contracts/xp-nft/xpNFT.sol:31" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]", + "numberOfBytes": "1408" + }, + "t_array(t_uint256)48_storage": { + "label": "uint256[48]", + "numberOfBytes": "1536" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_bytes32,t_uint256))": { + "label": "mapping(address => mapping(bytes32 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_address)": { + "label": "mapping(uint256 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_bytes32)": { + "label": "mapping(uint256 => bytes32)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + } + } +} diff --git a/packages/zevm-app-contracts/data/addresses.json b/packages/zevm-app-contracts/data/addresses.json index f7e25ec..b0e3399 100644 --- a/packages/zevm-app-contracts/data/addresses.json +++ b/packages/zevm-app-contracts/data/addresses.json @@ -16,7 +16,8 @@ "zetaSwapBtcInbound": "0x358E2cfC0E16444Ba7D3164Bbeeb6bEA7472c559", "invitationManager": "0x3649C03C472B698213926543456E9c21081e529d", "withdrawERC20": "0xa349B9367cc54b47CAb8D09A95836AE8b4D1d84E", - "ZetaXP": "0x6926b6ea978d59a8Ab6aC05486Fd0bED6D15eC29" + "ZetaXP": "0x9A4e8bB5FFD8088ecF1DdE823e97Be8080BD38cb", + "InstantRewards": "0x018412ec1D5bBb864eAe0A4BECaa683052890238" } } } \ No newline at end of file diff --git a/packages/zevm-app-contracts/scripts/explorer.helpers.ts b/packages/zevm-app-contracts/scripts/explorer.helpers.ts new file mode 100644 index 0000000..b88dfc8 --- /dev/null +++ b/packages/zevm-app-contracts/scripts/explorer.helpers.ts @@ -0,0 +1,15 @@ +import { run } from "hardhat"; + +export const verifyContract = async (contractAddress: string, constructorArguments: any[]) => { + // Verification process + console.log(`Verifying contract ${contractAddress}...`); + try { + await run("verify:verify", { + address: contractAddress, + constructorArguments, + }); + console.log("Verification successful"); + } catch (error) { + console.error("Verification failed:", error); + } +}; diff --git a/packages/zevm-app-contracts/scripts/instant-rewards/deploy.ts b/packages/zevm-app-contracts/scripts/instant-rewards/deploy.ts new file mode 100644 index 0000000..508d1dd --- /dev/null +++ b/packages/zevm-app-contracts/scripts/instant-rewards/deploy.ts @@ -0,0 +1,36 @@ +import { isProtocolNetworkName } from "@zetachain/protocol-contracts"; +import { ethers, network } from "hardhat"; + +import { InstantRewards__factory } from "../../typechain-types"; +import { saveAddress } from "../address.helpers"; +import { verifyContract } from "../explorer.helpers"; + +const networkName = network.name; + +const signer = "0x1d24d94520B94B26351f6573de5ef9731c48531A"; +const owner = "0x1d24d94520B94B26351f6573de5ef9731c48531A"; + +const deployInstantRewards = async () => { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + + const InstantRewardsFactory = (await ethers.getContractFactory("InstantRewards")) as InstantRewards__factory; + const InstantRewards = await InstantRewardsFactory.deploy(signer, owner); + + await InstantRewards.deployed(); + + console.log("InstantRewards deployed to:", InstantRewards.address); + + saveAddress("InstantRewards", InstantRewards.address, networkName); + + await verifyContract(InstantRewards.address, [signer, owner]); +}; + +const main = async () => { + if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name"); + await deployInstantRewards(); +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/packages/zevm-app-contracts/scripts/xp-nft/deploy.ts b/packages/zevm-app-contracts/scripts/xp-nft/deploy.ts index b2115cc..ab0e04f 100644 --- a/packages/zevm-app-contracts/scripts/xp-nft/deploy.ts +++ b/packages/zevm-app-contracts/scripts/xp-nft/deploy.ts @@ -1,8 +1,9 @@ import { isProtocolNetworkName } from "@zetachain/protocol-contracts"; -import { ethers, network, run, upgrades } from "hardhat"; +import { ethers, network, upgrades } from "hardhat"; import { ZetaXP__factory } from "../../typechain-types"; import { saveAddress } from "../address.helpers"; +import { verifyContract } from "../explorer.helpers"; const networkName = network.name; @@ -12,20 +13,6 @@ const ZETA_BASE_URL = "https://api.zetachain.io/nft/"; const signer = "0x1d24d94520B94B26351f6573de5ef9731c48531A"; const owner = "0x1d24d94520B94B26351f6573de5ef9731c48531A"; -const verifyContract = async (contractAddress: string, constructorArguments: any[]) => { - // Verification process - console.log(`Verifying contract ${contractAddress}...`); - try { - await run("verify:verify", { - address: contractAddress, - constructorArguments, - }); - console.log("Verification successful"); - } catch (error) { - console.error("Verification failed:", error); - } -}; - const deployZetaXP = async () => { if (!isProtocolNetworkName(networkName)) throw new Error("Invalid network name");