- 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