0x8e05…8b04

All memos sent from and to 0x8e05…8b04.

# v0.1.1 # { "Depends": "py-genlayer:latest" } from genlayer import * import json import typing class NeuralDuel(gl.Contract): # Game State round_count: u256 round_data: TreeMap[u256, str] # Player Stats player_balance: TreeMap[Address, u256] player_wins: TreeMap[Address, u256] player_rounds: TreeMap[Address, u256] # Platform fee (5%) deployer: Address total_fees: u256 def __init__(self, deployer_address: str): self.round_count = u256(0) self.deployer = Address(deployer_address) self.total_fees = u256(0) @gl.public.write def join_round(self, bet_amount: int): """Player bets and AI generates trivia question""" player = gl.message.sender_address bet = u256(bet_amount) self.round_count += 1 round_id = self.round_count def generate_question() -> typing.Any: prompt = """Generate a trivia question with 4 answer choices. Return ONLY this JSON format: { "question": "What is 2+2?", "choices": ["A. 3", "B. 4", "C. 5", "D. 6"], "correct": 1 } Return ONLY valid JSON, no markdown, no extra text.""" result = gl.nondet.exec_prompt(prompt).replace("```json", "").replace("```", "").strip() return json.loads(result) question = gl.eq_principle.strict_eq(generate_question) round_obj = { "id": int(round_id), "player": player.as_hex, "bet": int(bet), "question": question["question"], "choices": question["choices"], "correct": question["correct"], "answer": None, "is_correct": None, "finalized": False } self.round_data[round_id] = json.dumps(round_obj) rounds = self.player_rounds.get(player, u256(0)) self.player_rounds[player] = rounds + 1 @gl.public.write def submit_answer(self, round_id: int, answer: int): """Player submits answer choice (0-3)""" player = gl.message.sender_address rid = u256(round_id) data = json.loads(self.round_data[rid]) data["answer"] = answer data["is_correct"] = (answer == data["correct"]) self.round_data[rid] = json.dumps(data) @gl.public.write def finalize_round(self, round_id: int): """Distribute winnings: 5% fee, rest to player if correct""" player = gl.message.sender_address rid = u256(round_id) data = json.loads(self.round_data[rid]) bet = u256(data["bet"]) player_addr = Address(data["player"]) # 5% platform fee fee = (bet * u256(5)) / u256(100) player_share = bet - fee # Platform gets fee self.total_fees += fee deployer_bal = self.player_balance.get(self.deployer, u256(0)) self.player_balance[self.deployer] = deployer_bal + fee # Player gets winnings if correct if data["is_correct"]: player_bal = self.player_balance.get(player_addr, u256(0)) self.player_balance[player_addr] = player_bal + player_share wins = self.player_wins.get(player_addr, u256(0)) self.player_wins[player_addr] = wins + 1 data["finalized"] = True self.round_data[rid] = json.dumps(data) @gl.public.view def get_round_count(self) -> int: return int(self.round_count) @gl.public.view def get_round(self, round_id: int) -> str: rid = u256(round_id) if rid not in self.round_data: return json.dumps({"error": "Not found"}) return self.round_data[rid] @gl.public.view def get_balance(self, address: str) -> int: addr = Address(address) return int(self.player_balance.get(addr, u256(0))) @gl.public.view def get_stats(self, address: str) -> str: addr = Address(address) rounds = int(self.player_rounds.get(addr, u256(0))) wins = int(self.player_wins.get(addr, u256(0))) balance = int(self.player_balance.get(addr, u256(0))) win_rate = (wins / rounds * 100) if rounds > 0 else 0 return json.dumps({ "address": address, "rounds": rounds, "wins": wins, "win_rate": round(win_rate, 2), "balance": balance }) @gl.public.view def get_leaderboard(self) -> str: leaders = [] for addr in self.player_wins.keys(): wins = int(self.player_wins[addr]) rounds = int(self.player_rounds.get(addr, u256(0))) win_rate = (wins / rounds * 100) if rounds > 0 else 0 leaders.append({ "address": addr.as_hex, "wins": wins, "rounds": rounds, "win_rate": round(win_rate, 2) }) leaders.sort(key=lambda x: x["wins"], reverse=True) return json.dumps(leaders[:10])0x8E056cb829788507641fFBC066246Fd6B1D08b04
union1huyhg3202nr8p7w0y7seth3fnjf35ffpqm6nny3wakcta373tavq59p6nt{"wasm":{"execute":{"contract_addr":"union1d2r4ecsuap4pujrlf3nz09vz8eha8y0z25knq0lfxz4yzn83v6kq0jxsmk","msg":"eyJ3aXRoZHJhdyI6eyJ3aXRoZHJhd190b19hZGRyZXNzIjoidW5pb24xaHV5aGczMjAybnI4cDd3MHk3c2V0aDNmbmpmMzVmZnBxbTZubnkzd2FrY3RhMzczdGF2cTU5cDZudCIsImJhdGNoX2lkIjoiMiJ9fQ==","funds":[]}}},{"wasm":{"execute":{"contract_addr":"union1336jj8ertl8h7rdvnz4dh5rqahd09cy0x43guhsxx6xyrztx292qpe64fh","msg":"eyJzZW5kIjp7ImNoYW5uZWxfaWQiOjEsInRpbWVvdXRfaGVpZ2h0IjoiMCIsInRpbWVvdXRfdGltZXN0YW1wIjoiMTc2MTk4OTUxMjc2NTAwMDAwMCIsInNhbHQiOiIweDM0ZWFkZTNlMzJkMzk2MTk0NTgzYTBmMjY0YThiMGEwZWQ3MzU4NjA3ZGE5ZDcyZWZhMmJhMzg4ZTBmMGI4YjMiLCJpbnN0cnVjdGlvbiI6IjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzOTFmM2Y0NGZmMDZjNGE4OGYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTM5MWYzZjQ0ZmYwNmM0YTg4ZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDc1NmU2OTZmNmUzMTY4NzU3OTY4NjczMzMyMzAzMjZlNzIzODcwMzc3NzMwNzkzNzczNjU3NDY4MzM2NjZlNmE2NjMzMzU2NjY2NzA3MTZkMzY2ZTZlNzkzMzc3NjE2YjYzNzQ2MTMzMzczMzc0NjE3NjcxMzUzOTcwMzY2ZTc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNDhFMDU2Y2I4Mjk3ODg1MDc2NDFmRkJDMDY2MjQ2RmQ2QjFEMDhiMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNjE3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTRiYTVlRDQ0NzMzOTUzZDc5NzE3RjYyNjkzNTdDNzc3MThDOEJhNWVkMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNGJhNWVkNDQ3MzM5NTNkNzk3MTdmNjI2OTM1N2M3NzcxOGM4YmE1ZWQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIn19","funds":[{"denom":"au","amount":"43555014352229080803471"}]}}}]
union1huyhg3202nr8p7w0y7seth3fnjf35ffpqm6nny3wakcta373tavq59p6nt{"wasm":{"execute":{"contract_addr":"union1d2r4ecsuap4pujrlf3nz09vz8eha8y0z25knq0lfxz4yzn83v6kq0jxsmk","msg":"eyJ3aXRoZHJhdyI6eyJ3aXRoZHJhd190b19hZGRyZXNzIjoidW5pb24xaHV5aGczMjAybnI4cDd3MHk3c2V0aDNmbmpmMzVmZnBxbTZubnkzd2FrY3RhMzczdGF2cTU5cDZudCIsImJhdGNoX2lkIjoiMiJ9fQ==","funds":[]}}},{"wasm":{"execute":{"contract_addr":"union1336jj8ertl8h7rdvnz4dh5rqahd09cy0x43guhsxx6xyrztx292qpe64fh","msg":"eyJzZW5kIjp7ImNoYW5uZWxfaWQiOjEsInRpbWVvdXRfaGVpZ2h0IjoiMCIsInRpbWVvdXRfdGltZXN0YW1wIjoiMTc2MTk4OTEwNTY4MjAwMDAwMCIsInNhbHQiOiIweDEyODdhOGRjZjg2OGE1NWViMjM1ODlmY2VhOWMwYTg0ODE0MjIxMzg1NDgwOGFiOGVjZmZkYjMwZGI0MmMzYTkiLCJpbnN0cnVjdGlvbiI6IjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzOTFmM2Y0NGZmMDZjNGE4OGYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTM5MWYzZjQ0ZmYwNmM0YTg4ZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDc1NmU2OTZmNmUzMTY4NzU3OTY4NjczMzMyMzAzMjZlNzIzODcwMzc3NzMwNzkzNzczNjU3NDY4MzM2NjZlNmE2NjMzMzU2NjY2NzA3MTZkMzY2ZTZlNzkzMzc3NjE2YjYzNzQ2MTMzMzczMzc0NjE3NjcxMzUzOTcwMzY2ZTc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNDhFMDU2Y2I4Mjk3ODg1MDc2NDFmRkJDMDY2MjQ2RmQ2QjFEMDhiMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNjE3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTRiYTVlRDQ0NzMzOTUzZDc5NzE3RjYyNjkzNTdDNzc3MThDOEJhNWVkMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNGJhNWVkNDQ3MzM5NTNkNzk3MTdmNjI2OTM1N2M3NzcxOGM4YmE1ZWQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIn19","funds":[{"denom":"au","amount":"43555014352229080803471"}]}}}]
union1huyhg3202nr8p7w0y7seth3fnjf35ffpqm6nny3wakcta373tavq59p6ntunion1eueueueu9var4yhdruyzkjcsh74xzeug6ckyy60hs0vcqnzql2hq0lxc2funion1eueueueu9var4yhdruyzkjcsh74xzeug6ckyy60hs0vcqnzql2hq0lxc2funion1huyhg3202nr8p7w0y7seth3fnjf35ffpqm6nny3wakcta373tavq59p6nt{"wasm":{"execute":{"contract_addr":"union1eueueueu9var4yhdruyzkjcsh74xzeug6ckyy60hs0vcqnzql2hq0lxc2f","msg":"eyJpbmNyZWFzZV9hbGxvd2FuY2UiOnsic3BlbmRlciI6InVuaW9uMWQycjRlY3N1YXA0cHVqcmxmM256MDl2ejhlaGE4eTB6MjVrbnEwbGZ4ejR5em44M3Y2a3EwanhzbWsiLCJhbW91bnQiOiIyODExOTAwMDAwMDAwMDAwMDAwMDAwMCJ9fQ==","funds":[]}}},{"wasm":{"execute":{"contract_addr":"union1d2r4ecsuap4pujrlf3nz09vz8eha8y0z25knq0lfxz4yzn83v6kq0jxsmk","msg":"eyJ1bmJvbmQiOnsiYW1vdW50IjoiMjgxMTkwMDAwMDAwMDAwMDAwMDAwMDAifX0=","funds":[]}}}]