mirror of
https://github.com/tig-pool-nk/tig-monorepo.git
synced 2026-02-22 02:47:53 +08:00
68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import io
|
|
import os
|
|
import requests
|
|
import sys
|
|
import tarfile
|
|
|
|
CHALLENGE = os.getenv("CHALLENGE")
|
|
if CHALLENGE is None:
|
|
print("CHALLENGE environment variable must be set!")
|
|
sys.exit(1)
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='TIG Algorithm Downloader')
|
|
parser.add_argument('algorithm', help="Algorithm name or id")
|
|
parser.add_argument('--out', default="tig-algorithms/lib", help="Output directory (default: tig-algorithms/lib)")
|
|
parser.add_argument('--testnet', action='store_true', help="Use testnet API")
|
|
|
|
args = parser.parse_args()
|
|
|
|
api_url = f"https://{'test' if args.testnet else 'main'}net-api.tig.foundation"
|
|
block = requests.get(f"{api_url}/get-block").json()["block"]
|
|
challenges = requests.get(f"{api_url}/get-challenges?block_id={block['id']}").json()["challenges"]
|
|
data = requests.get(f"{api_url}/get-algorithms?block_id={block['id']}").json()
|
|
algorithms = sorted(data["codes"], key=lambda x: x['id'], reverse=True)
|
|
download_urls = {x['algorithm_id']: x['details']['download_url'] for x in data['binarys']}
|
|
|
|
c_id = next(
|
|
(
|
|
c['id'] for c in challenges
|
|
if c['details']['name'] == CHALLENGE
|
|
),
|
|
None
|
|
)
|
|
if c_id is None:
|
|
print(f"Challenge '{CHALLENGE}' not found.")
|
|
sys.exit(1)
|
|
|
|
a_id = next(
|
|
(
|
|
a['id'] for a in algorithms
|
|
if (
|
|
a['details']['name'] == args.algorithm or a['id'] == args.algorithm
|
|
) and a['details']['challenge_id'] == c_id
|
|
),
|
|
None
|
|
)
|
|
if a_id is None:
|
|
print(f"Algorithm '{args.algorithm}' not found for challenge '{CHALLENGE}'.")
|
|
sys.exit(1)
|
|
|
|
download_url = download_urls.get(a_id)
|
|
if download_url is None:
|
|
print(f"Download URL for algorithm '{args.algorithm}' not found.")
|
|
sys.exit(1)
|
|
|
|
print(f"Downloading algorithm '{args.algorithm}' from {download_url}...")
|
|
resp = requests.get(download_url, stream=True)
|
|
output_dir = f"{args.out}/{CHALLENGE}"
|
|
os.makedirs(output_dir, exist_ok=True)
|
|
with tarfile.open(fileobj=io.BytesIO(resp.content), mode='r:gz') as tar:
|
|
tar.extractall(path=output_dir)
|
|
print(f"Algorithm '{args.algorithm}' downloaded and extracted to '{output_dir}'.")
|
|
|
|
if __name__ == "__main__":
|
|
main() |