update pow

This commit is contained in:
LanQian 2024-05-01 17:30:52 +08:00
parent b4bef4ebc3
commit 228b77ec15
2 changed files with 18 additions and 24 deletions

View File

@ -10,7 +10,7 @@ from starlette.concurrency import run_in_threadpool
from api.files import get_image_size, get_file_extension, determine_file_use_case
from api.models import model_proxy
from chatgpt.chatFormat import api_messages_to_chat, stream_response, wss_stream_response, format_not_stream_response
from chatgpt.proofofWork import calc_proof_token, chat_requirements_body
from chatgpt.proofofWork import calc_proof_token, chat_requirements_body, get_config
from utils.Client import Client
from utils.Logger import Logger
from utils.config import proxy_url_list, chatgpt_base_url_list, arkose_token_url_list, history_disabled
@ -64,7 +64,8 @@ class ChatService:
if self.access_token:
headers['Authorization'] = f'Bearer {self.access_token}'
try:
data = chat_requirements_body(self.user_agent)
config = get_config(self.user_agent)
data = chat_requirements_body(config)
r = await self.s.post(url, headers=headers, json=data)
if r.status_code == 200:
resp = r.json()
@ -103,7 +104,7 @@ class ChatService:
if proofofwork_required:
proofofwork_seed = proofofwork.get("seed")
proofofwork_diff = proofofwork.get("difficulty")
self.proof_token = await run_in_threadpool(calc_proof_token, proofofwork_seed, proofofwork_diff, self.user_agent)
self.proof_token = await run_in_threadpool(calc_proof_token, proofofwork_seed, proofofwork_diff, config)
turnstile_required = turnstile.get('required')
if turnstile_required:

View File

@ -20,41 +20,34 @@ def get_config(user_agent):
random.seed(int(time.time() * 1e9))
core = random.choice(cores)
screen = random.choice(screens)
return [core + screen, get_parse_time(), 4294705152, 2, user_agent]
config = [core + screen, get_parse_time(), 4294705152, 0, user_agent]
config += [
"https://cdn.oaistatic.com/_next/static/chunks/pages/_app-6179027f2701f350.js?dpl=61795df7b34494cdf55bd45e3973183b0a174e5b",
"dpl=61795df7b34494cdf55bd45e3973183b0a174e5b",
]
config += ["en-US", "en-US,en"]
return config
def calc_proof_token(seed, diff, user_agent):
if seed in answers:
return answers[seed]
config = get_config(user_agent)
diffLen = len(diff) // 2
def calc_proof_token(seed, diff, config):
diff_len = len(diff) // 2
for i in range(1000000):
config[3] = i
json_data = json.dumps(config).encode()
base = base64.b64encode(json_data).decode()
json_data = json.dumps(config, separators=(',', ':'), ensure_ascii=False)
base = base64.b64encode(json_data.encode()).decode()
hasher = hashlib.sha3_512()
hasher.update((seed + base).encode())
hash_value = hasher.digest()
if hash_value[:diffLen].hex() <= diff:
if hash_value[:diff_len].hex() <= diff:
result = "gAAAAAB" + base
answers[seed] = result
return result
return "gAAAAABwQ8Lk5FbGpA2NcR9dShT6gYjU7VxZ4D" + base64.b64encode(f'"{seed}"'.encode()).decode()
def chat_requirements_body(user_agent):
item_list = get_config(user_agent)
item_list += [
"https://cdn.oaistatic.com/_next/static/MukSHk9CtBFQqnH15__S9/_ssgManifest.js?dpl=6e44e4574f20cd7debafd92d9cf530cfaeb484b0",
"dpl=6e44e4574f20cd7debafd92d9cf530cfaeb484b0",
"en-US",
"en-US,en"
]
json_data = json.dumps(item_list).encode()
def chat_requirements_body(config):
json_data = json.dumps(config).encode()
base = base64.b64encode(json_data).decode()
retObj = {'p': 'gAAAAAC' + base}
return retObj