diff --git a/Makefile b/Makefile index fb938f0..39ea4a9 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,7 @@ .DEFAULT_GOAL := run run: - @dagster job execute -j data_assets_job -m ggdp - -apis: - @dagster job execute -j private_apis_assets_job -m ggdp + @dagster asset materialize --select \* -m ggdp tables: @python -c 'from ggdp import db; db.export_database_to_parquet("data/local.duckdb", "data/tables");' @@ -35,5 +32,5 @@ publish: @quarto publish gh-pages portal --no-prompt clean: - @rm -rf portal/.quarto data/*.parquet data/*.duckdb portal/_site + @rm -rf portal/.quarto data/*.parquet data/*.duckdb portal/_site data/tables @rm -rf dbt/target dbt/logs dbt/dbt_packages diff --git a/dbt/models/allo_applications.sql b/dbt/models/allo_applications.sql new file mode 100644 index 0000000..3b9ff89 --- /dev/null +++ b/dbt/models/allo_applications.sql @@ -0,0 +1,29 @@ +with source as ( + select * from {{ source('public', 'raw_allo_applications') }} +), + +renamed as ( + select + anchorAddress as anchor_address, + lower(chainId) as chain_id, + createdAtBlock as created_at_block, + createdByAddress as created_by_address, + lower(id) as id, + metadata, + metadata->>'$.signature' as metadata_signature, + lower(metadata->>'$.application.recipient') as metadata_application_recipient, + metadataCid as metadata_cid, + nodeId as node_id, + lower(projectId) as project_id, + lower(roundId) as round_id, + status, + statusSnapshots as status_snapshots, + statusUpdatedAtBlock as status_updated_at_block, + tags, + totalAmountDonatedInUsd as total_amount_donated_in_usd, + totalDonationsCount as total_donations_count, + uniqueDonorsCount as unique_donors_count + from source +) + +select * from renamed diff --git a/dbt/models/allo_deployments.sql b/dbt/models/allo_deployments.sql new file mode 100644 index 0000000..a116bbd --- /dev/null +++ b/dbt/models/allo_deployments.sql @@ -0,0 +1,13 @@ +with source as ( + select * from {{ source('public', 'raw_allo_deployments') }} +), + +renamed as ( + select + lower(address) as address, + chain_name, + contract + from source +) + +select * from renamed diff --git a/dbt/models/allo_donations.sql b/dbt/models/allo_donations.sql new file mode 100644 index 0000000..cc532c0 --- /dev/null +++ b/dbt/models/allo_donations.sql @@ -0,0 +1,24 @@ +with source as ( + select * from {{ source('public', 'raw_allo_donations') }} +), + +renamed as ( + select + amountInUsd as amount_in_usd, + amount, + amountInRoundMatchToken as amount_in_round_match_token, + applicationId as application_id, + blockNumber as block_number, + chainId as chain_id, + lower(id) as id, + lower(donorAddress) as donor_address, + nodeId as node_id, + lower(projectId) as project_id, + lower(recipientAddress) as recipient_address, + lower(roundId) as round_id, + lower(tokenAddress) as token_address, + lower(transactionHash) as transaction_hash, + from source +) + +select * from renamed diff --git a/dbt/models/allo_prices.sql b/dbt/models/allo_prices.sql new file mode 100644 index 0000000..cd42fc2 --- /dev/null +++ b/dbt/models/allo_prices.sql @@ -0,0 +1,17 @@ +with source as ( + select * from {{ source('public', 'raw_allo_prices') }} +), + +renamed as ( + select + blockNumber as block_number, + lower(chainId) as chain_id, + id, + nodeId as node_id, + priceInUsd as price_in_usd, + timestamp, + lower(tokenAddress) as token_address, + from source +) + +select * from renamed diff --git a/dbt/models/allo_projects.sql b/dbt/models/allo_projects.sql new file mode 100644 index 0000000..5c40dfe --- /dev/null +++ b/dbt/models/allo_projects.sql @@ -0,0 +1,34 @@ +with source as ( + select * from {{ source('public', 'raw_allo_projects') }} +), + +renamed as ( + select + anchorAddress as anchor_address, + chainId as chain_id, + createdAtBlock as created_at_block, + lower(createdByAddress) as created_by_address, + id, + metadata as metadata, + metadata->>'title' as title, + metadata->>'description' as description, + metadata->>'website' as website, + metadata->>'projectTwitter' as project_twitter, + metadata->>'projectGithub' as project_github, + metadata->>'userGithub' as user_github, + metadata->>'logoImg' as logo_image, + metadata->>'bannerImg' as banner_image, + cast(metadata->>'createdAt' as numeric) as created_at, + metadataCid as metadata_cid, + name as name, + nodeId as node_id, + nonce, + projectNumber as project_number, + projectType as project_type, + registryAddress as registry_address, + tags, + updatedAtBlock as updated_at_block + from source +) + +select * from renamed diff --git a/dbt/models/allo_rounds.sql b/dbt/models/allo_rounds.sql new file mode 100644 index 0000000..c903bbb --- /dev/null +++ b/dbt/models/allo_rounds.sql @@ -0,0 +1,42 @@ +with source as ( + select * from {{ source('public', 'raw_allo_rounds') }} +), + +renamed as ( + select + adminRole as admin_role, + applicationMetadata as application_metadata, + applicationMetadataCid as application_metadata_cid, + applicationsEndTime as applications_end_time, + applicationsStartTime as applications_start_time, + chainId as chain_id, + createdAtBlock as created_at_block, + createdByAddress as created_by_address, + donationsEndTime as donations_end_time, + donationsStartTime as donations_start_time, + lower(id) as id, + isReadyForPayout as is_ready_for_payout, + managerRole as manager_role, + matchAmount as match_amount, + matchAmountInUsd as match_amount_in_usd, + matchTokenAddress as match_token_address, + nodeId as node_id, + lower(projectId) as project_id, + roundMetadata as round_metadata, + roundMetadataCid as round_metadata_cid, + roundMetadata->>'$.name' as round_metadata_name, + roundMetadata->>'$.roundType' as round_metadata_round_type, + lower(roundMetadata->>'$.programContractAddress') as round_metadata_program_address, + roundMetadata->>'$.quadraticFundingConfig.sybilDefense' as round_metadata_sybil_defense, + strategyAddress as strategy_address, + strategyId as strategy_id, + strategyName as strategy_name, + tags, + totalAmountDonatedInUsd as total_amount_donated_in_usd, + totalDonationsCount as total_donations_count, + uniqueDonorsCount as unique_donors_count, + updatedAtBlock as updated_at_block + from source +) + +select * from renamed diff --git a/dbt/models/allo_subscriptions.sql b/dbt/models/allo_subscriptions.sql new file mode 100644 index 0000000..caec3e7 --- /dev/null +++ b/dbt/models/allo_subscriptions.sql @@ -0,0 +1,21 @@ +with source as ( + select * from {{ source('public', 'raw_allo_subscriptions') }} +), + +renamed as ( + select + chainId as chain_id, + lower(contractAddress) as contract_address, + contractName as contract_name, + createdAt as created_at, + fromBlock as from_block, + id, + indexedToBlock as indexed_to_block, + indexedToLogIndex as indexed_to_log_index, + nodeId as node_id, + toBlock as to_block, + updatedAt as updated_at + from source +) + +select * from renamed diff --git a/dbt/models/application_answers.sql b/dbt/models/application_answers.sql index dd808c2..c870053 100644 --- a/dbt/models/application_answers.sql +++ b/dbt/models/application_answers.sql @@ -1,30 +1,36 @@ -with source as ( - select metadata, chainid, roundid, projectid, id from {{ source("public", "raw_round_applications") }} - ), +with source as ( + select + metadata, + chainid, + roundid, + projectid, + id + from {{ source("public", "raw_allo_applications") }} +), - renamed as ( - select - unnest( - from_json(json_extract_path_text(source.metadata, '$.application.answers'), '["json"]') - ) as row_json, - chainid as chain_id, - roundid as round_id, - id as application_id, - projectid as project_id - from source - ), +renamed as ( + select + unnest( + from_json(json_extract_path_text(source.metadata, '$.application.answers'), '["json"]') + ) as row_json, + chainid as chain_id, + roundid as round_id, + id as application_id, + projectid as project_id + from source +), - extracted as ( - select - json_extract_path_text(row_json, 'questionId') as question_id, - project_id, - application_id, - chain_id, - lower(round_id) as round_id, - json_extract_path_text(row_json, 'question') as question, - json_extract_path_text(row_json, 'type') as question_type, - json_extract_path_text(row_json, 'answer') as answer - from renamed - ) +extracted as ( + select + json_extract_path_text(row_json, 'questionId') as question_id, + project_id, + application_id, + chain_id, + lower(round_id) as round_id, + json_extract_path_text(row_json, 'question') as question, + json_extract_path_text(row_json, 'type') as question_type, + json_extract_path_text(row_json, 'answer') as answer + from renamed +) select * from extracted where answer is not null -- filters out encrypted and skipped answers diff --git a/dbt/models/passport_scores.sql b/dbt/models/gitcoin_passport_scores.sql similarity index 86% rename from dbt/models/passport_scores.sql rename to dbt/models/gitcoin_passport_scores.sql index 03c8634..8beec77 100644 --- a/dbt/models/passport_scores.sql +++ b/dbt/models/gitcoin_passport_scores.sql @@ -1,5 +1,5 @@ with source as ( - select * from {{ source('public', 'raw_passport_scores') }} + select * from {{ source('public', 'raw_gitcoin_passport_scores') }} ), renamed as ( diff --git a/dbt/models/projects.sql b/dbt/models/projects.sql deleted file mode 100644 index 9baea42..0000000 --- a/dbt/models/projects.sql +++ /dev/null @@ -1,32 +0,0 @@ -with source as ( - select * from {{ source('public', 'raw_projects') }} -), - -renamed as ( - select - {{ adapter.quote("id") }} as project_id, - {{ adapter.quote("projectNumber") }} as project_number, - {{ adapter.quote("metaPtr") }} as meta_ptr, - {{ adapter.quote("metadata") }} as metadata, - {{ adapter.quote("owners") }} as owners, - {{ adapter.quote("createdAtBlock") }} as created_at_block, - {{ adapter.quote("chainId") }} as chain_id - from source -), - -extracted_metadata as ( - select - *, - json_extract_path_text(metadata, 'title') as title, - json_extract_path_text(metadata, 'description') as description, - json_extract_path_text(metadata, 'website') as website, - json_extract_path_text(metadata, 'projectTwitter') as project_twitter, - json_extract_path_text(metadata, 'projectGithub') as project_github, - json_extract_path_text(metadata, 'userGithub') as user_github, - json_extract_path_text(metadata, 'logoImg') as logo_image, - json_extract_path_text(metadata, 'bannerImg') as banner_image, - json_extract_path_text(metadata, 'createdAt')::numeric as created_at, - from renamed -) - -select * from extracted_metadata diff --git a/dbt/models/round_applications.sql b/dbt/models/round_applications.sql deleted file mode 100644 index c14b8d3..0000000 --- a/dbt/models/round_applications.sql +++ /dev/null @@ -1,30 +0,0 @@ -with source as ( - select * from {{ source('public', 'raw_round_applications') }} -), - -renamed as ( - select - lower(chainId) as chain_id, - lower(roundId) as round_id, - id, - projectId as project_id, - status, - amountUSD as amount_usd, - votes, - uniqueContributors as unique_contributors, - metadata, - createdAtBlock as created_at_block, - statusUpdatedAtBlock as status_updated_at_block, - statusSnapshots as status_snapshots - from source -), - -extracted_metadata as ( - select - *, - json_extract_path_text(metadata, 'signature') as signature, - lower(json_extract_path_text(metadata, '$.application.recipient')) as recipient - from renamed -) - -select * from extracted_metadata diff --git a/dbt/models/round_votes.sql b/dbt/models/round_votes.sql deleted file mode 100644 index 6371b7d..0000000 --- a/dbt/models/round_votes.sql +++ /dev/null @@ -1,23 +0,0 @@ -with source as ( - select * from {{ source('public', 'raw_round_votes') }} -), - -renamed as ( - select - lower(chainId) as chain_id, - lower(roundId) as round_id, - id, - transaction, - blockNumber as block_number, - projectId as project_id, - applicationId as application_id, - lower(voter) as voter, - lower(grantAddress) as grant_address, - lower(token) as token, - amount, - amountUSD as amount_usd, - amountRoundToken as amount_round_token - from source -) - -select * from renamed diff --git a/dbt/models/rounds.sql b/dbt/models/rounds.sql deleted file mode 100644 index dacf3e0..0000000 --- a/dbt/models/rounds.sql +++ /dev/null @@ -1,38 +0,0 @@ -with source as ( - select * from {{ source('public', 'raw_rounds') }} -), - -renamed as ( - select - lower(id) as id, - amountUSD as amount_usd, - votes, - lower(token) as token, - matchAmount as match_amount, - matchAmountUSD as match_amount_usd, - uniqueContributors as unique_contributors, - applicationMetaPtr as application_meta_ptr, - applicationMetadata as application_metadata, - metaPtr as meta_ptr, - metadata as metadata, - applicationsStartTime as applications_start_time, - applicationsEndTime as applications_end_time, - roundStartTime as round_start_time, - roundEndTime as round_end_time, - createdAtBlock as created_at_block, - updatedAtBlock as updated_at_block, - chainId as chain_id - from source -), - -extracted_metadata as ( - select - *, - json_extract_path_text(metadata, 'name') as name, - json_extract_path_text(metadata, 'roundType') as round_type, - lower(json_extract_path_text(metadata, 'programContractAddress')) as program_address, - json_extract_path_text(metadata, '$.quadraticFundingConfig.sybilDefense')::boolean as sybil_defense - from renamed -) - -select * from extracted_metadata diff --git a/dbt/models/sources.yml b/dbt/models/sources.yml index a5a6ac0..a38e105 100644 --- a/dbt/models/sources.yml +++ b/dbt/models/sources.yml @@ -3,30 +3,38 @@ version: 2 sources: - name: public tables: - - name: raw_passport_scores + - name: raw_gitcoin_passport_scores meta: dagster: - asset_key: ["raw_passport_scores"] - - name: raw_projects + asset_key: ["raw_gitcoin_passport_scores"] + - name: raw_allo_projects meta: dagster: - asset_key: ["raw_projects"] - - name: raw_prices + asset_key: ["raw_allo_projects"] + - name: raw_allo_prices meta: dagster: - asset_key: ["raw_prices"] - - name: raw_rounds + asset_key: ["raw_allo_prices"] + - name: raw_allo_rounds meta: dagster: - asset_key: ["raw_rounds"] - - name: raw_round_votes + asset_key: ["raw_allo_rounds"] + - name: raw_allo_donations meta: dagster: - asset_key: ["raw_round_votes"] - - name: raw_round_applications + asset_key: ["raw_allo_donations"] + - name: raw_allo_deployments meta: dagster: - asset_key: ["raw_round_applications"] + asset_key: ["raw_allo_deployments"] + - name: raw_allo_applications + meta: + dagster: + asset_key: ["raw_allo_applications"] + - name: raw_allo_subscriptions + meta: + dagster: + asset_key: ["raw_allo_subscriptions"] - name: raw_chain_metadata meta: dagster: diff --git a/ggdp/__init__.py b/ggdp/__init__.py index 58d70c4..40266a0 100644 --- a/ggdp/__init__.py +++ b/ggdp/__init__.py @@ -5,27 +5,26 @@ from dagster_duckdb import DuckDBResource from dagster_duckdb_pandas import DuckDBPandasIOManager -from . import jobs, assets, resources as res +from . import resources as res +from .assets import allo, other DBT_PROJECT_DIR = os.path.dirname(os.path.abspath(__file__)) + "/../dbt/" dbt_resource = DbtCliResource(project_dir=DBT_PROJECT_DIR, profiles_dir=DBT_PROJECT_DIR) dbt_assets = load_assets_from_dbt_project(DBT_PROJECT_DIR, DBT_PROJECT_DIR) -python_assets = load_assets_from_modules([assets]) +python_assets = load_assets_from_modules([allo, other]) resources = { "covalent_api": res.CovalentAPIResource(API_KEY=EnvVar("COVALENT_API_KEY")), "dune": res.DuneResource(DUNE_API_KEY=EnvVar("DUNE_API_KEY")), + "indexer_graphql": res.GrantsStackIndexerGraphQL(), "dbt": dbt_resource, "duckdb": DuckDBResource(database="data/local.duckdb"), - "io_manager": DuckDBPandasIOManager( - database="data/local.duckdb", - ), + "io_manager": DuckDBPandasIOManager(database="data/local.duckdb"), } defs = Definitions( assets=[*dbt_assets, *python_assets], resources=resources, - jobs=[jobs.data_assets_job, jobs.private_apis_assets_job], ) diff --git a/ggdp/assets.py b/ggdp/assets.py deleted file mode 100644 index bdeec6f..0000000 --- a/ggdp/assets.py +++ /dev/null @@ -1,268 +0,0 @@ -import json - -import pandas as pd -import requests -from retry import retry -from dagster import asset -from fsspec.implementations.http import HTTPFileSystem - -from .resources import DuneResource, CovalentAPIResource - -ALLO_INDEXER_URL = "https://indexer-production.fly.dev/data" -CHAIN_METADATA_URL = "https://chainid.network/chains.json" -GIVETH_GQL_ENDPOINT = "https://mainnet.serve.giveth.io/graphql" - - -def chain_file_aggregator(json_name): - fs = HTTPFileSystem(simple_links=True) - paths = fs.ls(ALLO_INDEXER_URL) - paths = [path["name"] for path in paths if path["name"].split("/")[-1].isdigit()] - df = pd.DataFrame() - for path in paths: - chain_id = int(path.split("/")[-1]) - try: - df_chain = pd.read_json(f"{path}/{json_name}") - df_chain["chainId"] = str(chain_id) - except Exception as e: - print(f"Error reading {path}/{json_name}") - print(f"Error: {e}") - df_chain = pd.DataFrame() - continue - df = pd.concat([df, df_chain]) - return df - - -@retry(tries=8, delay=2, backoff=2, max_delay=10) -def read_json_with_retry(json_path): - response = requests.get(json_path, timeout=10) - response.raise_for_status() - return pd.read_json(response.text) - - -@retry(tries=8, delay=2, backoff=2, max_delay=10) -def read_parquet_with_retry(path): - return pd.read_parquet(path) - - -def round_file_aggregator(json_name): - fs = HTTPFileSystem(simple_links=True) - paths = fs.ls(ALLO_INDEXER_URL) - paths = [path["name"] for path in paths if path["name"].split("/")[-1].isdigit()] - - df = pd.DataFrame() - - for path in paths: - chain_id = int(path.split("/")[-1]) - - try: - chain_rounds = fs.ls(f"{path}/rounds/") - except Exception as e: - print(f"Error reading {path}/rounds/") - print(f"Error: {e}") - continue - - chain_rounds = [ - round["name"] - for round in chain_rounds - if round["name"].split("/")[-1].startswith("0x") - ] - - for round in chain_rounds: - round_id = round.split("/")[-1] - try: - df_round = read_json_with_retry(f"{round}/{json_name}") - except Exception as e: - print(f"Error reading {round}/{json_name}") - print(f"Error: {e}") - continue - df_round["chainId"] = str(chain_id) - df_round["roundId"] = str(round_id) - df = pd.concat([df, df_round]) - - df = df.convert_dtypes() - - return df - - -@asset -def raw_passport_scores() -> pd.DataFrame: - file_url = f"{ALLO_INDEXER_URL}/passport_scores.json" - df = pd.read_json(file_url) - df = df.drop(columns=["error", "stamp_scores"]) - df["last_score_timestamp"] = pd.to_datetime( - df["last_score_timestamp"], errors="coerce" - ) - - return df[df["address"].str.startswith("0x")] - - -@asset -def raw_projects() -> pd.DataFrame: - projects = chain_file_aggregator("projects.json") - projects["metadata"] = projects["metadata"].apply(json.dumps) - return projects - - -@asset -def raw_prices() -> pd.DataFrame: - return chain_file_aggregator("prices.json") - - -@asset -def raw_rounds() -> pd.DataFrame: - rounds = chain_file_aggregator("rounds.json") - rounds["metadata"] = rounds["metadata"].apply(json.dumps) - return rounds - - -@asset -def raw_round_votes() -> pd.DataFrame: - return round_file_aggregator("votes.json") - - -@asset -def raw_round_applications() -> pd.DataFrame: - applications = round_file_aggregator("applications.json") - applications["metadata"] = applications["metadata"].apply(json.dumps) - applications["roundId"] = '"' + applications["roundId"] + '"' - applications = applications.convert_dtypes() - return applications - - -@asset -def raw_round_contributors() -> pd.DataFrame: - df = round_file_aggregator("contributors.json") - df["roundId"] = '"' + df["roundId"] + '"' - return df - - -@asset -def raw_chain_metadata(raw_rounds: pd.DataFrame) -> pd.DataFrame: - """ - Metadata for chains on which Gitcoin indexer registered at least one round. Source: `chainid.network/chains.json` - """ - interesting_chains = raw_rounds.chainId.unique() - - try: - chain_metadata = read_json_with_retry(CHAIN_METADATA_URL) - except Exception as e: - print(f"Error fetching chain list from {CHAIN_METADATA_URL}: {e}") - raise - - df = pd.DataFrame(chain_metadata) - df = df.convert_dtypes() - df.chainId = df.chainId.astype( - str - ) # Save as VARCHAR to stay consistent with other models. - filtered_df = df[df.chainId.isin(interesting_chains)] - - return filtered_df - - -@asset -def raw_allo_deployments() -> pd.DataFrame: - """ - Deployment address for all official allo contract deployments by Allo team, collected 07.01.24 - - Canonical source: https://github.com/allo-protocol/allo-contracts/blob/main/docs/CHAINS.md - Ingestion logic: https://gist.github.com/DistributedDoge/57e39c3e5cc207fcafdf4d377562ec33 - """ - ipfs_content = read_parquet_with_retry( - "https://cloudflare-ipfs.com/ipfs/QmWpnErRwVRLqdGsBC2J9NMngwzJtWErDZvf6wDqJ1ZVis" - ) - return ipfs_content - - -@asset(compute_kind="API", group_name="private_api") -def dune_allo_deployments( - dune: DuneResource, raw_allo_deployments: pd.DataFrame -) -> None: - """ - Uploads allo deployments to Dune. - """ - dune.upload_csv(raw_allo_deployments, "allo_contract_deployments") - - -@asset(compute_kind="API", group_name="private_api") -def ethereum_project_registry_tx(covalent_api: CovalentAPIResource): - """ - All Ethereum mainnet transactions targeting project registry, from Covalent - """ - - all_tx = covalent_api.fetch_all_tx_for_address( - "eth-mainnet", "0x03506eD3f57892C85DB20C36846e9c808aFe9ef4" - ) - - dataframes = [pd.DataFrame(data.get("items")) for data in all_tx] - combined_df = pd.concat(dataframes, ignore_index=True) - - return combined_df - - -@retry(tries=8, delay=2, backoff=2, max_delay=10) -def fetch_giveth_projects(url, query): - all_projects = [] - skip = 0 - - while True: - response = requests.post( - url, json={"query": query, "variables": {"skip": skip}} - ) - data = response.json() - - projects = data["data"]["allProjects"]["projects"] - all_projects.extend(projects) - skip += 50 - - if skip >= data["data"]["allProjects"]["totalCount"]: - break - return all_projects - - -@asset -def raw_giveth_projects(): - url = GIVETH_GQL_ENDPOINT - query = """ - query GetProjects($skip: Int!) { - allProjects(take: 50, limit: 50, skip: $skip) { - totalCount - projects { - title - totalDonations - totalTraceDonations - } - } - } - """ - - all_projects = fetch_giveth_projects(url, query) - giveth = pd.DataFrame(all_projects) - giveth.convert_dtypes() - return giveth - - -@asset -def raw_discourse_categories(): - """ - Listing of categories from "Discourse" of various communities. - - Use 'source' column to group categories by Discourse instance. - """ - forums = { - "Gitcoin": "https://gov.gitcoin.co", - "Giveth": "https://forum.giveth.io", - "Arbitrum": "https://forum.arbitrum.foundation", - "Optimism": "https://gov.optimism.io/", - } - - data = [] - for community, forum_address in forums.items(): - catalog = read_json_with_retry(f"{forum_address}/categories.json") - catalog = catalog["category_list"]["categories"] - for category in catalog: - category["source"] = community - data.extend(catalog) - - discourse_df = pd.DataFrame(data) - discourse_df = discourse_df.convert_dtypes() - return discourse_df diff --git a/ggdp/assets/allo.py b/ggdp/assets/allo.py new file mode 100644 index 0000000..91ae90d --- /dev/null +++ b/ggdp/assets/allo.py @@ -0,0 +1,219 @@ +import json + +import pandas as pd +from dagster import Backoff, RetryPolicy, asset +from regex import R + +from ..resources import GrantsStackIndexerGraphQL + + +@asset +def raw_allo_applications(indexer_graphql: GrantsStackIndexerGraphQL) -> pd.DataFrame: + query = """ + { + applications { + anchorAddress + chainId + createdAtBlock + createdByAddress + id + metadata + metadataCid + nodeId + projectId + roundId + status + statusSnapshots + statusUpdatedAtBlock + tags + totalAmountDonatedInUsd + totalDonationsCount + uniqueDonorsCount + } + } + """ + response = indexer_graphql.query(query) + df = pd.DataFrame(response["data"]["applications"]).convert_dtypes() + df["metadata"] = df["metadata"].apply(lambda x: json.dumps(x)) + + return df + + +@asset +def raw_allo_rounds(indexer_graphql: GrantsStackIndexerGraphQL) -> pd.DataFrame: + query = """ + { + rounds { + adminRole + applicationMetadata + applicationMetadataCid + applicationsEndTime + applicationsStartTime + chainId + createdAtBlock + createdByAddress + donationsEndTime + donationsStartTime + id + isReadyForPayout + managerRole + matchAmount + matchAmountInUsd + matchTokenAddress + nodeId + projectId + roundMetadata + roundMetadataCid + strategyAddress + strategyId + strategyName + tags + totalAmountDonatedInUsd + totalDonationsCount + uniqueDonorsCount + updatedAtBlock + } + } + """ + response = indexer_graphql.query(query) + df = pd.DataFrame(response["data"]["rounds"]) + + df["roundMetadata"] = df["roundMetadata"].apply(lambda x: json.dumps(x)) + df["applicationMetadata"] = df["applicationMetadata"].apply(lambda x: json.dumps(x)) + df["tags"] = df["tags"].apply(lambda x: json.dumps(x)) + + df = df.convert_dtypes() + return df + + +@asset +def raw_allo_donations(indexer_graphql: GrantsStackIndexerGraphQL) -> pd.DataFrame: + query = """ + query($first: Int, $offset: Int) { + donations(first: $first, offset: $offset) { + amountInUsd + amount + amountInRoundMatchToken + applicationId + blockNumber + chainId + id + donorAddress + nodeId + projectId + recipientAddress + roundId + tokenAddress + transactionHash + } + } + """ + response = indexer_graphql.paginated_query(query, size=10000) + df = pd.DataFrame(response).convert_dtypes() + + return df + + +@asset +def raw_allo_prices(indexer_graphql: GrantsStackIndexerGraphQL) -> pd.DataFrame: + query = """ + { + prices { + blockNumber + chainId + id + nodeId + priceInUsd + timestamp + tokenAddress + } + } + """ + response = indexer_graphql.query(query) + return pd.DataFrame(response["data"]["prices"]) + + +@asset +def raw_allo_projects(indexer_graphql: GrantsStackIndexerGraphQL) -> pd.DataFrame: + query = """ + { + projects { + anchorAddress + chainId + createdAtBlock + createdByAddress + id + metadata + metadataCid + name + nodeId + nonce + projectNumber + projectType + registryAddress + tags + updatedAtBlock + } + } + """ + response = indexer_graphql.query(query) + df = pd.DataFrame(response["data"]["projects"]) + df["metadata"] = df["metadata"].apply(lambda x: json.dumps(x)) + df = df.convert_dtypes() + + return df + + +@asset +def raw_allo_round_roles(indexer_graphql: GrantsStackIndexerGraphQL) -> pd.DataFrame: + query = """ + { + roundRoles { + address + chainId + createdAtBlock + nodeId + role + roundId + } + } + """ + response = indexer_graphql.query(query) + return pd.DataFrame(response["data"]["roundRoles"]) + + +@asset +def raw_allo_subscriptions(indexer_graphql: GrantsStackIndexerGraphQL) -> pd.DataFrame: + query = """ + { + subscriptions { + chainId + contractAddress + contractName + createdAt + fromBlock + id + indexedToBlock + indexedToLogIndex + nodeId + toBlock + updatedAt + } + } + """ + response = indexer_graphql.query(query) + return pd.DataFrame(response["data"]["subscriptions"]) + + +@asset(retry_policy=RetryPolicy(max_retries=3, delay=0.2, backoff=Backoff.EXPONENTIAL)) +def raw_allo_deployments() -> pd.DataFrame: + """ + Deployment address for all official allo contract deployments by Allo team, collected 07.01.24 + + Canonical source: https://github.com/allo-protocol/allo-contracts/blob/main/docs/CHAINS.md + Ingestion logic: https://gist.github.com/DistributedDoge/57e39c3e5cc207fcafdf4d377562ec33 + """ + ipfs_content = pd.read_parquet( + "https://ipfs.io/ipfs/QmWpnErRwVRLqdGsBC2J9NMngwzJtWErDZvf6wDqJ1ZVis" + ) + return ipfs_content diff --git a/ggdp/assets/other.py b/ggdp/assets/other.py new file mode 100644 index 0000000..3bb1233 --- /dev/null +++ b/ggdp/assets/other.py @@ -0,0 +1,135 @@ +import pandas as pd +import requests +from dagster import AssetIn, Backoff, RetryPolicy, asset +from tenacity import retry, wait_exponential, stop_after_attempt + +from ..resources import DuneResource, CovalentAPIResource + + +@asset( + retry_policy=RetryPolicy(max_retries=3, delay=0.2, backoff=Backoff.EXPONENTIAL), + ins={"raw_allo_rounds": AssetIn("raw_allo_rounds")}, +) +def raw_chain_metadata(raw_allo_rounds: pd.DataFrame) -> pd.DataFrame: + """ + Metadata for chains on which Gitcoin indexer registered at least one round. Source: `chainid.network/chains.json` + """ + interesting_chains = raw_allo_rounds.chainId.unique() + + df = pd.read_json("https://chainid.network/chains.json") + df = df.convert_dtypes() + df.chainId = df.chainId.astype(str) + filtered_df = df[df.chainId.isin(interesting_chains)] + + return filtered_df + + +@asset(compute_kind="API") +def dune_allo_deployments( + dune: DuneResource, raw_allo_deployments: pd.DataFrame +) -> None: + """ + Uploads allo deployments to Dune. + """ + dune.upload_csv(raw_allo_deployments, "allo_contract_deployments") + + +@asset(compute_kind="API") +def ethereum_project_registry_tx(covalent_api: CovalentAPIResource): + """ + All Ethereum mainnet transactions targeting project registry, from Covalent + """ + + all_tx = covalent_api.fetch_all_tx_for_address( + "eth-mainnet", "0x03506eD3f57892C85DB20C36846e9c808aFe9ef4" + ) + + dataframes = [pd.DataFrame(data.get("items")) for data in all_tx] + combined_df = pd.concat(dataframes, ignore_index=True) + + return combined_df + + +@retry( + stop=stop_after_attempt(8), + wait=wait_exponential(multiplier=1, min=4, max=10), +) +def fetch_giveth_projects(url, query): + all_projects = [] + skip = 0 + + while True: + response = requests.post( + url, json={"query": query, "variables": {"skip": skip}} + ) + data = response.json() + + projects = data["data"]["allProjects"]["projects"] + all_projects.extend(projects) + skip += 50 + + if skip >= data["data"]["allProjects"]["totalCount"]: + break + return all_projects + + +@asset +def raw_giveth_projects(): + url = "https://mainnet.serve.giveth.io/graphql" + query = """ + query GetProjects($skip: Int!) { + allProjects(take: 50, limit: 50, skip: $skip) { + totalCount + projects { + title + totalDonations + totalTraceDonations + } + } + } + """ + + all_projects = fetch_giveth_projects(url, query) + giveth = pd.DataFrame(all_projects) + giveth.convert_dtypes() + return giveth + + +@asset +def raw_discourse_categories(): + """ + Listing of categories from "Discourse" of various communities. + + Use 'source' column to group categories by Discourse instance. + """ + forums = { + "Gitcoin": "https://gov.gitcoin.co", + "Giveth": "https://forum.giveth.io", + "Arbitrum": "https://forum.arbitrum.foundation", + "Optimism": "https://gov.optimism.io/", + } + + data = [] + for community, forum_address in forums.items(): + catalog = pd.read_json(f"{forum_address}/categories.json") + catalog = catalog["category_list"]["categories"] + for category in catalog: + category["source"] = community + data.extend(catalog) + + discourse_df = pd.DataFrame(data) + discourse_df = discourse_df.convert_dtypes() + return discourse_df + + +@asset +def raw_gitcoin_passport_scores() -> pd.DataFrame: + file_url = "https://indexer-production.fly.dev/data/passport_scores.json" + df = pd.read_json(file_url) + df = df.drop(columns=["error", "stamp_scores"]) + + df["last_score_timestamp"] = pd.to_datetime( + df["last_score_timestamp"], errors="coerce" + ) + + return df[df["address"].str.startswith("0x")] diff --git a/ggdp/jobs.py b/ggdp/jobs.py deleted file mode 100644 index f48760c..0000000 --- a/ggdp/jobs.py +++ /dev/null @@ -1,15 +0,0 @@ -from dagster import AssetSelection, define_asset_job, load_assets_from_modules - -from . import assets - -assets = load_assets_from_modules(modules=[assets]) - -data_assets_job = define_asset_job( - name="data_assets_job", - selection=AssetSelection.groups("default"), -) - -private_apis_assets_job = define_asset_job( - name="private_apis_assets_job", - selection=AssetSelection.groups("private_api"), -) diff --git a/ggdp/resources.py b/ggdp/resources.py index 6c42bbf..2bed847 100644 --- a/ggdp/resources.py +++ b/ggdp/resources.py @@ -4,6 +4,7 @@ import pandas as pd import requests from dagster import ConfigurableResource +from tenacity import retry, wait_exponential, stop_after_attempt class CovalentAPIResource(ConfigurableResource): @@ -65,3 +66,43 @@ def upload_csv(self, df: pd.DataFrame, name: str) -> requests.Response: response.raise_for_status() return response + + +class GrantsStackIndexerGraphQL(ConfigurableResource): + ENDPOINT: str = "https://grants-stack-indexer-v2.gitcoin.co/graphql" + + @retry( + stop=stop_after_attempt(8), + wait=wait_exponential(multiplier=1, min=4, max=10), + ) + def query(self, query: str, variables: dict = {}): + response = requests.post( + self.ENDPOINT, + json={"query": query, "variables": variables}, + ) + response.raise_for_status() + return response.json() + + def paginated_query(self, query: str, variables: dict = {}, size=100): + output = [] + page = 0 + + while True: + latest_data = self.query( + query, + variables={ + **variables, + "first": size, + "offset": page * size, + }, + ) + + first_key = next(iter(latest_data["data"])) + + if not latest_data["data"] or len(latest_data["data"][first_key]) < size: + break + + output.extend(latest_data["data"][first_key]) + page += 1 + + return output diff --git a/portal/_quarto.yml b/portal/_quarto.yml index a87253d..f05a4eb 100644 --- a/portal/_quarto.yml +++ b/portal/_quarto.yml @@ -7,12 +7,10 @@ website: left: - href: index.qmd text: Home - - href: https://ipfs.filebase.io/ipns/k51qzi5uqu5dhn3p5xdkp8n6azd4l1mma5zujinkeewhvuh5oq4qvt7etk9tvc/ + - href: data text: Data - href: about.qmd text: About - - href: python-quickstart.ipynb - text: Python Quickstart - href: catalog.ipynb text: Catalog - href: dbt diff --git a/portal/about.qmd b/portal/about.qmd index a637b55..bcee7a2 100644 --- a/portal/about.qmd +++ b/portal/about.qmd @@ -6,11 +6,11 @@ The project covers the code and artifacts to help process Gitcoin Grants data fr ## ⚙️ How It Works -The portal is a customized instance of [Datadex](https://github.com/davidgasquez/datadex). With each push to `main`, a GitHub action will do the following: +The portal is a customized instance of [Datadex](https://github.com/davidgasquez/datadex). With each push to `main`, a GitHub action will: -1. Scrape the [Allo Indexer Data API](https://indexer-production.fly.dev/data/) to produce tidy tables like `rounds` or `projects`. -2. Clean, transform, and join the tables to produce a set of final models. -3. The models are then exported to Parquet files and pushed to IPFS. +1. Scraper and ingest data from multiple sources. +2. Clean, transform, and join the tables to produce a set of final curated models. +3. Export all the datasets as Parquet files and push them to IPFS. ## 📦 Key Features @@ -40,23 +40,24 @@ The portal is a customized instance of [Datadex](https://github.com/davidgasquez ```{ojs} ggdp = DuckDBClient.of() +url = "https://ipfs.io/ipns/k51qzi5uqu5dhn3p5xdkp8n6azd4l1mma5zujinkeewhvuh5oq4qvt7etk9tvc/data" number_of_rounds = ggdp.query(` select count(id) as c - from parquet_scan('${url}/rounds.parquet') + from parquet_scan('${url}/allo_rounds.parquet') `) round_votes = ggdp.query(` select count(id) as c - from parquet_scan('${url}/round_votes.parquet') + from parquet_scan('${url}/allo_donations.parquet') `) projects = ggdp.query(` select count(1) as c - from parquet_scan('${url}/projects.parquet') + from parquet_scan('${url}/allo_projects.parquet') `) round_votes_scalar = round_votes[0]["c"] diff --git a/portal/catalog.ipynb b/portal/catalog.ipynb index 163e4f6..eb93f93 100644 --- a/portal/catalog.ipynb +++ b/portal/catalog.ipynb @@ -84,7 +84,7 @@ { "data": { "text/markdown": [ - "[application_answers.parquet](#application_answers.parquet) " + "[allo_applications.parquet](#allo_applications.parquet) " ], "text/plain": [ "" @@ -96,7 +96,67 @@ { "data": { "text/markdown": [ - "[chain_metadata.parquet](#chain_metadata.parquet) " + "[allo_deployments.parquet](#allo_deployments.parquet) " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "[allo_donations.parquet](#allo_donations.parquet) " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "[allo_prices.parquet](#allo_prices.parquet) " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "[allo_projects.parquet](#allo_projects.parquet) " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "[allo_rounds.parquet](#allo_rounds.parquet) " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "[allo_subscriptions.parquet](#allo_subscriptions.parquet) " ], "text/plain": [ "" @@ -108,7 +168,7 @@ { "data": { "text/markdown": [ - "[passport_scores.parquet](#passport_scores.parquet) " + "[application_answers.parquet](#application_answers.parquet) " ], "text/plain": [ "" @@ -120,7 +180,7 @@ { "data": { "text/markdown": [ - "[projects.parquet](#projects.parquet) " + "[chain_metadata.parquet](#chain_metadata.parquet) " ], "text/plain": [ "" @@ -132,7 +192,7 @@ { "data": { "text/markdown": [ - "[round_applications.parquet](#round_applications.parquet) " + "[gitcoin_passport_scores.parquet](#gitcoin_passport_scores.parquet) " ], "text/plain": [ "" @@ -144,7 +204,7 @@ { "data": { "text/markdown": [ - "[round_votes.parquet](#round_votes.parquet) " + "[giveth_projects.parquet](#giveth_projects.parquet) " ], "text/plain": [ "" @@ -156,7 +216,7 @@ { "data": { "text/markdown": [ - "[rounds.parquet](#rounds.parquet) " + "[public_ethereum_project_registry_tx.parquet](#public_ethereum_project_registry_tx.parquet) " ], "text/plain": [ "" @@ -187,7 +247,55 @@ { "data": { "text/markdown": [ - "[public_raw_chain_metadata.parquet](#public_raw_chain_metadata.parquet) " + "[public_raw_allo_applications.parquet](#public_raw_allo_applications.parquet) " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "[public_raw_allo_deployments.parquet](#public_raw_allo_deployments.parquet) " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "[public_raw_allo_donations.parquet](#public_raw_allo_donations.parquet) " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "[public_raw_allo_prices.parquet](#public_raw_allo_prices.parquet) " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "[public_raw_allo_projects.parquet](#public_raw_allo_projects.parquet) " ], "text/plain": [ "" @@ -199,7 +307,7 @@ { "data": { "text/markdown": [ - "[public_raw_passport_scores.parquet](#public_raw_passport_scores.parquet) " + "[public_raw_allo_round_roles.parquet](#public_raw_allo_round_roles.parquet) " ], "text/plain": [ "" @@ -211,7 +319,7 @@ { "data": { "text/markdown": [ - "[public_raw_prices.parquet](#public_raw_prices.parquet) " + "[public_raw_allo_rounds.parquet](#public_raw_allo_rounds.parquet) " ], "text/plain": [ "" @@ -223,7 +331,7 @@ { "data": { "text/markdown": [ - "[public_raw_projects.parquet](#public_raw_projects.parquet) " + "[public_raw_allo_subscriptions.parquet](#public_raw_allo_subscriptions.parquet) " ], "text/plain": [ "" @@ -235,7 +343,7 @@ { "data": { "text/markdown": [ - "[public_raw_round_applications.parquet](#public_raw_round_applications.parquet) " + "[public_raw_chain_metadata.parquet](#public_raw_chain_metadata.parquet) " ], "text/plain": [ "" @@ -247,7 +355,7 @@ { "data": { "text/markdown": [ - "[public_raw_round_contributors.parquet](#public_raw_round_contributors.parquet) " + "[public_raw_discourse_categories.parquet](#public_raw_discourse_categories.parquet) " ], "text/plain": [ "" @@ -259,7 +367,7 @@ { "data": { "text/markdown": [ - "[public_raw_round_votes.parquet](#public_raw_round_votes.parquet) " + "[public_raw_gitcoin_passport_scores.parquet](#public_raw_gitcoin_passport_scores.parquet) " ], "text/plain": [ "" @@ -271,7 +379,7 @@ { "data": { "text/markdown": [ - "[public_raw_rounds.parquet](#public_raw_rounds.parquet) " + "[public_raw_giveth_projects.parquet](#public_raw_giveth_projects.parquet) " ], "text/plain": [ "" @@ -337,7 +445,7 @@ { "data": { "text/markdown": [ - "## [application_answers.parquet](#file-listing)" + "## [allo_applications.parquet](#file-listing)" ], "text/plain": [ "" @@ -349,7 +457,7 @@ { "data": { "text/markdown": [ - "question_id: string
project_id: string
application_id: int64
chain_id: string
round_id: string
question: string
question_type: string
answer: string" + "anchor_address: string
chain_id: string
created_at_block: string
created_by_address: string
id: string
metadata: string
metadata_signature: string
metadata_application_recipient: string
metadata_cid: string
node_id: string
project_id: string
round_id: string
status: string
status_snapshots: list>>
child 0, element: struct>
child 0, status: string
child 1, statusUpdatedAtBlock: struct
child 0, type: string
child 1, value: string
status_updated_at_block: string
tags: list
child 0, element: string
total_amount_donated_in_usd: double
total_donations_count: int64
unique_donors_count: int64" ], "text/plain": [ "" @@ -379,83 +487,192 @@ " \n", " \n", " \n", - " question_id\n", - " project_id\n", - " application_id\n", + " anchor_address\n", " chain_id\n", + " created_at_block\n", + " created_by_address\n", + " id\n", + " metadata\n", + " metadata_signature\n", + " metadata_application_recipient\n", + " metadata_cid\n", + " node_id\n", + " project_id\n", " round_id\n", - " question\n", - " question_type\n", - " answer\n", + " status\n", + " status_snapshots\n", + " status_updated_at_block\n", + " tags\n", + " total_amount_donated_in_usd\n", + " total_donations_count\n", + " unique_donors_count\n", " \n", " \n", " \n", " \n", " 0\n", + " None\n", " 1\n", - " 0x27ecde7fbbd667c76299df57b340b18b025ceb0d5dd0...\n", + " 17787259\n", + " 0xf2af41a645f7b439ed4c9149d1ce687d33181b93\n", + " 0\n", + " {\"signature\": \"0x471f4b214d70e1fc15dbfe7e8f4a5...\n", + " 0x471f4b214d70e1fc15dbfe7e8f4a57f5e493c0cf5dd2...\n", + " 0xf2af41a645f7b439ed4c9149d1ce687d33181b93\n", + " bafkreiawz7cmcfmydfhtmro2oluzuzvfzsbs7idihxzjh...\n", + " WyJhcHBsaWNhdGlvbnMiLDEsIjB4MDVkZjc2YmM0NDZjZW...\n", + " 0xb25b0a149ce400e9c5906308a7079da37a99c0cab0aa...\n", + " 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b\n", + " PENDING\n", + " [{'status': 'PENDING', 'statusUpdatedAtBlock':...\n", + " 17787259\n", + " [allo-v1]\n", + " 0.00000\n", + " 0\n", " 0\n", - " 280\n", - " 0xfff13d967d27b564838d413d98a53e0c013fa7d9\n", - " Funding Sources\n", - " short-answer\n", - " ok\n", " \n", " \n", " 1\n", - " 2\n", - " 0x27ecde7fbbd667c76299df57b340b18b025ceb0d5dd0...\n", + " None\n", + " 1\n", + " 17802994\n", + " 0x6da84e637ffb51c69de568a11828a30b4886d5cb\n", + " 1\n", + " {\"signature\": \"0x69d0a4b51f548782de428ed699408...\n", + " 0x69d0a4b51f548782de428ed699408f3db1d113bd1fc5...\n", + " 0x6da84e637ffb51c69de568a11828a30b4886d5cb\n", + " bafkreifegp2jfsgidvve6xednoixiryjawro3fmfkiz3q...\n", + " WyJhcHBsaWNhdGlvbnMiLDEsIjB4MDVkZjc2YmM0NDZjZW...\n", + " 0xaebed2cd5ab824350703b4d037ace0e3c23607e4e501...\n", + " 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b\n", + " PENDING\n", + " [{'status': 'PENDING', 'statusUpdatedAtBlock':...\n", + " 17802994\n", + " [allo-v1]\n", + " 0.00000\n", + " 0\n", " 0\n", - " 280\n", - " 0xfff13d967d27b564838d413d98a53e0c013fa7d9\n", - " Team Size\n", - " number\n", - " 123\n", " \n", " \n", " 2\n", + " None\n", " 1\n", - " 0xae65357bd3576496fffa2f659acdd5681115d7799408...\n", + " 17031319\n", + " 0xff2abef3af9655d96da983916e066134adea6390\n", " 0\n", - " 280\n", - " 0x2f9e1523fe85a26602bf6518f6dfb70d44721dc1\n", - " Funding Sources\n", - " short-answer\n", - " grants\n", + " {\"signature\": \"0x4c3db176694bdfc0f9e4a04738205...\n", + " 0x4c3db176694bdfc0f9e4a04738205d562ef31a026699...\n", + " 0xff2abef3af9655d96da983916e066134adea6390\n", + " bafkreibopq7uesrp5amqsqnyrwmfikem5iweivwbkzyht...\n", + " WyJhcHBsaWNhdGlvbnMiLDEsIjB4MTJiYjViYmJmZTU5Nm...\n", + " 0x6aeb3ddab061203d32594b03901bf458679a66fbeab9...\n", + " 0x12bb5bbbfe596dbc489d209299b8302c3300fa40\n", + " APPROVED\n", + " [{'status': 'PENDING', 'statusUpdatedAtBlock':...\n", + " 17170541\n", + " [allo-v1]\n", + " 876.12115\n", + " 216\n", + " 211\n", " \n", " \n", " 3\n", - " 2\n", - " 0xae65357bd3576496fffa2f659acdd5681115d7799408...\n", - " 0\n", - " 280\n", - " 0x2f9e1523fe85a26602bf6518f6dfb70d44721dc1\n", - " Team Size\n", - " number\n", - " 2\n", + " None\n", + " 1\n", + " 17033387\n", + " 0xb17b3e7910af9d232cb683c083ef73c34521fc8a\n", + " 1\n", + " {\"signature\": \"0xc9f5e29fcb4db0b0c9a5909f68c16...\n", + " 0xc9f5e29fcb4db0b0c9a5909f68c162ea5d16a275f705...\n", + " 0x690315449efad5f8b06a356f16eecfc41f475f70\n", + " bafkreiazdoqxpfeeazyfonpnzgpfd5rfa5aukq5jkmkhd...\n", + " WyJhcHBsaWNhdGlvbnMiLDEsIjB4MTJiYjViYmJmZTU5Nm...\n", + " 0xdeffc2d190ddec88d06ba86e1eb09abe5a9ccb49ab1d...\n", + " 0x12bb5bbbfe596dbc489d209299b8302c3300fa40\n", + " APPROVED\n", + " [{'status': 'PENDING', 'statusUpdatedAtBlock':...\n", + " 17170541\n", + " [allo-v1]\n", + " 268.81372\n", + " 54\n", + " 51\n", " \n", " \n", "\n", "" ], "text/plain": [ - " question_id project_id \\\n", - "0 1 0x27ecde7fbbd667c76299df57b340b18b025ceb0d5dd0... \n", - "1 2 0x27ecde7fbbd667c76299df57b340b18b025ceb0d5dd0... \n", - "2 1 0xae65357bd3576496fffa2f659acdd5681115d7799408... \n", - "3 2 0xae65357bd3576496fffa2f659acdd5681115d7799408... \n", + " anchor_address chain_id created_at_block \\\n", + "0 None 1 17787259 \n", + "1 None 1 17802994 \n", + "2 None 1 17031319 \n", + "3 None 1 17033387 \n", + "\n", + " created_by_address id \\\n", + "0 0xf2af41a645f7b439ed4c9149d1ce687d33181b93 0 \n", + "1 0x6da84e637ffb51c69de568a11828a30b4886d5cb 1 \n", + "2 0xff2abef3af9655d96da983916e066134adea6390 0 \n", + "3 0xb17b3e7910af9d232cb683c083ef73c34521fc8a 1 \n", + "\n", + " metadata \\\n", + "0 {\"signature\": \"0x471f4b214d70e1fc15dbfe7e8f4a5... \n", + "1 {\"signature\": \"0x69d0a4b51f548782de428ed699408... \n", + "2 {\"signature\": \"0x4c3db176694bdfc0f9e4a04738205... \n", + "3 {\"signature\": \"0xc9f5e29fcb4db0b0c9a5909f68c16... \n", + "\n", + " metadata_signature \\\n", + "0 0x471f4b214d70e1fc15dbfe7e8f4a57f5e493c0cf5dd2... \n", + "1 0x69d0a4b51f548782de428ed699408f3db1d113bd1fc5... \n", + "2 0x4c3db176694bdfc0f9e4a04738205d562ef31a026699... \n", + "3 0xc9f5e29fcb4db0b0c9a5909f68c162ea5d16a275f705... \n", + "\n", + " metadata_application_recipient \\\n", + "0 0xf2af41a645f7b439ed4c9149d1ce687d33181b93 \n", + "1 0x6da84e637ffb51c69de568a11828a30b4886d5cb \n", + "2 0xff2abef3af9655d96da983916e066134adea6390 \n", + "3 0x690315449efad5f8b06a356f16eecfc41f475f70 \n", + "\n", + " metadata_cid \\\n", + "0 bafkreiawz7cmcfmydfhtmro2oluzuzvfzsbs7idihxzjh... \n", + "1 bafkreifegp2jfsgidvve6xednoixiryjawro3fmfkiz3q... \n", + "2 bafkreibopq7uesrp5amqsqnyrwmfikem5iweivwbkzyht... \n", + "3 bafkreiazdoqxpfeeazyfonpnzgpfd5rfa5aukq5jkmkhd... \n", + "\n", + " node_id \\\n", + "0 WyJhcHBsaWNhdGlvbnMiLDEsIjB4MDVkZjc2YmM0NDZjZW... \n", + "1 WyJhcHBsaWNhdGlvbnMiLDEsIjB4MDVkZjc2YmM0NDZjZW... \n", + "2 WyJhcHBsaWNhdGlvbnMiLDEsIjB4MTJiYjViYmJmZTU5Nm... \n", + "3 WyJhcHBsaWNhdGlvbnMiLDEsIjB4MTJiYjViYmJmZTU5Nm... \n", + "\n", + " project_id \\\n", + "0 0xb25b0a149ce400e9c5906308a7079da37a99c0cab0aa... \n", + "1 0xaebed2cd5ab824350703b4d037ace0e3c23607e4e501... \n", + "2 0x6aeb3ddab061203d32594b03901bf458679a66fbeab9... \n", + "3 0xdeffc2d190ddec88d06ba86e1eb09abe5a9ccb49ab1d... \n", "\n", - " application_id chain_id round_id \\\n", - "0 0 280 0xfff13d967d27b564838d413d98a53e0c013fa7d9 \n", - "1 0 280 0xfff13d967d27b564838d413d98a53e0c013fa7d9 \n", - "2 0 280 0x2f9e1523fe85a26602bf6518f6dfb70d44721dc1 \n", - "3 0 280 0x2f9e1523fe85a26602bf6518f6dfb70d44721dc1 \n", + " round_id status \\\n", + "0 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b PENDING \n", + "1 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b PENDING \n", + "2 0x12bb5bbbfe596dbc489d209299b8302c3300fa40 APPROVED \n", + "3 0x12bb5bbbfe596dbc489d209299b8302c3300fa40 APPROVED \n", "\n", - " question question_type answer \n", - "0 Funding Sources short-answer ok \n", - "1 Team Size number 123 \n", - "2 Funding Sources short-answer grants \n", - "3 Team Size number 2 " + " status_snapshots status_updated_at_block \\\n", + "0 [{'status': 'PENDING', 'statusUpdatedAtBlock':... 17787259 \n", + "1 [{'status': 'PENDING', 'statusUpdatedAtBlock':... 17802994 \n", + "2 [{'status': 'PENDING', 'statusUpdatedAtBlock':... 17170541 \n", + "3 [{'status': 'PENDING', 'statusUpdatedAtBlock':... 17170541 \n", + "\n", + " tags total_amount_donated_in_usd total_donations_count \\\n", + "0 [allo-v1] 0.00000 0 \n", + "1 [allo-v1] 0.00000 0 \n", + "2 [allo-v1] 876.12115 216 \n", + "3 [allo-v1] 268.81372 54 \n", + "\n", + " unique_donors_count \n", + "0 0 \n", + "1 0 \n", + "2 211 \n", + "3 51 " ] }, "metadata": {}, @@ -464,7 +681,7 @@ { "data": { "text/markdown": [ - "## [chain_metadata.parquet](#file-listing)" + "## [allo_deployments.parquet](#file-listing)" ], "text/plain": [ "" @@ -476,7 +693,7 @@ { "data": { "text/markdown": [ - "name: string
short_name: string
info_url: string
chain_id: string
network_id: int64
native_currency: struct
child 0, name: string
child 1, symbol: string
child 2, decimals: int32
ens: struct
child 0, registry: string
explorers: list>
child 0, element: map
child 0, element: struct not null
child 0, key: string not null
child 1, value: string
rpc: list
child 0, element: string
parent: struct>>
child 0, type: string
child 1, chain: string
child 2, bridges: list>
child 0, element: struct
child 0, url: string" + "address: string
chain_name: string
contract: string" ], "text/plain": [ "" @@ -506,105 +723,52 @@ " \n", " \n", " \n", - " name\n", - " short_name\n", - " info_url\n", - " chain_id\n", - " network_id\n", - " native_currency\n", - " ens\n", - " explorers\n", - " rpc\n", - " parent\n", + " address\n", + " chain_name\n", + " contract\n", " \n", " \n", " \n", " \n", " 0\n", + " 0x56296242ca408ba36393f3981879ff9692f193cc\n", " Ethereum Mainnet\n", - " eth\n", - " https://ethereum.org\n", - " 1\n", - " 1\n", - " {'name': 'Ether', 'symbol': 'ETH', 'decimals':...\n", - " {'registry': '0x00000000000C2E074eC69A0dFb2997...\n", - " [[(name, etherscan), (url, https://etherscan.i...\n", - " [https://mainnet.infura.io/v3/${INFURA_API_KEY...\n", - " None\n", + " ProgramFactory\n", " \n", " \n", " 1\n", - " OP Mainnet\n", - " oeth\n", - " https://optimism.io\n", - " 10\n", - " 10\n", - " {'name': 'Ether', 'symbol': 'ETH', 'decimals':...\n", - " None\n", - " [[(name, etherscan), (url, https://optimistic....\n", - " [https://mainnet.optimism.io, https://optimism...\n", - " None\n", + " 0x0bfa0aaf5f2d81f859e85c8e82a3fc5b624fc6e8\n", + " Ethereum Mainnet\n", + " ProgramImplementation\n", " \n", " \n", " 2\n", - " Polygon Mainnet\n", - " matic\n", - " https://polygon.technology/\n", - " 137\n", - " 137\n", - " {'name': 'MATIC', 'symbol': 'MATIC', 'decimals...\n", - " None\n", - " [[(name, polygonscan), (url, https://polygonsc...\n", - " [https://polygon-rpc.com/, https://rpc-mainnet...\n", - " None\n", + " 0x4a850f463d1c4842937c5bc9540dbc803d744c9f\n", + " Ethereum Mainnet\n", + " QuadraticFundingVotingStrategyFactory\n", " \n", " \n", " 3\n", - " Fantom Opera\n", - " ftm\n", - " https://fantom.foundation\n", - " 250\n", - " 250\n", - " {'name': 'Fantom', 'symbol': 'FTM', 'decimals'...\n", - " None\n", - " [[(name, ftmscan), (url, https://ftmscan.com),...\n", - " [https://rpc.ftm.tools, https://fantom.publicn...\n", - " None\n", + " 0xddc143f736f912ae6aaf2fcef2c78b267745b0f2\n", + " Ethereum Mainnet\n", + " QFVotingStrategyImplementation\n", " \n", " \n", "\n", "" ], "text/plain": [ - " name short_name info_url chain_id \\\n", - "0 Ethereum Mainnet eth https://ethereum.org 1 \n", - "1 OP Mainnet oeth https://optimism.io 10 \n", - "2 Polygon Mainnet matic https://polygon.technology/ 137 \n", - "3 Fantom Opera ftm https://fantom.foundation 250 \n", - "\n", - " network_id native_currency \\\n", - "0 1 {'name': 'Ether', 'symbol': 'ETH', 'decimals':... \n", - "1 10 {'name': 'Ether', 'symbol': 'ETH', 'decimals':... \n", - "2 137 {'name': 'MATIC', 'symbol': 'MATIC', 'decimals... \n", - "3 250 {'name': 'Fantom', 'symbol': 'FTM', 'decimals'... \n", - "\n", - " ens \\\n", - "0 {'registry': '0x00000000000C2E074eC69A0dFb2997... \n", - "1 None \n", - "2 None \n", - "3 None \n", - "\n", - " explorers \\\n", - "0 [[(name, etherscan), (url, https://etherscan.i... \n", - "1 [[(name, etherscan), (url, https://optimistic.... \n", - "2 [[(name, polygonscan), (url, https://polygonsc... \n", - "3 [[(name, ftmscan), (url, https://ftmscan.com),... \n", + " address chain_name \\\n", + "0 0x56296242ca408ba36393f3981879ff9692f193cc Ethereum Mainnet \n", + "1 0x0bfa0aaf5f2d81f859e85c8e82a3fc5b624fc6e8 Ethereum Mainnet \n", + "2 0x4a850f463d1c4842937c5bc9540dbc803d744c9f Ethereum Mainnet \n", + "3 0xddc143f736f912ae6aaf2fcef2c78b267745b0f2 Ethereum Mainnet \n", "\n", - " rpc parent \n", - "0 [https://mainnet.infura.io/v3/${INFURA_API_KEY... None \n", - "1 [https://mainnet.optimism.io, https://optimism... None \n", - "2 [https://polygon-rpc.com/, https://rpc-mainnet... None \n", - "3 [https://rpc.ftm.tools, https://fantom.publicn... None " + " contract \n", + "0 ProgramFactory \n", + "1 ProgramImplementation \n", + "2 QuadraticFundingVotingStrategyFactory \n", + "3 QFVotingStrategyImplementation " ] }, "metadata": {}, @@ -613,7 +777,7 @@ { "data": { "text/markdown": [ - "## [passport_scores.parquet](#file-listing)" + "## [allo_donations.parquet](#file-listing)" ], "text/plain": [ "" @@ -625,7 +789,7 @@ { "data": { "text/markdown": [ - "address: string
score: int64
status: string
last_score_timestamp: timestamp[us, tz=UTC]
evidence_type: string
evidence_success: string
evidence_raw_score: string
evidence_threshold: string" + "amount_in_usd: double
amount: string
amount_in_round_match_token: string
application_id: string
block_number: string
chain_id: int64
id: string
donor_address: string
node_id: string
project_id: string
recipient_address: string
round_id: string
token_address: string
transaction_hash: string" ], "text/plain": [ "" @@ -655,83 +819,149 @@ " \n", " \n", " \n", - " address\n", - " score\n", - " status\n", - " last_score_timestamp\n", - " evidence_type\n", - " evidence_success\n", - " evidence_raw_score\n", - " evidence_threshold\n", + " amount_in_usd\n", + " amount\n", + " amount_in_round_match_token\n", + " application_id\n", + " block_number\n", + " chain_id\n", + " id\n", + " donor_address\n", + " node_id\n", + " project_id\n", + " recipient_address\n", + " round_id\n", + " token_address\n", + " transaction_hash\n", " \n", " \n", " \n", " \n", " 0\n", - " 0x0000000000000000000000000000000000000000\n", - " 0\n", - " DONE\n", - " 2023-12-29 08:07:07.327000+00:00\n", - " ThresholdScoreCheck\n", - " false\n", + " 0.016360\n", + " 10000000000000\n", + " 16366460000000000\n", " 0\n", - " 20.00000\n", + " 108816979\n", + " 10\n", + " 0x00002acaece3562ac4eb6885a41a37e357ef54d3cb2c...\n", + " 0x285bc2970e54d53ea2fbe4b0e1bba2677a205742\n", + " WyJkb25hdGlvbnMiLCIweDAwMDAyYWNhZWNlMzU2MmFjNG...\n", + " 0xcc6d33fe291d0fafb19cf8b833dc27d2f469fac52e3c...\n", + " 0x5afc7720b161788f9d833555b7ebc3274fd98da1\n", + " 0x8de918f0163b2021839a8d84954dd7e8e151326d\n", + " 0x0000000000000000000000000000000000000000\n", + " 0x379bced92b07c59756d02243b76ae8ebd5042b41ee90...\n", " \n", " \n", " 1\n", - " 0x0000000000098341a924bd53454654a0dbbc4e43\n", - " 0\n", - " DONE\n", - " 2023-12-29 08:20:47.033000+00:00\n", - " ThresholdScoreCheck\n", - " false\n", - " 0\n", - " 20.00000\n", + " 0.000052\n", + " 67390000000000\n", + " 51\n", + " 17\n", + " 50530864\n", + " 137\n", + " 0x00002e5ba02e1c78e782b69c7c8f8b1bab18e57f290c...\n", + " 0xf49eb7f170f07b74d26195b1e67b5442ebcef5ec\n", + " WyJkb25hdGlvbnMiLCIweDAwMDAyZTViYTAyZTFjNzhlNz...\n", + " 0xad02fe3124cef38f8c4fd5a44302713e49458d60a84d...\n", + " 0x35292bbd442373046a6fb4bf7e2529fa9a8d5bb0\n", + " 0xa1d52f9b5339792651861329a046dd912761e9a9\n", + " 0x0000000000000000000000000000000000000000\n", + " 0x4058469617e5123582f1e682f4b5a18337dc0fa41a15...\n", " \n", " \n", " 2\n", - " 0x0000000000ce6d8c1fba76f26d6cc5db71432710\n", - " 0\n", - " DONE\n", - " 2023-12-29 10:58:03.829000+00:00\n", - " ThresholdScoreCheck\n", - " false\n", - " 16.881048\n", - " 20.00000\n", + " 1.001680\n", + " 610000000000000\n", + " 1002163510000000000\n", + " 2\n", + " 108693843\n", + " 10\n", + " 0x0000590057ea1f42fe672e48933670847d644e095760...\n", + " 0x5477d4639e998ddda7e97f44ad159f4b7f1e3fc7\n", + " WyJkb25hdGlvbnMiLCIweDAwMDA1OTAwNTdlYTFmNDJmZT...\n", + " 0xbe519f8c8f7ff2acb359dd757c5d2bf25b05d9fd29b8...\n", + " 0x3a5bd1e37b099ae3386d13947b6a90d97675e5e3\n", + " 0x8de918f0163b2021839a8d84954dd7e8e151326d\n", + " 0x0000000000000000000000000000000000000000\n", + " 0xa036a626ec861c214a235f93f7fbb7d3f8b1b213df46...\n", " \n", " \n", " 3\n", - " 0x00000000037a08ce8c4917a5c58f40c85367df0c\n", - " 1\n", - " DONE\n", - " 2023-12-29 07:29:03.207000+00:00\n", - " ThresholdScoreCheck\n", - " true\n", - " 25.333170\n", - " 20.00000\n", + " 1.033441\n", + " 530000000000000\n", + " 1034735860000000000\n", + " 73\n", + " 112385228\n", + " 10\n", + " 0x0000615cbcd17b135557d85ca64673bb4b711444e467...\n", + " 0xf1ed61a80c7469273fea62564ec70a48e09fe170\n", + " WyJkb25hdGlvbnMiLCIweDAwMDA2MTVjYmNkMTdiMTM1NT...\n", + " 0x29e1256cffdb522383bc943035ecfa518cc3051f2438...\n", + " 0x3cc9f396430bc766ac8aa57fc28aebc5919a5d81\n", + " 0x5eb890e41c8d2cff75ea942085e406bb90016561\n", + " 0x0000000000000000000000000000000000000000\n", + " 0x56c48d387bb3316ad15476d1712a202ad87e14c74d20...\n", " \n", " \n", "\n", "" ], "text/plain": [ - " address score status \\\n", - "0 0x0000000000000000000000000000000000000000 0 DONE \n", - "1 0x0000000000098341a924bd53454654a0dbbc4e43 0 DONE \n", - "2 0x0000000000ce6d8c1fba76f26d6cc5db71432710 0 DONE \n", - "3 0x00000000037a08ce8c4917a5c58f40c85367df0c 1 DONE \n", + " amount_in_usd amount amount_in_round_match_token application_id \\\n", + "0 0.016360 10000000000000 16366460000000000 0 \n", + "1 0.000052 67390000000000 51 17 \n", + "2 1.001680 610000000000000 1002163510000000000 2 \n", + "3 1.033441 530000000000000 1034735860000000000 73 \n", "\n", - " last_score_timestamp evidence_type evidence_success \\\n", - "0 2023-12-29 08:07:07.327000+00:00 ThresholdScoreCheck false \n", - "1 2023-12-29 08:20:47.033000+00:00 ThresholdScoreCheck false \n", - "2 2023-12-29 10:58:03.829000+00:00 ThresholdScoreCheck false \n", - "3 2023-12-29 07:29:03.207000+00:00 ThresholdScoreCheck true \n", + " block_number chain_id id \\\n", + "0 108816979 10 0x00002acaece3562ac4eb6885a41a37e357ef54d3cb2c... \n", + "1 50530864 137 0x00002e5ba02e1c78e782b69c7c8f8b1bab18e57f290c... \n", + "2 108693843 10 0x0000590057ea1f42fe672e48933670847d644e095760... \n", + "3 112385228 10 0x0000615cbcd17b135557d85ca64673bb4b711444e467... \n", "\n", - " evidence_raw_score evidence_threshold \n", - "0 0 20.00000 \n", - "1 0 20.00000 \n", - "2 16.881048 20.00000 \n", - "3 25.333170 20.00000 " + " donor_address \\\n", + "0 0x285bc2970e54d53ea2fbe4b0e1bba2677a205742 \n", + "1 0xf49eb7f170f07b74d26195b1e67b5442ebcef5ec \n", + "2 0x5477d4639e998ddda7e97f44ad159f4b7f1e3fc7 \n", + "3 0xf1ed61a80c7469273fea62564ec70a48e09fe170 \n", + "\n", + " node_id \\\n", + "0 WyJkb25hdGlvbnMiLCIweDAwMDAyYWNhZWNlMzU2MmFjNG... \n", + "1 WyJkb25hdGlvbnMiLCIweDAwMDAyZTViYTAyZTFjNzhlNz... \n", + "2 WyJkb25hdGlvbnMiLCIweDAwMDA1OTAwNTdlYTFmNDJmZT... \n", + "3 WyJkb25hdGlvbnMiLCIweDAwMDA2MTVjYmNkMTdiMTM1NT... \n", + "\n", + " project_id \\\n", + "0 0xcc6d33fe291d0fafb19cf8b833dc27d2f469fac52e3c... \n", + "1 0xad02fe3124cef38f8c4fd5a44302713e49458d60a84d... \n", + "2 0xbe519f8c8f7ff2acb359dd757c5d2bf25b05d9fd29b8... \n", + "3 0x29e1256cffdb522383bc943035ecfa518cc3051f2438... \n", + "\n", + " recipient_address \\\n", + "0 0x5afc7720b161788f9d833555b7ebc3274fd98da1 \n", + "1 0x35292bbd442373046a6fb4bf7e2529fa9a8d5bb0 \n", + "2 0x3a5bd1e37b099ae3386d13947b6a90d97675e5e3 \n", + "3 0x3cc9f396430bc766ac8aa57fc28aebc5919a5d81 \n", + "\n", + " round_id \\\n", + "0 0x8de918f0163b2021839a8d84954dd7e8e151326d \n", + "1 0xa1d52f9b5339792651861329a046dd912761e9a9 \n", + "2 0x8de918f0163b2021839a8d84954dd7e8e151326d \n", + "3 0x5eb890e41c8d2cff75ea942085e406bb90016561 \n", + "\n", + " token_address \\\n", + "0 0x0000000000000000000000000000000000000000 \n", + "1 0x0000000000000000000000000000000000000000 \n", + "2 0x0000000000000000000000000000000000000000 \n", + "3 0x0000000000000000000000000000000000000000 \n", + "\n", + " transaction_hash \n", + "0 0x379bced92b07c59756d02243b76ae8ebd5042b41ee90... \n", + "1 0x4058469617e5123582f1e682f4b5a18337dc0fa41a15... \n", + "2 0xa036a626ec861c214a235f93f7fbb7d3f8b1b213df46... \n", + "3 0x56c48d387bb3316ad15476d1712a202ad87e14c74d20... " ] }, "metadata": {}, @@ -740,7 +970,7 @@ { "data": { "text/markdown": [ - "## [projects.parquet](#file-listing)" + "## [allo_prices.parquet](#file-listing)" ], "text/plain": [ "" @@ -752,7 +982,7 @@ { "data": { "text/markdown": [ - "project_id: string
project_number: int64
meta_ptr: string
metadata: string
owners: list
child 0, element: string
created_at_block: int64
chain_id: string
title: string
description: string
website: string
project_twitter: string
logo_image: string
banner_image: string
created_at: decimal128(18, 3)" + "block_number: string
chain_id: string
id: int64
node_id: string
price_in_usd: double
timestamp: string
token_address: string" ], "text/plain": [ "" @@ -782,143 +1012,1592 @@ " \n", " \n", " \n", - " project_id\n", - " project_number\n", - " meta_ptr\n", - " metadata\n", - " owners\n", - " created_at_block\n", + " block_number\n", + " chain_id\n", + " id\n", + " node_id\n", + " price_in_usd\n", + " timestamp\n", + " token_address\n", + " \n", + " \n", + " \n", + " \n", + " 0\n", + " 2774000\n", + " 534351\n", + " 1\n", + " WyJwcmljZXMiLDFd\n", + " 2403.8289\n", + " 2024-01-10T13:01:24\n", + " 0x0000000000000000000000000000000000000000\n", + " \n", + " \n", + " 1\n", + " 20912000\n", + " 324\n", + " 2\n", + " WyJwcmljZXMiLDJd\n", + " 2346.6409\n", + " 2023-12-07T18:27:50\n", + " 0x0000000000000000000000000000000000000000\n", + " \n", + " \n", + " 2\n", + " 1336000\n", + " 58008\n", + " 3\n", + " WyJwcmljZXMiLDNd\n", + " 1965.9740\n", + " 2023-07-03T15:59:32\n", + " 0x0000000000000000000000000000000000000000\n", + " \n", + " \n", + " 3\n", + " 2972000\n", + " 534352\n", + " 4\n", + " WyJwcmljZXMiLDRd\n", + " 2291.2834\n", + " 2024-02-01T18:58:51\n", + " 0x0000000000000000000000000000000000000000\n", + " \n", + " \n", + "\n", + "" + ], + "text/plain": [ + " block_number chain_id id node_id price_in_usd \\\n", + "0 2774000 534351 1 WyJwcmljZXMiLDFd 2403.8289 \n", + "1 20912000 324 2 WyJwcmljZXMiLDJd 2346.6409 \n", + "2 1336000 58008 3 WyJwcmljZXMiLDNd 1965.9740 \n", + "3 2972000 534352 4 WyJwcmljZXMiLDRd 2291.2834 \n", + "\n", + " timestamp token_address \n", + "0 2024-01-10T13:01:24 0x0000000000000000000000000000000000000000 \n", + "1 2023-12-07T18:27:50 0x0000000000000000000000000000000000000000 \n", + "2 2023-07-03T15:59:32 0x0000000000000000000000000000000000000000 \n", + "3 2024-02-01T18:58:51 0x0000000000000000000000000000000000000000 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## [allo_projects.parquet](#file-listing)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "anchor_address: string
chain_id: int64
created_at_block: string
created_by_address: string
id: string
metadata: string
title: string
description: string
website: string
project_twitter: string
project_github: string
user_github: string
logo_image: string
banner_image: string
created_at: decimal128(18, 3)
metadata_cid: string
name: string
node_id: string
nonce: string
project_number: int64
project_type: string
registry_address: string
tags: list
child 0, element: string
updated_at_block: string" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
anchor_addresschain_idcreated_at_blockcreated_by_addressidmetadatatitledescriptionwebsiteproject_twitterlogo_imagebanner_image...created_atmetadata_cidnamenode_idnonceproject_numberproject_typeregistry_addresstagsupdated_at_block
0None42412521310x0194325bf525be0d4fbb0856894ced74da3b83560x00065ad5b4ac5b42ac82c60ac9e939505f7996e95b61...{\"title\": \"Ether Alpha\", \"logoImg\": \"bafkreibt...Ether AlphaWorking under the pseudonym Ether Alpha, hanni...https://etheralpha.orghanni_abu...1691610982852.000bafkreic3wmwxh677nawk2ne563q7wx4vxif4xkoal65lo...WyJwcm9qZWN0cyIsIjB4MDAwNjVhZDViNGFjNWI0MmFjOD...None46.0CANONICAL0xdf9bf58aa1a1b73f0e214d79c652a7dd37a6074e[allo-v1]1252131
1None101121525760x7296191a226496f6afcf3490d2ec8e6cf8646c690x0017370bdfd13411f68f8f7bdac26edec1fadfa12cdc...{\"title\": \"wosek's contributions\", \"logoImg\": ...wosek's contributionsI like to translate things into Polish in my f...https://crowdin.com/profile/wosek_None...1699903917873.000bafkreihg54kx2zz35y7gbtwsvwpgraohrsnh2mtf4drjh...WyJwcm9qZWN0cyIsIjB4MDAxNzM3MGJkZmQxMzQxMWY2OG...None1520.0CANONICAL0x8e1bd5da87c14dd8e08f7ecc2abf9d1d558ea174[allo-v1]112152576
2None42457158770x9c162e77b67ed76164b486e2305000c10e3b9dfe0x0024e32c272cb1a514dd4a83ce642544d5f73caa{\"name\": \"DEVELOPMENT AND OPERATION OF ARTIFIC...NoneNoneNoneNone...Nonebafkreicndz7x2syry6qp7ccpqshddgqmyiotlpa6lnmxd...WyJwcm9qZWN0cyIsIjB4MDAyNGUzMmMyNzJjYjFhNTE0ZG...NoneNaNCANONICAL0x0000000000000000000000000000000000000000[allo-v1, program]5715877
30xc2ba001c5e3dab03b5de1dda3dd3f64216d5c1a15102427660xe849b2a694184b8739a04c915518330757cdb18b0x00490de473481e6883b7a13f582ee8e927dce1bafa92...{\"name\": \"Random Round\", \"description\": \"Lorem...NoneLorem ipsum dolor sit amet, consectetur adipis...NoneNone...Nonebafybeia4khbew3r2mkflyn7nzlvfzcb3qpfeftz5ivpzf...Allo WorkshopWyJwcm9qZWN0cyIsIjB4MDA0OTBkZTQ3MzQ4MWU2ODgzYj...6422NaNCANONICAL0x4aacca72145e1df2aec137e1f3c5e3d75db8b5f3[allo-v2]10242766
\n", + "

4 rows × 24 columns

\n", + "
" + ], + "text/plain": [ + " anchor_address chain_id created_at_block \\\n", + "0 None 424 1252131 \n", + "1 None 10 112152576 \n", + "2 None 424 5715877 \n", + "3 0xc2ba001c5e3dab03b5de1dda3dd3f64216d5c1a1 5 10242766 \n", + "\n", + " created_by_address \\\n", + "0 0x0194325bf525be0d4fbb0856894ced74da3b8356 \n", + "1 0x7296191a226496f6afcf3490d2ec8e6cf8646c69 \n", + "2 0x9c162e77b67ed76164b486e2305000c10e3b9dfe \n", + "3 0xe849b2a694184b8739a04c915518330757cdb18b \n", + "\n", + " id \\\n", + "0 0x00065ad5b4ac5b42ac82c60ac9e939505f7996e95b61... \n", + "1 0x0017370bdfd13411f68f8f7bdac26edec1fadfa12cdc... \n", + "2 0x0024e32c272cb1a514dd4a83ce642544d5f73caa \n", + "3 0x00490de473481e6883b7a13f582ee8e927dce1bafa92... \n", + "\n", + " metadata title \\\n", + "0 {\"title\": \"Ether Alpha\", \"logoImg\": \"bafkreibt... Ether Alpha \n", + "1 {\"title\": \"wosek's contributions\", \"logoImg\": ... wosek's contributions \n", + "2 {\"name\": \"DEVELOPMENT AND OPERATION OF ARTIFIC... None \n", + "3 {\"name\": \"Random Round\", \"description\": \"Lorem... None \n", + "\n", + " description \\\n", + "0 Working under the pseudonym Ether Alpha, hanni... \n", + "1 I like to translate things into Polish in my f... \n", + "2 None \n", + "3 Lorem ipsum dolor sit amet, consectetur adipis... \n", + "\n", + " website project_twitter ... created_at \\\n", + "0 https://etheralpha.org hanni_abu ... 1691610982852.000 \n", + "1 https://crowdin.com/profile/wosek_ None ... 1699903917873.000 \n", + "2 None None ... None \n", + "3 None None ... None \n", + "\n", + " metadata_cid name \\\n", + "0 bafkreic3wmwxh677nawk2ne563q7wx4vxif4xkoal65lo... \n", + "1 bafkreihg54kx2zz35y7gbtwsvwpgraohrsnh2mtf4drjh... \n", + "2 bafkreicndz7x2syry6qp7ccpqshddgqmyiotlpa6lnmxd... \n", + "3 bafybeia4khbew3r2mkflyn7nzlvfzcb3qpfeftz5ivpzf... Allo Workshop \n", + "\n", + " node_id nonce project_number \\\n", + "0 WyJwcm9qZWN0cyIsIjB4MDAwNjVhZDViNGFjNWI0MmFjOD... None 46.0 \n", + "1 WyJwcm9qZWN0cyIsIjB4MDAxNzM3MGJkZmQxMzQxMWY2OG... None 1520.0 \n", + "2 WyJwcm9qZWN0cyIsIjB4MDAyNGUzMmMyNzJjYjFhNTE0ZG... None NaN \n", + "3 WyJwcm9qZWN0cyIsIjB4MDA0OTBkZTQ3MzQ4MWU2ODgzYj... 6422 NaN \n", + "\n", + " project_type registry_address \\\n", + "0 CANONICAL 0xdf9bf58aa1a1b73f0e214d79c652a7dd37a6074e \n", + "1 CANONICAL 0x8e1bd5da87c14dd8e08f7ecc2abf9d1d558ea174 \n", + "2 CANONICAL 0x0000000000000000000000000000000000000000 \n", + "3 CANONICAL 0x4aacca72145e1df2aec137e1f3c5e3d75db8b5f3 \n", + "\n", + " tags updated_at_block \n", + "0 [allo-v1] 1252131 \n", + "1 [allo-v1] 112152576 \n", + "2 [allo-v1, program] 5715877 \n", + "3 [allo-v2] 10242766 \n", + "\n", + "[4 rows x 24 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## [allo_rounds.parquet](#file-listing)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "admin_role: string
application_metadata: string
application_metadata_cid: string
applications_end_time: string
applications_start_time: string
chain_id: int64
created_at_block: string
created_by_address: string
donations_end_time: string
donations_start_time: string
id: string
is_ready_for_payout: bool
manager_role: string
match_amount: string
match_amount_in_usd: double
match_token_address: string
node_id: string
project_id: string
round_metadata: string
round_metadata_cid: string
round_metadata_name: string
round_metadata_round_type: string
round_metadata_program_address: string
round_metadata_sybil_defense: string
strategy_address: string
strategy_id: string
strategy_name: string
tags: string
total_amount_donated_in_usd: double
total_donations_count: int64
unique_donors_count: int64
updated_at_block: string" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
admin_roleapplication_metadataapplication_metadata_cidapplications_end_timeapplications_start_timechain_idcreated_at_blockcreated_by_addressdonations_end_timedonations_start_time...round_metadata_program_addressround_metadata_sybil_defensestrategy_addressstrategy_idstrategy_nametagstotal_amount_donated_in_usdtotal_donations_countunique_donors_countupdated_at_block
0{\"version\": \"2.0.0\", \"lastUpdatedOn\": 17078383...bafkreihtjfexxqwu7mmwboglnhzc4uxldiyjvh4u33xq3...2024-03-24T23:58:002024-02-14T15:00:00421611803702540xaa3600788b72863ff51c8f0db5f10bb65fbfeab42024-03-24T23:58:002024-03-11T00:00:00...0xbcfc9102dfb0c7e811946e804a92c827e633189cfalse0x4e1fa15bcc16af11853bc07da12c7dd41710e6d3allov1.QF[\"allo-v1\"]0.000000180370254
1{\"version\": \"2.0.0\", \"lastUpdatedOn\": 16978393...bafkreiejeeh2ummqbbg5u674fchzk57kplonzdeaebe2l...None2023-11-01T00:00:00101111202770x43804905c02f551ec5420a88005bc66a1baf3ab0None2023-11-01T00:00:00...0x74c27d3300e49b07bc215507471d55dadb130696None0x05187c997121c05f407ad9e24ce36be54158db10allov1.Direct[\"allo-v1\"]0.000000111120277
2{\"version\": \"2.0.0\", \"lastUpdatedOn\": 16956589...bafkreig7y44xsfckujpmr5foqncdy54kguonwinmaep6l...None2023-09-26T00:00:00101100300870x58338e95caef17861916ef10dad5fafe20421005None2023-09-26T00:00:00...0x1fdf3ac9576ed0f6b207d4b759b582302b965c8eNone0xf7d21a59709ec1328b833d35d4eea9bbe529c1c0allov1.Direct[\"allo-v1\"]0.000000110030087
3{\"version\": \"2.0.0\", \"lastUpdatedOn\": 17070481...bafkreidul3bgy2ihdrmqmrxegyazxe5fg4equzav34jnm...2024-05-31T00:00:002024-02-04T13:00:00421611773484730x7380a42137d16a0e7684578d8b3d32e1fbd021b52024-05-31T00:00:002024-02-05T00:00:00...0xde74f98d586b71d1d74d0282499c65cde111a7d9false0xdfcb8e177dd457a93b83a09aee5140cc1175ba5dallov1.QF[\"allo-v1\"]160.927112437177348473
\n", + "

4 rows × 32 columns

\n", + "
" + ], + "text/plain": [ + " admin_role application_metadata \\\n", + "0 {\"version\": \"2.0.0\", \"lastUpdatedOn\": 17078383... \n", + "1 {\"version\": \"2.0.0\", \"lastUpdatedOn\": 16978393... \n", + "2 {\"version\": \"2.0.0\", \"lastUpdatedOn\": 16956589... \n", + "3 {\"version\": \"2.0.0\", \"lastUpdatedOn\": 17070481... \n", + "\n", + " application_metadata_cid applications_end_time \\\n", + "0 bafkreihtjfexxqwu7mmwboglnhzc4uxldiyjvh4u33xq3... 2024-03-24T23:58:00 \n", + "1 bafkreiejeeh2ummqbbg5u674fchzk57kplonzdeaebe2l... None \n", + "2 bafkreig7y44xsfckujpmr5foqncdy54kguonwinmaep6l... None \n", + "3 bafkreidul3bgy2ihdrmqmrxegyazxe5fg4equzav34jnm... 2024-05-31T00:00:00 \n", + "\n", + " applications_start_time chain_id created_at_block \\\n", + "0 2024-02-14T15:00:00 42161 180370254 \n", + "1 2023-11-01T00:00:00 10 111120277 \n", + "2 2023-09-26T00:00:00 10 110030087 \n", + "3 2024-02-04T13:00:00 42161 177348473 \n", + "\n", + " created_by_address donations_end_time \\\n", + "0 0xaa3600788b72863ff51c8f0db5f10bb65fbfeab4 2024-03-24T23:58:00 \n", + "1 0x43804905c02f551ec5420a88005bc66a1baf3ab0 None \n", + "2 0x58338e95caef17861916ef10dad5fafe20421005 None \n", + "3 0x7380a42137d16a0e7684578d8b3d32e1fbd021b5 2024-05-31T00:00:00 \n", + "\n", + " donations_start_time ... round_metadata_program_address \\\n", + "0 2024-03-11T00:00:00 ... 0xbcfc9102dfb0c7e811946e804a92c827e633189c \n", + "1 2023-11-01T00:00:00 ... 0x74c27d3300e49b07bc215507471d55dadb130696 \n", + "2 2023-09-26T00:00:00 ... 0x1fdf3ac9576ed0f6b207d4b759b582302b965c8e \n", + "3 2024-02-05T00:00:00 ... 0xde74f98d586b71d1d74d0282499c65cde111a7d9 \n", + "\n", + " round_metadata_sybil_defense strategy_address \\\n", + "0 false 0x4e1fa15bcc16af11853bc07da12c7dd41710e6d3 \n", + "1 None 0x05187c997121c05f407ad9e24ce36be54158db10 \n", + "2 None 0xf7d21a59709ec1328b833d35d4eea9bbe529c1c0 \n", + "3 false 0xdfcb8e177dd457a93b83a09aee5140cc1175ba5d \n", + "\n", + " strategy_id strategy_name tags total_amount_donated_in_usd \\\n", + "0 allov1.QF [\"allo-v1\"] 0.0000 \n", + "1 allov1.Direct [\"allo-v1\"] 0.0000 \n", + "2 allov1.Direct [\"allo-v1\"] 0.0000 \n", + "3 allov1.QF [\"allo-v1\"] 160.9271 \n", + "\n", + " total_donations_count unique_donors_count updated_at_block \n", + "0 0 0 180370254 \n", + "1 0 0 111120277 \n", + "2 0 0 110030087 \n", + "3 124 37 177348473 \n", + "\n", + "[4 rows x 32 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## [allo_subscriptions.parquet](#file-listing)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "chain_id: int64
contract_address: string
contract_name: string
created_at: string
from_block: string
id: string
indexed_to_block: string
indexed_to_log_index: int64
node_id: string
to_block: string
updated_at: string" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
chain_idcontract_addresscontract_namecreated_atfrom_blockidindexed_to_blockindexed_to_log_indexnode_idto_blockupdated_at
0100x005de9495f4e87682647d16db18deacdc8b525efAlloV1/ProgramImplementation/V12024-02-20T13:57:50.23611069673610-0x005De9495f4e87682647d16DB18DeAcdC8b525EF1164544430WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMDVEZTk0OTVmNG...latest2024-02-21T09:27:45.742544
1100x00e1e1d5769c18fc07921c2c06d07ccf084fba3fAlloV1/QuadraticFundingVotingStrategyImplement...2024-02-20T14:15:26.06711555829210-0x00E1E1D5769C18Fc07921c2C06D07cCF084fBA3f1164544430WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMEUxRTFENTc2OU...latest2024-02-21T09:27:45.767389
2100x01fb03887570e18eb88507ea7a5e73eca169a516AlloV1/ProgramImplementation/V12024-02-20T13:54:54.99610926354610-0x01Fb03887570e18eb88507ea7A5E73ecA169a5161164544430WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMUZiMDM4ODc1Nz...latest2024-02-21T09:27:45.825769
3100x0365712d69c2dfdd1a9fdf25972a3a1dc4fb5b1bAlloV1/ProgramImplementation/V12024-02-20T13:33:47.1789730971710-0x0365712D69C2dFdd1a9FdF25972A3A1Dc4fB5b1B1164544430WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMzY1NzEyRDY5Qz...latest2024-02-21T09:27:45.558181
\n", + "
" + ], + "text/plain": [ + " chain_id contract_address \\\n", + "0 10 0x005de9495f4e87682647d16db18deacdc8b525ef \n", + "1 10 0x00e1e1d5769c18fc07921c2c06d07ccf084fba3f \n", + "2 10 0x01fb03887570e18eb88507ea7a5e73eca169a516 \n", + "3 10 0x0365712d69c2dfdd1a9fdf25972a3a1dc4fb5b1b \n", + "\n", + " contract_name created_at \\\n", + "0 AlloV1/ProgramImplementation/V1 2024-02-20T13:57:50.236 \n", + "1 AlloV1/QuadraticFundingVotingStrategyImplement... 2024-02-20T14:15:26.067 \n", + "2 AlloV1/ProgramImplementation/V1 2024-02-20T13:54:54.996 \n", + "3 AlloV1/ProgramImplementation/V1 2024-02-20T13:33:47.178 \n", + "\n", + " from_block id indexed_to_block \\\n", + "0 110696736 10-0x005De9495f4e87682647d16DB18DeAcdC8b525EF 116454443 \n", + "1 115558292 10-0x00E1E1D5769C18Fc07921c2C06D07cCF084fBA3f 116454443 \n", + "2 109263546 10-0x01Fb03887570e18eb88507ea7A5E73ecA169a516 116454443 \n", + "3 97309717 10-0x0365712D69C2dFdd1a9FdF25972A3A1Dc4fB5b1B 116454443 \n", + "\n", + " indexed_to_log_index node_id \\\n", + "0 0 WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMDVEZTk0OTVmNG... \n", + "1 0 WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMEUxRTFENTc2OU... \n", + "2 0 WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMUZiMDM4ODc1Nz... \n", + "3 0 WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMzY1NzEyRDY5Qz... \n", + "\n", + " to_block updated_at \n", + "0 latest 2024-02-21T09:27:45.742544 \n", + "1 latest 2024-02-21T09:27:45.767389 \n", + "2 latest 2024-02-21T09:27:45.825769 \n", + "3 latest 2024-02-21T09:27:45.558181 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## [application_answers.parquet](#file-listing)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "question_id: string
project_id: string
application_id: string
chain_id: int64
round_id: string
question: string
question_type: string
answer: string" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
question_idproject_idapplication_idchain_idround_idquestionquestion_typeanswer
010xb25b0a149ce400e9c5906308a7079da37a99c0cab0aa...010x05df76bc446cee7ad536e2d23c128c9c8909cf7bFunding Sourcesshort-answerHOME
120xb25b0a149ce400e9c5906308a7079da37a99c0cab0aa...010x05df76bc446cee7ad536e2d23c128c9c8909cf7bTeam Sizenumber1
210xaebed2cd5ab824350703b4d037ace0e3c23607e4e501...110x05df76bc446cee7ad536e2d23c128c9c8909cf7bFunding Sourcesshort-answerkoç holding
320xaebed2cd5ab824350703b4d037ace0e3c23607e4e501...110x05df76bc446cee7ad536e2d23c128c9c8909cf7bTeam Sizenumber21
\n", + "
" + ], + "text/plain": [ + " question_id project_id \\\n", + "0 1 0xb25b0a149ce400e9c5906308a7079da37a99c0cab0aa... \n", + "1 2 0xb25b0a149ce400e9c5906308a7079da37a99c0cab0aa... \n", + "2 1 0xaebed2cd5ab824350703b4d037ace0e3c23607e4e501... \n", + "3 2 0xaebed2cd5ab824350703b4d037ace0e3c23607e4e501... \n", + "\n", + " application_id chain_id round_id \\\n", + "0 0 1 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b \n", + "1 0 1 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b \n", + "2 1 1 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b \n", + "3 1 1 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b \n", + "\n", + " question question_type answer \n", + "0 Funding Sources short-answer HOME \n", + "1 Team Size number 1 \n", + "2 Funding Sources short-answer koç holding \n", + "3 Team Size number 21 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## [chain_metadata.parquet](#file-listing)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "name: int32
short_name: int32
info_url: int32
chain_id: int32
network_id: int64
native_currency: int32
ens: int32
explorers: int32
rpc: int32
parent: int32" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nameshort_nameinfo_urlchain_idnetwork_idnative_currencyensexplorersrpcparent
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [name, short_name, info_url, chain_id, network_id, native_currency, ens, explorers, rpc, parent]\n", + "Index: []" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## [gitcoin_passport_scores.parquet](#file-listing)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "address: string
score: double
status: string
last_score_timestamp: timestamp[us, tz=UTC]
evidence_type: string
evidence_success: string
evidence_raw_score: string
evidence_threshold: string" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
addressscorestatuslast_score_timestampevidence_typeevidence_successevidence_raw_scoreevidence_threshold
00x00000000000000000000000000000000000000000.0DONE2024-02-02 09:39:37.386000+00:00ThresholdScoreCheckfalse020.00000
10x0000000000098341a924bd53454654a0dbbc4e430.0DONE2024-02-01 22:09:51.734000+00:00ThresholdScoreCheckfalse020.00000
20x00000000000d86e4837ba41dacde4b8713d5ccac1.0DONE2024-02-09 13:23:00.227000+00:00ThresholdScoreChecktrue20.03217020.00000
30x0000000000ce6d8c1fba76f26d6cc5db714327100.0DONE2024-02-01 22:42:17.357000+00:00ThresholdScoreCheckfalse14.12929220.00000
\n", + "
" + ], + "text/plain": [ + " address score status \\\n", + "0 0x0000000000000000000000000000000000000000 0.0 DONE \n", + "1 0x0000000000098341a924bd53454654a0dbbc4e43 0.0 DONE \n", + "2 0x00000000000d86e4837ba41dacde4b8713d5ccac 1.0 DONE \n", + "3 0x0000000000ce6d8c1fba76f26d6cc5db71432710 0.0 DONE \n", + "\n", + " last_score_timestamp evidence_type evidence_success \\\n", + "0 2024-02-02 09:39:37.386000+00:00 ThresholdScoreCheck false \n", + "1 2024-02-01 22:09:51.734000+00:00 ThresholdScoreCheck false \n", + "2 2024-02-09 13:23:00.227000+00:00 ThresholdScoreCheck true \n", + "3 2024-02-01 22:42:17.357000+00:00 ThresholdScoreCheck false \n", + "\n", + " evidence_raw_score evidence_threshold \n", + "0 0 20.00000 \n", + "1 0 20.00000 \n", + "2 20.032170 20.00000 \n", + "3 14.129292 20.00000 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## [giveth_projects.parquet](#file-listing)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "title: string
total_donations: double
total_trace_donations: double" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
titletotal_donationstotal_trace_donations
0MetaTrace2667.91920.00
1The Giveth Community of Makers109221.734085128.21
2Bridging Digital Communities2853.23320.00
3Diamante Bridge Collective68786.12500.00
\n", + "
" + ], + "text/plain": [ + " title total_donations total_trace_donations\n", + "0 MetaTrace 2667.9192 0.00\n", + "1 The Giveth Community of Makers 109221.7340 85128.21\n", + "2 Bridging Digital Communities 2853.2332 0.00\n", + "3 Diamante Bridge Collective 68786.1250 0.00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## [public_ethereum_project_registry_tx.parquet](#file-listing)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "block_signed_at: string
block_height: int64
block_hash: string
tx_hash: string
tx_offset: int64
successful: bool
miner_address: string
from_address: string
from_address_label: int32
to_address: string
to_address_label: int32
value: string
value_quote: double
pretty_value_quote: string
gas_metadata: struct
child 0, contract_decimals: int32
child 1, contract_name: string
child 2, contract_ticker_symbol: string
child 3, contract_address: string
child 4, supports_erc: int32
child 5, logo_url: string
gas_offered: int64
gas_spent: int64
gas_price: int64
fees_paid: string
gas_quote: double
pretty_gas_quote: string
gas_quote_rate: double
explorers: list>
child 0, element: struct
child 0, label: int32
child 1, url: string
log_events: list, sender_contract_decimals: int32, sender_name: int32, sender_contract_ticker_symbol: int32, sender_address: string, sender_address_label: int32, sender_logo_url: string, raw_log_data: string, decoded: struct>>>>
child 0, element: struct, sender_contract_decimals: int32, sender_name: int32, sender_contract_ticker_symbol: int32, sender_address: string, sender_address_label: int32, sender_logo_url: string, raw_log_data: string, decoded: struct>>>
child 0, block_signed_at: string
child 1, block_height: int32
child 2, tx_offset: int32
child 3, log_offset: int32
child 4, tx_hash: string
child 5, raw_log_topics: list
child 0, element: string
child 6, sender_contract_decimals: int32
child 7, sender_name: int32
child 8, sender_contract_ticker_symbol: int32
child 9, sender_address: string
child 10, sender_address_label: int32
child 11, sender_logo_url: string
child 12, raw_log_data: string
child 13, decoded: struct>>
child 0, name: string
child 1, signature: string
child 2, params: list>
child 0, element: struct
child 0, name: string
child 1, type: string
child 2, indexed: bool
child 3, decoded: bool
child 4, value: string" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
block_signed_atblock_heightblock_hashtx_hashtx_offsetsuccessfulminer_addressfrom_addressfrom_address_labelto_address...gas_metadatagas_offeredgas_spentgas_pricefees_paidgas_quotepretty_gas_quotegas_quote_rateexplorerslog_events
02023-01-12T00:37:35Z163871860x0a504c6ae7b1191452832d06a094283b13d12c46d5d1...0x3857de13d274d011c730e1f2227ac53915db67633891...90True0x95222290dd7278aa3ddd389cc1e1d165cc4bafe50x05e0a46a3a96478f8c6915f57e8089b3397e7ceaNaN0x03506ed3f57892c85db20c36846e9c808afe9ef4...{'contract_decimals': 18, 'contract_name': 'Et...51386510912677107827213677611599947521.938205$1.941417.064058[{'label': None, 'url': 'https://etherscan.io/...[{'block_signed_at': '2023-01-12T00:37:35Z', '...
12023-01-12T00:05:59Z163870280x6a0067ee25a68e913c5739c3049d649c241285b59400...0x861686470fd0fd1fd6b1e27a8844e3d52ce42434b44f...91True0xdafea492d9c6733ae3d56b7ed1adb60692c98bc50xd704c5f9826191f3bd06cae867d0f20cafa8aebaNaN0x03506ed3f57892c85db20c36846e9c808afe9ef4...{'contract_decimals': 18, 'contract_name': 'Et...22078421784036916786753804195282627352011.395962$11.401417.064058[{'label': None, 'url': 'https://etherscan.io/...[{'block_signed_at': '2023-01-12T00:05:59Z', '...
22023-01-11T23:49:23Z163869460x2891969e361e291c17c514376af27d6ac8e45372757f...0xbd8fa1e6f7da94de4bb8f9f88a373cbb07aee7176044...67True0xaab27b150451726ec7738aa1d0a94505c8729bd10x0e4d2ec48f03a9ed9068eea2926de34b6ab8646bNaN0x03506ed3f57892c85db20c36846e9c808afe9ef4...{'contract_decimals': 18, 'contract_name': 'Et...2207842178402704966975158925000585578408.200124$8.201391.620537[{'label': None, 'url': 'https://etherscan.io/...[{'block_signed_at': '2023-01-11T23:49:23Z', '...
32023-01-11T23:32:23Z163868610x2e9edf9e52cc0a9760b4216b5a1b551e4c801e616d0f...0xf3a92a332f627126c80401f108f323059661986f9878...85True0xdafea492d9c6733ae3d56b7ed1adb60692c98bc50x14cb60f6aca2b2a68d975743bacb33f01f587da5NaN0x03506ed3f57892c85db20c36846e9c808afe9ef4...{'contract_decimals': 18, 'contract_name': 'Et...22078421784036681941762799079419343408011.120153$11.121391.620537[{'label': None, 'url': 'https://etherscan.io/...[{'block_signed_at': '2023-01-11T23:32:23Z', '...
\n", + "

4 rows × 24 columns

\n", + "
" + ], + "text/plain": [ + " block_signed_at block_height \\\n", + "0 2023-01-12T00:37:35Z 16387186 \n", + "1 2023-01-12T00:05:59Z 16387028 \n", + "2 2023-01-11T23:49:23Z 16386946 \n", + "3 2023-01-11T23:32:23Z 16386861 \n", + "\n", + " block_hash \\\n", + "0 0x0a504c6ae7b1191452832d06a094283b13d12c46d5d1... \n", + "1 0x6a0067ee25a68e913c5739c3049d649c241285b59400... \n", + "2 0x2891969e361e291c17c514376af27d6ac8e45372757f... \n", + "3 0x2e9edf9e52cc0a9760b4216b5a1b551e4c801e616d0f... \n", + "\n", + " tx_hash tx_offset successful \\\n", + "0 0x3857de13d274d011c730e1f2227ac53915db67633891... 90 True \n", + "1 0x861686470fd0fd1fd6b1e27a8844e3d52ce42434b44f... 91 True \n", + "2 0xbd8fa1e6f7da94de4bb8f9f88a373cbb07aee7176044... 67 True \n", + "3 0xf3a92a332f627126c80401f108f323059661986f9878... 85 True \n", + "\n", + " miner_address \\\n", + "0 0x95222290dd7278aa3ddd389cc1e1d165cc4bafe5 \n", + "1 0xdafea492d9c6733ae3d56b7ed1adb60692c98bc5 \n", + "2 0xaab27b150451726ec7738aa1d0a94505c8729bd1 \n", + "3 0xdafea492d9c6733ae3d56b7ed1adb60692c98bc5 \n", + "\n", + " from_address from_address_label \\\n", + "0 0x05e0a46a3a96478f8c6915f57e8089b3397e7cea NaN \n", + "1 0xd704c5f9826191f3bd06cae867d0f20cafa8aeba NaN \n", + "2 0x0e4d2ec48f03a9ed9068eea2926de34b6ab8646b NaN \n", + "3 0x14cb60f6aca2b2a68d975743bacb33f01f587da5 NaN \n", + "\n", + " to_address ... \\\n", + "0 0x03506ed3f57892c85db20c36846e9c808afe9ef4 ... \n", + "1 0x03506ed3f57892c85db20c36846e9c808afe9ef4 ... \n", + "2 0x03506ed3f57892c85db20c36846e9c808afe9ef4 ... \n", + "3 0x03506ed3f57892c85db20c36846e9c808afe9ef4 ... \n", + "\n", + " gas_metadata gas_offered gas_spent \\\n", + "0 {'contract_decimals': 18, 'contract_name': 'Et... 51386 51091 \n", + "1 {'contract_decimals': 18, 'contract_name': 'Et... 220784 217840 \n", + "2 {'contract_decimals': 18, 'contract_name': 'Et... 220784 217840 \n", + "3 {'contract_decimals': 18, 'contract_name': 'Et... 220784 217840 \n", + "\n", + " gas_price fees_paid gas_quote pretty_gas_quote gas_quote_rate \\\n", + "0 26771078272 1367761159994752 1.938205 $1.94 1417.064058 \n", + "1 36916786753 8041952826273520 11.395962 $11.40 1417.064058 \n", + "2 27049669751 5892500058557840 8.200124 $8.20 1391.620537 \n", + "3 36681941762 7990794193434080 11.120153 $11.12 1391.620537 \n", + "\n", + " explorers \\\n", + "0 [{'label': None, 'url': 'https://etherscan.io/... \n", + "1 [{'label': None, 'url': 'https://etherscan.io/... \n", + "2 [{'label': None, 'url': 'https://etherscan.io/... \n", + "3 [{'label': None, 'url': 'https://etherscan.io/... \n", + "\n", + " log_events \n", + "0 [{'block_signed_at': '2023-01-12T00:37:35Z', '... \n", + "1 [{'block_signed_at': '2023-01-12T00:05:59Z', '... \n", + "2 [{'block_signed_at': '2023-01-11T23:49:23Z', '... \n", + "3 [{'block_signed_at': '2023-01-11T23:32:23Z', '... \n", + "\n", + "[4 rows x 24 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# | output: asis\n", + "\n", + "import pandas as pd\n", + "from pyarrow import parquet as pq\n", + "\n", + "\n", + "def print_file_sections(files, with_schema=True):\n", + " for file_name in files:\n", + " file_path = os.path.join(EXPORT_PATH, file_name)\n", + " if not os.path.exists(file_path):\n", + " print(f\"File not found: {file_name}\")\n", + " continue\n", + "\n", + " md(f\"## [{file_name}](#file-listing)\")\n", + "\n", + " if with_schema:\n", + " try:\n", + " schema = pq.read_schema(file_path)\n", + " schema_str = str(schema).replace(\"\\n\", \"
\")\n", + " md(schema_str)\n", + "\n", + " except Exception as e:\n", + " print(\"Could not read schema:\", e)\n", + "\n", + " display(pd.read_parquet(file_path).head(4))\n", + "\n", + "\n", + "print_file_sections(processed_files, with_schema=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Raw Files" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "## [public_raw_allo_applications.parquet](#file-listing)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "anchorAddress: string
chainId: int64
createdAtBlock: string
createdByAddress: string
id: string
metadata: string
metadataCid: string
nodeId: string
projectId: string
roundId: string
status: string
statusSnapshots: list>>
child 0, element: struct>
child 0, status: string
child 1, statusUpdatedAtBlock: struct
child 0, type: string
child 1, value: string
statusUpdatedAtBlock: string
tags: list
child 0, element: string
totalAmountDonatedInUsd: double
totalDonationsCount: int64
uniqueDonorsCount: int64" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
anchorAddresschainIdcreatedAtBlockcreatedByAddressidmetadatametadataCidnodeIdprojectIdroundIdstatusstatusSnapshotsstatusUpdatedAtBlocktagstotalAmountDonatedInUsdtotalDonationsCountuniqueDonorsCount
00xfe796d86ea81cc0343025b3860876aa6516f1afe8b94...0bafkreicwhtude2cmyjecx3vfpnayobshjcckziuvfobqw...{\"title\": \"FTM Test Project\", \"description\": \"...[0x3f15B8c6F9939879Cb030D6dd935348E57109637]50580559250FTM Test ProjectJust a description here 🫣 don't mind me. Now I...https://ftmtest.comcodenamejasonbafybeicg37elcjkvsbo5xzcv7tuqgg2buyc2aco2w4oxi...bafybeidkh33rniypibdqtpecjferqkosssrjgyqvhkoap...None1177872590xf2af41a645f7b439ed4c9149d1ce687d33181b930{\"signature\": \"0x471f4b214d70e1fc15dbfe7e8f4a5...bafkreiawz7cmcfmydfhtmro2oluzuzvfzsbs7idihxzjh...WyJhcHBsaWNhdGlvbnMiLDEsIjB4MDVkZjc2YmM0NDZjZW...0xb25b0a149ce400e9c5906308a7079da37a99c0cab0aa...0x05df76bc446cee7ad536e2d23c128c9c8909cf7bPENDING[{'status': 'PENDING', 'statusUpdatedAtBlock':...17787259[allo-v1]0.0000000
10x9b5985c3fb65dca9733f9d6418ab107b2d2f2108ab59...1bafkreiepbxfp5uvpn3ff74cn42wodhrqbl3himw5oqlpp...{\"title\": \"test ftm project\", \"description\": \"...[0x63b265D170f35d6bb724A6c00b4DcC822EA97867]50582583250test ftm projecttest deschttps://gitcoin.cowillsputraNoneNoneNone1178029940x6da84e637ffb51c69de568a11828a30b4886d5cb1{\"signature\": \"0x69d0a4b51f548782de428ed699408...bafkreifegp2jfsgidvve6xednoixiryjawro3fmfkiz3q...WyJhcHBsaWNhdGlvbnMiLDEsIjB4MDVkZjc2YmM0NDZjZW...0xaebed2cd5ab824350703b4d037ace0e3c23607e4e501...0x05df76bc446cee7ad536e2d23c128c9c8909cf7bPENDING[{'status': 'PENDING', 'statusUpdatedAtBlock':...17802994[allo-v1]0.0000000
20x8104847eab21b90e403b02a24c5b8050174873cb2356...2bafkreifvvexgja3bukdgiyfzgzzekla7wfimgq35bmbo2...{\"title\": \"TalentDAO\", \"description\": \"Talent ...[0x3f15B8c6F9939879Cb030D6dd935348E57109637]50583305250TalentDAOTalent DAO project description 📚 We are buidli...https://talentdao.iotalentdao_bafkreigvxakhj32p4leqboqhznbu7jmdw6r76cwwvzstu...bafkreiebp3jbrqtvtvetgojzhlsezdd665dieafneamw5...None1170313190xff2abef3af9655d96da983916e066134adea63900{\"signature\": \"0x4c3db176694bdfc0f9e4a04738205...bafkreibopq7uesrp5amqsqnyrwmfikem5iweivwbkzyht...WyJhcHBsaWNhdGlvbnMiLDEsIjB4MTJiYjViYmJmZTU5Nm...0x6aeb3ddab061203d32594b03901bf458679a66fbeab9...0x12bb5bbbfe596dbc489d209299b8302c3300fa40APPROVED[{'status': 'PENDING', 'statusUpdatedAtBlock':...17170541[allo-v1]876.12115216211
30x0d5c967ccdc3ef600b1689d13a6661aec9c8332b2a7b...3bafkreie4cs53r6f327ai57ecoxw6omew3wbk4r7rgjwwj...{\"title\": \"Nate's project\", \"description\": \"so...[0x4873178BeA2DCd7022f0eF6c70048b0e05Bf9017]50638712250Nate's projectsolarpunk futurismhttps://heynate.meheynate_gbafybeiffwomqqgwcsnyconcucp7q4bv5cp2lslmjlqiva...NoneNone1170333870xb17b3e7910af9d232cb683c083ef73c34521fc8a1{\"signature\": \"0xc9f5e29fcb4db0b0c9a5909f68c16...bafkreiazdoqxpfeeazyfonpnzgpfd5rfa5aukq5jkmkhd...WyJhcHBsaWNhdGlvbnMiLDEsIjB4MTJiYjViYmJmZTU5Nm...0xdeffc2d190ddec88d06ba86e1eb09abe5a9ccb49ab1d...0x12bb5bbbfe596dbc489d209299b8302c3300fa40APPROVED[{'status': 'PENDING', 'statusUpdatedAtBlock':...17170541[allo-v1]268.813725451
\n", "
" ], "text/plain": [ - " project_id project_number \\\n", - "0 0xfe796d86ea81cc0343025b3860876aa6516f1afe8b94... 0 \n", - "1 0x9b5985c3fb65dca9733f9d6418ab107b2d2f2108ab59... 1 \n", - "2 0x8104847eab21b90e403b02a24c5b8050174873cb2356... 2 \n", - "3 0x0d5c967ccdc3ef600b1689d13a6661aec9c8332b2a7b... 3 \n", + " anchorAddress chainId createdAtBlock \\\n", + "0 None 1 17787259 \n", + "1 None 1 17802994 \n", + "2 None 1 17031319 \n", + "3 None 1 17033387 \n", "\n", - " meta_ptr \\\n", - "0 bafkreicwhtude2cmyjecx3vfpnayobshjcckziuvfobqw... \n", - "1 bafkreiepbxfp5uvpn3ff74cn42wodhrqbl3himw5oqlpp... \n", - "2 bafkreifvvexgja3bukdgiyfzgzzekla7wfimgq35bmbo2... \n", - "3 bafkreie4cs53r6f327ai57ecoxw6omew3wbk4r7rgjwwj... \n", + " createdByAddress id \\\n", + "0 0xf2af41a645f7b439ed4c9149d1ce687d33181b93 0 \n", + "1 0x6da84e637ffb51c69de568a11828a30b4886d5cb 1 \n", + "2 0xff2abef3af9655d96da983916e066134adea6390 0 \n", + "3 0xb17b3e7910af9d232cb683c083ef73c34521fc8a 1 \n", "\n", " metadata \\\n", - "0 {\"title\": \"FTM Test Project\", \"description\": \"... \n", - "1 {\"title\": \"test ftm project\", \"description\": \"... \n", - "2 {\"title\": \"TalentDAO\", \"description\": \"Talent ... \n", - "3 {\"title\": \"Nate's project\", \"description\": \"so... \n", + "0 {\"signature\": \"0x471f4b214d70e1fc15dbfe7e8f4a5... \n", + "1 {\"signature\": \"0x69d0a4b51f548782de428ed699408... \n", + "2 {\"signature\": \"0x4c3db176694bdfc0f9e4a04738205... \n", + "3 {\"signature\": \"0xc9f5e29fcb4db0b0c9a5909f68c16... \n", + "\n", + " metadataCid \\\n", + "0 bafkreiawz7cmcfmydfhtmro2oluzuzvfzsbs7idihxzjh... \n", + "1 bafkreifegp2jfsgidvve6xednoixiryjawro3fmfkiz3q... \n", + "2 bafkreibopq7uesrp5amqsqnyrwmfikem5iweivwbkzyht... \n", + "3 bafkreiazdoqxpfeeazyfonpnzgpfd5rfa5aukq5jkmkhd... \n", "\n", - " owners created_at_block chain_id \\\n", - "0 [0x3f15B8c6F9939879Cb030D6dd935348E57109637] 50580559 250 \n", - "1 [0x63b265D170f35d6bb724A6c00b4DcC822EA97867] 50582583 250 \n", - "2 [0x3f15B8c6F9939879Cb030D6dd935348E57109637] 50583305 250 \n", - "3 [0x4873178BeA2DCd7022f0eF6c70048b0e05Bf9017] 50638712 250 \n", + " nodeId \\\n", + "0 WyJhcHBsaWNhdGlvbnMiLDEsIjB4MDVkZjc2YmM0NDZjZW... \n", + "1 WyJhcHBsaWNhdGlvbnMiLDEsIjB4MDVkZjc2YmM0NDZjZW... \n", + "2 WyJhcHBsaWNhdGlvbnMiLDEsIjB4MTJiYjViYmJmZTU5Nm... \n", + "3 WyJhcHBsaWNhdGlvbnMiLDEsIjB4MTJiYjViYmJmZTU5Nm... \n", "\n", - " title description \\\n", - "0 FTM Test Project Just a description here 🫣 don't mind me. Now I... \n", - "1 test ftm project test desc \n", - "2 TalentDAO Talent DAO project description 📚 We are buidli... \n", - "3 Nate's project solarpunk futurism \n", + " projectId \\\n", + "0 0xb25b0a149ce400e9c5906308a7079da37a99c0cab0aa... \n", + "1 0xaebed2cd5ab824350703b4d037ace0e3c23607e4e501... \n", + "2 0x6aeb3ddab061203d32594b03901bf458679a66fbeab9... \n", + "3 0xdeffc2d190ddec88d06ba86e1eb09abe5a9ccb49ab1d... \n", "\n", - " website project_twitter \\\n", - "0 https://ftmtest.com codenamejason \n", - "1 https://gitcoin.co willsputra \n", - "2 https://talentdao.io talentdao_ \n", - "3 https://heynate.me heynate_g \n", + " roundId status \\\n", + "0 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b PENDING \n", + "1 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b PENDING \n", + "2 0x12bb5bbbfe596dbc489d209299b8302c3300fa40 APPROVED \n", + "3 0x12bb5bbbfe596dbc489d209299b8302c3300fa40 APPROVED \n", "\n", - " logo_image \\\n", - "0 bafybeicg37elcjkvsbo5xzcv7tuqgg2buyc2aco2w4oxi... \n", - "1 None \n", - "2 bafkreigvxakhj32p4leqboqhznbu7jmdw6r76cwwvzstu... \n", - "3 bafybeiffwomqqgwcsnyconcucp7q4bv5cp2lslmjlqiva... \n", + " statusSnapshots statusUpdatedAtBlock \\\n", + "0 [{'status': 'PENDING', 'statusUpdatedAtBlock':... 17787259 \n", + "1 [{'status': 'PENDING', 'statusUpdatedAtBlock':... 17802994 \n", + "2 [{'status': 'PENDING', 'statusUpdatedAtBlock':... 17170541 \n", + "3 [{'status': 'PENDING', 'statusUpdatedAtBlock':... 17170541 \n", "\n", - " banner_image created_at \n", - "0 bafybeidkh33rniypibdqtpecjferqkosssrjgyqvhkoap... None \n", - "1 None None \n", - "2 bafkreiebp3jbrqtvtvetgojzhlsezdd665dieafneamw5... None \n", - "3 None None " + " tags totalAmountDonatedInUsd totalDonationsCount uniqueDonorsCount \n", + "0 [allo-v1] 0.00000 0 0 \n", + "1 [allo-v1] 0.00000 0 0 \n", + "2 [allo-v1] 876.12115 216 211 \n", + "3 [allo-v1] 268.81372 54 51 " ] }, "metadata": {}, @@ -927,7 +2606,7 @@ { "data": { "text/markdown": [ - "## [round_applications.parquet](#file-listing)" + "## [public_raw_allo_deployments.parquet](#file-listing)" ], "text/plain": [ "" @@ -939,7 +2618,7 @@ { "data": { "text/markdown": [ - "chain_id: string
round_id: string
id: int64
project_id: string
status: string
amount_usd: double
votes: int64
unique_contributors: int64
metadata: string
created_at_block: int64
status_updated_at_block: int64
status_snapshots: list>
child 0, element: struct
child 0, status: string
child 1, statusUpdatedAtBlock: int32
signature: string
recipient: string" + "address: string
chain_name: string
contract: string" ], "text/plain": [ "" @@ -969,137 +2648,52 @@ " \n", " \n", " \n", - " chain_id\n", - " round_id\n", - " id\n", - " project_id\n", - " status\n", - " amount_usd\n", - " votes\n", - " unique_contributors\n", - " metadata\n", - " created_at_block\n", - " status_updated_at_block\n", - " status_snapshots\n", - " signature\n", - " recipient\n", + " address\n", + " chain_name\n", + " contract\n", " \n", " \n", " \n", " \n", " 0\n", - " 280\n", - " 0xfff13d967d27b564838d413d98a53e0c013fa7d9\n", - " 0\n", - " 0x27ecde7fbbd667c76299df57b340b18b025ceb0d5dd0...\n", - " PENDING\n", - " 0.000000\n", - " 0\n", - " 0\n", - " {\"signature\": \"0x6de148a3778a5cbe0d8664476164d...\n", - " 14930930\n", - " 14930930\n", - " [{'status': 'PENDING', 'statusUpdatedAtBlock':...\n", - " 0x6de148a3778a5cbe0d8664476164d0e4ce1b27032a8d...\n", - " 0xfff13d967d27b564838d413d98a53e0c013fa7d9\n", + " 0x56296242ca408ba36393f3981879ff9692f193cc\n", + " Ethereum Mainnet\n", + " ProgramFactory\n", " \n", " \n", " 1\n", - " 280\n", - " 0x2f9e1523fe85a26602bf6518f6dfb70d44721dc1\n", - " 0\n", - " 0xae65357bd3576496fffa2f659acdd5681115d7799408...\n", - " PENDING\n", - " 0.000000\n", - " 0\n", - " 0\n", - " {\"signature\": \"0xb725515be88d819eb8e8be676f18d...\n", - " 14930985\n", - " 14930985\n", - " [{'status': 'PENDING', 'statusUpdatedAtBlock':...\n", - " 0xb725515be88d819eb8e8be676f18d2d19488a066e9c5...\n", - " 0xc6d12fc5b80e6e142692719718287d7ee8a5747c\n", + " 0x0bfa0aaf5f2d81f859e85c8e82a3fc5b624fc6e8\n", + " Ethereum Mainnet\n", + " ProgramImplementation\n", " \n", " \n", " 2\n", - " 280\n", - " 0x34704e4d2d38f1012ee019b893b639f74ba4f47b\n", - " 0\n", - " 0x27ecde7fbbd667c76299df57b340b18b025ceb0d5dd0...\n", - " PENDING\n", - " 0.000000\n", - " 0\n", - " 0\n", - " {\"signature\": \"0x760cd292133844029e25c9d8b4ff5...\n", - " 15055770\n", - " 15055770\n", - " [{'status': 'PENDING', 'statusUpdatedAtBlock':...\n", - " 0x760cd292133844029e25c9d8b4ff5b440a0d710e62ec...\n", - " 0x34704e4d2d38f1012ee019b893b639f74ba4f47b\n", + " 0x4a850f463d1c4842937c5bc9540dbc803d744c9f\n", + " Ethereum Mainnet\n", + " QuadraticFundingVotingStrategyFactory\n", " \n", " \n", " 3\n", - " 1\n", - " 0x1427a0e71a222b0229a910dc72da01f8f04c7441\n", - " 0\n", - " 0x79f989da908001a071fc2b4c8d9abb30c04365aa8dc3...\n", - " APPROVED\n", - " 82.552126\n", - " 53\n", - " 53\n", - " {\"signature\": \"0x5cee91b717744c5c25cea497b0744...\n", - " 18503087\n", - " 18717541\n", - " [{'status': 'PENDING', 'statusUpdatedAtBlock':...\n", - " 0x5cee91b717744c5c25cea497b07444b245de3cfbffbf...\n", - " 0xeb25e5a609ed19d69c33d91892d4b5d4f2bbdd8e\n", + " 0xddc143f736f912ae6aaf2fcef2c78b267745b0f2\n", + " Ethereum Mainnet\n", + " QFVotingStrategyImplementation\n", " \n", " \n", "\n", "" ], "text/plain": [ - " chain_id round_id id \\\n", - "0 280 0xfff13d967d27b564838d413d98a53e0c013fa7d9 0 \n", - "1 280 0x2f9e1523fe85a26602bf6518f6dfb70d44721dc1 0 \n", - "2 280 0x34704e4d2d38f1012ee019b893b639f74ba4f47b 0 \n", - "3 1 0x1427a0e71a222b0229a910dc72da01f8f04c7441 0 \n", - "\n", - " project_id status amount_usd \\\n", - "0 0x27ecde7fbbd667c76299df57b340b18b025ceb0d5dd0... PENDING 0.000000 \n", - "1 0xae65357bd3576496fffa2f659acdd5681115d7799408... PENDING 0.000000 \n", - "2 0x27ecde7fbbd667c76299df57b340b18b025ceb0d5dd0... PENDING 0.000000 \n", - "3 0x79f989da908001a071fc2b4c8d9abb30c04365aa8dc3... APPROVED 82.552126 \n", - "\n", - " votes unique_contributors \\\n", - "0 0 0 \n", - "1 0 0 \n", - "2 0 0 \n", - "3 53 53 \n", - "\n", - " metadata created_at_block \\\n", - "0 {\"signature\": \"0x6de148a3778a5cbe0d8664476164d... 14930930 \n", - "1 {\"signature\": \"0xb725515be88d819eb8e8be676f18d... 14930985 \n", - "2 {\"signature\": \"0x760cd292133844029e25c9d8b4ff5... 15055770 \n", - "3 {\"signature\": \"0x5cee91b717744c5c25cea497b0744... 18503087 \n", + " address chain_name \\\n", + "0 0x56296242ca408ba36393f3981879ff9692f193cc Ethereum Mainnet \n", + "1 0x0bfa0aaf5f2d81f859e85c8e82a3fc5b624fc6e8 Ethereum Mainnet \n", + "2 0x4a850f463d1c4842937c5bc9540dbc803d744c9f Ethereum Mainnet \n", + "3 0xddc143f736f912ae6aaf2fcef2c78b267745b0f2 Ethereum Mainnet \n", "\n", - " status_updated_at_block status_snapshots \\\n", - "0 14930930 [{'status': 'PENDING', 'statusUpdatedAtBlock':... \n", - "1 14930985 [{'status': 'PENDING', 'statusUpdatedAtBlock':... \n", - "2 15055770 [{'status': 'PENDING', 'statusUpdatedAtBlock':... \n", - "3 18717541 [{'status': 'PENDING', 'statusUpdatedAtBlock':... \n", - "\n", - " signature \\\n", - "0 0x6de148a3778a5cbe0d8664476164d0e4ce1b27032a8d... \n", - "1 0xb725515be88d819eb8e8be676f18d2d19488a066e9c5... \n", - "2 0x760cd292133844029e25c9d8b4ff5b440a0d710e62ec... \n", - "3 0x5cee91b717744c5c25cea497b07444b245de3cfbffbf... \n", - "\n", - " recipient \n", - "0 0xfff13d967d27b564838d413d98a53e0c013fa7d9 \n", - "1 0xc6d12fc5b80e6e142692719718287d7ee8a5747c \n", - "2 0x34704e4d2d38f1012ee019b893b639f74ba4f47b \n", - "3 0xeb25e5a609ed19d69c33d91892d4b5d4f2bbdd8e " + " contract \n", + "0 ProgramFactory \n", + "1 ProgramImplementation \n", + "2 QuadraticFundingVotingStrategyFactory \n", + "3 QFVotingStrategyImplementation " ] }, "metadata": {}, @@ -1108,7 +2702,7 @@ { "data": { "text/markdown": [ - "## [round_votes.parquet](#file-listing)" + "## [public_raw_allo_donations.parquet](#file-listing)" ], "text/plain": [ "" @@ -1120,7 +2714,7 @@ { "data": { "text/markdown": [ - "chain_id: string
round_id: string
id: string
transaction: string
block_number: int64
project_id: string
application_id: int64
voter: string
grant_address: string
token: string
amount: double
amount_usd: double
amount_round_token: double" + "amountInUsd: double
amount: string
amountInRoundMatchToken: string
applicationId: string
blockNumber: string
chainId: int64
id: string
donorAddress: string
nodeId: string
projectId: string
recipientAddress: string
roundId: string
tokenAddress: string
transactionHash: string" ], "text/plain": [ "" @@ -1150,138 +2744,149 @@ " \n", " \n", " \n", - " chain_id\n", - " round_id\n", - " id\n", - " transaction\n", - " block_number\n", - " project_id\n", - " application_id\n", - " voter\n", - " grant_address\n", - " token\n", + " amountInUsd\n", " amount\n", - " amount_usd\n", - " amount_round_token\n", + " amountInRoundMatchToken\n", + " applicationId\n", + " blockNumber\n", + " chainId\n", + " id\n", + " donorAddress\n", + " nodeId\n", + " projectId\n", + " recipientAddress\n", + " roundId\n", + " tokenAddress\n", + " transactionHash\n", " \n", " \n", " \n", " \n", " 0\n", - " 250\n", - " 0x19d84682c0fd83df5920e29987221fa71f4ea75b\n", - " 0x39e17a8935624409da1f8932570c7d693a6328a6a42a...\n", - " 0x31f54e74e1cc53ccea26462810ed32e3701901c8f64f...\n", - " 67413218\n", - " 0xd2d10ca4b6b87fb6c0052ca3e0748236363d9e961d70...\n", - " 2\n", - " 0xabf28f8d9adfb2255f4a059e37d3bce9104969db\n", - " 0x37e5e6eb36467f98392ebbb35f110fbb8238e6d3\n", - " 0x83791638da5eb2faa432aff1c65fba47c5d29510\n", - " 3.000000e+18\n", - " 2.999475\n", - " 1.469453e+19\n", + " 0.016360\n", + " 10000000000000\n", + " 16366460000000000\n", + " 0\n", + " 108816979\n", + " 10\n", + " 0x00002acaece3562ac4eb6885a41a37e357ef54d3cb2c...\n", + " 0x285bc2970e54d53ea2fbe4b0e1bba2677a205742\n", + " WyJkb25hdGlvbnMiLCIweDAwMDAyYWNhZWNlMzU2MmFjNG...\n", + " 0xcc6d33fe291d0fafb19cf8b833dc27d2f469fac52e3c...\n", + " 0x5afc7720b161788f9d833555b7ebc3274fd98da1\n", + " 0x8de918f0163b2021839a8d84954dd7e8e151326d\n", + " 0x0000000000000000000000000000000000000000\n", + " 0x379bced92b07c59756d02243b76ae8ebd5042b41ee90...\n", " \n", " \n", " 1\n", - " 250\n", - " 0x19d84682c0fd83df5920e29987221fa71f4ea75b\n", - " 0xddc53d22fbf190f569b0eef91196ef00e5bda0ae4a80...\n", - " 0x31f54e74e1cc53ccea26462810ed32e3701901c8f64f...\n", - " 67413218\n", - " 0x24472c9a83946f8694084da07f9ae3087499b299e7a2...\n", - " 1\n", - " 0xabf28f8d9adfb2255f4a059e37d3bce9104969db\n", - " 0x37e5e6eb36467f98392ebbb35f110fbb8238e6d3\n", - " 0x83791638da5eb2faa432aff1c65fba47c5d29510\n", - " 1.000000e+19\n", - " 9.998252\n", - " 4.898177e+19\n", + " 0.000052\n", + " 67390000000000\n", + " 51\n", + " 17\n", + " 50530864\n", + " 137\n", + " 0x00002e5ba02e1c78e782b69c7c8f8b1bab18e57f290c...\n", + " 0xf49eb7f170f07b74d26195b1e67b5442ebcef5ec\n", + " WyJkb25hdGlvbnMiLCIweDAwMDAyZTViYTAyZTFjNzhlNz...\n", + " 0xad02fe3124cef38f8c4fd5a44302713e49458d60a84d...\n", + " 0x35292bbd442373046a6fb4bf7e2529fa9a8d5bb0\n", + " 0xa1d52f9b5339792651861329a046dd912761e9a9\n", + " 0x0000000000000000000000000000000000000000\n", + " 0x4058469617e5123582f1e682f4b5a18337dc0fa41a15...\n", " \n", " \n", " 2\n", - " 250\n", - " 0x19d84682c0fd83df5920e29987221fa71f4ea75b\n", - " 0x94951ac2dcab4019adf38e55a77238784a1cf725b653...\n", - " 0x31f54e74e1cc53ccea26462810ed32e3701901c8f64f...\n", - " 67413218\n", - " 0x4821b33f7e2079a82acdbcc452a13a8d59cc33b6981b...\n", - " 0\n", - " 0xabf28f8d9adfb2255f4a059e37d3bce9104969db\n", - " 0x37e5e6eb36467f98392ebbb35f110fbb8238e6d3\n", - " 0x83791638da5eb2faa432aff1c65fba47c5d29510\n", - " 2.000000e+19\n", - " 19.996503\n", - " 9.796354e+19\n", + " 1.001680\n", + " 610000000000000\n", + " 1002163510000000000\n", + " 2\n", + " 108693843\n", + " 10\n", + " 0x0000590057ea1f42fe672e48933670847d644e095760...\n", + " 0x5477d4639e998ddda7e97f44ad159f4b7f1e3fc7\n", + " WyJkb25hdGlvbnMiLCIweDAwMDA1OTAwNTdlYTFmNDJmZT...\n", + " 0xbe519f8c8f7ff2acb359dd757c5d2bf25b05d9fd29b8...\n", + " 0x3a5bd1e37b099ae3386d13947b6a90d97675e5e3\n", + " 0x8de918f0163b2021839a8d84954dd7e8e151326d\n", + " 0x0000000000000000000000000000000000000000\n", + " 0xa036a626ec861c214a235f93f7fbb7d3f8b1b213df46...\n", " \n", " \n", " 3\n", - " 250\n", - " 0x19d84682c0fd83df5920e29987221fa71f4ea75b\n", - " 0x98ab19ff5a369c4a3d2ef8ae9fc546179b9135ca7012...\n", - " 0x1285af31632b737edc3a2681840f6a454080f37fe93f...\n", - " 67413524\n", - " 0x4821b33f7e2079a82acdbcc452a13a8d59cc33b6981b...\n", - " 0\n", - " 0x37e5e6eb36467f98392ebbb35f110fbb8238e6d3\n", - " 0x37e5e6eb36467f98392ebbb35f110fbb8238e6d3\n", - " 0x83791638da5eb2faa432aff1c65fba47c5d29510\n", - " 5.000000e+18\n", - " 4.999126\n", - " 2.449089e+19\n", + " 1.033441\n", + " 530000000000000\n", + " 1034735860000000000\n", + " 73\n", + " 112385228\n", + " 10\n", + " 0x0000615cbcd17b135557d85ca64673bb4b711444e467...\n", + " 0xf1ed61a80c7469273fea62564ec70a48e09fe170\n", + " WyJkb25hdGlvbnMiLCIweDAwMDA2MTVjYmNkMTdiMTM1NT...\n", + " 0x29e1256cffdb522383bc943035ecfa518cc3051f2438...\n", + " 0x3cc9f396430bc766ac8aa57fc28aebc5919a5d81\n", + " 0x5eb890e41c8d2cff75ea942085e406bb90016561\n", + " 0x0000000000000000000000000000000000000000\n", + " 0x56c48d387bb3316ad15476d1712a202ad87e14c74d20...\n", " \n", " \n", "\n", "" ], "text/plain": [ - " chain_id round_id \\\n", - "0 250 0x19d84682c0fd83df5920e29987221fa71f4ea75b \n", - "1 250 0x19d84682c0fd83df5920e29987221fa71f4ea75b \n", - "2 250 0x19d84682c0fd83df5920e29987221fa71f4ea75b \n", - "3 250 0x19d84682c0fd83df5920e29987221fa71f4ea75b \n", + " amountInUsd amount amountInRoundMatchToken applicationId \\\n", + "0 0.016360 10000000000000 16366460000000000 0 \n", + "1 0.000052 67390000000000 51 17 \n", + "2 1.001680 610000000000000 1002163510000000000 2 \n", + "3 1.033441 530000000000000 1034735860000000000 73 \n", "\n", - " id \\\n", - "0 0x39e17a8935624409da1f8932570c7d693a6328a6a42a... \n", - "1 0xddc53d22fbf190f569b0eef91196ef00e5bda0ae4a80... \n", - "2 0x94951ac2dcab4019adf38e55a77238784a1cf725b653... \n", - "3 0x98ab19ff5a369c4a3d2ef8ae9fc546179b9135ca7012... \n", + " blockNumber chainId id \\\n", + "0 108816979 10 0x00002acaece3562ac4eb6885a41a37e357ef54d3cb2c... \n", + "1 50530864 137 0x00002e5ba02e1c78e782b69c7c8f8b1bab18e57f290c... \n", + "2 108693843 10 0x0000590057ea1f42fe672e48933670847d644e095760... \n", + "3 112385228 10 0x0000615cbcd17b135557d85ca64673bb4b711444e467... \n", + "\n", + " donorAddress \\\n", + "0 0x285bc2970e54d53ea2fbe4b0e1bba2677a205742 \n", + "1 0xf49eb7f170f07b74d26195b1e67b5442ebcef5ec \n", + "2 0x5477d4639e998ddda7e97f44ad159f4b7f1e3fc7 \n", + "3 0xf1ed61a80c7469273fea62564ec70a48e09fe170 \n", "\n", - " transaction block_number \\\n", - "0 0x31f54e74e1cc53ccea26462810ed32e3701901c8f64f... 67413218 \n", - "1 0x31f54e74e1cc53ccea26462810ed32e3701901c8f64f... 67413218 \n", - "2 0x31f54e74e1cc53ccea26462810ed32e3701901c8f64f... 67413218 \n", - "3 0x1285af31632b737edc3a2681840f6a454080f37fe93f... 67413524 \n", + " nodeId \\\n", + "0 WyJkb25hdGlvbnMiLCIweDAwMDAyYWNhZWNlMzU2MmFjNG... \n", + "1 WyJkb25hdGlvbnMiLCIweDAwMDAyZTViYTAyZTFjNzhlNz... \n", + "2 WyJkb25hdGlvbnMiLCIweDAwMDA1OTAwNTdlYTFmNDJmZT... \n", + "3 WyJkb25hdGlvbnMiLCIweDAwMDA2MTVjYmNkMTdiMTM1NT... \n", "\n", - " project_id application_id \\\n", - "0 0xd2d10ca4b6b87fb6c0052ca3e0748236363d9e961d70... 2 \n", - "1 0x24472c9a83946f8694084da07f9ae3087499b299e7a2... 1 \n", - "2 0x4821b33f7e2079a82acdbcc452a13a8d59cc33b6981b... 0 \n", - "3 0x4821b33f7e2079a82acdbcc452a13a8d59cc33b6981b... 0 \n", + " projectId \\\n", + "0 0xcc6d33fe291d0fafb19cf8b833dc27d2f469fac52e3c... \n", + "1 0xad02fe3124cef38f8c4fd5a44302713e49458d60a84d... \n", + "2 0xbe519f8c8f7ff2acb359dd757c5d2bf25b05d9fd29b8... \n", + "3 0x29e1256cffdb522383bc943035ecfa518cc3051f2438... \n", "\n", - " voter \\\n", - "0 0xabf28f8d9adfb2255f4a059e37d3bce9104969db \n", - "1 0xabf28f8d9adfb2255f4a059e37d3bce9104969db \n", - "2 0xabf28f8d9adfb2255f4a059e37d3bce9104969db \n", - "3 0x37e5e6eb36467f98392ebbb35f110fbb8238e6d3 \n", + " recipientAddress \\\n", + "0 0x5afc7720b161788f9d833555b7ebc3274fd98da1 \n", + "1 0x35292bbd442373046a6fb4bf7e2529fa9a8d5bb0 \n", + "2 0x3a5bd1e37b099ae3386d13947b6a90d97675e5e3 \n", + "3 0x3cc9f396430bc766ac8aa57fc28aebc5919a5d81 \n", "\n", - " grant_address \\\n", - "0 0x37e5e6eb36467f98392ebbb35f110fbb8238e6d3 \n", - "1 0x37e5e6eb36467f98392ebbb35f110fbb8238e6d3 \n", - "2 0x37e5e6eb36467f98392ebbb35f110fbb8238e6d3 \n", - "3 0x37e5e6eb36467f98392ebbb35f110fbb8238e6d3 \n", + " roundId \\\n", + "0 0x8de918f0163b2021839a8d84954dd7e8e151326d \n", + "1 0xa1d52f9b5339792651861329a046dd912761e9a9 \n", + "2 0x8de918f0163b2021839a8d84954dd7e8e151326d \n", + "3 0x5eb890e41c8d2cff75ea942085e406bb90016561 \n", "\n", - " token amount amount_usd \\\n", - "0 0x83791638da5eb2faa432aff1c65fba47c5d29510 3.000000e+18 2.999475 \n", - "1 0x83791638da5eb2faa432aff1c65fba47c5d29510 1.000000e+19 9.998252 \n", - "2 0x83791638da5eb2faa432aff1c65fba47c5d29510 2.000000e+19 19.996503 \n", - "3 0x83791638da5eb2faa432aff1c65fba47c5d29510 5.000000e+18 4.999126 \n", + " tokenAddress \\\n", + "0 0x0000000000000000000000000000000000000000 \n", + "1 0x0000000000000000000000000000000000000000 \n", + "2 0x0000000000000000000000000000000000000000 \n", + "3 0x0000000000000000000000000000000000000000 \n", "\n", - " amount_round_token \n", - "0 1.469453e+19 \n", - "1 4.898177e+19 \n", - "2 9.796354e+19 \n", - "3 2.449089e+19 " + " transactionHash \n", + "0 0x379bced92b07c59756d02243b76ae8ebd5042b41ee90... \n", + "1 0x4058469617e5123582f1e682f4b5a18337dc0fa41a15... \n", + "2 0xa036a626ec861c214a235f93f7fbb7d3f8b1b213df46... \n", + "3 0x56c48d387bb3316ad15476d1712a202ad87e14c74d20... " ] }, "metadata": {}, @@ -1290,7 +2895,7 @@ { "data": { "text/markdown": [ - "## [rounds.parquet](#file-listing)" + "## [public_raw_allo_prices.parquet](#file-listing)" ], "text/plain": [ "" @@ -1302,7 +2907,7 @@ { "data": { "text/markdown": [ - "id: string
amount_usd: double
votes: int64
token: string
match_amount: double
match_amount_usd: double
unique_contributors: int64
application_meta_ptr: string
application_metadata: string
meta_ptr: string
metadata: string
applications_start_time: int64
applications_end_time: double
round_start_time: int64
round_end_time: double
created_at_block: int64
updated_at_block: int64
chain_id: string
name: string
round_type: string
program_address: string
sybil_defense: bool" + "blockNumber: string
chainId: int64
id: int64
nodeId: string
priceInUsd: double
timestamp: string
tokenAddress: string" ], "text/plain": [ "" @@ -1332,234 +2937,81 @@ " \n", " \n", " \n", + " blockNumber\n", + " chainId\n", " id\n", - " amount_usd\n", - " votes\n", - " token\n", - " match_amount\n", - " match_amount_usd\n", - " unique_contributors\n", - " application_meta_ptr\n", - " application_metadata\n", - " meta_ptr\n", - " ...\n", - " applications_end_time\n", - " round_start_time\n", - " round_end_time\n", - " created_at_block\n", - " updated_at_block\n", - " chain_id\n", - " name\n", - " round_type\n", - " program_address\n", - " sybil_defense\n", + " nodeId\n", + " priceInUsd\n", + " timestamp\n", + " tokenAddress\n", " \n", " \n", " \n", " \n", " 0\n", - " 0xf16c7c3e7bb378c716f2b349a999d8ce56f3cfb5\n", - " 0.010547\n", - " 3\n", + " 2774000\n", + " 534351\n", + " 1\n", + " WyJwcmljZXMiLDFd\n", + " 2403.8289\n", + " 2024-01-10T13:01:24\n", " 0x0000000000000000000000000000000000000000\n", - " 1.000000e+18\n", - " 0.525015\n", - " 2\n", - " bafkreid4qdvpgogw7pec5m57uvdurkvdu5z7vmtuczuoa...\n", - " {'lastUpdatedOn': 1695307508483, 'applicationS...\n", - " bafkreid3oppvwhxli3sqkf3br2b3k4rwa74uczwl4v2ii...\n", - " ...\n", - " 1.695341e+09\n", - " 1695307560\n", - " 1.695341e+09\n", - " 47813168\n", - " 47813168\n", - " 137\n", - " POLYGON ROUND\n", - " public\n", - " 0xf0da973d2610aee80265a614c0b5f43dedaf0e24\n", - " True\n", " \n", " \n", " 1\n", - " 0xb410680b922e91f2ea4159331ffeaaadb217f246\n", - " 0.000000\n", - " 0\n", + " 20912000\n", + " 324\n", + " 2\n", + " WyJwcmljZXMiLDJd\n", + " 2346.6409\n", + " 2023-12-07T18:27:50\n", " 0x0000000000000000000000000000000000000000\n", - " 1.000000e+18\n", - " 0.526396\n", - " 0\n", - " bafkreie2uqqanbeiuabkrzpghjqkjlgimjbm5w3t5yver...\n", - " {'lastUpdatedOn': 1695318545342, 'applicationS...\n", - " bafkreifaysglowdjlhivjv5utus766tos4me3zroygbcy...\n", - " ...\n", - " 1.696032e+09\n", - " 1695319200\n", - " 1.696032e+09\n", - " 47818260\n", - " 47818260\n", - " 137\n", - " Michelle's Test Round\n", - " private\n", - " 0x2707d4017f72e2a4e688ed18b4a9b16fbb8adf8d\n", - " True\n", " \n", " \n", " 2\n", - " 0x353d3485fb5b560bcb79780ced5ddd26331040a9\n", - " 0.000000\n", - " 0\n", + " 1336000\n", + " 58008\n", + " 3\n", + " WyJwcmljZXMiLDNd\n", + " 1965.9740\n", + " 2023-07-03T15:59:32\n", " 0x0000000000000000000000000000000000000000\n", - " 3.000000e+18\n", - " 1.575025\n", - " 0\n", - " bafkreifiyr7moy45suwlu7wvpa3ftdxhsgaxsbw2m3grx...\n", - " {'lastUpdatedOn': 1695328536702, 'applicationS...\n", - " bafkreifbwivdn25q7tnkecu6wt6nzutndyb25w5zpbfre...\n", - " ...\n", - " 1.695686e+09\n", - " 1695600000\n", - " 1.695686e+09\n", - " 47822940\n", - " 47822940\n", - " 137\n", - " July Testing Round\n", - " private\n", - " 0x0b36268807abcdffe7333331990c90c271ef5754\n", - " True\n", " \n", " \n", " 3\n", - " 0xbe245931c95d9b005ebf613090d932d10d3d5249\n", - " 0.000000\n", - " 0\n", + " 2972000\n", + " 534352\n", + " 4\n", + " WyJwcmljZXMiLDRd\n", + " 2291.2834\n", + " 2024-02-01T18:58:51\n", " 0x0000000000000000000000000000000000000000\n", - " 5.000000e+23\n", - " 260098.220000\n", - " 0\n", - " bafkreih37fpyqtpxrigid7ceobwrknd5wo3zfvwi4cqrs...\n", - " {'lastUpdatedOn': 1695486571265, 'applicationS...\n", - " bafkreidetdecljkkzkpkwybvhjflne7g6eugotiix5cre...\n", - " ...\n", - " 1.698710e+09\n", - " 1695859200\n", - " 1.698710e+09\n", - " 47895093\n", - " 47895093\n", - " 137\n", - " Join the African Revolution\n", - " public\n", - " 0x28b4b1e3b3170f8a956f7202b5484db6c1492e7f\n", - " False\n", " \n", " \n", "\n", - "

4 rows × 22 columns

\n", "" ], "text/plain": [ - " id amount_usd votes \\\n", - "0 0xf16c7c3e7bb378c716f2b349a999d8ce56f3cfb5 0.010547 3 \n", - "1 0xb410680b922e91f2ea4159331ffeaaadb217f246 0.000000 0 \n", - "2 0x353d3485fb5b560bcb79780ced5ddd26331040a9 0.000000 0 \n", - "3 0xbe245931c95d9b005ebf613090d932d10d3d5249 0.000000 0 \n", - "\n", - " token match_amount match_amount_usd \\\n", - "0 0x0000000000000000000000000000000000000000 1.000000e+18 0.525015 \n", - "1 0x0000000000000000000000000000000000000000 1.000000e+18 0.526396 \n", - "2 0x0000000000000000000000000000000000000000 3.000000e+18 1.575025 \n", - "3 0x0000000000000000000000000000000000000000 5.000000e+23 260098.220000 \n", + " blockNumber chainId id nodeId priceInUsd timestamp \\\n", + "0 2774000 534351 1 WyJwcmljZXMiLDFd 2403.8289 2024-01-10T13:01:24 \n", + "1 20912000 324 2 WyJwcmljZXMiLDJd 2346.6409 2023-12-07T18:27:50 \n", + "2 1336000 58008 3 WyJwcmljZXMiLDNd 1965.9740 2023-07-03T15:59:32 \n", + "3 2972000 534352 4 WyJwcmljZXMiLDRd 2291.2834 2024-02-01T18:58:51 \n", "\n", - " unique_contributors application_meta_ptr \\\n", - "0 2 bafkreid4qdvpgogw7pec5m57uvdurkvdu5z7vmtuczuoa... \n", - "1 0 bafkreie2uqqanbeiuabkrzpghjqkjlgimjbm5w3t5yver... \n", - "2 0 bafkreifiyr7moy45suwlu7wvpa3ftdxhsgaxsbw2m3grx... \n", - "3 0 bafkreih37fpyqtpxrigid7ceobwrknd5wo3zfvwi4cqrs... \n", - "\n", - " application_metadata \\\n", - "0 {'lastUpdatedOn': 1695307508483, 'applicationS... \n", - "1 {'lastUpdatedOn': 1695318545342, 'applicationS... \n", - "2 {'lastUpdatedOn': 1695328536702, 'applicationS... \n", - "3 {'lastUpdatedOn': 1695486571265, 'applicationS... \n", - "\n", - " meta_ptr ... \\\n", - "0 bafkreid3oppvwhxli3sqkf3br2b3k4rwa74uczwl4v2ii... ... \n", - "1 bafkreifaysglowdjlhivjv5utus766tos4me3zroygbcy... ... \n", - "2 bafkreifbwivdn25q7tnkecu6wt6nzutndyb25w5zpbfre... ... \n", - "3 bafkreidetdecljkkzkpkwybvhjflne7g6eugotiix5cre... ... \n", - "\n", - " applications_end_time round_start_time round_end_time created_at_block \\\n", - "0 1.695341e+09 1695307560 1.695341e+09 47813168 \n", - "1 1.696032e+09 1695319200 1.696032e+09 47818260 \n", - "2 1.695686e+09 1695600000 1.695686e+09 47822940 \n", - "3 1.698710e+09 1695859200 1.698710e+09 47895093 \n", - "\n", - " updated_at_block chain_id name round_type \\\n", - "0 47813168 137 POLYGON ROUND public \n", - "1 47818260 137 Michelle's Test Round private \n", - "2 47822940 137 July Testing Round private \n", - "3 47895093 137 Join the African Revolution public \n", - "\n", - " program_address sybil_defense \n", - "0 0xf0da973d2610aee80265a614c0b5f43dedaf0e24 True \n", - "1 0x2707d4017f72e2a4e688ed18b4a9b16fbb8adf8d True \n", - "2 0x0b36268807abcdffe7333331990c90c271ef5754 True \n", - "3 0x28b4b1e3b3170f8a956f7202b5484db6c1492e7f False \n", - "\n", - "[4 rows x 22 columns]" + " tokenAddress \n", + "0 0x0000000000000000000000000000000000000000 \n", + "1 0x0000000000000000000000000000000000000000 \n", + "2 0x0000000000000000000000000000000000000000 \n", + "3 0x0000000000000000000000000000000000000000 " ] }, "metadata": {}, "output_type": "display_data" - } - ], - "source": [ - "# | output: asis\n", - "\n", - "import pandas as pd\n", - "from pyarrow import parquet as pq\n", - "\n", - "\n", - "def print_file_sections(files, with_schema=True):\n", - " for file_name in files:\n", - " file_path = os.path.join(EXPORT_PATH, file_name)\n", - " if not os.path.exists(file_path):\n", - " print(f\"File not found: {file_name}\")\n", - " continue\n", - "\n", - " md(f\"## [{file_name}](#file-listing)\")\n", - "\n", - " if with_schema:\n", - " try:\n", - " schema = pq.read_schema(file_path)\n", - " schema_str = str(schema).replace(\"\\n\", \"
\")\n", - " md(schema_str)\n", - "\n", - " except Exception as e:\n", - " print(\"Could not read schema:\", e)\n", - "\n", - " display(pd.read_parquet(file_path).head(4))\n", - "\n", - "\n", - "print_file_sections(processed_files, with_schema=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Raw Files" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ + }, { "data": { "text/markdown": [ - "## [public_raw_chain_metadata.parquet](#file-listing)" + "## [public_raw_allo_projects.parquet](#file-listing)" ], "text/plain": [ "" @@ -1571,7 +3023,7 @@ { "data": { "text/markdown": [ - "name: string
chain: string
icon: string
rpc: list
child 0, element: string
features: list>
child 0, element: struct
child 0, name: string
faucets: list
child 0, element: int32
nativeCurrency: struct
child 0, name: string
child 1, symbol: string
child 2, decimals: int32
infoURL: string
shortName: string
chainId: string
networkId: int64
slip44: int64
ens: struct
child 0, registry: string
explorers: list>
child 0, element: map
child 0, element: struct not null
child 0, key: string not null
child 1, value: string
title: string
status: string
redFlags: int32
parent: struct>>
child 0, type: string
child 1, chain: string
child 2, bridges: list>
child 0, element: struct
child 0, url: string" + "anchorAddress: string
chainId: int64
createdAtBlock: string
createdByAddress: string
id: string
metadata: string
metadataCid: string
name: string
nodeId: string
nonce: string
projectNumber: int64
projectType: string
registryAddress: string
tags: list
child 0, element: string
updatedAtBlock: string" ], "text/plain": [ "" @@ -1601,163 +3053,148 @@ " \n", " \n", " \n", - " name\n", - " chain\n", - " icon\n", - " rpc\n", - " features\n", - " faucets\n", - " nativeCurrency\n", - " infoURL\n", - " shortName\n", + " anchorAddress\n", " chainId\n", - " networkId\n", - " slip44\n", - " ens\n", - " explorers\n", - " title\n", - " status\n", - " redFlags\n", - " parent\n", + " createdAtBlock\n", + " createdByAddress\n", + " id\n", + " metadata\n", + " metadataCid\n", + " name\n", + " nodeId\n", + " nonce\n", + " projectNumber\n", + " projectType\n", + " registryAddress\n", + " tags\n", + " updatedAtBlock\n", " \n", " \n", " \n", " \n", " 0\n", - " Ethereum Mainnet\n", - " ETH\n", - " ethereum\n", - " [https://mainnet.infura.io/v3/${INFURA_API_KEY...\n", - " [{'name': 'EIP155'}, {'name': 'EIP1559'}]\n", - " []\n", - " {'name': 'Ether', 'symbol': 'ETH', 'decimals':...\n", - " https://ethereum.org\n", - " eth\n", - " 1\n", - " 1\n", - " 60.0\n", - " {'registry': '0x00000000000C2E074eC69A0dFb2997...\n", - " [[(name, etherscan), (url, https://etherscan.i...\n", " None\n", + " 424\n", + " 1252131\n", + " 0x0194325bf525be0d4fbb0856894ced74da3b8356\n", + " 0x00065ad5b4ac5b42ac82c60ac9e939505f7996e95b61...\n", + " {\"title\": \"Ether Alpha\", \"logoImg\": \"bafkreibt...\n", + " bafkreic3wmwxh677nawk2ne563q7wx4vxif4xkoal65lo...\n", + " \n", + " WyJwcm9qZWN0cyIsIjB4MDAwNjVhZDViNGFjNWI0MmFjOD...\n", " None\n", - " NaN\n", - " None\n", + " 46.0\n", + " CANONICAL\n", + " 0xdf9bf58aa1a1b73f0e214d79c652a7dd37a6074e\n", + " [allo-v1]\n", + " 1252131\n", " \n", " \n", " 1\n", - " OP Mainnet\n", - " ETH\n", " None\n", - " [https://mainnet.optimism.io, https://optimism...\n", - " None\n", - " []\n", - " {'name': 'Ether', 'symbol': 'ETH', 'decimals':...\n", - " https://optimism.io\n", - " oeth\n", " 10\n", - " 10\n", - " NaN\n", - " None\n", - " [[(name, etherscan), (url, https://optimistic....\n", - " None\n", - " None\n", - " NaN\n", + " 112152576\n", + " 0x7296191a226496f6afcf3490d2ec8e6cf8646c69\n", + " 0x0017370bdfd13411f68f8f7bdac26edec1fadfa12cdc...\n", + " {\"title\": \"wosek's contributions\", \"logoImg\": ...\n", + " bafkreihg54kx2zz35y7gbtwsvwpgraohrsnh2mtf4drjh...\n", + " \n", + " WyJwcm9qZWN0cyIsIjB4MDAxNzM3MGJkZmQxMzQxMWY2OG...\n", " None\n", + " 1520.0\n", + " CANONICAL\n", + " 0x8e1bd5da87c14dd8e08f7ecc2abf9d1d558ea174\n", + " [allo-v1]\n", + " 112152576\n", " \n", " \n", " 2\n", - " Polygon Mainnet\n", - " Polygon\n", - " polygon\n", - " [https://polygon-rpc.com/, https://rpc-mainnet...\n", - " None\n", - " []\n", - " {'name': 'MATIC', 'symbol': 'MATIC', 'decimals...\n", - " https://polygon.technology/\n", - " matic\n", - " 137\n", - " 137\n", - " 966.0\n", - " None\n", - " [[(name, polygonscan), (url, https://polygonsc...\n", " None\n", + " 424\n", + " 5715877\n", + " 0x9c162e77b67ed76164b486e2305000c10e3b9dfe\n", + " 0x0024e32c272cb1a514dd4a83ce642544d5f73caa\n", + " {\"name\": \"DEVELOPMENT AND OPERATION OF ARTIFIC...\n", + " bafkreicndz7x2syry6qp7ccpqshddgqmyiotlpa6lnmxd...\n", + " \n", + " WyJwcm9qZWN0cyIsIjB4MDAyNGUzMmMyNzJjYjFhNTE0ZG...\n", " None\n", " NaN\n", - " None\n", + " CANONICAL\n", + " 0x0000000000000000000000000000000000000000\n", + " [allo-v1, program]\n", + " 5715877\n", " \n", " \n", " 3\n", - " Fantom Opera\n", - " FTM\n", - " fantom\n", - " [https://rpc.ftm.tools, https://fantom.publicn...\n", - " None\n", - " []\n", - " {'name': 'Fantom', 'symbol': 'FTM', 'decimals'...\n", - " https://fantom.foundation\n", - " ftm\n", - " 250\n", - " 250\n", - " NaN\n", - " None\n", - " [[(name, ftmscan), (url, https://ftmscan.com),...\n", - " None\n", - " None\n", + " 0xc2ba001c5e3dab03b5de1dda3dd3f64216d5c1a1\n", + " 5\n", + " 10242766\n", + " 0xe849b2a694184b8739a04c915518330757cdb18b\n", + " 0x00490de473481e6883b7a13f582ee8e927dce1bafa92...\n", + " {\"name\": \"Random Round\", \"description\": \"Lorem...\n", + " bafybeia4khbew3r2mkflyn7nzlvfzcb3qpfeftz5ivpzf...\n", + " Allo Workshop\n", + " WyJwcm9qZWN0cyIsIjB4MDA0OTBkZTQ3MzQ4MWU2ODgzYj...\n", + " 6422\n", " NaN\n", - " None\n", + " CANONICAL\n", + " 0x4aacca72145e1df2aec137e1f3c5e3d75db8b5f3\n", + " [allo-v2]\n", + " 10242766\n", " \n", " \n", "\n", "" ], "text/plain": [ - " name chain icon \\\n", - "0 Ethereum Mainnet ETH ethereum \n", - "1 OP Mainnet ETH None \n", - "2 Polygon Mainnet Polygon polygon \n", - "3 Fantom Opera FTM fantom \n", - "\n", - " rpc \\\n", - "0 [https://mainnet.infura.io/v3/${INFURA_API_KEY... \n", - "1 [https://mainnet.optimism.io, https://optimism... \n", - "2 [https://polygon-rpc.com/, https://rpc-mainnet... \n", - "3 [https://rpc.ftm.tools, https://fantom.publicn... \n", - "\n", - " features faucets \\\n", - "0 [{'name': 'EIP155'}, {'name': 'EIP1559'}] [] \n", - "1 None [] \n", - "2 None [] \n", - "3 None [] \n", - "\n", - " nativeCurrency \\\n", - "0 {'name': 'Ether', 'symbol': 'ETH', 'decimals':... \n", - "1 {'name': 'Ether', 'symbol': 'ETH', 'decimals':... \n", - "2 {'name': 'MATIC', 'symbol': 'MATIC', 'decimals... \n", - "3 {'name': 'Fantom', 'symbol': 'FTM', 'decimals'... \n", - "\n", - " infoURL shortName chainId networkId slip44 \\\n", - "0 https://ethereum.org eth 1 1 60.0 \n", - "1 https://optimism.io oeth 10 10 NaN \n", - "2 https://polygon.technology/ matic 137 137 966.0 \n", - "3 https://fantom.foundation ftm 250 250 NaN \n", - "\n", - " ens \\\n", - "0 {'registry': '0x00000000000C2E074eC69A0dFb2997... \n", - "1 None \n", - "2 None \n", - "3 None \n", + " anchorAddress chainId createdAtBlock \\\n", + "0 None 424 1252131 \n", + "1 None 10 112152576 \n", + "2 None 424 5715877 \n", + "3 0xc2ba001c5e3dab03b5de1dda3dd3f64216d5c1a1 5 10242766 \n", + "\n", + " createdByAddress \\\n", + "0 0x0194325bf525be0d4fbb0856894ced74da3b8356 \n", + "1 0x7296191a226496f6afcf3490d2ec8e6cf8646c69 \n", + "2 0x9c162e77b67ed76164b486e2305000c10e3b9dfe \n", + "3 0xe849b2a694184b8739a04c915518330757cdb18b \n", + "\n", + " id \\\n", + "0 0x00065ad5b4ac5b42ac82c60ac9e939505f7996e95b61... \n", + "1 0x0017370bdfd13411f68f8f7bdac26edec1fadfa12cdc... \n", + "2 0x0024e32c272cb1a514dd4a83ce642544d5f73caa \n", + "3 0x00490de473481e6883b7a13f582ee8e927dce1bafa92... \n", + "\n", + " metadata \\\n", + "0 {\"title\": \"Ether Alpha\", \"logoImg\": \"bafkreibt... \n", + "1 {\"title\": \"wosek's contributions\", \"logoImg\": ... \n", + "2 {\"name\": \"DEVELOPMENT AND OPERATION OF ARTIFIC... \n", + "3 {\"name\": \"Random Round\", \"description\": \"Lorem... \n", + "\n", + " metadataCid name \\\n", + "0 bafkreic3wmwxh677nawk2ne563q7wx4vxif4xkoal65lo... \n", + "1 bafkreihg54kx2zz35y7gbtwsvwpgraohrsnh2mtf4drjh... \n", + "2 bafkreicndz7x2syry6qp7ccpqshddgqmyiotlpa6lnmxd... \n", + "3 bafybeia4khbew3r2mkflyn7nzlvfzcb3qpfeftz5ivpzf... Allo Workshop \n", "\n", - " explorers title status redFlags \\\n", - "0 [[(name, etherscan), (url, https://etherscan.i... None None NaN \n", - "1 [[(name, etherscan), (url, https://optimistic.... None None NaN \n", - "2 [[(name, polygonscan), (url, https://polygonsc... None None NaN \n", - "3 [[(name, ftmscan), (url, https://ftmscan.com),... None None NaN \n", + " nodeId nonce projectNumber \\\n", + "0 WyJwcm9qZWN0cyIsIjB4MDAwNjVhZDViNGFjNWI0MmFjOD... None 46.0 \n", + "1 WyJwcm9qZWN0cyIsIjB4MDAxNzM3MGJkZmQxMzQxMWY2OG... None 1520.0 \n", + "2 WyJwcm9qZWN0cyIsIjB4MDAyNGUzMmMyNzJjYjFhNTE0ZG... None NaN \n", + "3 WyJwcm9qZWN0cyIsIjB4MDA0OTBkZTQ3MzQ4MWU2ODgzYj... 6422 NaN \n", "\n", - " parent \n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 None " + " projectType registryAddress tags \\\n", + "0 CANONICAL 0xdf9bf58aa1a1b73f0e214d79c652a7dd37a6074e [allo-v1] \n", + "1 CANONICAL 0x8e1bd5da87c14dd8e08f7ecc2abf9d1d558ea174 [allo-v1] \n", + "2 CANONICAL 0x0000000000000000000000000000000000000000 [allo-v1, program] \n", + "3 CANONICAL 0x4aacca72145e1df2aec137e1f3c5e3d75db8b5f3 [allo-v2] \n", + "\n", + " updatedAtBlock \n", + "0 1252131 \n", + "1 112152576 \n", + "2 5715877 \n", + "3 10242766 " ] }, "metadata": {}, @@ -1766,7 +3203,7 @@ { "data": { "text/markdown": [ - "## [public_raw_passport_scores.parquet](#file-listing)" + "## [public_raw_allo_round_roles.parquet](#file-listing)" ], "text/plain": [ "" @@ -1778,7 +3215,7 @@ { "data": { "text/markdown": [ - "address: string
score: int64
last_score_timestamp: timestamp[us, tz=UTC]
status: string
evidence: struct
child 0, type: string
child 1, success: bool
child 2, rawScore: string
child 3, threshold: string
id: int64" + "address: string
chainId: int64
createdAtBlock: string
nodeId: string
role: string
roundId: string" ], "text/plain": [ "" @@ -1809,72 +3246,72 @@ " \n", " \n", " address\n", - " score\n", - " last_score_timestamp\n", - " status\n", - " evidence\n", - " id\n", + " chainId\n", + " createdAtBlock\n", + " nodeId\n", + " role\n", + " roundId\n", " \n", " \n", " \n", - " \n", - " 0\n", - " 0x0000000000000000000000000000000000000000\n", - " 0\n", - " 2023-12-29 08:07:07.327000+00:00\n", - " DONE\n", - " {'type': 'ThresholdScoreCheck', 'success': Fal...\n", - " 267616\n", + " \n", + " 0\n", + " 0x704f52ea3c4d8095e348027fdc0a4cfdc19d0008\n", + " 1\n", + " 17769949\n", + " WyJyb3VuZF9yb2xlcyIsMSwiMHgwNWRmNzZiYzQ0NmNlZT...\n", + " ADMIN\n", + " 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b\n", " \n", " \n", " 1\n", - " 0x0000000000098341a924bd53454654a0dbbc4e43\n", - " 0\n", - " 2023-12-29 08:20:47.033000+00:00\n", - " DONE\n", - " {'type': 'ThresholdScoreCheck', 'success': Fal...\n", - " 480966\n", + " 0x704f52ea3c4d8095e348027fdc0a4cfdc19d0008\n", + " 1\n", + " 17769949\n", + " WyJyb3VuZF9yb2xlcyIsMSwiMHgwNWRmNzZiYzQ0NmNlZT...\n", + " MANAGER\n", + " 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b\n", " \n", " \n", " 2\n", - " 0x0000000000ce6d8c1fba76f26d6cc5db71432710\n", - " 0\n", - " 2023-12-29 10:58:03.829000+00:00\n", - " DONE\n", - " {'type': 'ThresholdScoreCheck', 'success': Fal...\n", - " 1783713\n", + " 0x2a79b338932afb7c95b2f96fb925647190cd2b45\n", + " 1\n", + " 18355638\n", + " WyJyb3VuZF9yb2xlcyIsMSwiMHgwNzNjNDVkMjExZDUxOD...\n", + " ADMIN\n", + " 0x073c45d211d5180d94eaf1669b7f79f85b753c20\n", " \n", " \n", " 3\n", - " 0x00000000037a08ce8c4917a5c58f40c85367df0c\n", + " 0x2a79b338932afb7c95b2f96fb925647190cd2b45\n", " 1\n", - " 2023-12-29 07:29:03.207000+00:00\n", - " DONE\n", - " {'type': 'ThresholdScoreCheck', 'success': Tru...\n", - " 132926\n", + " 18355638\n", + " WyJyb3VuZF9yb2xlcyIsMSwiMHgwNzNjNDVkMjExZDUxOD...\n", + " MANAGER\n", + " 0x073c45d211d5180d94eaf1669b7f79f85b753c20\n", " \n", " \n", "\n", "" ], "text/plain": [ - " address score \\\n", - "0 0x0000000000000000000000000000000000000000 0 \n", - "1 0x0000000000098341a924bd53454654a0dbbc4e43 0 \n", - "2 0x0000000000ce6d8c1fba76f26d6cc5db71432710 0 \n", - "3 0x00000000037a08ce8c4917a5c58f40c85367df0c 1 \n", + " address chainId createdAtBlock \\\n", + "0 0x704f52ea3c4d8095e348027fdc0a4cfdc19d0008 1 17769949 \n", + "1 0x704f52ea3c4d8095e348027fdc0a4cfdc19d0008 1 17769949 \n", + "2 0x2a79b338932afb7c95b2f96fb925647190cd2b45 1 18355638 \n", + "3 0x2a79b338932afb7c95b2f96fb925647190cd2b45 1 18355638 \n", "\n", - " last_score_timestamp status \\\n", - "0 2023-12-29 08:07:07.327000+00:00 DONE \n", - "1 2023-12-29 08:20:47.033000+00:00 DONE \n", - "2 2023-12-29 10:58:03.829000+00:00 DONE \n", - "3 2023-12-29 07:29:03.207000+00:00 DONE \n", + " nodeId role \\\n", + "0 WyJyb3VuZF9yb2xlcyIsMSwiMHgwNWRmNzZiYzQ0NmNlZT... ADMIN \n", + "1 WyJyb3VuZF9yb2xlcyIsMSwiMHgwNWRmNzZiYzQ0NmNlZT... MANAGER \n", + "2 WyJyb3VuZF9yb2xlcyIsMSwiMHgwNzNjNDVkMjExZDUxOD... ADMIN \n", + "3 WyJyb3VuZF9yb2xlcyIsMSwiMHgwNzNjNDVkMjExZDUxOD... MANAGER \n", "\n", - " evidence id \n", - "0 {'type': 'ThresholdScoreCheck', 'success': Fal... 267616 \n", - "1 {'type': 'ThresholdScoreCheck', 'success': Fal... 480966 \n", - "2 {'type': 'ThresholdScoreCheck', 'success': Fal... 1783713 \n", - "3 {'type': 'ThresholdScoreCheck', 'success': Tru... 132926 " + " roundId \n", + "0 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b \n", + "1 0x05df76bc446cee7ad536e2d23c128c9c8909cf7b \n", + "2 0x073c45d211d5180d94eaf1669b7f79f85b753c20 \n", + "3 0x073c45d211d5180d94eaf1669b7f79f85b753c20 " ] }, "metadata": {}, @@ -1883,7 +3320,7 @@ { "data": { "text/markdown": [ - "## [public_raw_prices.parquet](#file-listing)" + "## [public_raw_allo_rounds.parquet](#file-listing)" ], "text/plain": [ "" @@ -1895,7 +3332,7 @@ { "data": { "text/markdown": [ - "token: string
code: string
price: double
timestamp: timestamp[us]
block: int64
chainId: string" + "adminRole: string
applicationMetadata: string
applicationMetadataCid: string
applicationsEndTime: string
applicationsStartTime: string
chainId: int64
createdAtBlock: string
createdByAddress: string
donationsEndTime: string
donationsStartTime: string
id: string
isReadyForPayout: bool
managerRole: string
matchAmount: string
matchAmountInUsd: double
matchTokenAddress: string
nodeId: string
projectId: string
roundMetadata: string
roundMetadataCid: string
strategyAddress: string
strategyId: string
strategyName: string
tags: string
totalAmountDonatedInUsd: double
totalDonationsCount: int64
uniqueDonorsCount: int64
updatedAtBlock: string" ], "text/plain": [ "" @@ -1925,67 +3362,193 @@ " \n", " \n", " \n", - " token\n", - " code\n", - " price\n", - " timestamp\n", - " block\n", + " adminRole\n", + " applicationMetadata\n", + " applicationMetadataCid\n", + " applicationsEndTime\n", + " applicationsStartTime\n", " chainId\n", + " createdAtBlock\n", + " createdByAddress\n", + " donationsEndTime\n", + " donationsStartTime\n", + " ...\n", + " roundMetadata\n", + " roundMetadataCid\n", + " strategyAddress\n", + " strategyId\n", + " strategyName\n", + " tags\n", + " totalAmountDonatedInUsd\n", + " totalDonationsCount\n", + " uniqueDonorsCount\n", + " updatedAtBlock\n", " \n", " \n", " \n", " \n", " 0\n", - " 0x0000000000000000000000000000000000000000\n", - " ETH\n", - " 2281.674286\n", - " 2024-01-01 00:00:00\n", - " 15383432\n", - " 280\n", + " \n", + " {\"version\": \"2.0.0\", \"lastUpdatedOn\": 17078383...\n", + " bafkreihtjfexxqwu7mmwboglnhzc4uxldiyjvh4u33xq3...\n", + " 2024-03-24T23:58:00\n", + " 2024-02-14T15:00:00\n", + " 42161\n", + " 180370254\n", + " 0xaa3600788b72863ff51c8f0db5f10bb65fbfeab4\n", + " 2024-03-24T23:58:00\n", + " 2024-03-11T00:00:00\n", + " ...\n", + " {\"name\": \"Unlock Protocol x Arbitrum : RetroQF...\n", + " bafkreih2i46efdxrmsgao6jucpv5ag6fikx45tt5g5vvl...\n", + " 0x4e1fa15bcc16af11853bc07da12c7dd41710e6d3\n", + " \n", + " allov1.QF\n", + " [\"allo-v1\"]\n", + " 0.0000\n", + " 0\n", + " 0\n", + " 180370254\n", " \n", " \n", " 1\n", - " 0x0000000000000000000000000000000000000000\n", - " ETH\n", - " 2296.584966\n", - " 2024-01-01 01:00:00\n", - " 15384995\n", - " 280\n", + " \n", + " {\"version\": \"2.0.0\", \"lastUpdatedOn\": 16978393...\n", + " bafkreiejeeh2ummqbbg5u674fchzk57kplonzdeaebe2l...\n", + " None\n", + " 2023-11-01T00:00:00\n", + " 10\n", + " 111120277\n", + " 0x43804905c02f551ec5420a88005bc66a1baf3ab0\n", + " None\n", + " 2023-11-01T00:00:00\n", + " ...\n", + " {\"name\": \"Grants Round\", \"support\": {\"info\": \"...\n", + " bafkreieflboucjx2eqlimnij2sfuqftq6bzil5x7qwlwy...\n", + " 0x05187c997121c05f407ad9e24ce36be54158db10\n", + " \n", + " allov1.Direct\n", + " [\"allo-v1\"]\n", + " 0.0000\n", + " 0\n", + " 0\n", + " 111120277\n", " \n", " \n", " 2\n", - " 0x0000000000000000000000000000000000000000\n", - " ETH\n", - " 2299.930925\n", - " 2024-01-01 02:00:00\n", - " 15386538\n", - " 280\n", + " \n", + " {\"version\": \"2.0.0\", \"lastUpdatedOn\": 16956589...\n", + " bafkreig7y44xsfckujpmr5foqncdy54kguonwinmaep6l...\n", + " None\n", + " 2023-09-26T00:00:00\n", + " 10\n", + " 110030087\n", + " 0x58338e95caef17861916ef10dad5fafe20421005\n", + " None\n", + " 2023-09-26T00:00:00\n", + " ...\n", + " {\"name\": \"Espresso test\", \"support\": {\"info\": ...\n", + " bafkreidayu7lllpeonacatdjkkjkqrbrhit4vjqxphku5...\n", + " 0xf7d21a59709ec1328b833d35d4eea9bbe529c1c0\n", + " \n", + " allov1.Direct\n", + " [\"allo-v1\"]\n", + " 0.0000\n", + " 0\n", + " 0\n", + " 110030087\n", " \n", " \n", " 3\n", - " 0x0000000000000000000000000000000000000000\n", - " ETH\n", - " 2293.858253\n", - " 2024-01-01 03:00:00\n", - " 15387989\n", - " 280\n", + " \n", + " {\"version\": \"2.0.0\", \"lastUpdatedOn\": 17070481...\n", + " bafkreidul3bgy2ihdrmqmrxegyazxe5fg4equzav34jnm...\n", + " 2024-05-31T00:00:00\n", + " 2024-02-04T13:00:00\n", + " 42161\n", + " 177348473\n", + " 0x7380a42137d16a0e7684578d8b3d32e1fbd021b5\n", + " 2024-05-31T00:00:00\n", + " 2024-02-05T00:00:00\n", + " ...\n", + " {\"name\": \"\\ud83c\\udf10\\u267b\\ufe0f EcoSynthesi...\n", + " bafkreibg4wwtxjpuz3uf2mmq3nokx22orxbr3bagoboa7...\n", + " 0xdfcb8e177dd457a93b83a09aee5140cc1175ba5d\n", + " \n", + " allov1.QF\n", + " [\"allo-v1\"]\n", + " 160.9271\n", + " 124\n", + " 37\n", + " 177348473\n", " \n", " \n", "\n", + "

4 rows × 28 columns

\n", "" ], "text/plain": [ - " token code price \\\n", - "0 0x0000000000000000000000000000000000000000 ETH 2281.674286 \n", - "1 0x0000000000000000000000000000000000000000 ETH 2296.584966 \n", - "2 0x0000000000000000000000000000000000000000 ETH 2299.930925 \n", - "3 0x0000000000000000000000000000000000000000 ETH 2293.858253 \n", + " adminRole applicationMetadata \\\n", + "0 {\"version\": \"2.0.0\", \"lastUpdatedOn\": 17078383... \n", + "1 {\"version\": \"2.0.0\", \"lastUpdatedOn\": 16978393... \n", + "2 {\"version\": \"2.0.0\", \"lastUpdatedOn\": 16956589... \n", + "3 {\"version\": \"2.0.0\", \"lastUpdatedOn\": 17070481... \n", + "\n", + " applicationMetadataCid applicationsEndTime \\\n", + "0 bafkreihtjfexxqwu7mmwboglnhzc4uxldiyjvh4u33xq3... 2024-03-24T23:58:00 \n", + "1 bafkreiejeeh2ummqbbg5u674fchzk57kplonzdeaebe2l... None \n", + "2 bafkreig7y44xsfckujpmr5foqncdy54kguonwinmaep6l... None \n", + "3 bafkreidul3bgy2ihdrmqmrxegyazxe5fg4equzav34jnm... 2024-05-31T00:00:00 \n", + "\n", + " applicationsStartTime chainId createdAtBlock \\\n", + "0 2024-02-14T15:00:00 42161 180370254 \n", + "1 2023-11-01T00:00:00 10 111120277 \n", + "2 2023-09-26T00:00:00 10 110030087 \n", + "3 2024-02-04T13:00:00 42161 177348473 \n", + "\n", + " createdByAddress donationsEndTime \\\n", + "0 0xaa3600788b72863ff51c8f0db5f10bb65fbfeab4 2024-03-24T23:58:00 \n", + "1 0x43804905c02f551ec5420a88005bc66a1baf3ab0 None \n", + "2 0x58338e95caef17861916ef10dad5fafe20421005 None \n", + "3 0x7380a42137d16a0e7684578d8b3d32e1fbd021b5 2024-05-31T00:00:00 \n", + "\n", + " donationsStartTime ... \\\n", + "0 2024-03-11T00:00:00 ... \n", + "1 2023-11-01T00:00:00 ... \n", + "2 2023-09-26T00:00:00 ... \n", + "3 2024-02-05T00:00:00 ... \n", + "\n", + " roundMetadata \\\n", + "0 {\"name\": \"Unlock Protocol x Arbitrum : RetroQF... \n", + "1 {\"name\": \"Grants Round\", \"support\": {\"info\": \"... \n", + "2 {\"name\": \"Espresso test\", \"support\": {\"info\": ... \n", + "3 {\"name\": \"\\ud83c\\udf10\\u267b\\ufe0f EcoSynthesi... \n", + "\n", + " roundMetadataCid \\\n", + "0 bafkreih2i46efdxrmsgao6jucpv5ag6fikx45tt5g5vvl... \n", + "1 bafkreieflboucjx2eqlimnij2sfuqftq6bzil5x7qwlwy... \n", + "2 bafkreidayu7lllpeonacatdjkkjkqrbrhit4vjqxphku5... \n", + "3 bafkreibg4wwtxjpuz3uf2mmq3nokx22orxbr3bagoboa7... \n", + "\n", + " strategyAddress strategyId strategyName \\\n", + "0 0x4e1fa15bcc16af11853bc07da12c7dd41710e6d3 allov1.QF \n", + "1 0x05187c997121c05f407ad9e24ce36be54158db10 allov1.Direct \n", + "2 0xf7d21a59709ec1328b833d35d4eea9bbe529c1c0 allov1.Direct \n", + "3 0xdfcb8e177dd457a93b83a09aee5140cc1175ba5d allov1.QF \n", "\n", - " timestamp block chainId \n", - "0 2024-01-01 00:00:00 15383432 280 \n", - "1 2024-01-01 01:00:00 15384995 280 \n", - "2 2024-01-01 02:00:00 15386538 280 \n", - "3 2024-01-01 03:00:00 15387989 280 " + " tags totalAmountDonatedInUsd totalDonationsCount uniqueDonorsCount \\\n", + "0 [\"allo-v1\"] 0.0000 0 0 \n", + "1 [\"allo-v1\"] 0.0000 0 0 \n", + "2 [\"allo-v1\"] 0.0000 0 0 \n", + "3 [\"allo-v1\"] 160.9271 124 37 \n", + "\n", + " updatedAtBlock \n", + "0 180370254 \n", + "1 111120277 \n", + "2 110030087 \n", + "3 177348473 \n", + "\n", + "[4 rows x 28 columns]" ] }, "metadata": {}, @@ -1994,7 +3557,7 @@ { "data": { "text/markdown": [ - "## [public_raw_projects.parquet](#file-listing)" + "## [public_raw_allo_subscriptions.parquet](#file-listing)" ], "text/plain": [ "" @@ -2006,7 +3569,7 @@ { "data": { "text/markdown": [ - "id: string
projectNumber: int64
metaPtr: string
metadata: string
owners: list
child 0, element: string
createdAtBlock: int64
chainId: string" + "chainId: int64
contractAddress: string
contractName: string
createdAt: string
fromBlock: string
id: string
indexedToBlock: string
indexedToLogIndex: int64
nodeId: string
toBlock: string
updatedAt: string" ], "text/plain": [ "" @@ -2036,84 +3599,110 @@ " \n", " \n", " \n", - " id\n", - " projectNumber\n", - " metaPtr\n", - " metadata\n", - " owners\n", - " createdAtBlock\n", " chainId\n", + " contractAddress\n", + " contractName\n", + " createdAt\n", + " fromBlock\n", + " id\n", + " indexedToBlock\n", + " indexedToLogIndex\n", + " nodeId\n", + " toBlock\n", + " updatedAt\n", " \n", " \n", " \n", " \n", " 0\n", - " 0xfe796d86ea81cc0343025b3860876aa6516f1afe8b94...\n", + " 10\n", + " 0x005De9495f4e87682647d16DB18DeAcdC8b525EF\n", + " AlloV1/ProgramImplementation/V1\n", + " 2024-02-20T13:57:50.236\n", + " 110696736\n", + " 10-0x005De9495f4e87682647d16DB18DeAcdC8b525EF\n", + " 116454443\n", " 0\n", - " bafkreicwhtude2cmyjecx3vfpnayobshjcckziuvfobqw...\n", - " {\"title\": \"FTM Test Project\", \"description\": \"...\n", - " [0x3f15B8c6F9939879Cb030D6dd935348E57109637]\n", - " 50580559\n", - " 250\n", + " WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMDVEZTk0OTVmNG...\n", + " latest\n", + " 2024-02-21T09:27:45.742544\n", " \n", " \n", " 1\n", - " 0x9b5985c3fb65dca9733f9d6418ab107b2d2f2108ab59...\n", - " 1\n", - " bafkreiepbxfp5uvpn3ff74cn42wodhrqbl3himw5oqlpp...\n", - " {\"title\": \"test ftm project\", \"description\": \"...\n", - " [0x63b265D170f35d6bb724A6c00b4DcC822EA97867]\n", - " 50582583\n", - " 250\n", + " 10\n", + " 0x00E1E1D5769C18Fc07921c2C06D07cCF084fBA3f\n", + " AlloV1/QuadraticFundingVotingStrategyImplement...\n", + " 2024-02-20T14:15:26.067\n", + " 115558292\n", + " 10-0x00E1E1D5769C18Fc07921c2C06D07cCF084fBA3f\n", + " 116454443\n", + " 0\n", + " WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMEUxRTFENTc2OU...\n", + " latest\n", + " 2024-02-21T09:27:45.767389\n", " \n", " \n", " 2\n", - " 0x8104847eab21b90e403b02a24c5b8050174873cb2356...\n", - " 2\n", - " bafkreifvvexgja3bukdgiyfzgzzekla7wfimgq35bmbo2...\n", - " {\"title\": \"TalentDAO\", \"description\": \"Talent ...\n", - " [0x3f15B8c6F9939879Cb030D6dd935348E57109637]\n", - " 50583305\n", - " 250\n", + " 10\n", + " 0x01Fb03887570e18eb88507ea7A5E73ecA169a516\n", + " AlloV1/ProgramImplementation/V1\n", + " 2024-02-20T13:54:54.996\n", + " 109263546\n", + " 10-0x01Fb03887570e18eb88507ea7A5E73ecA169a516\n", + " 116454443\n", + " 0\n", + " WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMUZiMDM4ODc1Nz...\n", + " latest\n", + " 2024-02-21T09:27:45.825769\n", " \n", " \n", " 3\n", - " 0x0d5c967ccdc3ef600b1689d13a6661aec9c8332b2a7b...\n", - " 3\n", - " bafkreie4cs53r6f327ai57ecoxw6omew3wbk4r7rgjwwj...\n", - " {\"title\": \"Nate's project\", \"description\": \"so...\n", - " [0x4873178BeA2DCd7022f0eF6c70048b0e05Bf9017]\n", - " 50638712\n", - " 250\n", + " 10\n", + " 0x0365712D69C2dFdd1a9FdF25972A3A1Dc4fB5b1B\n", + " AlloV1/ProgramImplementation/V1\n", + " 2024-02-20T13:33:47.178\n", + " 97309717\n", + " 10-0x0365712D69C2dFdd1a9FdF25972A3A1Dc4fB5b1B\n", + " 116454443\n", + " 0\n", + " WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMzY1NzEyRDY5Qz...\n", + " latest\n", + " 2024-02-21T09:27:45.558181\n", " \n", " \n", "\n", "" ], "text/plain": [ - " id projectNumber \\\n", - "0 0xfe796d86ea81cc0343025b3860876aa6516f1afe8b94... 0 \n", - "1 0x9b5985c3fb65dca9733f9d6418ab107b2d2f2108ab59... 1 \n", - "2 0x8104847eab21b90e403b02a24c5b8050174873cb2356... 2 \n", - "3 0x0d5c967ccdc3ef600b1689d13a6661aec9c8332b2a7b... 3 \n", + " chainId contractAddress \\\n", + "0 10 0x005De9495f4e87682647d16DB18DeAcdC8b525EF \n", + "1 10 0x00E1E1D5769C18Fc07921c2C06D07cCF084fBA3f \n", + "2 10 0x01Fb03887570e18eb88507ea7A5E73ecA169a516 \n", + "3 10 0x0365712D69C2dFdd1a9FdF25972A3A1Dc4fB5b1B \n", "\n", - " metaPtr \\\n", - "0 bafkreicwhtude2cmyjecx3vfpnayobshjcckziuvfobqw... \n", - "1 bafkreiepbxfp5uvpn3ff74cn42wodhrqbl3himw5oqlpp... \n", - "2 bafkreifvvexgja3bukdgiyfzgzzekla7wfimgq35bmbo2... \n", - "3 bafkreie4cs53r6f327ai57ecoxw6omew3wbk4r7rgjwwj... \n", + " contractName createdAt \\\n", + "0 AlloV1/ProgramImplementation/V1 2024-02-20T13:57:50.236 \n", + "1 AlloV1/QuadraticFundingVotingStrategyImplement... 2024-02-20T14:15:26.067 \n", + "2 AlloV1/ProgramImplementation/V1 2024-02-20T13:54:54.996 \n", + "3 AlloV1/ProgramImplementation/V1 2024-02-20T13:33:47.178 \n", "\n", - " metadata \\\n", - "0 {\"title\": \"FTM Test Project\", \"description\": \"... \n", - "1 {\"title\": \"test ftm project\", \"description\": \"... \n", - "2 {\"title\": \"TalentDAO\", \"description\": \"Talent ... \n", - "3 {\"title\": \"Nate's project\", \"description\": \"so... \n", + " fromBlock id indexedToBlock \\\n", + "0 110696736 10-0x005De9495f4e87682647d16DB18DeAcdC8b525EF 116454443 \n", + "1 115558292 10-0x00E1E1D5769C18Fc07921c2C06D07cCF084fBA3f 116454443 \n", + "2 109263546 10-0x01Fb03887570e18eb88507ea7A5E73ecA169a516 116454443 \n", + "3 97309717 10-0x0365712D69C2dFdd1a9FdF25972A3A1Dc4fB5b1B 116454443 \n", "\n", - " owners createdAtBlock chainId \n", - "0 [0x3f15B8c6F9939879Cb030D6dd935348E57109637] 50580559 250 \n", - "1 [0x63b265D170f35d6bb724A6c00b4DcC822EA97867] 50582583 250 \n", - "2 [0x3f15B8c6F9939879Cb030D6dd935348E57109637] 50583305 250 \n", - "3 [0x4873178BeA2DCd7022f0eF6c70048b0e05Bf9017] 50638712 250 " + " indexedToLogIndex nodeId \\\n", + "0 0 WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMDVEZTk0OTVmNG... \n", + "1 0 WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMEUxRTFENTc2OU... \n", + "2 0 WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMUZiMDM4ODc1Nz... \n", + "3 0 WyJzdWJzY3JpcHRpb25zIiwiMTAtMHgwMzY1NzEyRDY5Qz... \n", + "\n", + " toBlock updatedAt \n", + "0 latest 2024-02-21T09:27:45.742544 \n", + "1 latest 2024-02-21T09:27:45.767389 \n", + "2 latest 2024-02-21T09:27:45.825769 \n", + "3 latest 2024-02-21T09:27:45.558181 " ] }, "metadata": {}, @@ -2122,7 +3711,7 @@ { "data": { "text/markdown": [ - "## [public_raw_round_applications.parquet](#file-listing)" + "## [public_raw_chain_metadata.parquet](#file-listing)" ], "text/plain": [ "" @@ -2134,7 +3723,7 @@ { "data": { "text/markdown": [ - "chainId: string
roundId: string
id: int64
projectId: string
status: string
amountUSD: double
votes: int64
uniqueContributors: int64
metadata: string
createdAtBlock: int64
statusUpdatedAtBlock: int64
statusSnapshots: list>
child 0, element: struct
child 0, status: string
child 1, statusUpdatedAtBlock: int32" + "name: int32
chain: int32
icon: int32
rpc: int32
features: int32
faucets: int32
nativeCurrency: int32
infoURL: int32
shortName: int32
chainId: int32
networkId: int64
slip44: int64
ens: int32
explorers: int32
title: int32
status: int32
redFlags: int32
parent: int32" ], "text/plain": [ "" @@ -2164,115 +3753,35 @@ " \n", " \n", " \n", + " name\n", + " chain\n", + " icon\n", + " rpc\n", + " features\n", + " faucets\n", + " nativeCurrency\n", + " infoURL\n", + " shortName\n", " chainId\n", - " roundId\n", - " id\n", - " projectId\n", + " networkId\n", + " slip44\n", + " ens\n", + " explorers\n", + " title\n", " status\n", - " amountUSD\n", - " votes\n", - " uniqueContributors\n", - " metadata\n", - " createdAtBlock\n", - " statusUpdatedAtBlock\n", - " statusSnapshots\n", + " redFlags\n", + " parent\n", " \n", " \n", " \n", - " \n", - " 0\n", - " 280\n", - " 0xFFf13D967d27b564838D413d98a53e0c013Fa7D9\n", - " 0\n", - " 0x27ecde7fbbd667c76299df57b340b18b025ceb0d5dd0...\n", - " PENDING\n", - " 0.000000\n", - " 0\n", - " 0\n", - " {\"signature\": \"0x6de148a3778a5cbe0d8664476164d...\n", - " 14930930\n", - " 14930930\n", - " [{'status': 'PENDING', 'statusUpdatedAtBlock':...\n", - " \n", - " \n", - " 1\n", - " 280\n", - " 0x2F9e1523FE85a26602bF6518F6DfB70d44721dC1\n", - " 0\n", - " 0xae65357bd3576496fffa2f659acdd5681115d7799408...\n", - " PENDING\n", - " 0.000000\n", - " 0\n", - " 0\n", - " {\"signature\": \"0xb725515be88d819eb8e8be676f18d...\n", - " 14930985\n", - " 14930985\n", - " [{'status': 'PENDING', 'statusUpdatedAtBlock':...\n", - " \n", - " \n", - " 2\n", - " 280\n", - " 0x34704E4d2d38f1012Ee019B893B639f74BA4f47B\n", - " 0\n", - " 0x27ecde7fbbd667c76299df57b340b18b025ceb0d5dd0...\n", - " PENDING\n", - " 0.000000\n", - " 0\n", - " 0\n", - " {\"signature\": \"0x760cd292133844029e25c9d8b4ff5...\n", - " 15055770\n", - " 15055770\n", - " [{'status': 'PENDING', 'statusUpdatedAtBlock':...\n", - " \n", - " \n", - " 3\n", - " 1\n", - " 0x1427A0E71a222b0229A910dc72da01F8F04C7441\n", - " 0\n", - " 0x79f989da908001a071fc2b4c8d9abb30c04365aa8dc3...\n", - " APPROVED\n", - " 82.552126\n", - " 53\n", - " 53\n", - " {\"signature\": \"0x5cee91b717744c5c25cea497b0744...\n", - " 18503087\n", - " 18717541\n", - " [{'status': 'PENDING', 'statusUpdatedAtBlock':...\n", - " \n", " \n", "\n", "" ], "text/plain": [ - " chainId roundId id \\\n", - "0 280 0xFFf13D967d27b564838D413d98a53e0c013Fa7D9 0 \n", - "1 280 0x2F9e1523FE85a26602bF6518F6DfB70d44721dC1 0 \n", - "2 280 0x34704E4d2d38f1012Ee019B893B639f74BA4f47B 0 \n", - "3 1 0x1427A0E71a222b0229A910dc72da01F8F04C7441 0 \n", - "\n", - " projectId status amountUSD \\\n", - "0 0x27ecde7fbbd667c76299df57b340b18b025ceb0d5dd0... PENDING 0.000000 \n", - "1 0xae65357bd3576496fffa2f659acdd5681115d7799408... PENDING 0.000000 \n", - "2 0x27ecde7fbbd667c76299df57b340b18b025ceb0d5dd0... PENDING 0.000000 \n", - "3 0x79f989da908001a071fc2b4c8d9abb30c04365aa8dc3... APPROVED 82.552126 \n", - "\n", - " votes uniqueContributors \\\n", - "0 0 0 \n", - "1 0 0 \n", - "2 0 0 \n", - "3 53 53 \n", - "\n", - " metadata createdAtBlock \\\n", - "0 {\"signature\": \"0x6de148a3778a5cbe0d8664476164d... 14930930 \n", - "1 {\"signature\": \"0xb725515be88d819eb8e8be676f18d... 14930985 \n", - "2 {\"signature\": \"0x760cd292133844029e25c9d8b4ff5... 15055770 \n", - "3 {\"signature\": \"0x5cee91b717744c5c25cea497b0744... 18503087 \n", - "\n", - " statusUpdatedAtBlock statusSnapshots \n", - "0 14930930 [{'status': 'PENDING', 'statusUpdatedAtBlock':... \n", - "1 14930985 [{'status': 'PENDING', 'statusUpdatedAtBlock':... \n", - "2 15055770 [{'status': 'PENDING', 'statusUpdatedAtBlock':... \n", - "3 18717541 [{'status': 'PENDING', 'statusUpdatedAtBlock':... " + "Empty DataFrame\n", + "Columns: [name, chain, icon, rpc, features, faucets, nativeCurrency, infoURL, shortName, chainId, networkId, slip44, ens, explorers, title, status, redFlags, parent]\n", + "Index: []" ] }, "metadata": {}, @@ -2281,7 +3790,7 @@ { "data": { "text/markdown": [ - "## [public_raw_round_contributors.parquet](#file-listing)" + "## [public_raw_discourse_categories.parquet](#file-listing)" ], "text/plain": [ "" @@ -2293,7 +3802,7 @@ { "data": { "text/markdown": [ - "id: string
amountUSD: double
votes: int64
chainId: string
roundId: string" + "id: int64
name: string
color: string
text_color: string
slug: string
topic_count: int64
post_count: int64
position: int64
description: string
description_text: string
description_excerpt: string
topic_url: string
read_restricted: bool
permission: int32
notification_level: int64
topic_template: string
has_children: bool
sort_order: string
sort_ascending: int32
show_subcategory_list: bool
num_featured_topics: int64
default_view: string
subcategory_list_style: string
default_top_period: string
default_list_filter: string
minimum_required_tags: int64
navigate_to_first_post_after_read: bool
custom_fields: map
child 0, custom_fields: struct not null
child 0, key: string not null
child 1, value: int32
topics_day: int64
topics_week: int64
topics_month: int64
topics_year: int64
topics_all_time: int64
subcategory_ids: list
child 0, element: int32
uploaded_logo: int32
uploaded_logo_dark: int32
uploaded_background: int32
uploaded_background_dark: int64
source: string
is_uncategorized: bool
topics: string" ], "text/plain": [ "" @@ -2324,61 +3833,174 @@ " \n", " \n", " id\n", - " amountUSD\n", - " votes\n", - " chainId\n", - " roundId\n", + " name\n", + " color\n", + " text_color\n", + " slug\n", + " topic_count\n", + " post_count\n", + " position\n", + " description\n", + " description_text\n", + " ...\n", + " topics_year\n", + " topics_all_time\n", + " subcategory_ids\n", + " uploaded_logo\n", + " uploaded_logo_dark\n", + " uploaded_background\n", + " uploaded_background_dark\n", + " source\n", + " is_uncategorized\n", + " topics\n", " \n", " \n", " \n", " \n", " 0\n", - " 0x37e5e6eb36467F98392ebBb35F110FbB8238e6D3\n", - " 1.138331\n", - " 5\n", - " 324\n", - " \"0xc85686f394116ddF94dbFa86059e17047232c54f\"\n", + " 6\n", + " 🤖 DAO Governance and Vision\n", + " 652D90\n", + " FFFFFF\n", + " governancevision\n", + " 213\n", + " 2076\n", + " 0\n", + " Discussions around the coordination, and the o...\n", + " Discussions around the coordination, and the o...\n", + " ...\n", + " 30\n", + " 213\n", + " []\n", + " NaN\n", + " NaN\n", + " NaN\n", + " NaN\n", + " Gitcoin\n", + " None\n", + " None\n", " \n", " \n", " 1\n", - " 0x4614291bb169905074Da4aFaA39784D175162f79\n", - " 7.514128\n", - " 6\n", - " 324\n", - " \"0xc85686f394116ddF94dbFa86059e17047232c54f\"\n", + " 18\n", + " 📌 Policies & Templates\n", + " fff700\n", + " FFFFFF\n", + " policies-and-templates\n", + " 1\n", + " 114\n", + " 1\n", + " Find governance policies and proposal template...\n", + " Find governance policies and proposal template...\n", + " ...\n", + " 0\n", + " 1\n", + " []\n", + " NaN\n", + " NaN\n", + " NaN\n", + " NaN\n", + " Gitcoin\n", + " None\n", + " None\n", " \n", " \n", " 2\n", - " 0x58338E95caEf17861916Ef10daD5fAFE20421005\n", - " 2.275275\n", + " 15\n", + " 🌱 Grants\n", + " 0088CC\n", + " FFFFFF\n", + " grants\n", + " 74\n", + " 920\n", " 2\n", - " 324\n", - " \"0xc85686f394116ddF94dbFa86059e17047232c54f\"\n", + " Everything around Gitcoin Grants, our flagship...\n", + " Everything around Gitcoin Grants, our flagship...\n", + " ...\n", + " 39\n", + " 74\n", + " []\n", + " NaN\n", + " NaN\n", + " NaN\n", + " NaN\n", + " Gitcoin\n", + " None\n", + " None\n", " \n", " \n", " 3\n", - " 0x58338E95caEf17861916Ef10daD5fAFE20421005\n", - " 3.764763\n", + " 5\n", + " 📜 Proposals\n", + " 0E76BD\n", + " FFFFFF\n", + " governance-proposals\n", + " 175\n", + " 2925\n", " 3\n", - " 324\n", - " \"0xC84B29C0c07134Ec019383438f1106960B7E5eF2\"\n", + " All budget requests for discussion before it g...\n", + " All budget requests for discussion before it g...\n", + " ...\n", + " 33\n", + " 175\n", + " []\n", + " NaN\n", + " NaN\n", + " NaN\n", + " NaN\n", + " Gitcoin\n", + " None\n", + " None\n", " \n", " \n", "\n", + "

4 rows × 41 columns

\n", "" ], "text/plain": [ - " id amountUSD votes chainId \\\n", - "0 0x37e5e6eb36467F98392ebBb35F110FbB8238e6D3 1.138331 5 324 \n", - "1 0x4614291bb169905074Da4aFaA39784D175162f79 7.514128 6 324 \n", - "2 0x58338E95caEf17861916Ef10daD5fAFE20421005 2.275275 2 324 \n", - "3 0x58338E95caEf17861916Ef10daD5fAFE20421005 3.764763 3 324 \n", + " id name color text_color slug \\\n", + "0 6 🤖 DAO Governance and Vision 652D90 FFFFFF governancevision \n", + "1 18 📌 Policies & Templates fff700 FFFFFF policies-and-templates \n", + "2 15 🌱 Grants 0088CC FFFFFF grants \n", + "3 5 📜 Proposals 0E76BD FFFFFF governance-proposals \n", + "\n", + " topic_count post_count position \\\n", + "0 213 2076 0 \n", + "1 1 114 1 \n", + "2 74 920 2 \n", + "3 175 2925 3 \n", + "\n", + " description \\\n", + "0 Discussions around the coordination, and the o... \n", + "1 Find governance policies and proposal template... \n", + "2 Everything around Gitcoin Grants, our flagship... \n", + "3 All budget requests for discussion before it g... \n", + "\n", + " description_text ... topics_year \\\n", + "0 Discussions around the coordination, and the o... ... 30 \n", + "1 Find governance policies and proposal template... ... 0 \n", + "2 Everything around Gitcoin Grants, our flagship... ... 39 \n", + "3 All budget requests for discussion before it g... ... 33 \n", "\n", - " roundId \n", - "0 \"0xc85686f394116ddF94dbFa86059e17047232c54f\" \n", - "1 \"0xc85686f394116ddF94dbFa86059e17047232c54f\" \n", - "2 \"0xc85686f394116ddF94dbFa86059e17047232c54f\" \n", - "3 \"0xC84B29C0c07134Ec019383438f1106960B7E5eF2\" " + " topics_all_time subcategory_ids uploaded_logo uploaded_logo_dark \\\n", + "0 213 [] NaN NaN \n", + "1 1 [] NaN NaN \n", + "2 74 [] NaN NaN \n", + "3 175 [] NaN NaN \n", + "\n", + " uploaded_background uploaded_background_dark source is_uncategorized \\\n", + "0 NaN NaN Gitcoin None \n", + "1 NaN NaN Gitcoin None \n", + "2 NaN NaN Gitcoin None \n", + "3 NaN NaN Gitcoin None \n", + "\n", + " topics \n", + "0 None \n", + "1 None \n", + "2 None \n", + "3 None \n", + "\n", + "[4 rows x 41 columns]" ] }, "metadata": {}, @@ -2387,7 +4009,7 @@ { "data": { "text/markdown": [ - "## [public_raw_round_votes.parquet](#file-listing)" + "## [public_raw_gitcoin_passport_scores.parquet](#file-listing)" ], "text/plain": [ "" @@ -2399,7 +4021,7 @@ { "data": { "text/markdown": [ - "chainId: string
roundId: string
id: string
transaction: string
blockNumber: int64
projectId: string
applicationId: int64
voter: string
grantAddress: string
token: string
amount: double
amountUSD: double
amountRoundToken: double" + "address: string
score: double
last_score_timestamp: timestamp[us, tz=UTC]
status: string
evidence: struct
child 0, type: string
child 1, success: bool
child 2, rawScore: string
child 3, threshold: string
id: int64" ], "text/plain": [ "" @@ -2429,138 +4051,73 @@ " \n", " \n", " \n", - " chainId\n", - " roundId\n", + " address\n", + " score\n", + " last_score_timestamp\n", + " status\n", + " evidence\n", " id\n", - " transaction\n", - " blockNumber\n", - " projectId\n", - " applicationId\n", - " voter\n", - " grantAddress\n", - " token\n", - " amount\n", - " amountUSD\n", - " amountRoundToken\n", " \n", " \n", " \n", " \n", " 0\n", - " 250\n", - " 0x19D84682c0FD83DF5920e29987221fA71f4EA75B\n", - " 0x39e17a8935624409da1f8932570c7d693a6328a6a42a...\n", - " 0x31f54e74e1cc53ccea26462810ed32e3701901c8f64f...\n", - " 67413218\n", - " 0xd2d10ca4b6b87fb6c0052ca3e0748236363d9e961d70...\n", - " 2\n", - " 0xABF28f8D9adFB2255F4a059e37d3BcE9104969dB\n", - " 0x37e5e6eb36467F98392ebBb35F110FbB8238e6D3\n", - " 0x83791638da5EB2fAa432aff1c65fbA47c5D29510\n", - " 3.000000e+18\n", - " 2.999475\n", - " 1.469453e+19\n", + " 0x0000000000000000000000000000000000000000\n", + " 0.0\n", + " 2024-02-02 09:39:37.386000+00:00\n", + " DONE\n", + " {'type': 'ThresholdScoreCheck', 'success': Fal...\n", + " 267616\n", " \n", " \n", " 1\n", - " 250\n", - " 0x19D84682c0FD83DF5920e29987221fA71f4EA75B\n", - " 0xddc53d22fbf190f569b0eef91196ef00e5bda0ae4a80...\n", - " 0x31f54e74e1cc53ccea26462810ed32e3701901c8f64f...\n", - " 67413218\n", - " 0x24472c9a83946f8694084da07f9ae3087499b299e7a2...\n", - " 1\n", - " 0xABF28f8D9adFB2255F4a059e37d3BcE9104969dB\n", - " 0x37e5e6eb36467F98392ebBb35F110FbB8238e6D3\n", - " 0x83791638da5EB2fAa432aff1c65fbA47c5D29510\n", - " 1.000000e+19\n", - " 9.998252\n", - " 4.898177e+19\n", + " 0x0000000000098341a924bd53454654a0dbbc4e43\n", + " 0.0\n", + " 2024-02-01 22:09:51.734000+00:00\n", + " DONE\n", + " {'type': 'ThresholdScoreCheck', 'success': Fal...\n", + " 480966\n", " \n", " \n", " 2\n", - " 250\n", - " 0x19D84682c0FD83DF5920e29987221fA71f4EA75B\n", - " 0x94951ac2dcab4019adf38e55a77238784a1cf725b653...\n", - " 0x31f54e74e1cc53ccea26462810ed32e3701901c8f64f...\n", - " 67413218\n", - " 0x4821b33f7e2079a82acdbcc452a13a8d59cc33b6981b...\n", - " 0\n", - " 0xABF28f8D9adFB2255F4a059e37d3BcE9104969dB\n", - " 0x37e5e6eb36467F98392ebBb35F110FbB8238e6D3\n", - " 0x83791638da5EB2fAa432aff1c65fbA47c5D29510\n", - " 2.000000e+19\n", - " 19.996503\n", - " 9.796354e+19\n", + " 0x00000000000d86e4837ba41dacde4b8713d5ccac\n", + " 1.0\n", + " 2024-02-09 13:23:00.227000+00:00\n", + " DONE\n", + " {'type': 'ThresholdScoreCheck', 'success': Tru...\n", + " 5118201\n", " \n", " \n", " 3\n", - " 250\n", - " 0x19D84682c0FD83DF5920e29987221fA71f4EA75B\n", - " 0x98ab19ff5a369c4a3d2ef8ae9fc546179b9135ca7012...\n", - " 0x1285af31632b737edc3a2681840f6a454080f37fe93f...\n", - " 67413524\n", - " 0x4821b33f7e2079a82acdbcc452a13a8d59cc33b6981b...\n", - " 0\n", - " 0x37e5e6eb36467F98392ebBb35F110FbB8238e6D3\n", - " 0x37e5e6eb36467F98392ebBb35F110FbB8238e6D3\n", - " 0x83791638da5EB2fAa432aff1c65fbA47c5D29510\n", - " 5.000000e+18\n", - " 4.999126\n", - " 2.449089e+19\n", + " 0x0000000000ce6d8c1fba76f26d6cc5db71432710\n", + " 0.0\n", + " 2024-02-01 22:42:17.357000+00:00\n", + " DONE\n", + " {'type': 'ThresholdScoreCheck', 'success': Fal...\n", + " 1783713\n", " \n", " \n", "\n", "" ], "text/plain": [ - " chainId roundId \\\n", - "0 250 0x19D84682c0FD83DF5920e29987221fA71f4EA75B \n", - "1 250 0x19D84682c0FD83DF5920e29987221fA71f4EA75B \n", - "2 250 0x19D84682c0FD83DF5920e29987221fA71f4EA75B \n", - "3 250 0x19D84682c0FD83DF5920e29987221fA71f4EA75B \n", - "\n", - " id \\\n", - "0 0x39e17a8935624409da1f8932570c7d693a6328a6a42a... \n", - "1 0xddc53d22fbf190f569b0eef91196ef00e5bda0ae4a80... \n", - "2 0x94951ac2dcab4019adf38e55a77238784a1cf725b653... \n", - "3 0x98ab19ff5a369c4a3d2ef8ae9fc546179b9135ca7012... \n", - "\n", - " transaction blockNumber \\\n", - "0 0x31f54e74e1cc53ccea26462810ed32e3701901c8f64f... 67413218 \n", - "1 0x31f54e74e1cc53ccea26462810ed32e3701901c8f64f... 67413218 \n", - "2 0x31f54e74e1cc53ccea26462810ed32e3701901c8f64f... 67413218 \n", - "3 0x1285af31632b737edc3a2681840f6a454080f37fe93f... 67413524 \n", - "\n", - " projectId applicationId \\\n", - "0 0xd2d10ca4b6b87fb6c0052ca3e0748236363d9e961d70... 2 \n", - "1 0x24472c9a83946f8694084da07f9ae3087499b299e7a2... 1 \n", - "2 0x4821b33f7e2079a82acdbcc452a13a8d59cc33b6981b... 0 \n", - "3 0x4821b33f7e2079a82acdbcc452a13a8d59cc33b6981b... 0 \n", - "\n", - " voter \\\n", - "0 0xABF28f8D9adFB2255F4a059e37d3BcE9104969dB \n", - "1 0xABF28f8D9adFB2255F4a059e37d3BcE9104969dB \n", - "2 0xABF28f8D9adFB2255F4a059e37d3BcE9104969dB \n", - "3 0x37e5e6eb36467F98392ebBb35F110FbB8238e6D3 \n", - "\n", - " grantAddress \\\n", - "0 0x37e5e6eb36467F98392ebBb35F110FbB8238e6D3 \n", - "1 0x37e5e6eb36467F98392ebBb35F110FbB8238e6D3 \n", - "2 0x37e5e6eb36467F98392ebBb35F110FbB8238e6D3 \n", - "3 0x37e5e6eb36467F98392ebBb35F110FbB8238e6D3 \n", + " address score \\\n", + "0 0x0000000000000000000000000000000000000000 0.0 \n", + "1 0x0000000000098341a924bd53454654a0dbbc4e43 0.0 \n", + "2 0x00000000000d86e4837ba41dacde4b8713d5ccac 1.0 \n", + "3 0x0000000000ce6d8c1fba76f26d6cc5db71432710 0.0 \n", "\n", - " token amount amountUSD \\\n", - "0 0x83791638da5EB2fAa432aff1c65fbA47c5D29510 3.000000e+18 2.999475 \n", - "1 0x83791638da5EB2fAa432aff1c65fbA47c5D29510 1.000000e+19 9.998252 \n", - "2 0x83791638da5EB2fAa432aff1c65fbA47c5D29510 2.000000e+19 19.996503 \n", - "3 0x83791638da5EB2fAa432aff1c65fbA47c5D29510 5.000000e+18 4.999126 \n", + " last_score_timestamp status \\\n", + "0 2024-02-02 09:39:37.386000+00:00 DONE \n", + "1 2024-02-01 22:09:51.734000+00:00 DONE \n", + "2 2024-02-09 13:23:00.227000+00:00 DONE \n", + "3 2024-02-01 22:42:17.357000+00:00 DONE \n", "\n", - " amountRoundToken \n", - "0 1.469453e+19 \n", - "1 4.898177e+19 \n", - "2 9.796354e+19 \n", - "3 2.449089e+19 " + " evidence id \n", + "0 {'type': 'ThresholdScoreCheck', 'success': Fal... 267616 \n", + "1 {'type': 'ThresholdScoreCheck', 'success': Fal... 480966 \n", + "2 {'type': 'ThresholdScoreCheck', 'success': Tru... 5118201 \n", + "3 {'type': 'ThresholdScoreCheck', 'success': Fal... 1783713 " ] }, "metadata": {}, @@ -2569,7 +4126,7 @@ { "data": { "text/markdown": [ - "## [public_raw_rounds.parquet](#file-listing)" + "## [public_raw_giveth_projects.parquet](#file-listing)" ], "text/plain": [ "" @@ -2581,7 +4138,7 @@ { "data": { "text/markdown": [ - "id: string
amountUSD: double
votes: int64
token: string
matchAmount: double
matchAmountUSD: double
uniqueContributors: int64
applicationMetaPtr: string
applicationMetadata: string
metaPtr: string
metadata: string
applicationsStartTime: int64
applicationsEndTime: double
roundStartTime: int64
roundEndTime: double
createdAtBlock: int64
updatedAtBlock: int64
chainId: string" + "title: string
totalDonations: double
totalTraceDonations: double" ], "text/plain": [ "" @@ -2611,163 +4168,46 @@ " \n", " \n", " \n", - " id\n", - " amountUSD\n", - " votes\n", - " token\n", - " matchAmount\n", - " matchAmountUSD\n", - " uniqueContributors\n", - " applicationMetaPtr\n", - " applicationMetadata\n", - " metaPtr\n", - " metadata\n", - " applicationsStartTime\n", - " applicationsEndTime\n", - " roundStartTime\n", - " roundEndTime\n", - " createdAtBlock\n", - " updatedAtBlock\n", - " chainId\n", + " title\n", + " totalDonations\n", + " totalTraceDonations\n", " \n", " \n", " \n", " \n", " 0\n", - " 0xf16C7C3e7bb378c716F2b349a999D8ce56F3cFb5\n", - " 0.010547\n", - " 3\n", - " 0x0000000000000000000000000000000000000000\n", - " 1.000000e+18\n", - " 0.525015\n", - " 2\n", - " bafkreid4qdvpgogw7pec5m57uvdurkvdu5z7vmtuczuoa...\n", - " {'lastUpdatedOn': 1695307508483, 'applicationS...\n", - " bafkreid3oppvwhxli3sqkf3br2b3k4rwa74uczwl4v2ii...\n", - " {\"feesPercentage\": 0, \"feesAddress\": \"\", \"name...\n", - " 1695307560\n", - " 1.695341e+09\n", - " 1695307560\n", - " 1.695341e+09\n", - " 47813168\n", - " 47813168\n", - " 137\n", + " MetaTrace\n", + " 2667.9192\n", + " 0.00\n", " \n", " \n", " 1\n", - " 0xb410680b922e91f2eA4159331FFEAAAdb217F246\n", - " 0.000000\n", - " 0\n", - " 0x0000000000000000000000000000000000000000\n", - " 1.000000e+18\n", - " 0.526396\n", - " 0\n", - " bafkreie2uqqanbeiuabkrzpghjqkjlgimjbm5w3t5yver...\n", - " {'lastUpdatedOn': 1695318545342, 'applicationS...\n", - " bafkreifaysglowdjlhivjv5utus766tos4me3zroygbcy...\n", - " {\"feesPercentage\": 0, \"feesAddress\": \"\", \"name...\n", - " 1695319200\n", - " 1.696032e+09\n", - " 1695319200\n", - " 1.696032e+09\n", - " 47818260\n", - " 47818260\n", - " 137\n", + " The Giveth Community of Makers\n", + " 109221.7340\n", + " 85128.21\n", " \n", " \n", " 2\n", - " 0x353d3485Fb5b560BcB79780CEd5Ddd26331040a9\n", - " 0.000000\n", - " 0\n", - " 0x0000000000000000000000000000000000000000\n", - " 3.000000e+18\n", - " 1.575025\n", - " 0\n", - " bafkreifiyr7moy45suwlu7wvpa3ftdxhsgaxsbw2m3grx...\n", - " {'lastUpdatedOn': 1695328536702, 'applicationS...\n", - " bafkreifbwivdn25q7tnkecu6wt6nzutndyb25w5zpbfre...\n", - " {\"feesPercentage\": 0, \"feesAddress\": \"\", \"name...\n", - " 1695589200\n", - " 1.695686e+09\n", - " 1695600000\n", - " 1.695686e+09\n", - " 47822940\n", - " 47822940\n", - " 137\n", + " Bridging Digital Communities\n", + " 2853.2332\n", + " 0.00\n", " \n", " \n", " 3\n", - " 0xBE245931C95d9B005ebf613090D932D10d3d5249\n", - " 0.000000\n", - " 0\n", - " 0x0000000000000000000000000000000000000000\n", - " 5.000000e+23\n", - " 260098.220000\n", - " 0\n", - " bafkreih37fpyqtpxrigid7ceobwrknd5wo3zfvwi4cqrs...\n", - " {'lastUpdatedOn': 1695486571265, 'applicationS...\n", - " bafkreidetdecljkkzkpkwybvhjflne7g6eugotiix5cre...\n", - " {\"feesPercentage\": 0, \"feesAddress\": \"\", \"name...\n", - " 1695661200\n", - " 1.698710e+09\n", - " 1695859200\n", - " 1.698710e+09\n", - " 47895093\n", - " 47895093\n", - " 137\n", + " Diamante Bridge Collective\n", + " 68786.1250\n", + " 0.00\n", " \n", " \n", "\n", "" ], "text/plain": [ - " id amountUSD votes \\\n", - "0 0xf16C7C3e7bb378c716F2b349a999D8ce56F3cFb5 0.010547 3 \n", - "1 0xb410680b922e91f2eA4159331FFEAAAdb217F246 0.000000 0 \n", - "2 0x353d3485Fb5b560BcB79780CEd5Ddd26331040a9 0.000000 0 \n", - "3 0xBE245931C95d9B005ebf613090D932D10d3d5249 0.000000 0 \n", - "\n", - " token matchAmount matchAmountUSD \\\n", - "0 0x0000000000000000000000000000000000000000 1.000000e+18 0.525015 \n", - "1 0x0000000000000000000000000000000000000000 1.000000e+18 0.526396 \n", - "2 0x0000000000000000000000000000000000000000 3.000000e+18 1.575025 \n", - "3 0x0000000000000000000000000000000000000000 5.000000e+23 260098.220000 \n", - "\n", - " uniqueContributors applicationMetaPtr \\\n", - "0 2 bafkreid4qdvpgogw7pec5m57uvdurkvdu5z7vmtuczuoa... \n", - "1 0 bafkreie2uqqanbeiuabkrzpghjqkjlgimjbm5w3t5yver... \n", - "2 0 bafkreifiyr7moy45suwlu7wvpa3ftdxhsgaxsbw2m3grx... \n", - "3 0 bafkreih37fpyqtpxrigid7ceobwrknd5wo3zfvwi4cqrs... \n", - "\n", - " applicationMetadata \\\n", - "0 {'lastUpdatedOn': 1695307508483, 'applicationS... \n", - "1 {'lastUpdatedOn': 1695318545342, 'applicationS... \n", - "2 {'lastUpdatedOn': 1695328536702, 'applicationS... \n", - "3 {'lastUpdatedOn': 1695486571265, 'applicationS... \n", - "\n", - " metaPtr \\\n", - "0 bafkreid3oppvwhxli3sqkf3br2b3k4rwa74uczwl4v2ii... \n", - "1 bafkreifaysglowdjlhivjv5utus766tos4me3zroygbcy... \n", - "2 bafkreifbwivdn25q7tnkecu6wt6nzutndyb25w5zpbfre... \n", - "3 bafkreidetdecljkkzkpkwybvhjflne7g6eugotiix5cre... \n", - "\n", - " metadata applicationsStartTime \\\n", - "0 {\"feesPercentage\": 0, \"feesAddress\": \"\", \"name... 1695307560 \n", - "1 {\"feesPercentage\": 0, \"feesAddress\": \"\", \"name... 1695319200 \n", - "2 {\"feesPercentage\": 0, \"feesAddress\": \"\", \"name... 1695589200 \n", - "3 {\"feesPercentage\": 0, \"feesAddress\": \"\", \"name... 1695661200 \n", - "\n", - " applicationsEndTime roundStartTime roundEndTime createdAtBlock \\\n", - "0 1.695341e+09 1695307560 1.695341e+09 47813168 \n", - "1 1.696032e+09 1695319200 1.696032e+09 47818260 \n", - "2 1.695686e+09 1695600000 1.695686e+09 47822940 \n", - "3 1.698710e+09 1695859200 1.698710e+09 47895093 \n", - "\n", - " updatedAtBlock chainId \n", - "0 47813168 137 \n", - "1 47818260 137 \n", - "2 47822940 137 \n", - "3 47895093 137 " + " title totalDonations totalTraceDonations\n", + "0 MetaTrace 2667.9192 0.00\n", + "1 The Giveth Community of Makers 109221.7340 85128.21\n", + "2 Bridging Digital Communities 2853.2332 0.00\n", + "3 Diamante Bridge Collective 68786.1250 0.00" ] }, "metadata": {}, diff --git a/portal/index.qmd b/portal/index.qmd index d421087..f7ce7ef 100644 --- a/portal/index.qmd +++ b/portal/index.qmd @@ -14,7 +14,7 @@ execute: Welcome to your open source, serverless, and local-first Data Platform for Gitcoin Grants Data. With this data hub, we aim to improve data access and empower data scientists to conduct research and guide community driven analysis and decisions!
- [Get the Data](https://ipfs.filebase.io/ipns/k51qzi5uqu5dhn3p5xdkp8n6azd4l1mma5zujinkeewhvuh5oq4qvt7etk9tvc/data){.btn .btn-outline-secondary .btn role="button"} + [Get the Data](/data){.btn .btn-outline-secondary .btn role="button"} [Explore the Catalog](catalog.html){.btn .btn-outline-secondary .btn role="button"} [Contribute](https://github.com/davidgasquez/gitcoin-grants-data-portal){.btn .btn-outline-secondary .btn role="button"}
diff --git a/portal/python-quickstart.ipynb b/portal/python-quickstart.ipynb deleted file mode 100644 index f606687..0000000 --- a/portal/python-quickstart.ipynb +++ /dev/null @@ -1,1721 +0,0 @@ -{ - "cells": [ - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "---\n", - "title: \"Gitcoin Grants Data with Python\"\n", - "format:\n", - " html:\n", - " toc: true\n", - " page-layout: full\n", - " anchor-sections: true\n", - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - " \"Open\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There are multiple ways you can access the latest datasets. Use the one you like more!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Datasets are pushed to IPFS periodically. You can access the latest version of the datasets using the [IPNS address on any gateway](https://ipfs.filebase.io/ipns/k51qzi5uqu5dhn3p5xdkp8n6azd4l1mma5zujinkeewhvuh5oq4qvt7etk9tvc/):\n", - "\n", - "```\n", - "k51qzi5uqu5dhn3p5xdkp8n6azd4l1mma5zujinkeewhvuh5oq4qvt7etk9tvc\n", - "```\n", - "\n", - "For example, let's see the top rounds by number of contributors." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnamevotesunique_contributors
2130x8de918f0163b2021839a8d84954dd7e8e151326dWeb3 Open Source Software20225939706
5160xd4cc0dd193c7dc1d665ae244ce12d7fab337a008Web3 Open Source Software13385926250
1380x984e29dcb4286c2d9cbaa2c238afdd8a191eefbcGitcoin Citizens Round #1: Retroactive funding5736617023
5170x98720dd1925d34a2453ebc1f91c9d48e7e89ec29Web3 Community and Education5229016707
4220x12bb5bbbfe596dbc489d209299b8302c3300fa40Web3 Open Source Software Round8187014554
\n", - "
" - ], - "text/plain": [ - " id \\\n", - "213 0x8de918f0163b2021839a8d84954dd7e8e151326d \n", - "516 0xd4cc0dd193c7dc1d665ae244ce12d7fab337a008 \n", - "138 0x984e29dcb4286c2d9cbaa2c238afdd8a191eefbc \n", - "517 0x98720dd1925d34a2453ebc1f91c9d48e7e89ec29 \n", - "422 0x12bb5bbbfe596dbc489d209299b8302c3300fa40 \n", - "\n", - " name votes \\\n", - "213 Web3 Open Source Software 202259 \n", - "516 Web3 Open Source Software 133859 \n", - "138 Gitcoin Citizens Round #1: Retroactive funding 57366 \n", - "517 Web3 Community and Education 52290 \n", - "422 Web3 Open Source Software Round 81870 \n", - "\n", - " unique_contributors \n", - "213 39706 \n", - "516 26250 \n", - "138 17023 \n", - "517 16707 \n", - "422 14554 " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "\n", - "df = pd.read_parquet(\n", - " \"https://ipfs.filebase.io/ipns/k51qzi5uqu5dhn3p5xdkp8n6azd4l1mma5zujinkeewhvuh5oq4qvt7etk9tvc/rounds.parquet\"\n", - ")\n", - "\n", - "df.sort_values(\"unique_contributors\", ascending=False).head(5)[\n", - " [\"id\", \"name\", \"votes\", \"unique_contributors\"]\n", - "]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Pretty simple, right?\n", - "\n", - "IPNS can be slow, so you can also find the [latest IPFS CID on the `IPFS_CID` file in the GitHub repository](https://github.com/davidgasquez/gitcoin-grants-data-portal/blob/main/data/IPFS_CID). You can use that CID to access the latest version of the datasets on any gateway." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of projects: 63196\n" - ] - } - ], - "source": [ - "import requests\n", - "\n", - "LATEST_IPFS_CID = requests.get(\n", - " \"https://raw.githubusercontent.com/davidgasquez/gitcoin-grants-data-portal/main/data/IPFS_CID\"\n", - ").text.strip()\n", - "\n", - "GATEWAY_URL = f\"https://ipfs.filebase.io/ipfs/{LATEST_IPFS_CID}/\"\n", - "\n", - "np = pd.read_parquet(GATEWAY_URL + \"projects.parquet\").size\n", - "\n", - "print(f\"Number of projects: {np}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, you can get the data by using `grant-data.xyz`! It'll redirect you to the latest IPFS CID." - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnamevotesunique_contributors
2130x8de918f0163b2021839a8d84954dd7e8e151326dWeb3 Open Source Software20225939706
5160xd4cc0dd193c7dc1d665ae244ce12d7fab337a008Web3 Open Source Software13385926250
1380x984e29dcb4286c2d9cbaa2c238afdd8a191eefbcGitcoin Citizens Round #1: Retroactive funding5736617023
5170x98720dd1925d34a2453ebc1f91c9d48e7e89ec29Web3 Community and Education5229016707
4220x12bb5bbbfe596dbc489d209299b8302c3300fa40Web3 Open Source Software Round8187014554
\n", - "
" - ], - "text/plain": [ - " id \\\n", - "213 0x8de918f0163b2021839a8d84954dd7e8e151326d \n", - "516 0xd4cc0dd193c7dc1d665ae244ce12d7fab337a008 \n", - "138 0x984e29dcb4286c2d9cbaa2c238afdd8a191eefbc \n", - "517 0x98720dd1925d34a2453ebc1f91c9d48e7e89ec29 \n", - "422 0x12bb5bbbfe596dbc489d209299b8302c3300fa40 \n", - "\n", - " name votes \\\n", - "213 Web3 Open Source Software 202259 \n", - "516 Web3 Open Source Software 133859 \n", - "138 Gitcoin Citizens Round #1: Retroactive funding 57366 \n", - "517 Web3 Community and Education 52290 \n", - "422 Web3 Open Source Software Round 81870 \n", - "\n", - " unique_contributors \n", - "213 39706 \n", - "516 26250 \n", - "138 17023 \n", - "517 16707 \n", - "422 14554 " - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.read_parquet(\"http://grant-data.xyz/rounds.parquet\").sort_values(\n", - " \"unique_contributors\", ascending=False\n", - ").head(5)[[\"id\", \"name\", \"votes\", \"unique_contributors\"]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For example, let's see the number of votes per round." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You're not limited to Pandas, you can use any tool you like. For example, let's use DuckDB to query the data." - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6bb3a0ceaa7c42fdbd529d42446aa079", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "FloatProgress(value=0.0, layout=Layout(width='auto'), style=ProgressStyle(bar_color='black'))" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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YGFhgYSEBNy6dUvuOPSBKJVK2NjYqDyk9m2wECIionJPS0sLzs7OvDymRrS0tN7J2T8WQkREVCEolUrePk+lxgupREREpLZYCBEREZHaYiFEREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERqi4UQERERqS0WQkRERKS2WAgRERGR2mIhRERERGqLhRARERGpLRZCREREpLZYCBEREZHaYiFEREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERqi4UQERERqS0WQkRERKS2WAgRERGR2mIhRERERGqLhRARERGpLRZCREREpLZYCBEREZHaKnUhdOzYMXTp0gWWlpZQKBTYtWuXSrtCoSh0CQ4OlvrY2dkVaJ87d67Kfs6fP48WLVpAR0cH1tbWmD9/foEs27dvh4uLC3R0dFC3bl3s27dPpV0IgaCgIFhYWEBXVxdeXl64du1aaQ+ZiIiIKqhSF0IZGRmoX78+li1bVmh7cnKyyrJ69WooFAp069ZNpd/MmTNV+o0cOVJqS0tLQ/v27WFra4vo6GgEBwdj+vTp+Pnnn6U+ERER6NWrF/z8/HDu3Dn4+PjAx8cHFy9elPrMnz8fP/74I1auXImoqCjo6+vD29sbL168KO1hExERUQWkWdoXdOzYER07dnxju7m5ucr6n3/+iTZt2sDBwUFlu4GBQYG++TZt2oSsrCysXr0aWlpaqF27NmJiYrBw4UIMHToUABASEoIOHTpg/PjxAIBZs2YhLCwMS5cuxcqVKyGEwOLFizFlyhR07doVALB+/XpUr14du3btQs+ePUt76ERERFTBvNcxQvfu3cPevXvh5+dXoG3u3LmoUqUKGjRogODgYOTk5EhtkZGRaNmyJbS0tKRt3t7eiI+Px+PHj6U+Xl5eKvv09vZGZGQkACAhIQEpKSkqfYyMjODh4SH1eV1mZibS0tJUFiIiIqq4Sn1GqDTWrVsHAwMDfPHFFyrbv/nmGzRs2BCmpqaIiIjA5MmTkZycjIULFwIAUlJSYG9vr/Ka6tWrS20mJiZISUmRtr3aJyUlRer36usK6/O6OXPmYMaMGW95tERERFTevNdCaPXq1ejTpw90dHRUtgcGBkr/X69ePWhpaeHrr7/GnDlzoK2t/T4jFWny5Mkq2dLS0mBtbS1bHiIiInq/3tulsePHjyM+Ph6DBw8utq+HhwdycnKQmJgI4OU4o3v37qn0yV/PH1f0pj6vtr/6usL6vE5bWxuGhoYqCxEREVVc760Q+vXXX+Hu7o769esX2zcmJgZKpRJmZmYAAE9PTxw7dgzZ2dlSn7CwMNSsWRMmJiZSn/DwcJX9hIWFwdPTEwBgb28Pc3NzlT5paWmIioqS+hAREZF6K/WlsfT0dFy/fl1aT0hIQExMDExNTWFjYwPgZcGxfft2LFiwoMDrIyMjERUVhTZt2sDAwACRkZEYM2YM+vbtKxU5vXv3xowZM+Dn54eJEyfi4sWLCAkJwaJFi6T9jBo1Cq1atcKCBQvQuXNnbN26FWfOnJFusVcoFBg9ejRmz54NZ2dn2NvbY+rUqbC0tISPj09pD5uIiIgqoFIXQmfOnEGbNm2k9fwxNb6+vli7di0AYOvWrRBCoFevXgVer62tja1bt2L69OnIzMyEvb09xowZozI2x8jICAcPHoS/vz/c3d1RtWpVBAUFSbfOA0DTpk2xefNmTJkyBd9++y2cnZ2xa9cu1KlTR+ozYcIEZGRkYOjQoXjy5AmaN2+O0NDQAmOWiIiISD0phBBC7hBlVVpaGoyMjJCamlqq8UJ2k/a+x1QvJc7t/N7fg4iIqDwqzfc3nzVGREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERqi4UQERERqS0WQkRERKS2WAgRERGR2mIhRERERGqLhRARERGpLRZCREREpLZYCBEREZHaYiFEREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERqi4UQERERqS0WQkRERKS2WAgRERGR2mIhRERERGqLhRARERGpLRZCREREpLZYCBEREZHaYiFEREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERqi4UQERERqS0WQkRERKS2WAgRERGR2ip1IXTs2DF06dIFlpaWUCgU2LVrl0r7gAEDoFAoVJYOHTqo9Hn06BH69OkDQ0NDGBsbw8/PD+np6Sp9zp8/jxYtWkBHRwfW1taYP39+gSzbt2+Hi4sLdHR0ULduXezbt0+lXQiBoKAgWFhYQFdXF15eXrh27VppD5mIiIgqqFIXQhkZGahfvz6WLVv2xj4dOnRAcnKytGzZskWlvU+fPrh06RLCwsKwZ88eHDt2DEOHDpXa09LS0L59e9ja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FwwNDaXt33zzDRo2bAhTU1NERERg8uTJSE5OxsKFCwEAKSkpsLe3V9lX9erVpTYTExOkpKRI217tk5KSIvV79XWF9XndnDlzMGPGjP9wxERERFSevLdCKDs7G1999RWEEFixYoVKW2BgoPT/9erVg5aWFr7++mvMmTMH2tra7ytSsSZPnqySLS0tDdbW1rLlISIiovfrvVwayy+Cbt26hbCwMJWzQYXx8PBATk4OEhMTAQDm5ua4d++eSp/89fxxRW/q82r7q68rrM/rtLW1YWhoqLIQERFRxfXOC6H8IujatWs4dOgQqlSpUuxrYmJioFQqYWZmBgDw9PTEsWPHkJ2dLfUJCwtDzZo1YWJiIvUJDw9X2U9YWBg8PT0BAPb29jA3N1fpk5aWhqioKKkPERERqbdSXxpLT0/H9evXpfWEhATExMTA1NQUFhYW6N69O86ePYs9e/YgNzdXGo9jamoKLS0tREZGIioqCm3atIGBgQEiIyMxZswY9O3bVypyevfujRkzZsDPzw8TJ07ExYsXERISgkWLFknvO2rUKLRq1QoLFixA586dsXXrVpw5c0a6xV6hUGD06NGYPXs2nJ2dYW9vj6lTp8LS0hI+Pj7/5WdGREREFUSpC6EzZ86gTZs20nr+mBpfX19Mnz4df/31FwDAzc1N5XWHDx9G69atoa2tja1bt2L69OnIzMyEvb09xowZozI2x8jICAcPHoS/vz/c3d1RtWpVBAUFSbfOA0DTpk2xefNmTJkyBd9++y2cnZ2xa9cu1KlTR+ozYcIEZGRkYOjQoXjy5AmaN2+O0NBQ6OjolPawiYiIqAJSCCGE3CHKqrS0NBgZGSE1NbVU44XsJu19j6leSpzb+b3uvyIcAxERqafSfH/zWWNERESktlgIERERkdpiIURERERqi4UQERERqS0WQkRERKS2WAgRERGR2mIhRERERGqLhRARERGpLRZCREREpLZYCBEREZHaYiFEREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERqi4UQERERqS0WQkRERKS2WAgRERGR2mIhRERERGqLhRARERGpLRZCREREpLZYCBEREZHaYiFEREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERqi4UQERERqS0WQkRERKS2WAgRERGR2mIhRERERGqLhRARERGprVIXQseOHUOXLl1gaWkJhUKBXbt2qbQLIRAUFAQLCwvo6urCy8sL165dU+nz6NEj9OnTB4aGhjA2Noafnx/S09NV+pw/fx4tWrSAjo4OrK2tMX/+/AJZtm/fDhcXF+jo6KBu3brYt29fqbMQERGR+ip1IZSRkYH69etj2bJlhbbPnz8fP/74I1auXImoqCjo6+vD29sbL168kPr06dMHly5dQlhYGPbs2YNjx45h6NChUntaWhrat28PW1tbREdHIzg4GNOnT8fPP/8s9YmIiECvXr3g5+eHc+fOwcfHBz4+Prh48WKpshAREZH6UgghxFu/WKHAzp074ePjA+DlGRhLS0uMHTsW48aNAwCkpqaievXqWLt2LXr27IkrV66gVq1aOH36NBo1agQACA0NRadOnXDnzh1YWlpixYoV+O6775CSkgItLS0AwKRJk7Br1y7ExcUBAHr06IGMjAzs2bNHytOkSRO4ublh5cqVJcpSnLS0NBgZGSE1NRWGhoYl/rnYTdpb4r5vK3Fu5/e6/4pwDEREpJ5K8/39TscIJSQkICUlBV5eXtI2IyMjeHh4IDIyEgAQGRkJY2NjqQgCAC8vLyiVSkRFRUl9WrZsKRVBAODt7Y34+Hg8fvxY6vPq++T3yX+fkmR5XWZmJtLS0lQWIiIiqrjeaSGUkpICAKhevbrK9urVq0ttKSkpMDMzU2nX1NSEqampSp/C9vHqe7ypz6vtxWV53Zw5c2BkZCQt1tbWJThqIiIiKq9419grJk+ejNTUVGm5ffu23JGIiIjoPXqnhZC5uTkA4N69eyrb7927J7WZm5vj/v37Ku05OTl49OiRSp/C9vHqe7ypz6vtxWV5nba2NgwNDVUWIiIiqrjeaSFkb28Pc3NzhIeHS9vS0tIQFRUFT09PAICnpyeePHmC6Ohoqc/ff/+NvLw8eHh4SH2OHTuG7OxsqU9YWBhq1qwJExMTqc+r75PfJ/99SpKFiIiI1FupC6H09HTExMQgJiYGwMtByTExMUhKSoJCocDo0aMxe/Zs/PXXX7hw4QL69+8PS0tL6c4yV1dXdOjQAUOGDMGpU6dw4sQJBAQEoGfPnrC0tAQA9O7dG1paWvDz88OlS5ewbds2hISEIDAwUMoxatQohIaGYsGCBYiLi8P06dNx5swZBAQEAECJshAREZF60yztC86cOYM2bdpI6/nFia+vL9auXYsJEyYgIyMDQ4cOxZMnT9C8eXOEhoZCR0dHes2mTZsQEBCATz75BEqlEt26dcOPP/4otRsZGeHgwYPw9/eHu7s7qlatiqCgIJW5hpo2bYrNmzdjypQp+Pbbb+Hs7Ixdu3ahTp06Up+SZCEiIiL19Z/mEaroOI/Q+8V5hIiI6H2QbR4hIiIiovKEhRARERGpLRZCREREpLZYCBEREZHaYiFEREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERqi4UQERERqS0WQkRERKS2WAgRERGR2mIhRERERGqLhRARERGpLRZCREREpLZYCBEREZHaYiFEREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERqi4UQERERqS0WQkRERKS2WAgRERGR2tKUOwDR+2Q3ae97f4/EuZ3f+3sQEdH7wUKIqBx43wUdizkiUle8NEZERERqi4UQERERqS0WQkRERKS2WAgRERGR2mIhRERERGqLhRARERGpLRZCREREpLbeeSFkZ2cHhUJRYPH39wcAtG7dukDbsGHDVPaRlJSEzp07Q09PD2ZmZhg/fjxycnJU+hw5cgQNGzaEtrY2nJycsHbt2gJZli1bBjs7O+jo6MDDwwOnTp1614dLRERE5dg7L4ROnz6N5ORkaQkLCwMAfPnll1KfIUOGqPSZP3++1Jabm4vOnTsjKysLERERWLduHdauXYugoCCpT0JCAjp37ow2bdogJiYGo0ePxuDBg3HgwAGpz7Zt2xAYGIhp06bh7NmzqF+/Pry9vXH//v13fchERERUTr3zQqhatWowNzeXlj179sDR0RGtWrWS+ujp6an0MTQ0lNoOHjyIy5cvY+PGjXBzc0PHjh0xa9YsLFu2DFlZWQCAlStXwt7eHgsWLICrqysCAgLQvXt3LFq0SNrPwoULMWTIEAwcOBC1atXCypUroaenh9WrV7/rQyYiIqJy6r2OEcrKysLGjRsxaNAgKBQKafumTZtQtWpV1KlTB5MnT8azZ8+ktsjISNStWxfVq1eXtnl7eyMtLQ2XLl2S+nh5eam8l7e3NyIjI6X3jY6OVumjVCrh5eUl9SlMZmYm0tLSVBYiIiKquN7rs8Z27dqFJ0+eYMCAAdK23r17w9bWFpaWljh//jwmTpyI+Ph4/PHHHwCAlJQUlSIIgLSekpJSZJ+0tDQ8f/4cjx8/Rm5ubqF94uLi3ph3zpw5mDFjxlsfLxEREZUv77UQ+vXXX9GxY0dYWlpK24YOHSr9f926dWFhYYFPPvkEN27cgKOj4/uMU6zJkycjMDBQWk9LS4O1tbWMiYiIiOh9em+F0K1bt3Do0CHpTM+beHh4AACuX78OR0dHmJubF7i76969ewAAc3Nz6b/5217tY2hoCF1dXWhoaEBDQ6PQPvn7KIy2tja0tbVLdoBERERU7r23MUJr1qyBmZkZOnfuXGS/mJgYAICFhQUAwNPTExcuXFC5uyssLAyGhoaoVauW1Cc8PFxlP2FhYfD09AQAaGlpwd3dXaVPXl4ewsPDpT5ERERE76UQysvLw5o1a+Dr6wtNzf930unGjRuYNWsWoqOjkZiYiL/++gv9+/dHy5YtUa9ePQBA+/btUatWLfTr1w+xsbE4cOAApkyZAn9/f+lszbBhw3Dz5k1MmDABcXFxWL58OX777TeMGTNGeq/AwED88ssvWLduHa5cuYLhw4cjIyMDAwcOfB+HTEREROXQe7k0dujQISQlJWHQoEEq27W0tHDo0CEsXrwYGRkZsLa2Rrdu3TBlyhSpj4aGBvbs2YPhw4fD09MT+vr68PX1xcyZM6U+9vb22Lt3L8aMGYOQkBBYWVlh1apV8Pb2lvr06NEDDx48QFBQEFJSUuDm5obQ0NACA6iJiIhIfb2XQqh9+/YQQhTYbm1tjaNHjxb7eltbW+zbt6/IPq1bt8a5c+eK7BMQEICAgIBi34+IiIjUE581RkRERGqLhRARERGpLRZCREREpLZYCBEREZHaeq8zSxMR5bObtPe9v0fi3KLnLSMieh3PCBEREZHaYiFEREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERqi4UQERERqS0WQkRERKS2WAgRERGR2mIhRERERGqLhRARERGpLRZCREREpLZYCBEREZHaYiFEREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERqS1PuAERE5YndpL3v/T0S53Z+7+9BRC/xjBARERGpLRZCREREpLZYCBEREZHaYiFEREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERq651PqDh9+nTMmDFDZVvNmjURFxcHAHjx4gXGjh2LrVu3IjMzE97e3li+fDmqV68u9U9KSsLw4cNx+PBhVK5cGb6+vpgzZw40Nf9f3CNHjiAwMBCXLl2CtbU1pkyZggEDBqi877JlyxAcHIyUlBTUr18fS5YsQePGjd/1IRMRlSucFJLo/3kvZ4Rq166N5ORkafnnn3+ktjFjxmD37t3Yvn07jh49irt37+KLL76Q2nNzc9G5c2dkZWUhIiIC69atw9q1axEUFCT1SUhIQOfOndGmTRvExMRg9OjRGDx4MA4cOCD12bZtGwIDAzFt2jScPXsW9evXh7e3N+7fv/8+DpmIiIjKofdSCGlqasLc3FxaqlatCgBITU3Fr7/+ioULF6Jt27Zwd3fHmjVrEBERgZMnTwIADh48iMuXL2Pjxo1wc3NDx44dMWvWLCxbtgxZWVkAgJUrV8Le3h4LFiyAq6srAgIC0L17dyxatEjKsHDhQgwZMgQDBw5ErVq1sHLlSujp6WH16tXv45CJiIioHHovhdC1a9dgaWkJBwcH9OnTB0lJSQCA6OhoZGdnw8vLS+rr4uICGxsbREZGAgAiIyNRt25dlUtl3t7eSEtLw6VLl6Q+r+4jv0/+PrKyshAdHa3SR6lUwsvLS+pTmMzMTKSlpaksREREVHG980LIw8MDa9euRWhoKFasWIGEhAS0aNECT58+RUpKCrS0tGBsbKzymurVqyMlJQUAkJKSolIE5bfntxXVJy0tDc+fP8e///6L3NzcQvvk76Mwc+bMgZGRkbRYW1u/1c+AiIiIyod3Pli6Y8eO0v/Xq1cPHh4esLW1xW+//QZdXd13/Xbv1OTJkxEYGCitp6WlsRgiIiKqwN777fPGxsaoUaMGrl+/DnNzc2RlZeHJkycqfe7duwdzc3MAgLm5Oe7du1egPb+tqD6GhobQ1dVF1apVoaGhUWif/H0URltbG4aGhioLERERVVzvvRBKT0/HjRs3YGFhAXd3d1SqVAnh4eFSe3x8PJKSkuDp6QkA8PT0xIULF1Tu7goLC4OhoSFq1aol9Xl1H/l98vehpaUFd3d3lT55eXkIDw+X+hARERG980Jo3LhxOHr0KBITExEREYHPP/8cGhoa6NWrF4yMjODn54fAwEAcPnwY0dHRGDhwIDw9PdGkSRMAQPv27VGrVi3069cPsbGxOHDgAKZMmQJ/f39oa2sDAIYNG4abN29iwoQJiIuLw/Lly/Hbb79hzJgxUo7AwED88ssvWLduHa5cuYLhw4cjIyMDAwcOfNeHTEREROXUOx8jdOfOHfTq1QsPHz5EtWrV0Lx5c5w8eRLVqlUDACxatAhKpRLdunVTmVAxn4aGBvbs2YPhw4fD09MT+vr68PX1xcyZM6U+9vb22Lt3L8aMGYOQkBBYWVlh1apV8Pb2lvr06NEDDx48QFBQEFJSUuDm5obQ0NACA6iJiIhIfb3zQmjr1q1Ftuvo6GDZsmVYtmzZG/vY2tpi3759Re6ndevWOHfuXJF9AgICEBAQUGQfIiIiUl981hgRERGpLRZCREREpLZYCBEREZHaYiFEREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERqi4UQERERqS0WQkRERKS2WAgRERGR2mIhRERERGqLhRARERGpLRZCREREpLZYCBEREZHaYiFEREREaouFEBEREaktFkJERESktlgIERERkdpiIURERERqi4UQERERqS0WQkRERKS2WAgRERGR2mIhRERERGqLhRARERGpLRZCREREpLZYCBEREZHaYiFEREREaouFEBEREaktFkJERESktjTlDkBERPQ27Cbtfe/vkTi383t/D5IXzwgRERGR2mIhRERERGrrnRdCc+bMwccffwwDAwOYmZnBx8cH8fHxKn1at24NhUKhsgwbNkylT1JSEjp37gw9PT2YmZlh/PjxyMnJUelz5MgRNGzYENra2nBycsLatWsL5Fm2bBns7Oygo6MDDw8PnDp16l0fMhEREZVT77wQOnr0KPz9/XHy5EmEhYUhOzsb7du3R0ZGhkq/IUOGIDk5WVrmz58vteXm5qJz587IyspCREQE1q1bh7Vr1yIoKEjqk5CQgM6dO6NNmzaIiYnB6NGjMXjwYBw4cEDqs23bNgQGBmLatGk4e/Ys6tevD29vb9y/f/9dHzYRERGVQ+98sHRoaKjK+tq1a2FmZobo6Gi0bNlS2q6npwdzc/NC93Hw4EFcvnwZhw4dQvXq1eHm5oZZs2Zh4sSJmD59OrS0tLBy5UrY29tjwYIFAABXV1f8888/WLRoEby9vQEACxcuxJAhQzBw4EAAwMqVK7F3716sXr0akyZNeteHTkREROXMex8jlJqaCgAwNTVV2b5p0yZUrVoVderUweTJk/Hs2TOpLTIyEnXr1kX16tWlbd7e3khLS8OlS5ekPl5e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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import duckdb\n", - "\n", - "_ = (\n", - " duckdb.sql(\n", - " f\"\"\"\n", - " select\n", - " round_id,\n", - " count(distinct id) as total_votes\n", - " from '{GATEWAY_URL}/round_votes.parquet'\n", - " group by round_id\n", - " order by 2 desc\n", - " limit 10;\n", - " \"\"\"\n", - " )\n", - " .df()\n", - " .plot.bar(x=\"round_id\", y=\"total_votes\", title=\"Top 10 Rounds by Votes\")\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can see for example the top contributors for chain `1`." - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "9b5136eae0ab414491ff6954bc32a81c", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "FloatProgress(value=0.0, layout=Layout(width='auto'), style=ProgressStyle(bar_color='black'))" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
votersum(amount_usd)
00x8a205728f464b0755f72780df1763d1e1f0f5ba58087.002244
10xbd4eb0295468c80725017f74113f5aebbd6e8d126810.616077
20x839395e20bbb182fa440d08f850e6c7a8f6f07805887.459406
30xd88d5b3dbe8790369799012310c31eb210eeec815079.673008
40xc81dd383d028fe6dc99f66b7db235eaea05ef9ec5039.444640
50x0fc338d0a925fa564171d1d7c0ffdb271ad19d494723.094377
60x471e96a01962b62fe3e9e8e367f6be56e3e983d04596.338842
70xc6d7522f7b012b22bc365c9c43b3dbf13b9aaff93420.906163
80xb13b2db51ca77ea06b1d3e83f2615006e9a4bdad3199.346490
90xd21d931890d27b6e7e2e668f27931e17698e90f13194.710788
\n", - "
" - ], - "text/plain": [ - " voter sum(amount_usd)\n", - "0 0x8a205728f464b0755f72780df1763d1e1f0f5ba5 8087.002244\n", - "1 0xbd4eb0295468c80725017f74113f5aebbd6e8d12 6810.616077\n", - "2 0x839395e20bbb182fa440d08f850e6c7a8f6f0780 5887.459406\n", - "3 0xd88d5b3dbe8790369799012310c31eb210eeec81 5079.673008\n", - "4 0xc81dd383d028fe6dc99f66b7db235eaea05ef9ec 5039.444640\n", - "5 0x0fc338d0a925fa564171d1d7c0ffdb271ad19d49 4723.094377\n", - "6 0x471e96a01962b62fe3e9e8e367f6be56e3e983d0 4596.338842\n", - "7 0xc6d7522f7b012b22bc365c9c43b3dbf13b9aaff9 3420.906163\n", - "8 0xb13b2db51ca77ea06b1d3e83f2615006e9a4bdad 3199.346490\n", - "9 0xd21d931890d27b6e7e2e668f27931e17698e90f1 3194.710788" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "duckdb.sql(\n", - " f\"\"\"\n", - " select\n", - " voter,\n", - " sum(amount_usd)\n", - " from '{GATEWAY_URL}/round_votes.parquet'\n", - " where chain_id = 1\n", - " group by 1\n", - " order by 2 desc\n", - " limit 10\n", - " \"\"\"\n", - ").df()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Passport Scores" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "b737aa38ef2f45f184df1b8045193114", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "FloatProgress(value=0.0, layout=Layout(width='auto'), style=ProgressStyle(bar_color='black'))" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
addressscorestatuslast_score_timestampevidence_typeevidence_successevidence_raw_scoreevidence_threshold
00x63e6aff7158c83ac3a53a8f13527e03b8749584d0DONE2024-01-25 07:31:36.493000+00:00ThresholdScoreCheckfalse19.93954820.00000
10xa95a660fb7688bef90d134fd31f0801c045ce24f1DONE2024-01-25 07:31:34.993000+00:00ThresholdScoreChecktrue24.15965820.00000
20x767dc1a5292fed4ebb7bbf80b983dc2b3ee1bed40DONE2024-01-25 07:31:34.984000+00:00ThresholdScoreCheckfalse17.74891420.00000
30xd7f6693a609b5356cd406ba794c0cef749661a2a1DONE2024-01-25 07:31:34.146000+00:00ThresholdScoreChecktrue28.47406020.00000
40x02d961c0ceb9641dbd5ad86705c5f911b40084ee0DONE2024-01-25 07:31:32.358000+00:00ThresholdScoreCheckfalse10.55765820.00000
50xdeda6e9e9c7ca8b7a27f68135b9158ed6240c7a00DONE2024-01-25 07:31:31.761000+00:00ThresholdScoreCheckfalse19.65029220.00000
60x1b2724b98423864614faa3b56a14104972aca4180DONE2024-01-25 07:31:30.956000+00:00ThresholdScoreCheckfalse5.71426820.00000
70x7cbb41c9389e929127b10b3609e73fadfd7eb5eb0DONE2024-01-25 07:31:30.801000+00:00ThresholdScoreCheckfalse15.72941420.00000
80x6b66003996bcdca11be528394981cd529406cc6e0DONE2024-01-25 07:31:29.059000+00:00ThresholdScoreCheckfalse5.11439020.00000
90xc745bfddcae4accd93738f599ca28201c004e2820DONE2024-01-25 07:31:28.679000+00:00ThresholdScoreCheckfalse0.51087820.00000
\n", - "
" - ], - "text/plain": [ - " address score status \\\n", - "0 0x63e6aff7158c83ac3a53a8f13527e03b8749584d 0 DONE \n", - "1 0xa95a660fb7688bef90d134fd31f0801c045ce24f 1 DONE \n", - "2 0x767dc1a5292fed4ebb7bbf80b983dc2b3ee1bed4 0 DONE \n", - "3 0xd7f6693a609b5356cd406ba794c0cef749661a2a 1 DONE \n", - "4 0x02d961c0ceb9641dbd5ad86705c5f911b40084ee 0 DONE \n", - "5 0xdeda6e9e9c7ca8b7a27f68135b9158ed6240c7a0 0 DONE \n", - "6 0x1b2724b98423864614faa3b56a14104972aca418 0 DONE \n", - "7 0x7cbb41c9389e929127b10b3609e73fadfd7eb5eb 0 DONE \n", - "8 0x6b66003996bcdca11be528394981cd529406cc6e 0 DONE \n", - "9 0xc745bfddcae4accd93738f599ca28201c004e282 0 DONE \n", - "\n", - " last_score_timestamp evidence_type evidence_success \\\n", - "0 2024-01-25 07:31:36.493000+00:00 ThresholdScoreCheck false \n", - "1 2024-01-25 07:31:34.993000+00:00 ThresholdScoreCheck true \n", - "2 2024-01-25 07:31:34.984000+00:00 ThresholdScoreCheck false \n", - "3 2024-01-25 07:31:34.146000+00:00 ThresholdScoreCheck true \n", - "4 2024-01-25 07:31:32.358000+00:00 ThresholdScoreCheck false \n", - "5 2024-01-25 07:31:31.761000+00:00 ThresholdScoreCheck false \n", - "6 2024-01-25 07:31:30.956000+00:00 ThresholdScoreCheck false \n", - "7 2024-01-25 07:31:30.801000+00:00 ThresholdScoreCheck false \n", - "8 2024-01-25 07:31:29.059000+00:00 ThresholdScoreCheck false \n", - "9 2024-01-25 07:31:28.679000+00:00 ThresholdScoreCheck false \n", - "\n", - " evidence_raw_score evidence_threshold \n", - "0 19.939548 20.00000 \n", - "1 24.159658 20.00000 \n", - "2 17.748914 20.00000 \n", - "3 28.474060 20.00000 \n", - "4 10.557658 20.00000 \n", - "5 19.650292 20.00000 \n", - "6 5.714268 20.00000 \n", - "7 15.729414 20.00000 \n", - "8 5.114390 20.00000 \n", - "9 0.510878 20.00000 " - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "duckdb.sql(\n", - " f\"from '{GATEWAY_URL}/passport_scores.parquet' order by last_score_timestamp desc limit 10\"\n", - ").df()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Projects" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
project_idproject_numbermeta_ptrmetadataownerscreated_at_blockchain_idtitledescriptionwebsiteproject_twitterlogo_imagebanner_imagecreated_at
00xb70e3b2674ab3c2b1a70431fe7373301ddc789a74047...1756bafkreihayexicrdcpm33qasqndtqihscqv6nsky3uuays...{\"title\": \"Jinni Health\", \"description\": \"**A ...[0x6B1050C1C6B288C79Ac1db299Dc481048aBBBbcD]11527284110Jinni Health**A Self-Actualization Game Based On Tomogatch...https://jinni.healthkibagateauxbafkreidwdhw3ncpev7hiaryduzcrqpjpvnlb7zixoi364...bafkreidtabrerwu5ydjngdqsxmtzsglen2fzrtct5lfnj...1.706144e+12
10x0be3539b02b2875b10e361fc90a607cb8f84e3d22de1...1755bafkreidcvs5nhx7hn3fdwxztriwgke22m5orcq6z72ipg...{\"title\": \"NeuroFusion\", \"description\": \"Neuro...[0x547b67d30052ee6999e85DDb6e8b28495eA6B5FE]11527106310NeuroFusionNeurotechnology is rapidly gaining prominence,...https://usefusion.app/research/usefusionappbafkreieyth5wd4t7pq6fmetuaqvufgxvnsxw5sfwiug7u...bafkreifmzcy56dtqq6bwxolxg5md4xjsxgodp3fqfkzmv...1.706141e+12
20xd64698966ec5f31cf0ab9d35e99acc78bda24e7e7da8...1754bafkreiagxxc5o6ul3lvz3gux3egckc7xc5zb4vm64j3wn...{\"title\": \"viaPrize\", \"description\": \"# The pr...[0x850a146D7478dAAa98Fc26Fd85e6A24e50846A9d]11526983110viaPrize# The problem\\nWhen my loved ones in Ecuador l...https://viaprize.orgviaprizebafkreieyn45cfuktpbquxlw2hm7blpwub3ofvb3br4paz...bafkreiema55cymdygu2ncqv6vbhzsfa7umx35rhu2phcv...1.706138e+12
30x1e56278e98dc996805a31cd23a7e498027684df9e0f8...1753bafkreidnatr646vrqdvjtcfevedeuiqlm42xxrstm73wt...{\"title\": \"The Archipelago in Thailand Scoutin...[0x850a146D7478dAAa98Fc26Fd85e6A24e50846A9d]11526973910The Archipelago in Thailand ScoutingTl;dr\\n\\nMultiple groups will join together in...https://shorturl.at/eswz4Nonebafkreidp5kn7bmms6z6x2bsw4xuaek2fyss2s345f4sdc...bafkreibgi3pnck2blsj4otb6ht25gga6zayepxvod4jcy...1.706138e+12
40x23ad43003dbb0de079d59ae591922bbf9464664ff8f3...1752bafkreiftwzdhrfg5fhyi2oleko74vsocb3dhogiqwnw7j...{\"title\": \"Jinni Health\", \"description\": \"**A ...[0x6B1050C1C6B288C79Ac1db299Dc481048aBBBbcD]11526918910Jinni Health**A Self-Actualization Game Based On Tomogatch...https://jinni.healthKibaGateauxbafkreiczsh5ynfkkxxz7w52i5horp4xs7fykfuyfoonit...bafkreidtabrerwu5ydjngdqsxmtzsglen2fzrtct5lfnj...1.706137e+12
\n", - "
" - ], - "text/plain": [ - " project_id project_number \\\n", - "0 0xb70e3b2674ab3c2b1a70431fe7373301ddc789a74047... 1756 \n", - "1 0x0be3539b02b2875b10e361fc90a607cb8f84e3d22de1... 1755 \n", - "2 0xd64698966ec5f31cf0ab9d35e99acc78bda24e7e7da8... 1754 \n", - "3 0x1e56278e98dc996805a31cd23a7e498027684df9e0f8... 1753 \n", - "4 0x23ad43003dbb0de079d59ae591922bbf9464664ff8f3... 1752 \n", - "\n", - " meta_ptr \\\n", - "0 bafkreihayexicrdcpm33qasqndtqihscqv6nsky3uuays... \n", - "1 bafkreidcvs5nhx7hn3fdwxztriwgke22m5orcq6z72ipg... \n", - "2 bafkreiagxxc5o6ul3lvz3gux3egckc7xc5zb4vm64j3wn... \n", - "3 bafkreidnatr646vrqdvjtcfevedeuiqlm42xxrstm73wt... \n", - "4 bafkreiftwzdhrfg5fhyi2oleko74vsocb3dhogiqwnw7j... \n", - "\n", - " metadata \\\n", - "0 {\"title\": \"Jinni Health\", \"description\": \"**A ... \n", - "1 {\"title\": \"NeuroFusion\", \"description\": \"Neuro... \n", - "2 {\"title\": \"viaPrize\", \"description\": \"# The pr... \n", - "3 {\"title\": \"The Archipelago in Thailand Scoutin... \n", - "4 {\"title\": \"Jinni Health\", \"description\": \"**A ... \n", - "\n", - " owners created_at_block chain_id \\\n", - "0 [0x6B1050C1C6B288C79Ac1db299Dc481048aBBBbcD] 115272841 10 \n", - "1 [0x547b67d30052ee6999e85DDb6e8b28495eA6B5FE] 115271063 10 \n", - "2 [0x850a146D7478dAAa98Fc26Fd85e6A24e50846A9d] 115269831 10 \n", - "3 [0x850a146D7478dAAa98Fc26Fd85e6A24e50846A9d] 115269739 10 \n", - "4 [0x6B1050C1C6B288C79Ac1db299Dc481048aBBBbcD] 115269189 10 \n", - "\n", - " title \\\n", - "0 Jinni Health \n", - "1 NeuroFusion \n", - "2 viaPrize \n", - "3 The Archipelago in Thailand Scouting \n", - "4 Jinni Health \n", - "\n", - " description \\\n", - "0 **A Self-Actualization Game Based On Tomogatch... \n", - "1 Neurotechnology is rapidly gaining prominence,... \n", - "2 # The problem\\nWhen my loved ones in Ecuador l... \n", - "3 Tl;dr\\n\\nMultiple groups will join together in... \n", - "4 **A Self-Actualization Game Based On Tomogatch... \n", - "\n", - " website project_twitter \\\n", - "0 https://jinni.health kibagateaux \n", - "1 https://usefusion.app/research/ usefusionapp \n", - "2 https://viaprize.org viaprize \n", - "3 https://shorturl.at/eswz4 None \n", - "4 https://jinni.health KibaGateaux \n", - "\n", - " logo_image \\\n", - "0 bafkreidwdhw3ncpev7hiaryduzcrqpjpvnlb7zixoi364... \n", - "1 bafkreieyth5wd4t7pq6fmetuaqvufgxvnsxw5sfwiug7u... \n", - "2 bafkreieyn45cfuktpbquxlw2hm7blpwub3ofvb3br4paz... \n", - "3 bafkreidp5kn7bmms6z6x2bsw4xuaek2fyss2s345f4sdc... \n", - "4 bafkreiczsh5ynfkkxxz7w52i5horp4xs7fykfuyfoonit... \n", - "\n", - " banner_image created_at \n", - "0 bafkreidtabrerwu5ydjngdqsxmtzsglen2fzrtct5lfnj... 1.706144e+12 \n", - "1 bafkreifmzcy56dtqq6bwxolxg5md4xjsxgodp3fqfkzmv... 1.706141e+12 \n", - "2 bafkreiema55cymdygu2ncqv6vbhzsfa7umx35rhu2phcv... 1.706138e+12 \n", - "3 bafkreibgi3pnck2blsj4otb6ht25gga6zayepxvod4jcy... 1.706138e+12 \n", - "4 bafkreidtabrerwu5ydjngdqsxmtzsglen2fzrtct5lfnj... 1.706137e+12 " - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "duckdb.sql(\n", - " f\"from '{GATEWAY_URL}/projects.parquet' order by created_at desc limit 5\"\n", - ").df()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Rounds" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idamount_usdvotestokenmatch_amountmatch_amount_usdunique_contributorsapplication_meta_ptrapplication_metadatameta_ptr...applications_end_timeround_start_timeround_end_timecreated_at_blockupdated_at_blockchain_idnameround_typeprogram_addresssybil_defense
00x18a72e9940fb81860a809e266ebec42a9e2c44ce193.6911701540xaf88d065e77c8cc2239327c5edb3a432268e58311.000000e+09999.79278042bafkreigxtuyead3ees5qrvxtp7cbif6milnqrukfc7iod...{'lastUpdatedOn': 1704900881291, 'applicationS...bafkreiewbmrff2vhgdvk3jpizwnlhidgkccog2kqktvlz......1.709251e+0917049312001.709251e+0916906659016906659042161LunCo Case Studypublic0x263e7a6b847cd432ee9d6f20cc843672ce046e03False
10xb2f565fe282feaab2c1644d52c31d48609aa21540.00000000x00000000000000000000000000000000000000001.000000e+20237003.8883400bafkreihapduprlt4inat46ue2zmacyszb5jlfztnvh3bn...{'lastUpdatedOn': 1704875989742, 'applicationS...bafkreib7axqrnu2c4kejnvwxpbprwb76qxuplktkq6lqw......1.705709e+0917049312001.705709e+0916896720316896720342161Satoshi Airlinespublic0x74217758d4031dd26ed3fe4942695d3531660153False
20x82321ccd62d15af6eaa550de053c9ca7b6063c700.00000000x912ce59144191c1204e64559fe8253a0e49e65481.000000e+23190349.3130000bafkreiedyxeszxd4bl5oubxrrdtksy5wlrvpy3qmospze...{'lastUpdatedOn': 1704874977912, 'applicationS...bafkreiacwrtssiswwni5s2jztpccnlgtgv7c2irc2lngr......1.706659e+0917049312001.706659e+0916896315316896315342161Satoshi Airlinespublic0x0cfdbc54779dda484439c5f9352141674588d7c7True
30xe0a6f4e932b16c85318a77de43b7048863c522d217.72394630x912ce59144191c1204e64559fe8253a0e49e65481.000000e+20107.1585921bafkreia2qz6iwittp5jg5q44i6zvedgccfnlumn6vs6uf...{'lastUpdatedOn': 1701883086748, 'applicationS...bafkreihaa3ec73fsujtba4xf6svwc6cyef2xjjl2weafv......1.702166e+0917019935401.702166e+0915749784715749784742161GPT Internal Roundprivate0xd6d47d4f0b2384ab2df470c6a16e3fd241b8fb2bFalse
40xc283bc8656c3d4ca1fad0e41214f36c9ca3706030.00000000x912ce59144191c1204e64559fe8253a0e49e65481.000000e+20109.0560160bafkreibk3lzkasdvzsuinbotaimkwv6nhxee2zp2amrf5...{'lastUpdatedOn': 1701541787075, 'applicationS...bafkreic2z4h33bicge6afddigf3fivulb2aoaosui7fnq......1.701724e+0917015616001.701724e+0915624198515624198542161GPT Round Internalprivate0xe71d74a696fd8b80a5aa770dd582fb52ec17f9a9False
50x302dbc8eb3bf73565a1205648b61b23cb3f72ff78796.98219229710x912ce59144191c1204e64559fe8253a0e49e65487.500000e+2274864.2222501058bafkreibq4qfldppjpmcwmdgj6e2cz6weqihwyzqd4gu5g...{'lastUpdatedOn': 1701102231738, 'applicationS...bafkreia3okgfhb4367ro6qawohqqqi4zbydd44ybsshow......1.702426e+0917011296001.702426e+0915464560615464560642161American Cancer Societypublic0xc869181c8ad1d3689a9ccaa1321eb106f518895aFalse
60xadb87c22964fb8d79c294162b3c0a3b03c505ebf0.00000000xaf88d065e77c8cc2239327c5edb3a432268e58315.000000e+08499.9814250bafkreideewpkktzagxbcpljwl7xlnpjs5ctta2lo33pzs...{'lastUpdatedOn': 1701098056494, 'applicationS...bafkreigspqpzoo4bhdvgfyub4zt2ayzmfiy2mppxm5lgf......1.703290e+0917022528001.703290e+0915462981015462981042161LunCo Alpha QFpublic0x263e7a6b847cd432ee9d6f20cc843672ce046e03False
70xadd7212a6ef2985484b08a5c227721a57a1f50bc0.00000000x00000000000000000000000000000000000000003.700000e+1974620.7957090bafkreidjtodp7owb5b6ta2gzdjn7gn3bn4lo47tbb3dd6...{'lastUpdatedOn': 1701097316391, 'applicationS...bafkreih4ppi3wtqfhhlsfyxrgfabhdtuljokn7igrt552......1.702426e+0917011296001.702426e+0915462683415462683442161American Cancer Societyprivate0x4d272ea21f84db89424fc81c49040cc583853bdcFalse
80x822742805c0596e883aba99ba2f3117e8c49b94a0.00000000x00000000000000000000000000000000000000007.530000e+19159631.4195110bafkreia7ri3lvr7rt2cxwns2t5m2ckq2bjjw47lcin7ol...{'lastUpdatedOn': 1700842457598, 'applicationS...bafkreif5ngqx6qporajw2uiqlpysqbdzogkllg6pn2gra......1.702339e+0917010864001.702339e+0915365511615365511642161American Cancer Societypublic0xb7b66431d214ff01d0c3cb64e3c66d29c4b5c938False
90xe378c217ec2404de0abe52edf28e58b788a1b1130.00000000x00000000000000000000000000000000000000000.000000e+000.0000000bafkreico4xgx233rzrqqmhcwa73vejclj2ethlui725fb...{'lastUpdatedOn': 1700835549100, 'applicationS...bafkreiezs6ndr2mml7nsdkfkiv3zrkg6iwaeav5bizcom......1.157921e+7717013888001.157921e+7715362801115362801142161Micrograntspublic0x71e4419cda0705ab913d0c17818a6a24564a6bddNaN
\n", - "

10 rows × 22 columns

\n", - "
" - ], - "text/plain": [ - " id amount_usd votes \\\n", - "0 0x18a72e9940fb81860a809e266ebec42a9e2c44ce 193.691170 154 \n", - "1 0xb2f565fe282feaab2c1644d52c31d48609aa2154 0.000000 0 \n", - "2 0x82321ccd62d15af6eaa550de053c9ca7b6063c70 0.000000 0 \n", - "3 0xe0a6f4e932b16c85318a77de43b7048863c522d2 17.723946 3 \n", - "4 0xc283bc8656c3d4ca1fad0e41214f36c9ca370603 0.000000 0 \n", - "5 0x302dbc8eb3bf73565a1205648b61b23cb3f72ff7 8796.982192 2971 \n", - "6 0xadb87c22964fb8d79c294162b3c0a3b03c505ebf 0.000000 0 \n", - "7 0xadd7212a6ef2985484b08a5c227721a57a1f50bc 0.000000 0 \n", - "8 0x822742805c0596e883aba99ba2f3117e8c49b94a 0.000000 0 \n", - "9 0xe378c217ec2404de0abe52edf28e58b788a1b113 0.000000 0 \n", - "\n", - " token match_amount match_amount_usd \\\n", - "0 0xaf88d065e77c8cc2239327c5edb3a432268e5831 1.000000e+09 999.792780 \n", - "1 0x0000000000000000000000000000000000000000 1.000000e+20 237003.888340 \n", - "2 0x912ce59144191c1204e64559fe8253a0e49e6548 1.000000e+23 190349.313000 \n", - "3 0x912ce59144191c1204e64559fe8253a0e49e6548 1.000000e+20 107.158592 \n", - "4 0x912ce59144191c1204e64559fe8253a0e49e6548 1.000000e+20 109.056016 \n", - "5 0x912ce59144191c1204e64559fe8253a0e49e6548 7.500000e+22 74864.222250 \n", - "6 0xaf88d065e77c8cc2239327c5edb3a432268e5831 5.000000e+08 499.981425 \n", - "7 0x0000000000000000000000000000000000000000 3.700000e+19 74620.795709 \n", - "8 0x0000000000000000000000000000000000000000 7.530000e+19 159631.419511 \n", - "9 0x0000000000000000000000000000000000000000 0.000000e+00 0.000000 \n", - "\n", - " unique_contributors application_meta_ptr \\\n", - "0 42 bafkreigxtuyead3ees5qrvxtp7cbif6milnqrukfc7iod... \n", - "1 0 bafkreihapduprlt4inat46ue2zmacyszb5jlfztnvh3bn... \n", - "2 0 bafkreiedyxeszxd4bl5oubxrrdtksy5wlrvpy3qmospze... \n", - "3 1 bafkreia2qz6iwittp5jg5q44i6zvedgccfnlumn6vs6uf... \n", - "4 0 bafkreibk3lzkasdvzsuinbotaimkwv6nhxee2zp2amrf5... \n", - "5 1058 bafkreibq4qfldppjpmcwmdgj6e2cz6weqihwyzqd4gu5g... \n", - "6 0 bafkreideewpkktzagxbcpljwl7xlnpjs5ctta2lo33pzs... \n", - "7 0 bafkreidjtodp7owb5b6ta2gzdjn7gn3bn4lo47tbb3dd6... \n", - "8 0 bafkreia7ri3lvr7rt2cxwns2t5m2ckq2bjjw47lcin7ol... \n", - "9 0 bafkreico4xgx233rzrqqmhcwa73vejclj2ethlui725fb... \n", - "\n", - " application_metadata \\\n", - "0 {'lastUpdatedOn': 1704900881291, 'applicationS... \n", - "1 {'lastUpdatedOn': 1704875989742, 'applicationS... \n", - "2 {'lastUpdatedOn': 1704874977912, 'applicationS... \n", - "3 {'lastUpdatedOn': 1701883086748, 'applicationS... \n", - "4 {'lastUpdatedOn': 1701541787075, 'applicationS... \n", - "5 {'lastUpdatedOn': 1701102231738, 'applicationS... \n", - "6 {'lastUpdatedOn': 1701098056494, 'applicationS... \n", - "7 {'lastUpdatedOn': 1701097316391, 'applicationS... \n", - "8 {'lastUpdatedOn': 1700842457598, 'applicationS... \n", - "9 {'lastUpdatedOn': 1700835549100, 'applicationS... \n", - "\n", - " meta_ptr ... \\\n", - "0 bafkreiewbmrff2vhgdvk3jpizwnlhidgkccog2kqktvlz... ... \n", - "1 bafkreib7axqrnu2c4kejnvwxpbprwb76qxuplktkq6lqw... ... \n", - "2 bafkreiacwrtssiswwni5s2jztpccnlgtgv7c2irc2lngr... ... \n", - "3 bafkreihaa3ec73fsujtba4xf6svwc6cyef2xjjl2weafv... ... \n", - "4 bafkreic2z4h33bicge6afddigf3fivulb2aoaosui7fnq... ... \n", - "5 bafkreia3okgfhb4367ro6qawohqqqi4zbydd44ybsshow... ... \n", - "6 bafkreigspqpzoo4bhdvgfyub4zt2ayzmfiy2mppxm5lgf... ... \n", - "7 bafkreih4ppi3wtqfhhlsfyxrgfabhdtuljokn7igrt552... ... \n", - "8 bafkreif5ngqx6qporajw2uiqlpysqbdzogkllg6pn2gra... ... \n", - "9 bafkreiezs6ndr2mml7nsdkfkiv3zrkg6iwaeav5bizcom... ... \n", - "\n", - " applications_end_time round_start_time round_end_time created_at_block \\\n", - "0 1.709251e+09 1704931200 1.709251e+09 169066590 \n", - "1 1.705709e+09 1704931200 1.705709e+09 168967203 \n", - "2 1.706659e+09 1704931200 1.706659e+09 168963153 \n", - "3 1.702166e+09 1701993540 1.702166e+09 157497847 \n", - "4 1.701724e+09 1701561600 1.701724e+09 156241985 \n", - "5 1.702426e+09 1701129600 1.702426e+09 154645606 \n", - "6 1.703290e+09 1702252800 1.703290e+09 154629810 \n", - "7 1.702426e+09 1701129600 1.702426e+09 154626834 \n", - "8 1.702339e+09 1701086400 1.702339e+09 153655116 \n", - "9 1.157921e+77 1701388800 1.157921e+77 153628011 \n", - "\n", - " updated_at_block chain_id name round_type \\\n", - "0 169066590 42161 LunCo Case Study public \n", - "1 168967203 42161 Satoshi Airlines public \n", - "2 168963153 42161 Satoshi Airlines public \n", - "3 157497847 42161 GPT Internal Round private \n", - "4 156241985 42161 GPT Round Internal private \n", - "5 154645606 42161 American Cancer Society public \n", - "6 154629810 42161 LunCo Alpha QF public \n", - "7 154626834 42161 American Cancer Society private \n", - "8 153655116 42161 American Cancer Society public \n", - "9 153628011 42161 Microgrants public \n", - "\n", - " program_address sybil_defense \n", - "0 0x263e7a6b847cd432ee9d6f20cc843672ce046e03 False \n", - "1 0x74217758d4031dd26ed3fe4942695d3531660153 False \n", - "2 0x0cfdbc54779dda484439c5f9352141674588d7c7 True \n", - "3 0xd6d47d4f0b2384ab2df470c6a16e3fd241b8fb2b False \n", - "4 0xe71d74a696fd8b80a5aa770dd582fb52ec17f9a9 False \n", - "5 0xc869181c8ad1d3689a9ccaa1321eb106f518895a False \n", - "6 0x263e7a6b847cd432ee9d6f20cc843672ce046e03 False \n", - "7 0x4d272ea21f84db89424fc81c49040cc583853bdc False \n", - "8 0xb7b66431d214ff01d0c3cb64e3c66d29c4b5c938 False \n", - "9 0x71e4419cda0705ab913d0c17818a6a24564a6bdd NaN \n", - "\n", - "[10 rows x 22 columns]" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "duckdb.sql(\n", - " f\"from '{GATEWAY_URL}/rounds.parquet' order by created_at_block desc limit 10\"\n", - ").df()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Votes" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "7ba53666090746b3b4169de433f73336", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "FloatProgress(value=0.0, layout=Layout(width='auto'), style=ProgressStyle(bar_color='black'))" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
chain_idround_ididtransactionblock_numberproject_idapplication_idvotergrant_addresstokenamountamount_usdamount_round_token
02500x8dce7a66e0c310f9f89e847dba83b2344d5891610xb200421dc21e966761f94e508ce5480239c1852ab639...0x6f53b32c4bad4efe6642da540b2e8698c17df85edbf8...677446030x05d5e2edfb321593560def03f77b7c30ed4533f6a9db...20x4a03721c829ae3d448bf37cac21527cbe75fc4cb0x4a03721c829ae3d448bf37cac21527cbe75fc4cb0x83791638da5eb2faa432aff1c65fba47c5d295101.111110e+23111079.1122545.442536e+23
14240xd4cc0dd193c7dc1d665ae244ce12d7fab337a0080xe724e8845d530b3db1b3a2e5764c76f8881b88b9c68e...0xf5fdd4f2e20d6ae1268f1a49390a208028d4f0bbe2c4...60783250x20636c87f66406e917bd61ef99d029bd0dad28d27140...250xa29744b745800ccd814e6f59271ecd74682eccb00xb6091aab544ef253c23a37295953aafc9d8366810x00000000000000000000000000000000000000001.500000e+1930872.6487093.099092e+22
22500x8dce7a66e0c310f9f89e847dba83b2344d5891610xeca8c67a58b5d16ba9e6818dab974bae2efaaf5612df...0x1c060e3e101f8d795d5ba081acefc98c59b8565adeb4...676619170x214c25fa0544f8c1e1205dd0e5e77e39e2e0895fd73c...130x1f8e87f31b60aed9c71f32eb997bc499394bea1d0xdf24702c11dba5874fcd891f7f45a15a778240580x83791638da5eb2faa432aff1c65fba47c5d295101.999900e+2219998.7542129.397697e+22
32500x8dce7a66e0c310f9f89e847dba83b2344d5891610x94584eddf1391e4516664ca7b47f0cf92a81fc35bd30...0xd940a5fb188af23525588600740ab56a61c9e16421da...683295670xfe7a435990ed8d5702e74899d328ce22647b6959a638...90xb0d57cd79adc1d9aec41f30faec203550bbe1a720x0393856410e8f78553479c6d39527adbaaebc51c0x83791638da5eb2faa432aff1c65fba47c5d295101.500000e+2214993.6994007.845908e+22
42500x8dce7a66e0c310f9f89e847dba83b2344d5891610xc627d7e3f66532e664dea73d2b20d68b84cddf56c43e...0x3ea023c82587bf501768b8d351c09de79362f95979b3...683296130xfe7a435990ed8d5702e74899d328ce22647b6959a638...90x98705b13faf6d6792fb4ef147d6079ba8b2d9bab0x0393856410e8f78553479c6d39527adbaaebc51c0x83791638da5eb2faa432aff1c65fba47c5d295101.500000e+2214993.6994007.845908e+22
52500x8dce7a66e0c310f9f89e847dba83b2344d5891610x44c34e30e8f8c81d26624c650ebaf461ff1f26f1b03c...0x2372a11c7ffcf87bbf0891d455aab550f3a711135efb...683301500xfe7a435990ed8d5702e74899d328ce22647b6959a638...90x28ba3468f5962e30c9d2a47f3ce5a51b2727c3b50x0393856410e8f78553479c6d39527adbaaebc51c0x83791638da5eb2faa432aff1c65fba47c5d295101.500000e+2214993.6994007.845908e+22
62500x8dce7a66e0c310f9f89e847dba83b2344d5891610x1c0be11fc1bd772145f3def92ccc39738b4c9429e01e...0xd38495842fa1764aec5b0d8b77f6dea731887f80a070...683303000xfe7a435990ed8d5702e74899d328ce22647b6959a638...90xb8c538324e29b29aef03decd20f1e6b3711556bb0x0393856410e8f78553479c6d39527adbaaebc51c0x83791638da5eb2faa432aff1c65fba47c5d295101.500000e+2214993.6994007.845908e+22
72500x8dce7a66e0c310f9f89e847dba83b2344d5891610x96c206094681b6e505b83d57a384b498a6ae2173857b...0xd68ff905b8f25b305f4305d0da25140c14a8714fbcd4...683306170xfe7a435990ed8d5702e74899d328ce22647b6959a638...90x105188ae2a7daf9aba2e9afb50cd93ecfe3daf880x0393856410e8f78553479c6d39527adbaaebc51c0x83791638da5eb2faa432aff1c65fba47c5d295101.500000e+2214993.6994007.845908e+22
82500x8dce7a66e0c310f9f89e847dba83b2344d5891610x93c1c59d7ee9dc3fbea37fc7bdb930c30eb579433810...0x42a8cdc59ac9fb5e31c4086558548459a8a3a7e9de8a...676616270x214c25fa0544f8c1e1205dd0e5e77e39e2e0895fd73c...130xd6980b8f28d0b6fa89b7476841e341c57508a3f60xdf24702c11dba5874fcd891f7f45a15a778240580x83791638da5eb2faa432aff1c65fba47c5d295109.999000e+219998.8771124.698613e+22
92500x8dce7a66e0c310f9f89e847dba83b2344d5891610xff6eecfe39ad5637fae0094777919ac0f58c527e049e...0x15d00066b4da54845a794677e8b0132600c0a9c048f4...677015280x214c25fa0544f8c1e1205dd0e5e77e39e2e0895fd73c...130x26dcb0d7d48aa979da81f2fce331ce6e028b00d70xdf24702c11dba5874fcd891f7f45a15a778240580x83791638da5eb2faa432aff1c65fba47c5d295109.999000e+219995.6912314.998367e+22
\n", - "
" - ], - "text/plain": [ - " chain_id round_id \\\n", - "0 250 0x8dce7a66e0c310f9f89e847dba83b2344d589161 \n", - "1 424 0xd4cc0dd193c7dc1d665ae244ce12d7fab337a008 \n", - "2 250 0x8dce7a66e0c310f9f89e847dba83b2344d589161 \n", - "3 250 0x8dce7a66e0c310f9f89e847dba83b2344d589161 \n", - "4 250 0x8dce7a66e0c310f9f89e847dba83b2344d589161 \n", - "5 250 0x8dce7a66e0c310f9f89e847dba83b2344d589161 \n", - "6 250 0x8dce7a66e0c310f9f89e847dba83b2344d589161 \n", - "7 250 0x8dce7a66e0c310f9f89e847dba83b2344d589161 \n", - "8 250 0x8dce7a66e0c310f9f89e847dba83b2344d589161 \n", - "9 250 0x8dce7a66e0c310f9f89e847dba83b2344d589161 \n", - "\n", - " id \\\n", - "0 0xb200421dc21e966761f94e508ce5480239c1852ab639... \n", - "1 0xe724e8845d530b3db1b3a2e5764c76f8881b88b9c68e... \n", - "2 0xeca8c67a58b5d16ba9e6818dab974bae2efaaf5612df... \n", - "3 0x94584eddf1391e4516664ca7b47f0cf92a81fc35bd30... \n", - "4 0xc627d7e3f66532e664dea73d2b20d68b84cddf56c43e... \n", - "5 0x44c34e30e8f8c81d26624c650ebaf461ff1f26f1b03c... \n", - "6 0x1c0be11fc1bd772145f3def92ccc39738b4c9429e01e... \n", - "7 0x96c206094681b6e505b83d57a384b498a6ae2173857b... \n", - "8 0x93c1c59d7ee9dc3fbea37fc7bdb930c30eb579433810... \n", - "9 0xff6eecfe39ad5637fae0094777919ac0f58c527e049e... \n", - "\n", - " transaction block_number \\\n", - "0 0x6f53b32c4bad4efe6642da540b2e8698c17df85edbf8... 67744603 \n", - "1 0xf5fdd4f2e20d6ae1268f1a49390a208028d4f0bbe2c4... 6078325 \n", - "2 0x1c060e3e101f8d795d5ba081acefc98c59b8565adeb4... 67661917 \n", - "3 0xd940a5fb188af23525588600740ab56a61c9e16421da... 68329567 \n", - "4 0x3ea023c82587bf501768b8d351c09de79362f95979b3... 68329613 \n", - "5 0x2372a11c7ffcf87bbf0891d455aab550f3a711135efb... 68330150 \n", - "6 0xd38495842fa1764aec5b0d8b77f6dea731887f80a070... 68330300 \n", - "7 0xd68ff905b8f25b305f4305d0da25140c14a8714fbcd4... 68330617 \n", - "8 0x42a8cdc59ac9fb5e31c4086558548459a8a3a7e9de8a... 67661627 \n", - "9 0x15d00066b4da54845a794677e8b0132600c0a9c048f4... 67701528 \n", - "\n", - " project_id application_id \\\n", - "0 0x05d5e2edfb321593560def03f77b7c30ed4533f6a9db... 2 \n", - "1 0x20636c87f66406e917bd61ef99d029bd0dad28d27140... 25 \n", - "2 0x214c25fa0544f8c1e1205dd0e5e77e39e2e0895fd73c... 13 \n", - "3 0xfe7a435990ed8d5702e74899d328ce22647b6959a638... 9 \n", - "4 0xfe7a435990ed8d5702e74899d328ce22647b6959a638... 9 \n", - "5 0xfe7a435990ed8d5702e74899d328ce22647b6959a638... 9 \n", - "6 0xfe7a435990ed8d5702e74899d328ce22647b6959a638... 9 \n", - "7 0xfe7a435990ed8d5702e74899d328ce22647b6959a638... 9 \n", - "8 0x214c25fa0544f8c1e1205dd0e5e77e39e2e0895fd73c... 13 \n", - "9 0x214c25fa0544f8c1e1205dd0e5e77e39e2e0895fd73c... 13 \n", - "\n", - " voter \\\n", - "0 0x4a03721c829ae3d448bf37cac21527cbe75fc4cb \n", - "1 0xa29744b745800ccd814e6f59271ecd74682eccb0 \n", - "2 0x1f8e87f31b60aed9c71f32eb997bc499394bea1d \n", - "3 0xb0d57cd79adc1d9aec41f30faec203550bbe1a72 \n", - "4 0x98705b13faf6d6792fb4ef147d6079ba8b2d9bab \n", - "5 0x28ba3468f5962e30c9d2a47f3ce5a51b2727c3b5 \n", - "6 0xb8c538324e29b29aef03decd20f1e6b3711556bb \n", - "7 0x105188ae2a7daf9aba2e9afb50cd93ecfe3daf88 \n", - "8 0xd6980b8f28d0b6fa89b7476841e341c57508a3f6 \n", - "9 0x26dcb0d7d48aa979da81f2fce331ce6e028b00d7 \n", - "\n", - " grant_address \\\n", - "0 0x4a03721c829ae3d448bf37cac21527cbe75fc4cb \n", - "1 0xb6091aab544ef253c23a37295953aafc9d836681 \n", - "2 0xdf24702c11dba5874fcd891f7f45a15a77824058 \n", - "3 0x0393856410e8f78553479c6d39527adbaaebc51c \n", - "4 0x0393856410e8f78553479c6d39527adbaaebc51c \n", - "5 0x0393856410e8f78553479c6d39527adbaaebc51c \n", - "6 0x0393856410e8f78553479c6d39527adbaaebc51c \n", - "7 0x0393856410e8f78553479c6d39527adbaaebc51c \n", - "8 0xdf24702c11dba5874fcd891f7f45a15a77824058 \n", - "9 0xdf24702c11dba5874fcd891f7f45a15a77824058 \n", - "\n", - " token amount amount_usd \\\n", - "0 0x83791638da5eb2faa432aff1c65fba47c5d29510 1.111110e+23 111079.112254 \n", - "1 0x0000000000000000000000000000000000000000 1.500000e+19 30872.648709 \n", - "2 0x83791638da5eb2faa432aff1c65fba47c5d29510 1.999900e+22 19998.754212 \n", - "3 0x83791638da5eb2faa432aff1c65fba47c5d29510 1.500000e+22 14993.699400 \n", - "4 0x83791638da5eb2faa432aff1c65fba47c5d29510 1.500000e+22 14993.699400 \n", - "5 0x83791638da5eb2faa432aff1c65fba47c5d29510 1.500000e+22 14993.699400 \n", - "6 0x83791638da5eb2faa432aff1c65fba47c5d29510 1.500000e+22 14993.699400 \n", - "7 0x83791638da5eb2faa432aff1c65fba47c5d29510 1.500000e+22 14993.699400 \n", - "8 0x83791638da5eb2faa432aff1c65fba47c5d29510 9.999000e+21 9998.877112 \n", - "9 0x83791638da5eb2faa432aff1c65fba47c5d29510 9.999000e+21 9995.691231 \n", - "\n", - " amount_round_token \n", - "0 5.442536e+23 \n", - "1 3.099092e+22 \n", - "2 9.397697e+22 \n", - "3 7.845908e+22 \n", - "4 7.845908e+22 \n", - "5 7.845908e+22 \n", - "6 7.845908e+22 \n", - "7 7.845908e+22 \n", - "8 4.698613e+22 \n", - "9 4.998367e+22 " - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "duckdb.sql(\n", - " f\"from '{GATEWAY_URL}/round_votes.parquet' order by amount_usd desc limit 10\"\n", - ").df()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.7" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pyproject.toml b/pyproject.toml index 95b9f3f..d596e26 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,19 +3,18 @@ name = "ggdp" version = "1.0.0" authors = [{ name = "David Gasquez" }] dependencies = [ - "altair", "aiohttp", - "dagster", "dagster-dbt", - "dagster-duckdb", "dagster-duckdb-pandas", + "dagster-duckdb", + "dagster", "dbt-core", "dbt-duckdb", "duckdb", "fsspec", "ipykernel", - "itables", "ipywidgets", + "itables", "matplotlib", "nbclient", "nbformat", @@ -23,7 +22,7 @@ dependencies = [ "pandas", "pyarrow", "regex", - "retry", + "tenacity", "tqdm", ]