Transaction Details
Transaction Hash
f6874a3114c8948ec2e0d160718eb2ff2e811fd866106cca89672f0d2f38dcb5
↗ 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+\'_\')\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 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 snippet[\'functions\'].extend(proposal[\'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 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', '3e4584c9f89cb04b4b9cc79182892e02c4de65883a0d70e9dee033303c445c5d']]