Transaction Details
Transaction Hash
82db1721178e2a00a38c0837e19dd069c620371c9267d41302eca0f8e027236f
↗ Base Sepolia
From
0xe1288759446298f250c3bce5616706d25525ba7f
Transaction Data
{'p': 'zentest3', 'f': 'function_snippet', 'a': ['def function_snippet(info, args):\n assert args[\'f\'] == \'function_snippet\'\n sender = info[\'sender\']\n addr = handle_lookup(sender)\n snippet = args[\'a\'][0]\n snippet_digest = hashlib.sha256(snippet.encode(\'utf8\')).hexdigest()\n put(addr, \'function\', \'snippet\', {\n \'snippet\': snippet,\n \'functions\': []\n }, snippet_digest)\n event(\'NewFunctionSnippet\', [snippet_digest])\n\n\ndef function_snippet_clear(info, args):\n assert args[\'f\'] == \'function_snippet_clear\'\n sender = info[\'sender\']\n addr = handle_lookup(sender)\n snippet_digest = args[\'a\'][0]\n snippet, _ = get(\'function\', \'snippet\', None, snippet_digest)\n assert snippet, "Snippet not found: %s" % snippet_digest\n assert snippet[\'functions\'] == [], "Snippet is not empty: %s" % snippet\n put(addr, \'function\', \'snippet\', None, snippet_digest)\n event(\'RemoveFunctionSnippet\', [snippet_digest, True])\n\n\ndef function_proposal(info, args):\n assert args[\'f\'] == \'function_proposal\'\n sender = info[\'sender\']\n addr = handle_lookup(sender)\n func_names = args[\'a\'][0]\n snippet_digests = args[\'a\'][1]\n for func_name in func_names:\n assert set(func_name) <= set(string.ascii_lowercase+string.digits+\'_\')\n assert not func_name.startswith(\'_\')\n\n snippet_digests = args[\'a\'][1]\n for snippet_digest in snippet_digests:\n assert set(snippet_digest) <= set(string.ascii_lowercase+string.digits)\n assert len(snippet_digest) == 64\n\n proposal_id, _ = get(\'function\', \'proposal_count\', 0)\n proposal_id += 1\n put(addr, \'function\', \'proposal_count\', proposal_id)\n\n put(addr, \'function\', \'proposal\', {\n \'functions\': func_names,\n \'snippets\': snippet_digests,\n \'votes\': []\n }, \'%s\' % (proposal_id))\n event(\'FunctionProposal\', [proposal_id, func_names])\n\n\ndef function_vote(info, args):\n assert args[\'f\'] == \'function_vote\'\n sender = info[\'sender\']\n addr = handle_lookup(sender)\n committee_members, _ = get(\'committee\', \'members\', [])\n committee_members = set(committee_members)\n assert addr in committee_members\n\n proposal_id = args[\'a\'][0]\n proposal, _ = get(\'function\', \'proposal\', None, \'%s\' % proposal_id)\n assert proposal\n votes = set(proposal[\'votes\'])\n votes.add(addr)\n proposal[\'votes\'] = list(votes)\n\n # print(len(votes), len(committee_members), len(committee_members)*2//3)\n if len(votes) >= len(committee_members)*2//3:\n assert len(proposal[\'snippets\']) > 0\n for snippet_hash in proposal[\'snippets\']:\n assert set(snippet_hash) <= set(string.ascii_lowercase+string.digits)\n snippet, _ = get(\'function\', \'snippet\', None, snippet_hash)\n assert snippet, "Snippet not found: %s" % snippet_hash\n functions = snippet[\'functions\']\n functions.extend(proposal[\'functions\'])\n snippet[\'functions\'] = list(set(functions))\n put(\'\', \'function\', \'snippet\', snippet, snippet_hash)\n\n assert len(proposal[\'functions\']) > 0\n for func_name in proposal[\'functions\']:\n put(addr, \'function\', \'code\', {\n \'snippets\': proposal[\'snippets\']\n }, func_name)\n\n funcs_reload(proposal[\'functions\'])\n event(\'NewFunctions\', [proposal_id, proposal[\'functions\']])\n else:\n put(addr, \'function\', \'proposal\', proposal, \'%s\' % proposal_id)\n event(\'FunctionVote\', [proposal_id, addr])\n']}
Events
[['function_snippet', 'NewFunctionSnippet', '8be00fa9c0aec95de31b282add46b619baf359c556f41d06c1ef90eb5320fa49']]