Skip to content

Instantly share code, notes, and snippets.

@Fitblip
Last active June 6, 2021 05:51
Show Gist options
  • Save Fitblip/241c8c2776a5d1a25ca173de5d275c3b to your computer and use it in GitHub Desktop.
Save Fitblip/241c8c2776a5d1a25ca173de5d275c3b to your computer and use it in GitHub Desktop.

XTZ Fund Movement Blacklist

Addresses to be added to the blacklist

tz1ez5hc7wfNKrZ65vVRyC6JBBxZF6UYX3aD
tz1L2TFnPgsPZCLCetAa63u9CBvEuNVjx5Qg
tz1PRaAwb6vNptpULnb6QiQv2zQTc7SU6Hzf
tz1RmPNzio2JFSecq8W1bohHsRFxetW3WTsF
tz1WKrHsuJfc3yuJBPskxxFgcTxDcRwBFPtg
tz2ALu8Jxf2SMgzSZaZEwfiJQbogpUDPStwz

tz1KhU89QWZuuhhnDD1paFp1jYMdpJLh55im
tz1MyqKoe43P4Z8MfHoXVBTrohgcbehp2zLL
tz1Rux3pGrp2KpZUBKvg3VQ4edRYVJsapr4z

tz1bBkoYeN1KLDWAYQDRT7UZQfSJem22J5SF
tz1c8VBNqenRB8xxzNE5iWr8Q4Zh5KKHgMMQ
tz1ffEMMLfTGhfjF94sjqvhXkuLBjVGtguwb
tz1h31ZUHoPtY3TLr7pg4oR6349C82NYyS6r
tz1heNFwoPQDiGRzJ89r29jdzH267gkXHX4E
tz1Mfm4T9ULeDvzAN7DKCPSN2AKKjdVgc6Ab
tz1QaoDT9XpiJejGd1SJneWjnrrycRzG8t77
tz1RE4P8Ww4bEzRVQHtYiz54axQuV56nXbWE
tz1RY5ReBeXiEmphWfNaLfXbzQrHgRsefze2
tz1SCbAeg7gjotfXcNh38hCWGpmQbSb6NwmQ
tz1VV5912Qp7qqZaQ28MC2G3RQ89UhEdueqt

tz1aCHzduykNyX5zLbJwnweezcNfAaWP7zYd
tz1hZCTBEN9dLET5m7wRLonrNSocjaCtuCUo
tz1XtUUtbTJqhqbLSNVb4MaazY8mzdNgzZkM
tz1WUBEpxdhAt6S7Uyzrkx4gDVYH6nBiTNai

