def transferirMonedas(): conexion = connect_db() if request.method == 'POST': publica = request.form['publica'] resultado = bbdd.buscarMonedas() cantidad_monedas = 0 for e in resultado: datos = conexion.transactions.get(asset_id=e['id']) cant = len(datos) - 1 outs = datos[cant]['outputs'] canti = len(outs) - 1 for i in outs: if (i['condition']['details']['public_key'] == publica): cantidad_monedas = (cantidad_monedas + int(i['amount'])) return render_template("transferirMonedas.html", monedas=cantidad_monedas)
def confirmarTransferencia(): conexion = connect_db() if request.method == 'POST': cantidad = int(request.form['cantidad']) destinatario = request.form['destinatario'] monedas = int(request.form['monedas']) resultado = bbdd.buscarUsuarios() for e in resultado: if (e['usuario'] == "Darth vader"): usuario_emisor = e['usuario'] privada_emisor = e['privada'] publica_emisor = e['publica'] if (e['usuario'] == destinatario): usuario_destinatario = e['usuario'] privada_destinatario = e['privada'] publica_destinatario = e['publica'] mon = [] if (cantidad <= monedas): mone = bbdd.buscarMonedas() datos = [] canti = [] for e in mone: datos.append(conexion.transactions.get(asset_id=e['id'])) for d in datos: cant = (len(d) - 1) cant = int(cant) outs = d[cant]['outputs'] clave = outs[0]['condition']['details']['public_key'] if (clave == publica_emisor): canti.append(int(outs[0]['amount'])) mon.append(d[0]['id']) id_moneda = mon[0] cantidad_monedas = int(canti[0]) datos_moneda = conexion.transactions.get(asset_id=id_moneda) if (cantidad_monedas >= cantidad): resto_monedas = (cantidad_monedas - cantidad) o_index = 0 output = datos_moneda[0]['outputs'][o_index] transfer_input = { 'fulfillment': output['condition']['details'], 'fulfills': { 'output_index': o_index, 'transaction_id': datos_moneda[0]['id'], }, 'owners_before': output['public_keys'], } transfer_asset = { 'id': datos_moneda[0]['id'], } prepared_transfer_tx = conexion.transactions.prepare( operation='TRANSFER', asset=transfer_asset, inputs=transfer_input, recipients=[([publica_destinatario], cantidad), ([publica_emisor], resto_monedas)]) fulfilled_transfer_tx = conexion.transactions.fulfill( prepared_transfer_tx, private_keys=privada_emisor) sent_transfer_tx = conexion.transactions.send_commit( fulfilled_transfer_tx) return render_template("transferido.html", monedas=cantidad, destinatario=usuario_destinatario) else: return render_template("transfer_insuficiente.html") else: return render_template("transfer_insuficiente.html")
def confirmarCompra(): if request.method == 'POST': id = request.form['id'] comprador = request.form['comprador'] cantidadDisponible = int(request.form['cantidadDisponible']) cantidadRequerida = int(request.form['cantidadRequerida']) costo = int(request.form['costo']) nombreArma = request.form['nombre'] conexion = connect_db() resultado = bbdd.buscarUsuarios() for e in resultado: if (e['usuario'] == "Darth vader"): usuario_vendedor = e['usuario'] privada_vendedor = e['privada'] publica_vendedor = e['publica'] if (e['usuario'] == comprador): usuario_comprador = e['usuario'] privada_comprador = e['privada'] publica_comprador = e['publica'] ##Datos moneda mone = bbdd.buscarMonedas() datos = [] for e in mone: datos.append(conexion.transactions.get(asset_id=e['id'])) for d in datos: cant = (len(d) - 1) cant = int(cant) outs = d[cant]['outputs'] clave = outs[0]['condition']['details']['public_key'] if (clave == publica_comprador): cantidad_monedas = int(outs[0]['amount']) id_moneda = d[0]['id'] datos_moneda = conexion.transactions.get(asset_id=id_moneda) totalCompra = int(cantidadRequerida * costo) if (cantidadRequerida <= cantidadDisponible): if (totalCompra <= cantidad_monedas): #Venta resto_armas = (cantidadDisponible - cantidadRequerida) output_index = 0 datos_armas = conexion.transactions.get(asset_id=id) output = datos_armas[0]['outputs'][output_index] transfer_input = { 'fulfillment': output['condition']['details'], 'fulfills': { 'output_index': output_index, 'transaction_id': datos_armas[0]['id'], }, 'owners_before': output['public_keys'], } transfer_asset = { 'id': datos_armas[0]['id'], } prepared_transfer_tx = conexion.transactions.prepare( operation='TRANSFER', asset=transfer_asset, inputs=transfer_input, recipients=[([publica_comprador], cantidadRequerida), ([publica_vendedor], resto_armas)]) fulfilled_transfer_tx = conexion.transactions.fulfill( prepared_transfer_tx, private_keys=privada_vendedor) sent_transfer_tx = conexion.transactions.send_commit( fulfilled_transfer_tx) #Cobro resto_monedas = (cantidad_monedas - totalCompra) o_index = 0 output = datos_moneda[0]['outputs'][o_index] transfer_input = { 'fulfillment': output['condition']['details'], 'fulfills': { 'output_index': o_index, 'transaction_id': datos_moneda[0]['id'], }, 'owners_before': output['public_keys'], } transfer_asset = { 'id': datos_moneda[0]['id'], } prepared_transfer_tx = conexion.transactions.prepare( operation='TRANSFER', asset=transfer_asset, inputs=transfer_input, recipients=[([publica_vendedor], totalCompra), ([publica_comprador], resto_monedas)]) fulfilled_transfer_tx = conexion.transactions.fulfill( prepared_transfer_tx, private_keys=privada_comprador) sent_transfer_tx = conexion.transactions.send_commit( fulfilled_transfer_tx) return render_template("comprado.html", usuario=comprador, cantidad=cantidadRequerida, nombre=nombreArma) else: return render_template("monedas_insuficientes.html", usuario=usuario_comprador) else: return render_template("armas_insuficientes.html", usuario=usuario_comprador)