Example #1
0
def validate (db, source, destination, asset, quantity):

    try:
        util.get_asset_id(db, asset, util.CURRENT_BLOCK_INDEX)
    except AssetError:
        raise ValidateError('asset invalid')

    try:
        script.validate(source)
    except AddressError:
        raise ValidateError('source address invalid')

    if destination:
        raise ValidateError('destination exists')

    if asset == config.SCH:
        raise ValidateError('cannot destroy {}'.format(config.SCH))

    if type(quantity) != int:
        raise ValidateError('quantity not integer')

    if quantity > config.MAX_INT:
        raise ValidateError('quantity too large')

    if quantity < 0:
        raise ValidateError('quantity negative')

    if util.get_balance(db, source, asset) < quantity:
        raise BalanceError('balance insufficient')

    if not config.TESTNET:
        raise ValidateError('disabled on mainnet')
Example #2
0
def validate(db, source, destination, asset, quantity, block_index):

    try:
        util.get_asset_id(db, asset, block_index)
    except AssetError:
        raise ValidateError('asset invalid')

    try:
        script.validate(source)
    except AddressError:
        raise ValidateError('source address invalid')

    try:
        script.validate(destination)
    except AddressError:
        raise ValidateError('destination address invalid')

    if asset == config.SCH:
        raise ValidateError('cannot send {}'.format(config.SCH))

    if type(quantity) != int:
        raise ValidateError('quantity not integer')

    if quantity > config.MAX_INT:
        raise ValidateError('quantity too large')

    if quantity <= 0:
        raise ValidateError('quantity nonā€positive')

    if util.get_balance(db, source, asset) < quantity:
        raise BalanceError('balance insufficient')
Example #3
0
def compose(
    db,
    source,
    feed_address,
    bet_type,
    deadline,
    wager_quantity,
    counterwager_quantity,
    target_value,
    leverage,
    expiration,
):

    if util.get_balance(db, source, config.SHP) < wager_quantity:
        raise exceptions.ComposeError("insufficient funds")

    problems, leverage = validate(
        db,
        source,
        feed_address,
        bet_type,
        deadline,
        wager_quantity,
        counterwager_quantity,
        target_value,
        leverage,
        expiration,
        util.CURRENT_BLOCK_INDEX,
    )
    if util.date_passed(deadline):
        problems.append("deadline passed")
    if problems:
        raise exceptions.ComposeError(problems)

    data = struct.pack(config.TXTYPE_FORMAT, ID)
    data += struct.pack(
        FORMAT, bet_type, deadline, wager_quantity, counterwager_quantity, target_value, leverage, expiration
    )
    return (source, [(feed_address, None)], data)
Example #4
0
 def get_balance(self, address, asset=config.SHP):
     return util.get_balance(self.db, address, asset)