tz1aZsnuNAcKKGevP2QYDMUAj2n4EMh4gziy
tz1bDxsuUubL5dgYK351dZuyJN13RVErGu5c
tz1bFwY5rc7Y6eNgdB3JmF1JnbCT4izWZnEo
tz1bPLdomr5BKaG7WtahzhGkYgiQHPDj2NFk
tz1bTNf2xQMUoFB9H45vqiSCRzSczfWxPSyN
tz1c3Ku2TbC457jtQk7S6A9bxCWGvuhi3kDY
tz1ce4mSta7gyaTkkvSsic82nfPF9gMhfCn8
tz1czzCxrfa2hVsoNf45NPaqfHBjQE6vzxKa
tz1dajUpp8E7A5jA53nqZGfBxs1HLchGM1Wp
tz1dAKrr5ruyGJg2J34qdzPDXDMkMbqbYQfK
tz1dnKZn3p3VVFFMHTEVDf27QAsvaBc9kv67
tz1dsvBGt2bDoMMxagnpHf45ehgNtQ6ctg3z
tz1dzSD1AtD1dc3yRsi3aZZKmZDuyFrMdevR
tz1e3LWzbxFCRQtrJkLmLrseuif3FWesYmdK
tz1eZkdJGMpxcyrbnLyvyqovk9W7DuRXP2qg
tz1ffeGkVt8a2m5DQNma9wjgJhYFEeEDJQkW
tz1fmTtpA1fZAFibSHfEbWEBxZUsp3HxepaG
tz1gvWT4Xtad5nkWTLgE47UaJGYDVXs2q2kH
tz1hmwh3nrdKnfsc1eywFymTvUMPjtpib9Wp
tz1hMYeVB5fGhk678qvtczD26MeimChAUtNf
tz1hZdwBxsEREbHStW7io7AacXWSy1mxqC5z
tz1iGMzHF8xEczXDaJSJ1NsyH3HePhJU9qow
tz1im9WQSRrrqqJ7ZjMqrkDpjAfgjoE1FC4P
tz1iMcmAUmTwrg1A2wgpBusDxyLu43UP2jf4
tz1ir4kUT5GoMMjNw6UCfjLjQZnR3F1CZGz1
tz1KrVFQao21YrkNG4QV3fDVV9fJurzS3gVc
tz1Lh77Bz6BTBiGwwEj4by19Uic77umCobMw
tz1LhTrxes4PQE7p1W3ZZVEsCjuU9d1pMDo1
tz1LpwJRttneQdsKtSePBykyfMepGrF6zHXk
tz1NaKs71zDeYGgryyTFVD4avdFbX1T4Ssoe
tz1NFcxc5MYciojoEtNKbPLEbKn5aAUx8vZV
tz1NjmRtpVqPAi4puVNGShTo2WSMsoYB4zuC
tz1NWWwJrxdoR388TXqrZviX8hUGz5aBAnVo
tz1P1Y8vC45oCeqxNjxkzqmnTK6xgbjaWUAe
tz1P9evKJAn7YLjckZVG4qLFRYNU1GZhgs1h
tz1PkhtL92gsaK2rjwMQRWEZ7YHpSvX7khyh
tz1QLPdm9ZS8F8LARVyjW43YuX4ErAPbjaLi
tz1QqGWAeKVMasqtGBEvMbhX4xEy55kELG8Y
tz1RadC74HiTA5p3JnpgaKFWTFQYBXL2Lb9X
tz1RPbKSL7N7hd35ncAZ75XjEFNR5TBC5A8s
tz1RY14SJ4XnvjL2Ak6EtXn3Q8YZUvknQo5G
tz1Sgzrh2iCYg5Jm8C7PgXQich5aZmjkDGWp
tz1Sk8DsCyWKmcEA89p8ytREwcSjWQGf4V2q
tz1Td3Vh5jX5Hp8AeMoXYefV9wKbT7HLoGj6
tz1Umr4aa3F2tx6PAPtAcPw7ip3Wz4iFwPak
tz1VTZzWaPRfTZ4XJwcirEPRtppTqv25CoM4
tz1Vw7GJh6jvsBnmqoHgUUkXxtmnxjuppvSA
tz1XUCMAcjkUKnxyebTFLrgo1DDwZdhwpmK4
tz1ZCur1tFazP59WXLEfwwajEgjsdeJ6hD25

tz1f38MX7YT2Q7MAq3mDdj75GTN7vgqV2TfH
tz1f4g2RKJkvQ47MDBDpe11UnNo3iGBFmuHM
tz1fbRxV7MFRUDXpR6F25mMFSVo2UYwi5qJa
tz1gWrjEiQibCss8cyFuHTULRdhEhkiujudM
tz1Kos4Ra6sdttpXE6yLYK2KTBfBqkTzXnE3
tz1LN3wPFYuS5fCnodwxT94xVFLPtcFHvcHk
tz1Mq8j7AwoynKU8vXTe7ovh2ZALzxVHnRUM
tz1NkFRjmkqqcGkAhqe78fdgemDNKXvL7Bod
tz1NrxttoDXh3sKPRAv96KWy7JoJoHtaHKzW
tz1PkqVGKryU2RgCh3ch2dfSMMwq9wpbuCvx
tz1Q9Bgggw2VDNfcNtwUtK5ykmXEgXiDWQSs
tz1S2YCqqbddiWtFeiRXLUKcdAw5AXc66w8p
tz1SB6rA5pJmRJCeRQZPDykR8RFAzgcjF5bZ
tz1SFeLaGdLzgJZiCDnSpMCsbx76pHZZwA2E
tz1Tq5XNVx1SKkwQL1PVQWJ7vKu7s7WHMtCq
tz1VG93T7617XZntLyyo2KzoZs2cK69GrABm

