Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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)