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')
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')
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)
def get_balance(self, address, asset=config.SHP): return util.get_balance(self.db, address, asset)