tz1eee5rapGDbq2bcZYTQwNbrkB4jVSQSSHx
tz1Pbq5gbBhZGn7BsyTt33HAPGtDFDx2unne
tz1PuUhbXZdYGp1bWpz9tb5p4pg75H5Uswd7

tz1gDpbgZLmPffFfv5VEBELgsoPKK1m769Wd
tz1MrV4csD1ZjQ8gYyHFkyWt3fVwBknr47hs
tz1Qor64hy8s7jH8ZQkMoaYLiS6NVmkeSBbY
tz1RZPb7kVHRih6Sg8cwaBveXSiMRjx9DkTY
tz1T5GmdYXDWwbhBrU7RubT7Z2dmz3ZmKwCE
tz1YtUbTURpWeX1CzHFamxS7fGdaKwKKgMzq
tz1ZD5nQNtzgTzZxHgxgFuGo9CNBuGJHVRXu

tz1bji6yFvM1knLzj9WAP1kRaKewJiXVQSmD
tz1cGmXoj3UNq5kRB3B1QLBSTvNGoC9rGQqd
tz1d3g6cTvL9kyVsdW5i2QAA8chxVyS4qRxL
tz1d8FKMWB639xwv7eduU2VzhnEeQLGwngGT
tz1iATaxwPiUFsu5WdzHbqgTjAgcXJiPRKyq
tz1Lhhzd16ZGf1gwM1o7UJUU3KUm9oB9FGeg
tz1MGE2vja8aY63X5UbKaGqnq1vjQwggzQgQ
tz1MjQgajrCn2TtwwE427NGXdhrNSFyNQLdj
tz1MoHS72xDMarrEG4y33UFmqPs4uzzARnry
tz1Nmu5WqxZHVCnkCToaQ3LUEMFcLeqFpqiz
tz1Q9bJrnyeP2ZkaV79DbgZ82yvULtKUXG1W
tz1RP29PsngFpzX29Y8szAuqgtA5DXCGtCoq
tz1S9ytCLf3YEM4JUFotGuXH27S6karEeKmC
tz1Sv7skjNe59gCoTPZ6VUSnFeZ7SktNfA7L
tz1TMKVieER2p2xicAUjAERsoozV153yaFnx
tz1UD8oMF4ACJVqzHuix9MtZ3NVR5D4suyAj
tz1UWK59mANmWfktSyqGYRmiGdWgiY9VTsSU
tz1Vrak6ozooi4M2NjGyimE2pHvGEkFU89xd
tz1VZNFh9ngAx6PYH1rajA5HHmxUHFUtRViH
tz1W3X36muV1JvVKU3reKf42vF8AEoNm4Eps
tz1YRHx4n7qM5Gdo1Zswz1fuudFoxwFL5iBW
tz1ZrL3FSmZz4PH57jQh8HCgFnPDmbDtzVBc

tz1cZg2dY1NZka5vJfcACh8owd9Pt5E28pNP
tz1T4uFy6cRbKVrpoSJsW6AY53odBvKBw1ZS
tz1WEjGgTyPyhUapqCRvwBnHhLCNV38Jr1GU
tz1XXPVEXfBF1gGafzSDdRvuJCQh1PGg1rXt
tz1Y7PDJ58r8AEKqdnnG87azjdi19uMTB51G
tz1Z2mQP5Vr9cTK96ijTArTxcvyvNwYdzRBK

