Function: token_mint_once


Registered at block: #34991287
Snippets: df4ca4d9b070... 5efa1f2df9ee...

Source Code

def token_create(info, args):
    assert args['f'] == 'token_create'

    sender = info['sender']
    addr = handle_lookup(sender)
    owner, _ = get('asset', 'owner', None, tick)
    assert owner == addr

    tick = args['a'][0]
    assert type(tick) is str
    assert len(tick) > 0 and len(tick) < 42
    assert tick[0] in string.ascii_uppercase
    assert set(tick) <= set(string.ascii_uppercase+string.digits+'_')

    name = args['a'][1]
    assert type(name) is str
    decimal = int(args['a'][2])
    assert type(decimal) is int
    assert decimal >= 0 and decimal <= 18

    functions = ['token_transfer', 'token_mint_once', 'asset_update_ownership', 'asset_update_functions']
    if len(args['a']) == 4:
        functions = args['a'][3]
        assert type(functions) is list

    put(addr, tick, 'name', name)
    put(addr, tick, 'decimal', decimal)
    put(addr, 'asset', 'functions', functions, tick)
    event('TokenCreated', [tick, name, decimal, functions])


def token_mint_once(info, args):
    tick = args['a'][0]
    assert type(tick) is str
    assert len(tick) > 0 and len(tick) < 42
    assert tick[0] in string.ascii_uppercase
    assert set(tick) <= set(string.ascii_uppercase+string.digits+'_')

    assert args['f'] == 'token_mint_once'
    functions, _ = get('asset', 'functions', [], tick)
    assert args['f'] in functions

    sender = info['sender']
    addr = handle_lookup(sender)
    owner, _ = get('asset', 'owner', None, tick)
    assert owner == addr

    value = int(args['a'][1])
    assert value > 0

    total, _ = get(tick, 'total', None)
    assert total is None, "Token already minted"
    put(addr, tick, 'total', value)

    balance, _ = get(tick, 'balance', 0, addr)
    balance += value
    put(addr, tick, 'balance', balance, addr)
    event('TokenMintedOnce', [tick, total])


def token_mint(info, args):
    tick = args['a'][0]
    assert type(tick) is str
    assert len(tick) > 0 and len(tick) < 42
    assert tick[0] in string.ascii_uppercase
    assert set(tick) <= set(string.ascii_uppercase+string.digits+'_')

    assert args['f'] == 'token_mint'
    functions, _ = get('asset', 'functions', [], tick)
    assert args['f'] in functions

    sender = info['sender']
    addr = handle_lookup(sender)
    owner, _ = get('asset', 'owner', None, tick)
    assert owner == addr

    value = int(args['a'][1])
    assert value > 0

    balance, _ = get(tick, 'balance', 0, addr)
    balance += value
    put(addr, tick, 'balance', balance, addr)

    total, _ = get(tick, 'total', 0)
    total += value
    put(addr, tick, 'total', total)
    event('TokenMinted', [tick, value, total])


def token_burn(info, args):
    tick = args['a'][0]
    assert type(tick) is str
    assert len(tick) > 0 and len(tick) < 42
    assert tick[0] in string.ascii_uppercase
    assert set(tick) <= set(string.ascii_uppercase+string.digits+'_')

    assert args['f'] == 'token_burn'
    functions, _ = get('asset', 'functions', [], tick)
    assert args['f'] in functions

    sender = info['sender']
    addr = handle_lookup(sender)
    owner, _ = get('asset', 'owner', None, tick)
    assert owner == addr

    value = int(args['a'][1])
    assert value > 0

    balance, _ = get(tick, 'balance', 0, addr)
    balance -= value
    assert balance >= 0

    total, _ = get(tick, 'total', 0)
    total -= value
    assert total >= 0

    put(addr, tick, 'balance', balance, addr)
    put(addr, tick, 'total', total)
    event('TokenBurned', [tick, value, total])


