memoscan
← all memos

Memo 0xaa5d8023…08b77e on Ethereum

# { "Depends": "py-genlayer:test" } import json from genlayer import * class WordOracle(gl.Contract): round_results: TreeMap[str, str] leaderboard: TreeMap[str, u256] def __init__(self) -> None: self.round_results = TreeMap() self.leaderboard = TreeMap() @gl.public.view def get_round_result(self, room_code: str, round_num: u32) -> str: key = room_code + "_" + str(round_num) result = self.round_results.get(key, None) if result is None: return "[]" return result @gl.public.view def get_player_xp(self, player_name: str) -> u256: xp = self.leaderboard.get(player_name, None) if xp is None: return u256(0) return xp @gl.public.write def judge_round( self, room_code: str, round_num: u32, word: str, prompt_txt: str, answers_json: str, ) -> None: key = room_code + "_" + str(round_num) if self.round_results.get(key, None) is not None: return judge_prompt = ( "You are WordOracle, a fair AI judge on the GenLayer blockchain.\n" "Word: " + word + "\n" "Prompt: " + prompt_txt + "\n" "Answers: " + answers_json + "\n\n" "Score each answer 1-100. Criteria: creativity 40%, relevance 30%, originality 30%.\n" "Write 1 fun sentence of feedback per player.\n" "Return ONLY a JSON array sorted by score descending. No markdown.\n" "Format: [{\"name\":\"Alice\",\"score\":88,\"reason\":\"Feedback.\"}]" ) result_raw: str = gl.exec_prompt_non_comparative(judge_prompt) cleaned = result_raw.strip() start = cleaned.find("[") end = cleaned.rfind("]") if start != -1 and end != -1: cleaned = cleaned[start : end + 1] else: cleaned = "[]" self.round_results[key] = cleaned xp_table = [100, 75, 50, 25, 15] try: scored = json.loads(cleaned) for i, entry in enumerate(scored): name = entry.get("name", "") xp = xp_table[i] if i < len(xp_table) else 10 if name: prev = self.leaderboard.get(name, None) prev_val = prev if prev is not None else u256(0) self.leaderboard[name] = prev_val + u256(xp) except Exception: pass