tz1f77N6P9gvXWLWxzSVUVUQHUAHxY2usKDZ
tz1Lf9TbhWKGiUvQiRtgcQsBSUpki3wq64p7
tz1NzYUdMuhgzvpX8adyS8Zu6ch2U9QrwfGc
tz1TWfAKNoJ5Fvae6ujzA9QPuQN6gmkBQGKi
tz1UA5ioj8wfUUkQCHqE3TXedPXfmt41xBTc
tz1UJ2ocTU76omNWGuXGTERMgfauXs3H5ev2
tz1UJd94Mz9pyLzfC8SAZvTdDHUs5qkFvucK
tz1WWzemVHRhtsP2C5Zo1b1CJ4pnQZf5NLJG
tz1XMz2AoRGwy6WFPZJ7kLTsU3gcErYaT2RM
tz1YtK9qUJffq2SqjhaJEGbufVHEBWDLPrSV

tz1eFr1ihFJSV6mVKUNRgwUKJ2X6fp21KRQ1
tz1gt6ik25GbE2ZTwHRbVzvXgxP46fGizSFh
tz1iyEMoesUHWLDPqRdihANrY4j5uNhZ84dA
tz1MdBZxdYFQadXyciqo5ZUu9E2tmSxPQjCF
tz1MecDJoy514PR8aYqAu8Wdz5StX4iXY8AW
tz1MY5fkqHdkWuFPAdTbCPQMhU3hi86sdwYQ
tz1QSwL9CXjccXSyj8sscbN3Ed4iUfY6jdKC
tz1W6NhAyy8anAmcGbkb278v1L8FJDHYDuba
tz1WpPtMbCyybpvw4eGWdj1wZqeRoxQyTWWm

tz1ceVRLF5yAKvGcFXu2ngFtqXbqkKd1kAZe
tz1cVcDkvek2UNAo8ihaycH6GqEZknuxjz9L
tz1gSHNQkhh8qNCXgLn4MWnH9DZ34NGUn8Hz
tz1iAafYqNNj9ZqP2Z3iPwokaUfMmrNd4UkY
tz1NkGJR1x59KMwfLr2a8bAqDYSm4WeDjeui
tz1USgVdDHovucdwWXcd943nkjN9Dc2kZ36s
tz1VYfSekJV2Jcjbgt4VaaDUDH1knN1ytNUU
tz1Z4eLXZquq6x1kMujWqCN3eQbTzwkMb5A6
tz1Z6ikQVtLws398W5w6qMLQ7pjv8eEutu9u

tz1fF85zv4Quw887h618ZzEZMyi5yg6aXaWe
tz1i6YJszLqdd951QWxegcJqRYhuQzm9aQei
tz1KyJ5EEDLowyoGq4EVY4Ei8gxLB3mTwZ7W
tz1QdTE9vJieWqSuJCh1hKWnWZKqabNBrxR2
tz1WZCY2TQfJKJ4Mj84dWGE5AKFtqgZbgQGM

tz1e4veqK6tHyApLHvn3vsPo7hgaKPm86Vxk
tz1fQ8BJiGCqHZRo7HPsZnXLdVGxBZQm8vMV
tz1fVSpcQBvNCmVShVgLUUXD1aMawtL5naMw
tz1LyjGUjpVmLaAsAuKybzmBxkmSyuRK1cFo
tz1NiSid2cdWm6sqSip79LXZywkQDLxiAhcu
tz1UjR1hQ74Yo7RnuJE1rd5BZ172ktKtCc4Q

tz1fn1T57h9icKEeG97XtymQ2AJjVY56p9oN
tz1NCsGajb5YgZdhdviKrfisN3VteMasnzQi
tz1XAFvpynqgRBizrYs12fBt563NSHm9FWve

Cluster Airdrop Recipients

