- Clone SSV contracts: git clone https://github.com/bloxapp/ssv-contracts/ - Edit csv_rewards.csv with the following content: ``` address,amount 0xb1F5e77AfC74bD2e6b013F089cAf1915d8Fb018B,20.0 0x12a71D1524887050aD437E7a4E18670e823DeBa6,20.0 0x0D9202A92df60c68E308ca196CDe13dc0AB63af7,20.0 0x4D1A3E0EE0F7C06a32Db5d29570461314bA367e6,20.0 0x13DDda174D525F7a1B23A59eD7dF84fdB8818A03,20.0 0x876136FeB24384C56d1B0cf9CF5606a8D73A518d,20.0 0x789674Ab54588Cd366E4FB7064F599680f1f1ab7,20.0 0x7Cc011D0D40138323084c4C391399596569778E5,20.0 0x37E269aAd901E98c13eCA3BF9B1Ba90F4296a8Eb,20.0 0x2240c73c76863AA438f1052188692613ddEcbb48,20.0 0xF589EDA7DfafaE1a2c5Ad12f4BaB03f2AC5c9656,20.0 0xD67beb912B28258BDEd946c2cDDA679B3A79B85A,20.0 ``` - Add Goerli network to Hardhat - Edit hardhat config file: hardhat.config.ts ``` GOERLI_ETH_NODE_URL="https://eth-goerli.g.alchemy.com/v2/rIaTyWzuAXQf0DcLwlh41xZ1e04Nn_q1" GOERLI_OWNER_PRIVATE_KEY="f45ae06915bd1c8ccc0cc7f37eccb4c0f8dee225695041c95f85115b0191097d" GANACHE_ETH_NODE_URL= GANACHE_OWNER_PRIVATE_KEY= GAS_PRICE=1000000000 GAS=1 ETHERSCAN_KEY="WT5U4TQK73F28XTNIBZU8MCISW5IGWHVQV" SSV_TOKEN_ADDRESS="0xA83426355eef0694d6d39C84DB8545AB342af400" CDT_TOKEN_ADDRESS= MINIMUM_BLOCKS_BEFORE_LIQUIDATION=100 OPERATOR_MAX_FEE_INCREASE=3 SET_OPERATOR_FEE_PERIOD=259200 # 3 days APPROVE_OPERATOR_FEE_PERIOD=345600 # 4 days VALIDATORS_PER_OPERATOR_LIMIT=2000 TREASURY_ADDRESS="0xb35096b074fdb9bBac63E3AdaE0Bbde512B2E6b6" ``` - Deploy SSV token contract instance: npx hardhat run --network goerli .\scripts\tmp\ssv-token-deploy.ts ``` Deploying the contracts with the account: 0xa615192220211c9137eD28CDba3Bb6bfd04857d4 Account balance: 15314041348446569620 SSVToken address: 0x7149595573155696017e4043b50A75Ec591DB110 ``` - Verify SSV token contract instance: npx hardhat verify --network goerli --contract contracts/token/SSVToken.sol:SSVToken 0x7149595573155696017e4043b50A75Ec591DB110 ``` Nothing to compile Compiling 1 file with 0.8.4 Successfully submitted source code for contract contracts/token/SSVToken.sol:SSVToken at 0x7149595573155696017e4043b50A75Ec591DB110 for verification on Etherscan. Waiting for verification result... Error in plugin @nomiclabs/hardhat-etherscan: The Etherscan API responded with a failure status. The verification may still succeed but should be checked manually. Reason: Already Verified For more info run Hardhat with --show-stack-traces ``` - Insert the token contract address in hardhat.config.ts ``` GOERLI_ETH_NODE_URL="https://eth-goerli.g.alchemy.com/v2/rIaTyWzuAXQf0DcLwlh41xZ1e04Nn_q1" GOERLI_OWNER_PRIVATE_KEY="f45ae06915bd1c8ccc0cc7f37eccb4c0f8dee225695041c95f85115b0191097d" GANACHE_ETH_NODE_URL= GANACHE_OWNER_PRIVATE_KEY= GAS_PRICE=1000000000 GAS=1 ETHERSCAN_KEY="WT5U4TQK73F28XTNIBZU8MCISW5IGWHVQV" SSV_TOKEN_ADDRESS="0x7149595573155696017e4043b50A75Ec591DB110" CDT_TOKEN_ADDRESS= MINIMUM_BLOCKS_BEFORE_LIQUIDATION=100 OPERATOR_MAX_FEE_INCREASE=3 SET_OPERATOR_FEE_PERIOD=259200 # 3 days APPROVE_OPERATOR_FEE_PERIOD=345600 # 4 days VALIDATORS_PER_OPERATOR_LIMIT=2000 TREASURY_ADDRESS="0xb35096b074fdb9bBac63E3AdaE0Bbde512B2E6b6" ``` - Deploy merkle distribution contract: npx hardhat run --no-compile --network goerli .\scripts\merkl-deploy.ts ``` SSV_TOKEN_ADDRESS: 0xA83426355eef0694d6d39C84DB8545AB342af400 MERKLEROOT: 0xcfeedf5862045afce17bf30545e84d6be3c19b4ef486143901b75e35c881adad TREASURY_ADDRESS: 0xb35096b074fdb9bBac63E3AdaE0Bbde512B2E6b6 MerkleDistributor deployed to: 0x10bc5D873f479774E6b52deDb4cb64B7A4a5c369 ``` - Verify merkle distribution contract: npx hardhat verify --network goerli 0x10bc5D873f479774E6b52deDb4cb64B7A4a5c369 0xA83426355eef0694d6d39C84DB8545AB342af400 0xcfeedf5862045afce17bf30545e84d6be3c19b4ef486143901b75e35c881adad 0xb35096b074fdb9bBac63E3AdaE0Bbde512B2E6b6 ``` Nothing to compile Compiling 1 file with 0.8.4 Successfully submitted source code for contract contracts/MerkleDistributor.sol:MerkleDistributor at 0x10bc5D873f479774E6b52deDb4cb64B7A4a5c369 for verification on Etherscan. Waiting for verification result... Successfully verified contract MerkleDistributor on Etherscan. https://goerli.etherscan.io/address/0x10bc5D873f479774E6b52deDb4cb64B7A4a5c369#code ``` - Mint 200 SSV tokens (200000000000000000000) to address: 0x10bc5D873f479774E6b52deDb4cb64B7A4a5c369 https://goerli.etherscan.io/address/0x7149595573155696017e4043b50A75Ec591DB110#writeContract - Now Merkle distribution contract has 200 SSV tokens: https://goerli.etherscan.io/address/0x10bc5d873f479774e6b52dedb4cb64b7a4a5c369 - Add claimable addresss 0xb1F5e77AfC74bD2e6b013F089cAf1915d8Fb018B to metamask and broadcast claim tx using Etherscan: ``` index (uint256): 11 account (address): 0xb1F5e77AfC74bD2e6b013F089cAf1915d8Fb018B amount (uint256) 1000000000000000000 merkleProof (bytes32[]): [0x660c80bf5af0fa0db8d569033d05c0e62fc925c572ece143402f56b2f6c606ac,0xa28a0c9d33ec504aa52756a1c0a6c7fce88ba49c40da368391deafe9f2a07c7a,0xbbb4d0041c2dd015b0fec27361cec5575bbcd806aa7b199e3632857fe445946d,0x52ce09422c160b69814ce98ebc5f28617326962219b499ec186aa24b7483df78] ``` But I got tx failed: https://goerli.etherscan.io/tx/0xfbaf5bd526a7119ce5f8e60549e505e4a25373a5f424154a8932f8eace7b3d18