Transaction Details
Transaction Hash:
dcd88200b0668ac6b6d43daf22851a487d5d97d5fbaaa91454a128858a4a4d02
From:
0xe1288759446298f250c3bce5616706d25525ba7f
Transaction Data
{'p': 'zentest3', 'f': 'function_snippet', 'a': ['def token_create(info, args):\n assert args[\'f\'] == \'token_create\'\n\n sender = info[\'sender\']\n addr = handle_lookup(sender)\n owner, _ = get(\'asset\', \'owner\', None, tick)\n assert owner == addr\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 name = args[\'a\'][1]\n assert type(name) is str\n decimal = int(args[\'a\'][2])\n assert type(decimal) is int\n assert decimal >= 0 and decimal <= 18\n\n functions = [\'token_transfer\', \'token_mint_once\', \'asset_update_ownership\', \'asset_update_functions\']\n if len(args[\'a\']) == 4:\n functions = args[\'a\'][3]\n assert type(functions) is list\n\n put(addr, tick, \'name\', name)\n put(addr, tick, \'decimal\', decimal)\n put(addr, \'asset\', \'functions\', functions, tick)\n event(\'TokenCreated\', [tick, name, decimal, functions])\n\n\ndef token_mint_once(info, args):\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 assert args[\'f\'] == \'token_mint_once\'\n functions, _ = get(\'asset\', \'functions\', [], tick)\n assert args[\'f\'] in functions\n\n sender = info[\'sender\']\n addr = handle_lookup(sender)\n owner, _ = get(\'asset\', \'owner\', None, tick)\n assert owner == addr\n\n value = int(args[\'a\'][1])\n assert value > 0\n\n total, _ = get(tick, \'total\', None)\n assert total is None, "Token already minted"\n put(addr, tick, \'total\', value)\n\n balance, _ = get(tick, \'balance\', 0, addr)\n balance += value\n put(addr, tick, \'balance\', balance, addr)\n event(\'TokenMintedOnce\', [tick, total])\n\n\ndef token_mint(info, args):\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 assert args[\'f\'] == \'token_mint\'\n functions, _ = get(\'asset\', \'functions\', [], tick)\n assert args[\'f\'] in functions\n\n sender = info[\'sender\']\n addr = handle_lookup(sender)\n owner, _ = get(\'asset\', \'owner\', None, tick)\n assert owner == addr\n\n value = int(args[\'a\'][1])\n assert value > 0\n\n balance, _ = get(tick, \'balance\', 0, addr)\n balance += value\n put(addr, tick, \'balance\', balance, addr)\n\n total, _ = get(tick, \'total\', 0)\n total += value\n put(addr, tick, \'total\', total)\n event(\'TokenMinted\', [tick, value, total])\n\n\ndef token_burn(info, args):\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 assert args[\'f\'] == \'token_burn\'\n functions, _ = get(\'asset\', \'functions\', [], tick)\n assert args[\'f\'] in functions\n\n sender = info[\'sender\']\n addr = handle_lookup(sender)\n owner, _ = get(\'asset\', \'owner\', None, tick)\n assert owner == addr\n\n value = int(args[\'a\'][1])\n assert value > 0\n\n balance, _ = get(tick, \'balance\', 0, addr)\n balance -= value\n assert balance >= 0\n\n total, _ = get(tick, \'total\', 0)\n total -= value\n assert total >= 0\n\n put(addr, tick, \'balance\', balance, addr)\n put(addr, tick, \'total\', total)\n event(\'TokenBurned\', [tick, value, total])\n\n\ndef token_transfer(info, args):\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 assert args[\'f\'] == \'token_transfer\'\n functions, _ = get(\'asset\', \'functions\', [], tick)\n assert args[\'f\'] in functions\n\n receiver = args[\'a\'][1].lower()\n assert len(receiver) <= 42\n assert type(receiver) is str\n if len(receiver) == 42:\n assert receiver.startswith(\'0x\')\n assert set(receiver[2:]) <= set(string.digits+\'abcdef\')\n else:\n assert len(receiver) > 4\n\n sender = info[\'sender\']\n addr = handle_lookup(sender)\n\n value = int(args[\'a\'][2])\n assert value > 0\n\n sender_balance, _ = get(tick, \'balance\', 0, addr)\n assert sender_balance >= value\n sender_balance -= value\n put(addr, tick, \'balance\', sender_balance, addr)\n receiver_balance, _ = get(tick, \'balance\', 0, receiver)\n receiver_balance += value\n put(receiver, tick, \'balance\', receiver_balance, receiver)\n event(\'TokenTransfer\', [tick, addr, receiver, value])\n\n\ndef token_send(info, args):\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 assert args[\'f\'] == \'token_send\'\n functions, _ = get(\'asset\', \'functions\', [], tick)\n assert args[\'f\'] in functions\n\n sender = info[\'sender\']\n addr = handle_lookup(sender)\n\n spender = args[\'a\'][1].lower() # the address allowed to spend\n assert len(spender) <= 42\n assert type(spender) is str\n if len(spender) == 42:\n assert spender.startswith(\'0x\')\n assert set(spender[2:]) <= set(string.digits+\'abcdef\')\n else:\n assert len(spender) > 4\n\n value = int(args[\'a\'][2])\n assert value >= 0\n\n put(addr, tick, \'allowance\', value, f\'{addr},{spender}\')\n event(\'TokenSendApproval\', [tick, addr, spender, value])\n\n\ndef token_accept(info, args):\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 assert args[\'f\'] == \'token_accept\'\n functions, _ = get(\'asset\', \'functions\', [], tick)\n assert args[\'f\'] in functions\n\n from_addr = args[\'a\'][1].lower() # the address from which tokens are withdrawn\n assert len(from_addr) <= 42\n assert type(from_addr) is str\n if len(from_addr) == 42:\n assert from_addr.startswith(\'0x\')\n assert set(from_addr[2:]) <= set(string.digits+\'abcdef\')\n else:\n assert len(from_addr) > 4\n\n to_addr = info[\'sender\']\n to_addr = handle_lookup(to_addr)\n value = int(args[\'a\'][2])\n assert value > 0\n\n allowance, _ = get(tick, \'allowance\', 0, f\'{from_addr},{to_addr}\')\n from_balance, _ = get(tick, \'balance\', 0, from_addr)\n allowance -= value\n assert allowance >= 0\n from_balance -= value\n assert from_balance >= 0\n put(from_addr, tick, \'allowance\', allowance, f\'{from_addr},{to_addr}\')\n put(from_addr, tick, \'balance\', from_balance, from_addr)\n\n to_balance, _ = get(tick, \'balance\', 0, to_addr)\n to_balance += value\n put(to_addr, tick, \'balance\', to_balance, to_addr)\n\n event(\'TokenSent\', [tick, from_addr, to_addr, value])\n\n']}
Events
[['function_snippet', 'NewFunctionSnippet', 'df4ca4d9b0709e5e6d1ccbee9b13f8ad98ee91e19be89791ce5f469fd5253b3a']]