tz1aXJbVA8vUwi7r91ggPhgqFqaqY8isLQBW 1
tz1cmanHzitf3UgWgECzLpGUKpzEfmGZaFsw 2
tz1agwxv1npTpnBZLGYg8kELfjMGjkySdKtC 3
tz1NpaSh5FzvsqVCEcLDtfexYyYELz9ys1m7 4
tz1aNkb3p9Zcu9FTxyEU9HzAi5fFzSDRfLC3 5
tz1dqTasQcSSEK1UKJG9ifu81VyPnKzdV33T 6
tz1bpz9S6JyBzMvJ97qPL7TeejkUiLjdkDAm 7
tz1cSMrgBZXdv63TYyHQb9UBJWueBXYqfA4V 8
tz1bAnyngBRVCiBueEJoEGoGYo4vPauBXm8L 9
tz1bjTaXURxeCucaPiCvRB7F9LouyUqdvn99 10
tz1dKuipgWszbTRD8hE5ar2YSDFTAFoy1yRc 11
tz1bA7aVbV7SpBfr3FExkrTMt8woAdh1zZDJ 12
tz1bxpnJwhqrdhf5Dmsp8QusjL9zN4qbDCWs 13
tz1eM8EAJnBT4uNdGSwVkJh9ABfLVoYQ2mDC 14
tz1e34cyK8Ppa1Sw4WbwMJG6fECUsh9ifbDh 15
tz1dCyFm9jxuhxJEi8UW5sgiS7TFubaNT1J7 16

All said and done, this is the proposed adjustment. Everything else on the blacklist is to be removed.