def token_transfer(info, args):
    tick = args['a'][0]
    assert type(tick) is str
    assert len(tick) > 0 and len(tick) < 42
    assert tick[0] in string.ascii_uppercase
    assert set(tick) <= set(string.ascii_uppercase+string.digits+'_')

    assert args['f'] == 'token_transfer'
    functions, _ = get('asset', 'functions', [], tick)
    assert args['f'] in functions

    receiver = args['a'][1].lower()
    assert len(receiver) <= 42
    assert type(receiver) is str
    if len(receiver) == 42:
        assert receiver.startswith('0x')
        assert set(receiver[2:]) <= set(string.digits+'abcdef')
    else:
        assert len(receiver) > 4

    sender = info['sender']
    addr = handle_lookup(sender)

    value = int(args['a'][2])
    assert value > 0

    sender_balance, _ = get(tick, 'balance', 0, addr)
    assert sender_balance >= value
    sender_balance -= value
    put(addr, tick, 'balance', sender_balance, addr)
    receiver_balance, _ = get(tick, 'balance', 0, receiver)
    receiver_balance += value
    put(receiver, tick, 'balance', receiver_balance, receiver)
    event('TokenTransfer', [tick, addr, receiver, value])


def token_send(info, args):
    tick = args['a'][0]
    assert type(tick) is str
    assert len(tick) > 0 and len(tick) < 42
    assert tick[0] in string.ascii_uppercase
    assert set(tick) <= set(string.ascii_uppercase+string.digits+'_')

    assert args['f'] == 'token_send'
    functions, _ = get('asset', 'functions', [], tick)
    assert args['f'] in functions

    sender = info['sender']
    addr = handle_lookup(sender)

    spender = args['a'][1].lower()  # the address allowed to spend
    assert len(spender) <= 42
    assert type(spender) is str
    if len(spender) == 42:
        assert spender.startswith('0x')
        assert set(spender[2:]) <= set(string.digits+'abcdef')
    else:
        assert len(spender) > 4

    value = int(args['a'][2])
    assert value >= 0

    put(addr, tick, 'allowance', value, f'{addr},{spender}')
    event('TokenSendApproval', [tick, addr, spender, value])


def token_accept(info, args):
    tick = args['a'][0]
    assert type(tick) is str
    assert len(tick) > 0 and len(tick) < 42
    assert tick[0] in string.ascii_uppercase
    assert set(tick) <= set(string.ascii_uppercase+string.digits+'_')

    assert args['f'] == 'token_accept'
    functions, _ = get('asset', 'functions', [], tick)
    assert args['f'] in functions

    from_addr = args['a'][1].lower()  # the address from which tokens are withdrawn
    assert len(from_addr) <= 42
    assert type(from_addr) is str
    if len(from_addr) == 42:
        assert from_addr.startswith('0x')
        assert set(from_addr[2:]) <= set(string.digits+'abcdef')
    else:
        assert len(from_addr) > 4

    to_addr = info['sender']
    to_addr = handle_lookup(to_addr)
    value = int(args['a'][2])
    assert value > 0

    allowance, _ = get(tick, 'allowance', 0, f'{from_addr},{to_addr}')
    from_balance, _ = get(tick, 'balance', 0, from_addr)
    allowance -= value
    assert allowance >= 0
    from_balance -= value
    assert from_balance >= 0
    put(from_addr, tick, 'allowance', allowance, f'{from_addr},{to_addr}')
    put(from_addr, tick, 'balance', from_balance, from_addr)

    to_balance, _ = get(tick, 'balance', 0, to_addr)
    to_balance += value
    put(to_addr, tick, 'balance', to_balance, to_addr)

    event('TokenSent', [tick, from_addr, to_addr, value])



def token_mint_free(info, args):
    tick = args['a'][0]
    assert type(tick) is str
    assert len(tick) > 0 and len(tick) < 42
    assert tick[0] in string.ascii_uppercase
    assert set(tick) <= set(string.ascii_uppercase+string.digits+'_')

    assert args['f'] == 'token_mint_free'
    functions, _ = get('asset', 'functions', [], tick)
    assert args['f'] in functions

    value = int(args['a'][1])
    assert value > 0

    sender = info['sender']
    addr = handle_lookup(sender)

    balance, _ = get(tick, 'balance', 0, addr)
    balance += value
    put(addr, tick, 'balance', balance, addr)

    total, _ = get(tick, 'total', 0)
    total += value
    put(addr, tick, 'total', total)
    event('TokenMintedFree', [tick, value, total])

← Back to Functions