This report documents the verification process for the gno.land airdrop distribution conversion from the original balances file to the new target supply of 700 million GNOT. The verification was conducted as an independent third-party review to ensure accuracy and transparency in the distribution process.
According to the provided information:
new_balance = old_balance × (700,000,000,000,000 / 752,454,999,663,089)
This section documents the commands used to verify the accuracy of the distribution conversion.
First, I examined the repository structure to understand the available files:
# Checking root directory content
ls -la
# Reading snapshot instructions
cat snapshot/cosmoshub_snapshot.md
I inspected the original and new balance files:
# View first 5 entries of original balances
gunzip -c mkgenesis/balances.txt.gz | head -n 5
# Output:
# g1p3ucd3ptpw902fluyjzhq3ffgq4ntddatev7s5=42027010477582ugnot
# g14lultfckehtszvzw4ehu0apvsr77afvyy5u50n=35247706217215ugnot
# g15hmqrc245kryaehxlch7scl9d9znxa58n2a3c0=30417901501668ugnot
# g1nm0rrq86ucezaf8uj35pq9fpwr5r82cl5vyaqs=28489219597175ugnot
# g1x54ltnyg88k0ejmk8ytwrhd3ltm84xehs0rn7d=22983213987686ugnot
# View first 5 entries of new balances
head -n 5 newbalances.txt
# Output:
# g1p3ucd3ptpw902fluyjzhq3ffgq4ntddatev7s5=39097231525446ugnot
# g14lultfckehtszvzw4ehu0apvsr77afvyy5u50n=32790524832844ugnot
# g15hmqrc245kryaehxlch7scl9d9znxa58n2a3c0=28297414543994ugnot
# g1nm0rrq86ucezaf8uj35pq9fpwr5r82cl5vyaqs=26503184545191ugnot
# g1x54ltnyg88k0ejmk8ytwrhd3ltm84xehs0rn7d=21381012550363ugnot
I calculated the total supply in both files to verify the conversion ratio:
# Calculate total from original balances
gunzip -c mkgenesis/balances.txt.gz | awk -F'=' '{sum += substr($2, 1, length($2)-5)} END {print sum}'
# Output: 752454999663089
# Calculate total from new balances
cat newbalances.txt | awk -F'=' '{sum += substr($2, 1, length($2)-5)} END {print sum}'
# Output: 699999999999288
# Calculate the ratio used in conversion
echo "scale=16; 700000000000000 / 752454999663089" | bc
# Output: .9302881904079636
I verified that the ratio was consistently applied to all accounts:
# Compare the ratio for the first 5 accounts
for i in {1..5}; do
OLD=$(gunzip -c mkgenesis/balances.txt.gz | head -n $i | tail -n 1 | awk -F'=' '{print $2}' | sed 's/ugnot//');
NEW=$(cat newbalances.txt | head -n $i | tail -n 1 | awk -F'=' '{print $2}' | sed 's/ugnot//');
RATIO=$(echo "scale=10; $NEW / $OLD" | bc);
echo "Account $i: Old=$OLD, New=$NEW, Ratio=$RATIO";
done
# Output:
# Account 1: Old=42027010477582, New=39097231525446, Ratio=.9302881904
# Account 2: Old=35247706217215, New=32790524832844, Ratio=.9302881904
# Account 3: Old=30417901501668, New=28297414543994, Ratio=.9302881904
# Account 4: Old=28489219597175, New=26503184545191, Ratio=.9302881904
# Account 5: Old=22983213987686, New=21381012550363, Ratio=.9302881904
I checked that no accounts were added or removed:
# Count accounts in original balances
echo "Old balances count: $(gunzip -c mkgenesis/balances.txt.gz | wc -l)"
# Output: Old balances count: 656740
# Count accounts in new balances
echo "New balances count: $(cat newbalances.txt | wc -l)"
# Output: New balances count: 656740
I checked if any accounts were reduced to zero:
# Check for zero-balance accounts
cat newbalances.txt | grep '=0ugnot' | wc -l
# Output: 0
I verified that the account order remained the same:
# Extract account addresses and compare
gunzip -c mkgenesis/balances.txt.gz | awk -F'=' '{print $1}' > old_accounts.txt
cat newbalances.txt | awk -F'=' '{print $1}' > new_accounts.txt
diff old_accounts.txt new_accounts.txt | wc -l
# Output: 0 (indicating no differences)
I analyzed the distribution pattern:
# Analyze balance distribution by order of magnitude
gunzip -c mkgenesis/balances.txt.gz | awk -F'=' '{sum += substr($2, 1, length($2)-5); cnt[int(log(substr($2, 1, length($2)-5))/log(10))]++} END {for (i in cnt) print "10^"i": "cnt[i]" accounts"; print "Total: "sum" ugnot"}'
# Output:
# 10^0: 6601 accounts
# 10^1: 1498 accounts
# 10^2: 7186 accounts
# 10^3: 64474 accounts
# 10^4: 66302 accounts
# 10^5: 81316 accounts
# 10^6: 109924 accounts
# 10^7: 203456 accounts
# 10^8: 95125 accounts
# 10^9: 17635 accounts
# 10^10: 2609 accounts
# 10^11: 513 accounts
# 10^12: 87 accounts
# 10^13: 14 accounts
# Total: 752454999663089 ugnot
# Calculate top 10 holders percentage
gunzip -c mkgenesis/balances.txt.gz | head -n 10 | awk -F'=' '{total += substr($2, 1, length($2)-5)} END {print "Top 10 accounts total: "total" ugnot"}'
# Output: Top 10 accounts total: 240145898203189 ugnot
echo "scale=10; 240145898203189 / 752454999663089" | bc
# Output: .3191498472 (31.91%)
I generated SHA-256 checksums for both files:
# Generate SHA-256 for new balances
shasum -a 256 newbalances.txt
# Output: c7f23a5b710c10aa2ec4d99b04baed723687a75f6eb454d7b59f1461fe597841 newbalances.txt
# Generate SHA-256 for original balances
gunzip -c mkgenesis/balances.txt.gz | shasum -a 256
# Output: 8610ae72d7059aabdd60bc9f4c0bb817b1d3ac20a4dc699ac6065cded0135796 -
Conversion Formula Verification
new_balance = old_balance × (700,000,000,000,000 / 752,454,999,663,089)
was correctly appliedTotal Supply Verification
Account Structure Verification
Distribution Pattern
Block Height and Prop 69 Timing
Cryptographic Verification
8610ae72d7059aabdd60bc9f4c0bb817b1d3ac20a4dc699ac6065cded0135796
c7f23a5b710c10aa2ec4d99b04baed723687a75f6eb454d7b59f1461fe597841