Cluster 1 lead by tz1aXJbVA8vUwi7r91ggPhgqFqaqY8isLQBW now gets 4 point/s {'Quipu_LP_Old', 'Kolibri_LP', 'Dexter_LP', 'Protocol_User'}
Cluster 2 lead by tz1cmanHzitf3UgWgECzLpGUKpzEfmGZaFsw now gets 4 point/s {'Quipu_LP_Old', 'Kolibri_LP', 'Dexter_LP', 'Protocol_User'}
Cluster 3 lead by tz1agwxv1npTpnBZLGYg8kELfjMGjkySdKtC now gets 4 point/s {'Quipu_LP_Old', 'Quipu_LP_New', 'Dexter_LP', 'Protocol_User'}
Cluster 4 lead by tz1NpaSh5FzvsqVCEcLDtfexYyYELz9ys1m7 now gets 3 point/s {'Quipu_LP_New', 'Dexter_LP', 'Protocol_User'}
Cluster 5 lead by tz1aNkb3p9Zcu9FTxyEU9HzAi5fFzSDRfLC3 now gets 4 point/s {'Quipu_LP_Old', 'Quipu_LP_New', 'Dexter_LP', 'Protocol_User'}
Cluster 6 lead by tz1dqTasQcSSEK1UKJG9ifu81VyPnKzdV33T now gets 5 point/s {'Kolibri_LP', 'Dexter_LP', 'Protocol_User', 'Quipu_LP_New', 'Quipu_LP_Old'}
Cluster 7 lead by tz1bpz9S6JyBzMvJ97qPL7TeejkUiLjdkDAm now gets 5 point/s {'Kolibri_LP', 'Dexter_LP', 'Protocol_User', 'Quipu_LP_New', 'Quipu_LP_Old'}
Cluster 8 lead by tz1cSMrgBZXdv63TYyHQb9UBJWueBXYqfA4V now gets 5 point/s {'Kolibri_LP', 'Dexter_LP', 'Protocol_User', 'Quipu_LP_New', 'Quipu_LP_Old'}
Cluster 9 lead by tz1bAnyngBRVCiBueEJoEGoGYo4vPauBXm8L now gets 5 point/s {'Kolibri_LP', 'Dexter_LP', 'Protocol_User', 'Gov_Executor', 'Quipu_LP_Old'}
Cluster 10 lead by tz1bjTaXURxeCucaPiCvRB7F9LouyUqdvn99 now gets 5 point/s {'Kolibri_LP', 'Dexter_LP', 'Protocol_User', 'Quipu_LP_New', 'Quipu_LP_Old'}
Cluster 11 lead by tz1dKuipgWszbTRD8hE5ar2YSDFTAFoy1yRc now gets 4 point/s {'Quipu_LP_Old', 'Quipu_LP_New', 'Kolibri_LP', 'Dexter_LP'}
Cluster 12 lead by tz1bA7aVbV7SpBfr3FExkrTMt8woAdh1zZDJ now gets 3 point/s {'Quipu_LP_Old', 'Quipu_LP_New', 'Dexter_LP'}
Cluster 13 lead by tz1bxpnJwhqrdhf5Dmsp8QusjL9zN4qbDCWs now gets 2 point/s {'Quipu_LP_New', 'Dexter_LP'}
Cluster 14 lead by tz1eM8EAJnBT4uNdGSwVkJh9ABfLVoYQ2mDC now gets 1 point/s {'Quipu_LP_New'}
Cluster 15 lead by tz1e34cyK8Ppa1Sw4WbwMJG6fECUsh9ifbDh now gets 1 point/s {'Quipu_LP_New'}
Cluster 16 lead by tz1dCyFm9jxuhxJEi8UW5sgiS7TFubaNT1J7 now gets 2 point/s {'Kolibri_LP', 'Quipu_LP_New'}
import requests
import csv
from io import StringIO
from collections import defaultdict
flatten = lambda t: [item for sublist in t for item in sublist]
def fetch_category(url, name):
print("Fetching {}".format(name))
airdrop_data = requests.get(url)
cleaned_data = [x.strip().rstrip(',').replace(', ', ',') for x in airdrop_data.content.decode().split('\n') if x]
data_strio = StringIO('\n'.join(cleaned_data))
addresses = {}
mermaid_data = defaultdict()
for airdrop_recipient in csv.DictReader(data_strio):
addresses[airdrop_recipient['address']] = airdrop_recipient['points']
return addresses
datasets = {
'Dexter_LP': fetch_category('https://raw.githubusercontent.com/Hover-Labs/kdao-airdrop/main/dexter-lps.csv', "Dexter LP list"),
'Gov_Executor': fetch_category('https://raw.githubusercontent.com/Hover-Labs/kdao-airdrop/main/governance.csv', "Gov Executor list"),
'Kolibri_LP': fetch_category('https://raw.githubusercontent.com/Hover-Labs/kdao-airdrop/main/kolibri-lps.csv', "Kolibri LP list"),
'Protocol_User': fetch_category('https://raw.githubusercontent.com/Hover-Labs/kdao-airdrop/main/oven-borrowers.csv', "Protocol User list"),
'Quipu_LP_New': fetch_category('https://raw.githubusercontent.com/Hover-Labs/kdao-airdrop/main/quipu-lps-new.csv', "Quipuswap (new) list"),
'Quipu_LP_Old': fetch_category('https://raw.githubusercontent.com/Hover-Labs/kdao-airdrop/main/quipu-lps-old.csv', "Quipuswap (old) list"),
}
cluster_markdown = requests.get('https://gist.githubusercontent.com/Fitblip/241c8c2776a5d1a25ca173de5d275c3b/raw/daee06414adc1b433009cacbe85b9e833706702d/blacklist.md').content.decode()
clusters = cluster_markdown.split('```')[1].strip().split('\n\n')
collapsed_ids = cluster_markdown.split('```')[3].strip().split('\n')
all_activities = {}
new_totals = {}
for papa_smurf, smurfs in zip(collapsed_ids, [x.split('\n') for x in clusters]):
activities = defaultdict(list)
papa_smurf, cluster_id = papa_smurf.split()
for activity, collection in datasets.items():
if papa_smurf in collection:
activities[papa_smurf].append(activity)
for smurf in smurfs:
if smurf in collection:
activities[smurf].append(activity)
all_activities[papa_smurf] = activities
activities_flattened = set(flatten(activities.values()))
points = len(activities_flattened)
new_totals[papa_smurf] = points
print("Cluster {} lead by {} now gets {} point/s {}".format(cluster_id, papa_smurf, points, activities_flattened))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment