def get_votes(daos: pd.DataFrame) -> pd.DataFrame: df: pd.DataFrame = pd.DataFrame() print("Requesting votes ...") start: datetime = datetime.now() for _, row in daos.iterrows(): try: votes: List[Dict] = n_requests(query=VOTE_QUERY, result_key='proposalVotes', dao_id=row['id']) except Exception as e: print(e) time.sleep(45) votes: List[Dict] = n_requests(query=VOTE_QUERY, result_key='proposalVotes', dao_id=row['id']) print('Recovered: resuming requests') finally: dff: pd.DataFrame = pd.DataFrame(votes) dff = dff.rename(columns={ 'voter': 'userId', 'createdAt': 'unixDate' }) dff['daoId'] = row['id'] dff['daoName'] = row['name'] dff['actionType'] = 'vote' df = df.append(dff, ignore_index=True) print( f'Votes requested in {round((datetime.now() - start).total_seconds(), 2)}s' ) return df
def get_proposals() -> pd.DataFrame: """ Gets a dataframe with DAOs id and them number of proposals """ df: pd.DataFrame = pd.DataFrame(columns=['id', 'nProposals']) print("Requesting proposals ...") start: datetime = datetime.now() for d_id in daos_ids: proposals: List[Dict] = n_requests(query=PROPOSAL_QUERY, result_key='proposals', dao_id=d_id) dff: pd.DataFrame = pd.DataFrame(proposals) dff = dff.rename(columns={"id": "pId"}) dff['id'] = d_id dff = dff.groupby('id').size().reset_index(name='nProposals') if len(proposals) == 0: dff = {'id': d_id, 'nProposals': 0} df = df.append(dff, ignore_index=True) print( f'Proposals requested in {(datetime.now() - start).total_seconds():.2}s' ) return df
def get_daos_id() -> pd.DataFrame: print("Requesting DAO ids ...") start: datetime = datetime.now() daos: List[Dict] = n_requests(query=DAO_QUERY, result_key='daos') print( f'DAO ids requested in {round((datetime.now() - start).total_seconds(), 2)}s' ) return pd.DataFrame(daos)
def get_daos_birth() -> pd.DataFrame: print("Requesting DAOs birth ...") start: datetime = datetime.now() events: List[Dict] = n_requests(query=EVENT_QUERY, result_key='events') print( f'DAOs birth requested in {round((datetime.now() - start).total_seconds(), 2)}s' ) daos: List[Dict] = list() for e in events: if e['dao']['id'] in daos_ids: daos.append({'id': e['dao']['id'], 'birth': e['timestamp']}) return pd.DataFrame(daos)
def get_daos() -> pd.DataFrame: """ Gets all DAOs id, name and number of users. """ print("Requesting DAOs ...") start: datetime = datetime.now() daos: List[Dict] = n_requests(query=DAO_QUERY, result_key='daos') print(f'DAOs requested in {(datetime.now() - start).total_seconds():.2}s') dff: pd.DataFrame = pd.DataFrame(daos) dff = dff.rename(columns={"reputationHoldersCount": "nUsers"}) global daos_ids daos_ids = set(dff['id'].tolist()) return dff
def get_proposals(daos: pd.DataFrame) -> pd.DataFrame: df: pd.DataFrame = pd.DataFrame() print("Requesting proposals ...") start: datetime = datetime.now() for _, row in daos.iterrows(): proposals: List[Dict] = n_requests(query=PROPOSAL_QUERY, result_key='proposals', dao_id=row['id']) # add dict parameter as just parameter for p in proposals: # calculate diferent stakers p['differentStakers'] = len(set([x['staker'] for x in p['stakes']])) del p['stakes'] # unwrap vote percentage p['quorum'] = p['genesisProtocolParams'][ 'queuedVoteRequiredPercentage'] del p['genesisProtocolParams'] dff: pd.DataFrame = pd.DataFrame(proposals) dff = dff.rename(columns={ 'id': 'proposalId', 'winningOutcome': 'hasPassed' }) dff['daoId'] = row['id'] dff['daoName'] = row['name'] df = df.append(dff, ignore_index=True) print( f'Proposals requested in {round((datetime.now() - start).total_seconds(), 2)}s' ) # data transformation df['hasPassed'] = df['hasPassed'].apply(lambda x: True if x == 'Pass' else False) df['createdAt'] = df['createdAt'].apply(lambda x: int(x)) df['differentStakers'] = df['differentStakers'].apply(lambda x: int(x)) return df
from datetime import datetime from typing import Dict, List, Set from requester import n_requests DAO_QUERY: str = '{{daos(where: {{register: "registered"}}, first: {0}, skip: {1}\ ){{id}}}}' USER_QUERY: str = '{{reputationHolders(where: {{dao: "{0}"}}, first: {1}, skip: {2}\ ){{address}}}}' if __name__ == '__main__': print("Requesting DAOs ...") start: datetime = datetime.now() daos: List[Dict] = n_requests(query=DAO_QUERY, result_key='daos') print(f'DAOs requested in {round((datetime.now() - start).total_seconds(), 2)}s') daos = [d['id'] for d in daos] print("Requesting users ...") start: datetime = datetime.now() users = list() for d in daos: aux: List[Dict] = n_requests(query=USER_QUERY, result_key='reputationHolders', dao_id=d) users = users + aux print(f'Users requested in {round((datetime.now() - start).total_seconds(), 2)}s') users: List[str] = [u['address'] for u in users] print(f'Total users = {len(users)}') users: Set[str] = set(users)