["0xe1288759446298f250c3bce5616706d25525ba7f"]
{"snippet": "def committee_init(info, args):\n assert args['f'] == 'committee_init'\n sender = info['sender']\n addr = handle_lookup(sender)\n committee_members, _ = get('committee', 'members', [])\n assert not committee_members\n put(addr, 'committee', 'members', [addr])\n event('CommitteeInit', [addr])\n\n\ndef committee_add_member(info, args):\n assert args['f'] == 'committee_add_member'\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 user = args['a'][0]\n votes, _ = get('committee', 'proposal_add', [], user)\n votes = set(votes)\n votes.add(addr)\n votes = list(votes)\n event('CommitteeAddVote', [user, addr])\n\n if len(votes) >= len(committee_members) * 2 // 3:\n committee_members.add(user)\n put(addr, 'committee', 'members', list(committee_members))\n event('CommitteeAddMember', [user])\n votes = None\n put(addr, 'committee', 'proposal_add', votes, user)\n\n\ndef committee_remove_member(info, args):\n assert args['f'] == 'committee_remove_member'\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 user = args['a'][0]\n votes, _ = get('committee', 'proposal_remove', [], user)\n votes = set(votes)\n votes.add(addr)\n votes = list(votes)\n event('CommitteeRemoveVote', [user, addr])\n\n if len(votes) >= len(committee_members)*2//3:\n committee_members.remove(user)\n put(addr, 'committee', 'members', list(committee_members))\n event('CommitteeRemoveMember', [user])\n votes = None\n put(addr, 'committee', 'proposal_remove', votes, user)\n", "functions": ["committee_init", "committee_add_member", "committee_remove_member"]}
{"functions": ["committee_init", "committee_add_member", "committee_remove_member"], "snippets": ["e5fb2b11848ff75c932891620723b60c8b1c8f3305c5307bf5a90e173d0911bd"], "votes": []}
4
{"snippets": ["e5fb2b11848ff75c932891620723b60c8b1c8f3305c5307bf5a90e173d0911bd"]}
{"snippets": ["e5fb2b11848ff75c932891620723b60c8b1c8f3305c5307bf5a90e173d0911bd"]}
{"snippets": ["e5fb2b11848ff75c932891620723b60c8b1c8f3305c5307bf5a90e173d0911bd"]}
{"snippet": "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", "functions": ["function_vote", "function_snippet_clear", "function_snippet", "function_proposal"]}
{"functions": ["committee_init", "committee_add_member", "committee_remove_member"], "snippets": ["e5fb2b11848ff75c932891620723b60c8b1c8f3305c5307bf5a90e173d0911bd"], "votes": []}
{"functions": ["function_snippet", "function_snippet_clear", "function_proposal", "function_vote"], "snippets": ["3e4584c9f89cb04b4b9cc79182892e02c4de65883a0d70e9dee033303c445c5d"], "votes": []}
{"snippets": ["3e4584c9f89cb04b4b9cc79182892e02c4de65883a0d70e9dee033303c445c5d"]}
{"snippets": ["3e4584c9f89cb04b4b9cc79182892e02c4de65883a0d70e9dee033303c445c5d"]}
{"snippets": ["3e4584c9f89cb04b4b9cc79182892e02c4de65883a0d70e9dee033303c445c5d"]}
{"snippets": ["3e4584c9f89cb04b4b9cc79182892e02c4de65883a0d70e9dee033303c445c5d"]}
{"functions": [], "snippet": "def asset_create(info, args):\n assert args['f'] == 'asset_create'\n sender = info['sender']\n tick = args['a'][0]\n assert type(tick) is str\n assert len(tick) > 0 and len(tick) < 42\n assert tick[0] in string.ascii_uppercase\n assert set(tick) <= set(string.ascii_uppercase+string.digits+'_')\n addr = handle_lookup(sender)\n owner, _ = get('asset', 'owner', None, tick)\n assert not owner\n\n put(addr, 'asset', 'owner', addr, tick)\n put(addr, 'asset', 'functions', ['asset_update_ownership', 'asset_update_functions'], tick)\n\ndef asset_update_ownership(info, args):\n assert args['f'] == 'asset_update_ownership'\n sender = info['sender']\n tick = args['a'][0]\n receiver = args['a'][1]\n assert type(tick) is str\n assert len(tick) > 0 and len(tick) < 42\n assert tick[0] in string.ascii_uppercase\n assert set(tick) <= set(string.ascii_uppercase+string.digits+'_')\n addr = handle_lookup(sender)\n\n owner, _ = get('asset', 'owner', None, tick)\n assert owner == addr\n functions, _ = get('asset', 'functions', None, tick)\n assert type(functions) is list\n assert functions\n put(receiver, 'asset', 'owner', receiver, tick)\n put(receiver, 'asset', 'functions', functions, tick)\n\n\ndef asset_update_functions(info, args):\n assert args['f'] == 'asset_update_functions'\n sender = info['sender']\n addr = handle_lookup(sender)\n\n tick = args['a'][0]\n assert type(tick) is str\n assert len(tick) > 0 and len(tick) < 42\n assert tick[0] in string.ascii_uppercase\n assert set(tick) <= set(string.ascii_uppercase+string.digits+'_')\n\n functions = args['a'][1]\n assert type(functions) is list\n assert functions\n"}
{"votes": [], "snippets": ["6999a31be16784d6ee05ef0c5cf310e2c92394c6d3a7b8eec662d3044352de24"], "functions": ["asset_create", "asset_update_ownership", "asset_update_functions"]}