Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions volara_proof/extract/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
import zipfile
import json
from volara_proof.models.user_data import UserData
from volara_proof.buffers.tweets import Tweets


def extract_user_data(zip_file_path: str) -> UserData | None:
with zipfile.ZipFile(zip_file_path, "r") as zip_ref:
file_names = zip_ref.namelist()
if "user_data.json" in file_names:
with zip_ref.open("user_data.json", "r") as file:
return UserData(**json.load(file))
else:
return None


def extract_data(zip_file_path: str):
"""
Extracts the data from the zip file
Expand Down
11 changes: 11 additions & 0 deletions volara_proof/models/user_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"""
Contains the dataclass models for the Tweet data structure
"""

from dataclasses import dataclass


@dataclass
class UserData:
handle: str
wallet_address: str
9 changes: 8 additions & 1 deletion volara_proof/proofs/proof.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
import copy

from volara_proof.extract import extract_data
from volara_proof.extract import extract_data, extract_user_data
from volara_proof.proofs.proof_of_quality import proof_of_quality
from volara_proof.models.proof_response import ProofResponse
from volara_proof.models.proof_config import ProofConfig

from volara_proof.storage.rewards import RewardsStorage
from volara_proof.storage.user_info import UserInfoStorage

rewards_storage = RewardsStorage()
user_info_storage = UserInfoStorage()


def proof(
input_file: str, proof_response: ProofResponse, config: ProofConfig
) -> ProofResponse:
proof_response = copy.deepcopy(proof_response)
user_data = extract_user_data(input_file)
if user_data is not None:
proof_response.score = 0
proof_response.valid = user_info_storage.verify_user(user_data)
return proof_response
tweets_data = extract_data(input_file)
is_valid, file_score, tweet_info, unique_tweets, total_tweets = (
proof_of_quality(tweets_data, config.file_id, config)
Expand Down
26 changes: 26 additions & 0 deletions volara_proof/storage/user_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import logging
import os
import requests

from volara_proof.models.user_data import UserData
from volara_proof.constants import VOLARA_API_URL


class UserInfoStorage:
def verify_user(self, user_info: UserData) -> bool:
request_body = {
"handle": user_info.handle,
"walletAddress": user_info.wallet_address,
}
try:
resp = requests.post(
url=f"{VOLARA_API_URL}/v1/validator/validate-user",
json=request_body,
headers={"Authorization": f"Bearer {os.environ['VOLARA_API_KEY']}"},
)
resp.raise_for_status()
logging.info("Succesfully determined if user exists.")
return resp.json()["userValidated"]
except Exception:
logging.exception("[CRITICAL FAILURE] Failed to determine if user exists.")
raise
Loading