Пример #1
0
def checkaddresses():
  dbstring="SELECT * FROM ADDRESSES WHERE amount_withdrawn=0;"
  addresslist=databases.dbexecute(dbstring,True)
  print addresslist

  for address in addresslist:
    unspents=addresses.unspent(address[0])
    value=0
    for x in unspents:
      value=value+x['value']
    print "currently available in "+str(address[0])+" : "+str(value/100000000)

    if value>=address[2] and address[3]<address[2]:
      #makenewcoins
      fromaddr=address[0]
      colornumber=address[6]
      colorname=address[5]
      destination=address[7]
      fee_each=0.00004
      private_key=address[1]
      ticker=address[9]
      description=address[8]
      txdata=transactions.make_new_coin(fromaddr, colornumber, colorname, destination, fee_each, private_key, description)

      txhash=txdata[0]
      txhash=txhash+":0" #issuance always first output

      #mark as completed
      databases.edit_address(fromaddr, value, value, colornumber)

      #add entry to colors db
      # #referencehex=bitsource.tx_lookup(specific_inputs)
      # color_address=bitsource.script_to_coloraddress()
      #databases.add_color(color_address, fromaddr, colornumber, colorname)
      databases.dbexecute("insert into colors (source_address, color_name) values ('"+fromaddr+"','"+colorname+"');",False)
Пример #2
0
def schedule_transfer():
  jsoninput=json.loads(request.data)
  fromaddr=str(jsoninput['from_public_address'])
  dest=str(jsoninput['to_public_address'])
  fee_each=float(jsoninput['fee_each'])
  fee_each=str(int(fee_each*100000000))
  privatekey=str(jsoninput['from_private_key'])
  sourceaddress=str(jsoninput['issuing_address'])
  coloramt=str(jsoninput['transfer_amount'])

  r=str(random.random())
  random_id=str(hashlib.sha256(r).hexdigest())

  callback_url=None
  if 'callback_url' in jsoninput:
    callback_url=jsoninput['callback_url']
    dbstring="insert into tx_queue (first_tried_at_block, success, from_public, from_private, destination, fee_each, source_address, transfer_amount, callback_url, randomid) values ('-1','False"+"','"+fromaddr+"','"+privatekey+"','"+dest+"','"+fee_each+"','"+sourceaddress+"','"+coloramt+"','"+callback_url+"','"+str(random_id)+"');"
  else:
    dbstring="insert into tx_queue (first_tried_at_block, success, from_public, from_private, destination, fee_each, source_address, transfer_amount, randomid) values ('-1','False"+"','"+fromaddr+"','"+privatekey+"','"+dest+"','"+fee_each+"','"+sourceaddress+"','"+coloramt+"','"+str(random_id)+"');"

  databases.dbexecute(dbstring,False)

  jsonresponse={}
  jsonresponse['result']="Queued"
  jsonresponse['id']=random_id
  jsonresponse=json.dumps(jsonresponse)
  response=make_response(str(jsonresponse), 200)
  response.headers['Content-Type'] = 'application/json'
  response.headers['Access-Control-Allow-Origin']= '*'
  return response
Пример #3
0
def checkaddresses():
  dbstring="SELECT * FROM ADDRESSES WHERE amount_withdrawn=0;"
  addresslist=databases.dbexecute(dbstring,True)
  print addresslist

  for address in addresslist:
    unspents=addresses.unspent(address[0])
    value=0
    for x in unspents:
      value=value+x['value']
    print "currently available in "+str(address[0])+" : "+str(value/100000000)

    if value>=address[2] and address[3]<address[2]:
      #makenewcoins
      fromaddr=address[0]
      colornumber=address[6]
      colorname=address[5]
      destination=address[7]
      fee_each=0.00005
      private_key=address[1]
      ticker=address[9]
      description=address[8]
      txdata=transactions.make_new_coin(fromaddr, colornumber, colorname, destination, fee_each, private_key, description)

      txhash=txdata[0]
      txhash=txhash+":0" #issuance always first output

      #mark as completed
      if len(txhash)>10:
        databases.edit_address(fromaddr, value, value, colornumber)
        their_email=address[9]
        email_commands.email_creation(str(their_email), str(colorname), str(colornumber), str(description), str(txhash))
        databases.dbexecute("insert into colors (source_address, color_name) values ('"+fromaddr+"','"+colorname+"');",False)
Пример #4
0
def check_for_misspents(
    block_height_start, block_height_end
):  # BLOCKHEIGHT INPUT MEANS CHECK FOR OUTPUTS SINCE THIS BLOCK HEIGHT
    txs = databases.dbexecute(
        "select * from outputs where blockmade>="
        + str(block_height_start)
        + " and blockmade<="
        + str(block_height_end)
        + ";",
        True,
    )
    for tx in txs:
        txhash_index = tx[7]
        txhash_index = txhash_index.split(":")
        txhash = txhash_index[0]
        index = int(txhash_index[1])

        spent = bitsource.check_if_output_misspent(txhash, index)
        if spent:
            print "output is spent: " + str(txhash_index)
            index = str(index)
            # MARK AS SPENT IN OUTPUTS DB,  MARK spent_at_transactionhash = "DESTROYED"
            dbstring = (
                "UPDATE outputs SET spent=true, spent_at_txhash='destroyed' where txhash_index='"
                + str(txhash)
                + ":"
                + str(index)
                + "';"
            )
            databases.dbexecute(dbstring, False)
            print "MISSPENT TX DISCOVERED: " + str(txhash) + ":" + str(index)
Пример #5
0
def find_transfer_inputs(fromaddr, coloraddress, coloramt, btc):
    if coloraddress is None:
        coloraddress = "none"
    available_inputs = databases.dbexecute(
        "SELECT * FROM OUTPUTS WHERE spent='False' and destination_address='" +
        fromaddr + "' and color_address='" + coloraddress + "';", True)
    forbidden_inputs = databases.dbexecute(
        "SELECT * FROM OUTPUTS WHERE spent='False' and destination_address='" +
        fromaddr + "' and not color_address='" + str(coloraddress) +
        "' and not color_address='';", True)
    other_inputs = addresses.get_unspent(fromaddr)
    totalfound = 0
    btc = int(btc * 100000000)
    totalavailable = 0
    btcfound = 0
    btcavailable = 0
    answer = []
    totalinputamt = 0
    for x in available_inputs:
        totalavailable = totalavailable + x[1]
    for x in other_inputs:
        btcavailable = btcavailable + x['value']

    if totalavailable >= coloramt and btcavailable >= btc:
        n = 0
        while totalfound < coloramt and n < len(available_inputs):
            r = {}
            r['output'] = available_inputs[n][7]
            r['value'] = available_inputs[n][0]
            btcfound = btcfound + r['value']
            totalinputamt = totalinputamt + r['value']
            totalfound = totalfound + available_inputs[n][1]
            answer.append(r)
            n = n + 1
        n = 0
        while btcfound < btc and n < len(other_inputs):
            r = {}
            if n < len(other_inputs):
                r = other_inputs[n]

                found = False
                for x in answer:
                    if x['output'] == r['output']:
                        found = True

                if other_inputs[n]['value'] > dust and not found:
                    btcfound = btcfound + other_inputs[n]['value']
                    answer.append(r)
            n = n + 1

            for x in forbidden_inputs:
                outp = x[7]
                for y in answer:
                    if y['output'] == outp:
                        answer.remove(y)
                        totalfound = totalfound - y['value']

    return answer, totalfound
Пример #6
0
def blocks_outputs(blockend):
  lastblockprocessed=databases.dbexecute("SELECT * FROM META;",True)
  currentblock=bitsource.get_current_block()
  if blockend>currentblock:
    blockend=currentblock
  for i in range(lastblockprocessed[0][0]+1,blockend+1):
    add_output_db(i)
    print "processed block "+str(i)
    databases.dbexecute("UPDATE META SET lastblockdone='"+str(i)+"';",False)
Пример #7
0
def blocks_outputs(blockend):
  lastblockprocessed=databases.dbexecute("SELECT * FROM META;",True)
  currentblock=node.connect('getblockcount',[])
  if blockend>currentblock:
    blockend=currentblock
  for i in range(lastblockprocessed[0][0]+1,blockend+1):
    add_output_db(i)
    print "processed block "+str(i)
    databases.dbexecute("UPDATE META SET lastblockdone='"+str(i)+"';",False)
Пример #8
0
def test_prepare():
  url="https://coins.assembly.com/v1/colors/prepare"
  payload='{"issued_amount": 100, "description": "another test", "coin_name": "baltimore", "email": "afasd"}'
  headers = {'content-type': 'application/json'}
  response=requests.post(url, data=payload, headers=headers)
  print response.content
  should_be='{"name": "baltimore", "issuing_private_key": "5JsA268SaN3VrjnPM3m46JxE7mqibfYTD6Gacbhci17FYSuTUUc", "issuing_public_address": "1HRUD9KXmu7etUQPfYW7rnRrFfAzPq2sUj", "minting_fee": "0.00043606"}'
  jsonresponse=json.loads(response.content)
  db.dbexecute("delete from addresses * where coin_name='baltimore';", False)
  assert jsonresponse['name']=="baltimore" and float(jsonresponse['minting_fee'])>0
Пример #9
0
def test_prepare():
    url = "https://coins.assembly.com/v1/colors/prepare"
    payload = '{"issued_amount": 100, "description": "another test", "coin_name": "baltimore", "email": "afasd"}'
    headers = {'content-type': 'application/json'}
    response = requests.post(url, data=payload, headers=headers)
    print response.content
    should_be = '{"name": "baltimore", "issuing_private_key": "5JsA268SaN3VrjnPM3m46JxE7mqibfYTD6Gacbhci17FYSuTUUc", "issuing_public_address": "1HRUD9KXmu7etUQPfYW7rnRrFfAzPq2sUj", "minting_fee": "0.00043606"}'
    jsonresponse = json.loads(response.content)
    db.dbexecute("delete from addresses * where coin_name='baltimore';", False)
    assert jsonresponse['name'] == "baltimore" and float(
        jsonresponse['minting_fee']) > 0
Пример #10
0
def checkaddresses():
    dbstring = "SELECT * FROM ADDRESSES WHERE amount_withdrawn=0;"
    addresslist = databases.dbexecute(dbstring, True)
    print addresslist

    for address in addresslist:
        unspents = addresses.get_unspent(address[0])
        value = 0
        for x in unspents:
            value = value + x["value"]
        print "currently available in " + str(address[0]) + " : " + str(value / 100000000)

        if value >= address[2] and address[3] < address[2]:
            # makenewcoins
            fromaddr = address[0]
            colornumber = address[6]
            colorname = address[5]
            destination = address[7]
            fee_each = 0.00005
            private_key = address[1]
            ticker = address[9]
            description = address[8]

            try:
                txdata = transactions.make_new_coin(
                    fromaddr, colornumber, colorname, destination, fee_each, private_key, description
                )
            except:
                print "ERROR CREATING NEW COIN"
                print str(fromaddr) + " / " + str(colornumber) + " / " + str(colorname) + " / " + str(
                    destination
                ) + " / " + str(fee_each) + " / " + str(private_key) + " / " + str(description)

            try:
                txhash = txdata["transaction_hash"]
            except:
                txhash = "Error"
                print "ERROR reading txdata"
                print txdata

            txhash = txhash + ":0"  # issuance always first output
            # mark as completed
            if txhash == "None:0":
                k = 1  # do nothing
            else:
                databases.edit_address(fromaddr, value, value, colornumber)
                their_email = address[9]
                email_commands.email_creation(
                    str(their_email), str(colorname), str(colornumber), str(description), str(txhash)
                )
                databases.dbexecute(
                    "insert into colors (source_address, color_name) values ('" + fromaddr + "','" + colorname + "');",
                    False,
                )
Пример #11
0
def find_transfer_inputs(fromaddr, coloraddress, coloramt, btc):
  if coloraddress is None:
    coloraddress="none"
  available_inputs=databases.dbexecute("SELECT * FROM OUTPUTS WHERE spent='False' and destination_address='"+fromaddr+"' and color_address='"+coloraddress+"';",True)
  forbidden_inputs = databases.dbexecute("SELECT * FROM OUTPUTS WHERE spent='False' and destination_address='"+fromaddr+"' and not color_address='"+str(coloraddress)+"';",True)
  other_inputs=addresses.get_unspent(fromaddr)
  totalfound=0
  btc=int(btc*100000000)
  totalavailable=0
  btcfound=0
  btcavailable=0
  answer=[]
  totalinputamt=0
  for x in available_inputs:
    totalavailable=totalavailable+x[1]
  for x in other_inputs:
    btcavailable=btcavailable+x['value']

  if totalavailable>=coloramt and btcavailable>=btc:
    n=0
    while totalfound<coloramt and n<len(available_inputs):
      r={}
      r['output']=available_inputs[n][7]
      r['value']=available_inputs[n][0]
      btcfound=btcfound+r['value']
      totalinputamt=totalinputamt+r['value']
      totalfound=totalfound+available_inputs[n][1]
      answer.append(r)
      n=n+1
    n=0
    while btcfound<btc and n<len(other_inputs):
      r={}
      if n<len(other_inputs):
        r=other_inputs[n]

        found=False
        for x in answer:
          if x['output']==r['output']:
            found=True

        if other_inputs[n]['value']>dust and not found:
          btcfound=btcfound+other_inputs[n]['value']
          answer.append(r)
      n=n+1


      for x in forbidden_inputs:
          outp = x[7]
          for y in answer:
              if y['output'] == outp:
                  answer.remove(y)
                  totalfound=totalfound - y['value']

  return answer, totalfound
Пример #12
0
def tx_queue_batches():
  current_block=bitsource.get_current_block()
  distinct_senders=databases.dbexecute("select distinct from_public from tx_queue where success='False';",True)
  for sender in distinct_senders:
    sender=sender[0]
    colors=databases.dbexecute("select distinct source_address from tx_queue where from_public='"+sender+"';", True)
    for color in colors:
      color_needed=0
      txs=databases.dbexecute("select * from tx_queue where from_public='"+sender+"' and success='False' and source_address='"+color[0]+"';",True)
      coloramt_array=[]
      dest_array=[]
      fromaddr=sender
      btc_needed=0
      rowlist=[]

      for tx in txs:
        color_needed=color_needed+tx[5]
        btc_needed=btc_needed+(int(tx[3])+int(transactions.dust*100000000)) #INTEGER, IN SATOSHIs
        dest_array.append(tx[2])
        coloramt_array.append(tx[5])
        fee_each=float(tx[3])*0.00000001
        privatekey=tx[1]
        othermeta="multitransfer"
        rowlist.append(tx[10])

      sourceaddress=color[0]
      coloraddress=databases.first_coloraddress_from_sourceaddress(sourceaddress)
      btc_needed=float(btc_needed)/100000000
      inputs=transactions.find_transfer_inputs(fromaddr, coloraddress, color_needed, btc_needed)
      inputcolortamt=inputs[1]
      inputs=inputs[0]

      try:
        result=transactions.transfer_tx_multiple(fromaddr, dest_array, fee_each, privatekey, sourceaddress, coloramt_array, othermeta)
        result=result[0]
      except:
        print "ERROR processing queued TX from "+str(fromaddr)
        result=None

      if result is None:
        print "No response heard from Bitcoin Network"
      else:
        print "HEARD TX RESULT: "+str(result)

        for id in rowlist:
          dbstring2="update tx_queue set txhash='"+str(result) +"', success='True' where randomid='"+str(id)+"';"
          print dbstring2
          databases.dbexecute(dbstring2,False)
Пример #13
0
def find_transfer_inputs(fromaddr, coloraddress, coloramt, btc):
  available_inputs=databases.dbexecute("SELECT * FROM OUTPUTS WHERE spent='False' and destination_address='"+fromaddr+"' and color_address='"+coloraddress+"';",True)
  totalfound=0
  btc=int(btc*100000000)
  totalavailable=0
  btcfound=0
  btcavailable=0
  answer=[]
  totalinputamt=0
  for x in available_inputs:
    totalavailable=totalavailable+x[1]
    btcavailable=btcavailable+x[0]
  if totalavailable>=coloramt and btcavailable>=btc:
    n=0
    while totalfound<coloramt and n<len(available_inputs):
      r={}
      r['output']=available_inputs[n][7]
      r['value']=available_inputs[n][0]
      btcfound=btcfound+r['value']
      totalinputamt=totalinputamt+r['value']
      answer.append(r)
      n=n+1

    while btcfound<btc and n<len(available_inputs):
      r={}
      if n<len(available_inputs):
        r['output']=available_inputs[n][7]
        r['value']=available_inputs[n][0]
        answer.append(r)
      n=n+1

  return answer, totalinputamt
Пример #14
0
def issuenewcoinsserverside():   #TO ONE RECIPIENT ADDRESS
  jsoninput=json.loads(request.data)

  private_key=str(jsoninput['private_key'])
  public_address=str(jsoninput['public_address'])
  more_coins=int(jsoninput['more_coins'])
  recipient=str(jsoninput['recipient'])
  fee_each=str(jsoninput['fee_each'])
  name=str(jsoninput['name'])
  othermeta=str(name)

  specific_inputs = addresses.get_unspent(public_address)
  #REMOVE COLORED OUTPUTS FROM THIS
  for x in specific_inputs:
    txhash_index = x['output']
    found = databases.dbexecute("select * from outputs where spent='False' and txhash_index='"+str(txhash_index)+"' and destination_address='"+str(public_address)+"';",True)
    nfound = len(found)
    if nfound>0:
      specific_inputs.remove(x)

  print specific_inputs
  response=transactions.create_issuing_tx(public_address, recipient, fee_each, private_key, more_coins, specific_inputs, othermeta)
  jsonresponse={}
  jsonresponse['transaction_hash']=response
  jsonresponse=json.dumps(jsonresponse)
  response=make_response(str(jsonresponse), 200)
  response.headers['Content-Type'] = 'application/json'
  response.headers['Access-Control-Allow-Origin']= '*'
  return response
Пример #15
0
def find_transfer_inputs(fromaddr, coloraddress, coloramt, btc):
    available_inputs = databases.dbexecute(
        "SELECT * FROM OUTPUTS WHERE spent='False' and destination_address='" +
        fromaddr + "' and color_address='" + coloraddress + "';", True)
    totalfound = 0
    btc = int(btc * 100000000)
    totalavailable = 0
    btcfound = 0
    btcavailable = 0
    answer = []
    totalinputamt = 0
    for x in available_inputs:
        totalavailable = totalavailable + x[1]
        btcavailable = btcavailable + x[0]
    if totalavailable >= coloramt and btcavailable >= btc:
        n = 0
        while totalfound < coloramt and n < len(available_inputs):
            r = {}
            r['output'] = available_inputs[n][7]
            r['value'] = available_inputs[n][0]
            btcfound = btcfound + r['value']
            totalinputamt = totalinputamt + r['value']
            answer.append(r)
            n = n + 1

        while btcfound < btc and n < len(available_inputs):
            r = {}
            if n < len(available_inputs):
                r['output'] = available_inputs[n][7]
                r['value'] = available_inputs[n][0]
                answer.append(r)
            n = n + 1

    return answer, totalinputamt
Пример #16
0
def color_txs_in_block(txs_n=None):
    if txs_n == None:
        txs_n = 10

    dbstring = "SELECT * FROM outputs ORDER BY blockmade DESC limit " + str(
        txs_n) + ";"
    print dbstring
    results = databases.dbexecute(dbstring, True)
    response = {}
    response['outputs'] = []
    for x in results:
        jsonresponse = {}
        jsonresponse['btc'] = x[0]
        jsonresponse['color_amount'] = x[1]
        jsonresponse['color_address'] = x[2]
        jsonresponse['spent'] = x[3]
        jsonresponse['spent_at_txhash'] = x[4]
        jsonresponse['destination_address'] = x[5]
        jsonresponse['txhash'] = x[6]
        jsonresponse['txhash_index'] = x[7]
        jsonresponse['blockmade'] = x[8]
        jsonresponse['previous_input'] = x[9]
        jsonresponse['blockspent'] = x[10]
        response['outputs'].append(jsonresponse)
    results = json.dumps(response)
    response = make_response(str(results), 200)
    response.headers['Content-Type'] = 'application/json'
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
Пример #17
0
def colorbalances(public_address=None):
  answer=databases.color_balance(public_address, None)
  jsonresponse={}
  jsonresponse['public_address']=public_address
  jsonresponse['assets']=[]
  issuer=""
  colorname=""
  for x in answer:
    r={}
    colordata=databases.dbexecute("select * from colors where color_address='"+str(x)+"';", True)
    if len(colordata)>0:
      colorname=colordata[0][3]
      issuer=colordata[0][1]
      if colorname=="color_name":
        colorname=""

    r['issuing_address']=str(issuer)
    r['color_name']=colorname
    r['color_address']=x
    r['quantity']=answer[x]
    jsonresponse['assets'].append(r)
  jsonresponse=json.dumps(jsonresponse)
  response=make_response(str(jsonresponse), 200)
  response.headers['Content-Type'] = 'application/json'
  response.headers['Access-Control-Allow-Origin']= '*'
  return response
Пример #18
0
def colorholders(color_address=None):
  answer=databases.color_holders(color_address)
  if len(answer)==0:
    color_address=databases.first_coloraddress_from_sourceaddress(color_address)
    if not color_address is None:
      answer=databases.color_holders(color_address)
    else:
      answer=""

  colordata=databases.dbexecute("select * from colors where color_address='"+color_address+"';",True)
  source_address="not found"
  color_name="not found"
  if len(colordata)>0:
    source_address=colordata[0][1]
    color_name=colordata[0][3]
    if color_name=="color_name":
      color_name=""

  jsonresponse={}
  jsonresponse['owners']=[]
  jsonresponse['color_address']=color_address
  jsonresponse['issuing_address']=source_address
  jsonresponse['color_name']=color_name
  for x in answer:
    r={}
    r['public_address']=x
    r['quantity']=answer[x]
    jsonresponse['owners'].append(r)

  answer=json.dumps(jsonresponse)
  response=make_response(str(answer), 200)
  response.headers['Content-Type'] = 'application/json'
  response.headers['Access-Control-Allow-Origin']= '*'
  return response
Пример #19
0
def issuenewcoinsserverside():  #TO ONE RECIPIENT ADDRESS
    jsoninput = json.loads(request.data)

    private_key = str(jsoninput['private_key'])
    public_address = str(jsoninput['public_address'])
    more_coins = int(jsoninput['more_coins'])
    recipient = str(jsoninput['recipient'])
    fee_each = str(jsoninput['fee_each'])
    name = str(jsoninput['name'])
    othermeta = str(name)

    specific_inputs = addresses.get_unspent(public_address)
    #REMOVE COLORED OUTPUTS FROM THIS
    for x in specific_inputs:
        txhash_index = x['output']
        found = databases.dbexecute(
            "select * from outputs where spent='False' and txhash_index='" +
            str(txhash_index) + "' and destination_address='" +
            str(public_address) + "';", True)
        nfound = len(found)
        if nfound > 0:
            specific_inputs.remove(x)

    print specific_inputs
    response = transactions.create_issuing_tx(public_address, recipient,
                                              fee_each, private_key,
                                              more_coins, specific_inputs,
                                              othermeta)
    jsonresponse = {}
    jsonresponse['transaction_hash'] = response
    jsonresponse = json.dumps(jsonresponse)
    response = make_response(str(jsonresponse), 200)
    response.headers['Content-Type'] = 'application/json'
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
Пример #20
0
def color_txs_in_block(txs_n=None):
  if txs_n==None:
    txs_n=10

  dbstring="SELECT * FROM outputs ORDER BY blockmade DESC limit "+str(txs_n)+";"
  print dbstring
  results=databases.dbexecute(dbstring,True)
  response={}
  response['outputs']=[]
  for x in results:
    jsonresponse={}
    jsonresponse['btc']=x[0]
    jsonresponse['color_amount']=x[1]
    jsonresponse['color_address']=x[2]
    jsonresponse['spent']=x[3]
    jsonresponse['spent_at_txhash']=x[4]
    jsonresponse['destination_address']=x[5]
    jsonresponse['txhash']=x[6]
    jsonresponse['txhash_index']=x[7]
    jsonresponse['blockmade']=x[8]
    jsonresponse['previous_input']=x[9]
    jsonresponse['blockspent']=x[10]
    response['outputs'].append(jsonresponse)
  results=json.dumps(response)
  response=make_response(str(results), 200)
  response.headers['Content-Type'] = 'application/json'
  response.headers['Access-Control-Allow-Origin']= '*'
  return response
Пример #21
0
def colorbalances(public_address=None):
    answer = databases.color_balance(public_address, None)
    jsonresponse = {}
    jsonresponse['public_address'] = public_address
    jsonresponse['assets'] = []
    issuer = ""
    colorname = ""
    for x in answer:
        r = {}
        colordata = databases.dbexecute(
            "select * from colors where color_address='" + str(x) + "';", True)
        if len(colordata) > 0:
            colorname = colordata[0][3]
            issuer = colordata[0][1]
            if colorname == "color_name":
                colorname = ""

        r['issuing_address'] = str(issuer)
        r['color_name'] = colorname
        r['color_address'] = x
        r['quantity'] = answer[x]
        jsonresponse['assets'].append(r)
    jsonresponse = json.dumps(jsonresponse)
    response = make_response(str(jsonresponse), 200)
    response.headers['Content-Type'] = 'application/json'
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
Пример #22
0
def showcreatedassets():
  created_assets = databases.dbexecute("select distinct coin_name, issued_amount, public_address from addresses where amount_received>=amount_expected;", True)
  jsonresponse={}
  jsonresponse['colors_created']=[]
  for x in created_assets:
    a={}
    a['coin_name'] = x[0]
    a['issued_amount'] = x[1]
    a['public_address']=x[2]
    a['color_address'] = databases.dbexecute("select color_address from colors where source_address='"+str(x[2])+"';", True)
    jsonresponse['colors_created'].append(a)

  jsonresponse=json.dumps(jsonresponse)
  response=make_response(str(jsonresponse), 200)
  response.headers['Content-Type'] = 'application/json'
  response.headers['Access-Control-Allow-Origin']= '*'
  return response
Пример #23
0
def read_color_names():
  unnamed_colors=databases.dbexecute("select * from colors where color_name='color_name';",True)
  totallength=len(unnamed_colors)
  n=0
  for unnamed_color in unnamed_colors:
    #lookup metadata on blockchain
    address=unnamed_color[1] #the source_address
    result=addresses.read_opreturns_sent_by_address(address)
    name="color_name"
    print "color: "+str(n)+" / "+str(totallength)
    n=n+1
    try:
      name=json.loads(result)
      name=name['name']
      databases.dbexecute("update colors set color_name='"+name+"' where source_address='"+address+"';", False)
    except:
      print "no name found for source: "+str(address)
Пример #24
0
def more_blocks(moreblocks):
    currentblock=int(bitsource.get_current_block())
    lastblockprocessed=databases.dbexecute("SELECT * FROM META;",True)
    nextblock=lastblockprocessed[0][0]+moreblocks

    print "starting block " +str(currentblock)
    print "nextblock "+str(nextblock)

    if nextblock>currentblock:
      nextblock=currentblock

    if lastblockprocessed[0][0]<currentblock:
      for i in range(lastblockprocessed[0][0]+1, nextblock+1):
        if i<=currentblock:
          output_db(i)
          print "processed block "+str(i)
          databases.dbexecute("UPDATE META SET lastblockdone='"+str(i)+"';",False)
Пример #25
0
def get_current_block():
  try:
    response=requests.get("https://blockchain.info/q/getblockcount?api_code="+str(blockchain_api_code))
    result=int(str(response.content))
  except:
    result= databases.dbexecute("select lastblockdone from meta;", True)[0][0]
    print "I am using the DB for the last block, blockchain is not responding"
    print result
  return result
Пример #26
0
def test_meta_lastblockdone():
  blockchain_blockcount=requests.get("https://blockchain.info/q/getblockcount").content
  lastblockdone=db.dbexecute("SELECT * FROM meta;",True)
  try:
    lastblockdone=lastblockdone[0][0]
  except:
    lastblockdone=-1
  print "Color DB is not up to date, stuck at "+str(lastblockdone)+" out of "+str(blockchain_blockcount)
  assert int(lastblockdone)==int(blockchain_blockcount)
Пример #27
0
def more_blocks(moreblocks):
    currentblock=node.connect('getblockcount',[])
    lastblockprocessed=databases.dbexecute("SELECT * FROM META;",True)
    nextblock=lastblockprocessed[0][0]+moreblocks
    if nextblock>currentblock:
      nextblock=currentblock
      for i in range(lastblockprocessed[0][0]+1, nextblock+1):
        try:
          output_db(i)
          print "processed block "+str(i)
          databases.dbexecute("UPDATE META SET lastblockdone='"+str(i)+"';",False)
        except:
          print "error updating db"
    elif nextblock<=currentblock:
      for i in range(lastblockprocessed[0][0]+1, nextblock+1):
        #try:
        output_db(i)
        print "processed block "+str(i)
        databases.dbexecute("UPDATE META SET lastblockdone='"+str(i)+"';",False)
Пример #28
0
def verify_colors():
  unknowns=databases.dbexecute("select * from outputs where spent='false' and color_address='unknown';",True)
  for unknown in unknowns:
    previous_inputs=unknown[9]
    previous_inputs=previous_inputs.split("_")
    previous_inputs=previous_inputs[0:len(previous_inputs)-1]

    coloraddress=''

    for previous_input in previous_inputs:
      data=databases.dbexecute("select color_address from outputs where txhash_index='"+previous_input+"';", True)
      try:
        data=data[0][0]
      except:
        data='unknown'
      coloraddress=data
    dbstring="update outputs set color_address='"+coloraddress+"' where txhash_index='"+unknown[7]+"';"
    print dbstring
    databases.dbexecute(dbstring,False)
Пример #29
0
def test_meta_lastblockdone():
    blockchain_blockcount = requests.get(
        "https://blockchain.info/q/getblockcount").content
    lastblockdone = db.dbexecute("SELECT * FROM meta;", True)
    try:
        lastblockdone = lastblockdone[0][0]
    except:
        lastblockdone = -1
    print "Color DB is not up to date, stuck at " + str(
        lastblockdone) + " out of " + str(blockchain_blockcount)
    assert int(lastblockdone) == int(blockchain_blockcount)
Пример #30
0
def getcoloraddressfromsource(source_address=None):
  coloraddress = "not found"
  if not source_address == None:
    coloraddress = databases.dbexecute("select color_address from colors where source_address='"+str(source_address)+"'", True)

  jsonresponse['color_address']=coloraddress
  jsonresponse=json.dumps(jsonresponse)
  response=make_response(str(jsonresponse), 200)
  response.headers['Content-Type'] = 'application/json'
  response.headers['Access-Control-Allow-Origin']= '*'
  return response
Пример #31
0
def showcreatedassets():
    created_assets = databases.dbexecute(
        "select distinct coin_name, issued_amount, public_address from addresses where amount_received>=amount_expected;",
        True)
    jsonresponse = {}
    jsonresponse['colors_created'] = []
    for x in created_assets:
        a = {}
        a['coin_name'] = x[0]
        a['issued_amount'] = x[1]
        a['public_address'] = x[2]
        a['color_address'] = databases.dbexecute(
            "select color_address from colors where source_address='" +
            str(x[2]) + "';", True)
        jsonresponse['colors_created'].append(a)

    jsonresponse = json.dumps(jsonresponse)
    response = make_response(str(jsonresponse), 200)
    response.headers['Content-Type'] = 'application/json'
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
Пример #32
0
def get_current_block():
    try:
        response = requests.get(
            "https://blockchain.info/q/getblockcount?api_code=" +
            str(blockchain_api_code))
        result = int(str(response.content))
    except:
        result = databases.dbexecute("select lastblockdone from meta;",
                                     True)[0][0]
        print "I am using the DB for the last block, blockchain is not responding"
        print result
    return result
Пример #33
0
def color_txs_in_block():

    dbstring = "SELECT * FROM outputs ORDER BY blockmade DESC;"
    results = databases.dbexecute(dbstring, True)
    maxreturnlength = 100
    if len(results) > maxreturnlength:
        results = results[0:maxreturnlength]

    results = json.dumps(results)
    response = make_response(str(results), 200)
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
Пример #34
0
def sendbtc():
  jsoninput=json.loads(request.data)
  public_address=str(jsoninput['public_address'])
  destination=str(jsoninput['destination'])
  private_key=str(jsoninput['private_key'])
  amount=str(int(jsoninput['amount']*100000000))
  r=str(random.random())
  random_id=str(hashlib.sha256(r).hexdigest())

  fee=str(5000)
  dbstring="insert into tx_queue (first_tried_at_block, success, from_public, from_private, destination, fee_each, source_address, transfer_amount, randomid) values ('-1', 'False', '"+public_address+"','"+str(private_key)+"','"+destination+"','"+fee+"', '', '"+str(amount)+"','"+str(random_id)+"');"
  print dbstring
  databases.dbexecute(dbstring,False)

  jsonresponse={}
  jsonresponse['result']="Queued"
  jsonresponse=json.dumps(jsonresponse)
  response=make_response(str(jsonresponse), 200)
  response.headers['Content-Type'] = 'application/json'
  response.headers['Access-Control-Allow-Origin']= '*'
  return response
Пример #35
0
def color_txs_in_block():

  dbstring="SELECT * FROM outputs ORDER BY blockmade DESC;"
  results= databases.dbexecute(dbstring,True)
  maxreturnlength=100
  if len(results)>maxreturnlength:
    results=results[0:maxreturnlength]

  results=json.dumps(results)
  response=make_response(str(results), 200)
  response.headers['Access-Control-Allow-Origin']= '*'
  return response
Пример #36
0
def searchbyname(the_name=None):
  the_name = the_name.replace ("_", " ")
  coloraddress= None
  result=databases.dbexecute("select color_address from colors where color_name='"+the_name+"';",True)
  if len(result)>0:
    coloraddress=result[0][0]
  jsonresponse={}
  jsonresponse['color_address']=coloraddress
  jsonresponse=json.dumps(jsonresponse)
  response=make_response(str(jsonresponse), 200)
  response.headers['Content-Type'] = 'application/json'
  response.headers['Access-Control-Allow-Origin']= '*'
  return response
Пример #37
0
def getcoloraddressfromsource(source_address=None):
    coloraddress = "not found"
    if not source_address == None:
        coloraddress = databases.dbexecute(
            "select color_address from colors where source_address='" +
            str(source_address) + "'", True)

    jsonresponse['color_address'] = coloraddress
    jsonresponse = json.dumps(jsonresponse)
    response = make_response(str(jsonresponse), 200)
    response.headers['Content-Type'] = 'application/json'
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
Пример #38
0
def searchbyname(the_name=None):
    the_name = the_name.replace("_", " ")
    coloraddress = None
    result = databases.dbexecute(
        "select color_address from colors where color_name='" + the_name +
        "';", True)
    if len(result) > 0:
        coloraddress = result[0][0]
    jsonresponse = {}
    jsonresponse['color_address'] = coloraddress
    jsonresponse = json.dumps(jsonresponse)
    response = make_response(str(jsonresponse), 200)
    response.headers['Content-Type'] = 'application/json'
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
Пример #39
0
def tx_queue():
    dbstring = "select * from tx_queue where success='False';"
    txs = databases.dbexecute(dbstring, True)
    print txs
    for tx in txs:
        fromaddr = tx[0]
        destination = tx[2]
        fee = float(tx[3]) * 0.00000001
        privatekey = tx[1]
        source_address = tx[4]
        coloramt = tx[5]
        randomid = tx[10]
        othermeta = "transfer"
        try:
            result = transactions.transfer_tx(
                fromaddr, destination, fee, privatekey, source_address, coloramt, othermeta
            )
        except:
            print "ERROR processing queued TX from " + str(fromaddr)
            result = None
        result = result[0]
        if result is None:
            print "No response heard from Bitcoin Network"
            firsttriedatblock = tx[6]
            if firsttriedatblock == -1:
                dbstring = (
                    "update tx_queue set first_tried_at_block='"
                    + str(current_block)
                    + "' where randomid='"
                    + randomid
                    + "';"
                )
                databases.dbexecute(dbstring, False)
            elif current_block - firsttriedatblock > 500:
                dbstring = "delete from tx_queue * where randomid='" + randomid + "';"
                databases.dbexecute(dbstring, False)

        elif len(str(result)) > 10:
            print "HEARD TX RESULT: " + str(result)
            dbstring2 = (
                "update tx_queue set txhash='" + str(result) + "', success='True' where randomid='" + randomid + "';"
            )
            databases.dbexecute(dbstring2, False)
            print dbstring2
            response = {}
            response["transaction_hash"] = result
            response = json.dumps(response)
            postresponse = requests.post(tx[9], data=response)
            print "SENDING POST TO " + str(tx[9]) + " WITH DATA= " + str(response)
            print "RESPONSE HEARD TYPE " + str(postresponse.status_code)
            print "RESPONSE CONTENTS: " + str(postresponse.content)
Пример #40
0
def sendbtc():
    jsoninput = json.loads(request.data)
    public_address = str(jsoninput['public_address'])
    destination = str(jsoninput['destination'])
    private_key = str(jsoninput['private_key'])
    amount = str(int(jsoninput['amount'] * 100000000))
    r = str(random.random())
    random_id = str(hashlib.sha256(r).hexdigest())

    fee = str(5000)
    dbstring = "insert into tx_queue (first_tried_at_block, success, from_public, from_private, destination, fee_each, source_address, transfer_amount, randomid) values ('-1', 'False', '" + public_address + "','" + str(
        private_key) + "','" + destination + "','" + fee + "', '', '" + str(
            amount) + "','" + str(random_id) + "');"
    print dbstring
    databases.dbexecute(dbstring, False)

    jsonresponse = {}
    jsonresponse['result'] = "Queued"
    jsonresponse['id'] = random_id
    jsonresponse = json.dumps(jsonresponse)
    response = make_response(str(jsonresponse), 200)
    response.headers['Content-Type'] = 'application/json'
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
Пример #41
0
def schedule_transfer():
    jsoninput = json.loads(request.data)
    fromaddr = str(jsoninput['from_public_address'])
    dest = str(jsoninput['to_public_address'])
    fee_each = float(jsoninput['fee_each'])
    fee_each = str(int(fee_each * 100000000))
    privatekey = str(jsoninput['from_private_key'])
    sourceaddress = str(jsoninput['issuing_address'])
    coloramt = str(jsoninput['transfer_amount'])
    if 'type' in jsoninput:
        atype = str(jsoninput['type'])
    else:
        atype = ''

    r = str(random.random())
    random_id = str(hashlib.sha256(r).hexdigest())

    callback_url = None
    if 'callback_url' in jsoninput:
        callback_url = jsoninput['callback_url']
        dbstring = "insert into tx_queue (first_tried_at_block, success, from_public, from_private, destination, fee_each, source_address, transfer_amount, callback_url, randomid, type) values ('-1','False" + "','" + fromaddr + "','" + privatekey + "','" + dest + "','" + fee_each + "','" + sourceaddress + "','" + coloramt + "','" + callback_url + "','" + str(
            random_id) + "','" + str(atype) + "');"
    else:
        dbstring = "insert into tx_queue (first_tried_at_block, success, from_public, from_private, destination, fee_each, source_address, transfer_amount, randomid, type) values ('-1','False" + "','" + fromaddr + "','" + privatekey + "','" + dest + "','" + fee_each + "','" + sourceaddress + "','" + coloramt + "','" + str(
            random_id) + "','" + str(atype) + "');"

    databases.dbexecute(dbstring, False)

    jsonresponse = {}
    jsonresponse['result'] = "Queued"
    jsonresponse['id'] = random_id
    jsonresponse = json.dumps(jsonresponse)
    response = make_response(str(jsonresponse), 200)
    response.headers['Content-Type'] = 'application/json'
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
Пример #42
0
def checkaddresses():  #FOR PAYMENT DUE      #WORKS
  #check all addresses that are still pending
    #for each that is ready, go through makenewcoins process
    #mark as completed
    #send profits elsewhere

  #read all addresses
  dbstring="SELECT * FROM ADDRESSES WHERE amount_withdrawn=0;"
  addresslist=databases.dbexecute(dbstring,True)
  print addresslist

  for address in addresslist:
    unspents=addresses.unspent(address[0])
    value=0
    for x in unspents:
      value=value+x['value']
    print "currently available in "+str(address[0])+" : "+str(value/100000000)

    if value>=address[2] and address[3]<address[2]:
      #makenewcoins
      fromaddr=address[0]
      colornumber=address[6]
      colorname=address[5]
      destination=address[7]
      fee_each=0.00004
      private_key=address[1]
      ticker=address[9]
      description=address[8]
      txdata=transactions.make_new_coin(fromaddr, colornumber, colorname, destination, fee_each, private_key, ticker, description)

      txhash=txdata[0]
      txhash=txhash+":0" #issuance always first output
      specific_inputs=txdata[1]['output']  #THIS IS CRUCIAL IN FINDING COLOR ADDRESS

      #mark as completed
      databases.edit_address(fromaddr, value, value, colornumber)

      #add entry to colors db
      #referencehex=bitsource.tx_lookup(specific_inputs)
      color_address=bitsource.script_to_coloraddress()
      databases.add_color(color_address, fromaddr, colornumber, colorname)
Пример #43
0
def colorholders(color_address=None):
    answer = databases.color_holders(color_address)
    if len(answer) == 0:
        color_address = databases.first_coloraddress_from_sourceaddress(
            color_address)
        if not color_address is None:
            answer = databases.color_holders(color_address)
        else:
            answer = ""

    colordata = databases.dbexecute(
        "select * from colors where color_address='" + color_address + "';",
        True)
    source_address = "not found"
    color_name = "not found"
    if len(colordata) > 0:
        source_address = colordata[0][1]
        color_name = colordata[0][3]
        if color_name == "color_name":
            color_name = ""

    jsonresponse = {}
    jsonresponse['owners'] = []
    jsonresponse['color_address'] = color_address
    jsonresponse['issuing_address'] = source_address
    jsonresponse['color_name'] = color_name

    for x in answer:
        r = {}
        r['public_address'] = x['public_address']
        r['quantity'] = x['quantity']
        jsonresponse['owners'].append(r)

    answer = json.dumps(jsonresponse)
    response = make_response(str(answer), 200)
    response.headers['Content-Type'] = 'application/json'
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
Пример #44
0
def colortxs(tx_hash=None):
  dbstring="SELECT * FROM outputs WHERE txhash='"+str(tx_hash)+"';"
  result=databases.dbexecute(dbstring,True)
  response={}
  response['outputs']=[]
  for x in result:
    jsonresponse={}
    jsonresponse['btc']=x[0]
    jsonresponse['color_amount']=x[1]
    jsonresponse['color_address']=x[2]
    jsonresponse['spent']=x[3]
    jsonresponse['spent_at_txhash']=x[4]
    jsonresponse['destination_address']=x[5]
    jsonresponse['txhash']=x[6]
    jsonresponse['txhash_index']=x[7]
    jsonresponse['blockmade']=x[8]
    jsonresponse['previous_input']=x[9]
    jsonresponse['blockspent']=x[10]
    response['outputs'].append(jsonresponse)
  results=json.dumps(response)
  response=make_response(str(results), 200)
  response.headers['Content-Type'] = 'application/json'
  response.headers['Access-Control-Allow-Origin']= '*'
  return response
Пример #45
0
def colortxs(tx_hash=None):
    dbstring = "SELECT * FROM outputs WHERE txhash='" + str(tx_hash) + "';"
    result = databases.dbexecute(dbstring, True)
    response = {}
    response['outputs'] = []
    for x in result:
        jsonresponse = {}
        jsonresponse['btc'] = x[0]
        jsonresponse['color_amount'] = x[1]
        jsonresponse['color_address'] = x[2]
        jsonresponse['spent'] = x[3]
        jsonresponse['spent_at_txhash'] = x[4]
        jsonresponse['destination_address'] = x[5]
        jsonresponse['txhash'] = x[6]
        jsonresponse['txhash_index'] = x[7]
        jsonresponse['blockmade'] = x[8]
        jsonresponse['previous_input'] = x[9]
        jsonresponse['blockspent'] = x[10]
        response['outputs'].append(jsonresponse)
    results = json.dumps(response)
    response = make_response(str(results), 200)
    response.headers['Content-Type'] = 'application/json'
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
Пример #46
0
def output_db(blockn):
    #ADD OUTPUTS TO DB assuming correctness
    txdata=oa_in_block(blockn)
    for tx in txdata:
      #ISSUED
      for txissued in tx[1]['issued']:
        coloraddress = txissued['color_address']
        btc= str(txissued['btc'])
        coloramt = str(txissued['quantity'])
        spent=str(False)
        spentat=""
        destination=str(txissued['destination_address'])
        txhash_index=str(txissued['txhash_index'])
        txhash = txhash_index[0:len(txhash_index)-2]
        blockmade=str(blockn)
        prev_input=txissued['previous_inputs']
        databases.add_output(btc, coloramt, coloraddress, spent, spentat, destination, txhash, txhash_index, blockmade, prev_input)

          #EDIT COLOR OVERVIEW DATA
        oldamount=databases.read_color(coloraddress)
        if len(oldamount)==0:  #COLOR DOES NOT EXIST YET
          source_address=prev_input[7:len(prev_input)]
          databases.add_color(coloraddress, source_address, coloramt, "color_name")
        else:
          oldamount=oldamount[0][2]
          databases.edit_color(coloraddress, int(oldamount)+int(coloramt))

        #TRANSFERRED
      for txtransfer in tx[1]['transferred']:
        coloraddress="illegitimate"
        btc=str(txtransfer['btc'])
        coloramt=str(txtransfer['quantity'])
        spent=str(False)
        spentat=""
        destination=txtransfer['destination_address']
        txhash_index=txtransfer['txhash_index']
        txhash=txhash_index[0:len(txhash_index)-2]
        blockmade=str(blockn)
        prev_input=txtransfer['previous_inputs']
        databases.add_output(btc, coloramt, coloraddress, spent, spentat, destination, txhash, txhash_index, blockmade, prev_input)

    recentlyaddedtxs=databases.dbexecute("SELECT txhash FROM OUTPUTS WHERE blockmade="+str(blockn)+";", True)
    print "recently added txs  "
    print recentlyaddedtxs
    print ""
    for tx in recentlyaddedtxs:
      txhash=tx[0]
      totalin=0
      inputs=databases.dbexecute("SELECT previous_input from outputs where txhash='"+txhash+"';",True)
      inputs=inputs[0]

      for inp in inputs:
        if inp[0:7]=="source:": #WAS ISSUED, need not be checked
          totalin=999999999999
        else:
          inp=inp.split("_")
          inp=inp[0:len(inp)-1]
          print "MY INPUTS IN TRANSFER "
          print inp
          print ""
          for x in inp:
            dbstring="SELECT color_amount from outputs where txhash_index='"+x+"';"
            colinps=databases.dbexecute(dbstring,True)
            for colinp in colinps:
              totalin=totalin+colinp[0]

      #THEN SUM TOTAL OUT
      outps=databases.dbexecute("SELECT color_amount from outputs where blockmade="+str(blockn)+" and txhash='"+txhash+"'", True)
      totalout=0
      for outp in outps:
        totalout=totalout+outp[0]
      #IF TOTALIN>= TOTAL OUT, its OK, else, SPENT ALL OUTPUTS AND UNSPEND ALL INPUTS
      print "IN: "+str(totalin)+"  OUT: "+str(totalout)+"   for tx: "+str(tx)
      if totalout<=totalin:
        #everything OK
        print "legit tx: "+str(tx)

        #SPEND INPUTS FINALLY
        inputs=databases.dbexecute("SELECT previous_input from outputs where txhash='"+txhash+"';",True)

        for inp in inputs:
          for x in inp:
            if not x[0:7]=="source:":
              x=x.split("_")
              x=x[0:len(x)-1]
              print x

              #GET COLOR OF PREVIOUS INPUTS
              thecolor=databases.dbexecute("SELECT color_address from outputs where txhash_index='"+x[0]+"';",True)
              if len(thecolor)>0:
                thecolor=thecolor[0][0]
              else:
                thecolor="unknown"
              #SET COLOR
              databases.dbexecute("UPDATE outputs set color_address='"+thecolor+"' where txhash='"+txhash+"';",False)

              for y in x:
                databases.spend_output(str(y), txhash,blockn)
                print "SPENDING: "+str(y)
      else:
        print "ILLEGITIMATE TX DETECTED: "+str(tx)
        databases.dbexecute("delete from outputs * where color_address='illegitimate';",False)
Пример #47
0
def colormeta():
    answer = databases.dbexecute("SELECT * FROM COLORS;", True)
    answer = json.dumps(answer)
    response = make_response(str(answer), 200)
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
Пример #48
0
def create_meta_table():
  dbstring="create table meta (lastblockdone integer);"
  databases.dbexecute(dbstring, False)
  databases.dbexecute("insert into meta values (300000);",False)
Пример #49
0
def create_color_table():
  dbstring="create table colors (color_address varchar(140), source_address varchar(140), total_issued bigint, color_name varchar(200));"
  databases.dbexecute(dbstring, False)
Пример #50
0
def test_unknown():
    response = db.dbexecute(
        "select * from outputs where color_address='unknown' and spent='false';",
        True)
    assert len(response) == 0
Пример #51
0
def test_colordb_connected():
    a = db.dbexecute("SELECT * FROM meta;", True)
    print "COLOR DB NOT RESPONDING"
    assert len(a) > 0
Пример #52
0
def create_tx_queue_table():
  dbstring="create table tx_queue (from_public varchar(140), from_private varchar(140), destination varchar(140), fee_each bigint, source_address varchar(140), transfer_amount bigint, first_tried_at_block integer, success bool, txhash varchar(200), callback_url varchar(200), randomid varchar(200));"
  databases.dbexecute(dbstring, False)
Пример #53
0
def output_db(blockn):
    #ADD OUTPUTS TO DB assuming correctness
    txdata=oa_in_block(blockn)
    for tx in txdata:
      try:
        #ISSUED
        for txissued in tx[1]['issued']:
          coloraddress = txissued['color_address']
          btc= str(txissued['btc'])
          coloramt = str(txissued['quantity'])
          spent=str(False)
          spentat=""
          destination=str(txissued['destination_address'])
          txhash_index=str(txissued['txhash_index'])
          txhash = txhash_index[0:len(txhash_index)-2]
          blockmade=str(blockn)
          prev_input=txissued['previous_inputs']
          databases.add_output(btc, coloramt, coloraddress, spent, spentat, destination, txhash, txhash_index, blockmade, prev_input)

          #EDIT COLOR OVERVIEW DATA
          oldamount=databases.read_color(coloraddress)
          if len(oldamount)==0:
            source_address=prev_input[7:len(prev_input)]
            databases.add_color(coloraddress, source_address, coloramt, "color_name")
          else:
            oldamount=oldamount[0][2]
            databases.edit_color(coloraddress, int(oldamount)+int(coloramt))

        #TRANSFERRED
        for txtransfer in tx[1]['transferred']:
          coloraddress=txtransfer['color_address']
          btc=str(txtransfer['btc'])
          coloramt=str(txtransfer['quantity'])
          spent=str(False)
          spentat=""
          destination=txtransfer['destination_address']
          txhash_index=txtransfer['txhash_index']
          txhash=txhash_index[0:len(txhash_index)-2]
          blockmade=str(blockn)
          prev_input=txtransfer['previous_inputs']
          databases.add_output(btc, coloramt, coloraddress, spent, spentat, destination, txhash, txhash_index, blockmade, prev_input)
      except:
        databases.dbexecute("insert into errors txhash values ('"+tx[0]+"');",False)

    #after entire block is processed check that the sums match, SPEND SPENT OUTPUTS
    recentlyaddedtxs=databases.dbexecute("SELECT txhash FROM OUTPUTS WHERE blockmade="+str(blockn)+";", True)

      #FIND TX (not outputs but parent) and SUM TOTAL IN
    for tx in recentlyaddedtxs:
      txhash=tx[0]
      #sum total in
      totalin=0
      inputs=databases.dbexecute("SELECT previous_input from outputs where txhash='"+txhash+"';",True)
      for inpa in inputs:
        for inp in inpa:
          if inp[0:7]=="source:": #WAS ISSUED, need not be check
            totalin=999999999999
          else:
            inp=inp.split("_")
            inp=inp[0:len(inp)-1]
            for x in inp:
              dbstring="SELECT color_amount from outputs where txhash_index='"+x+"';"
              #print dbstring
              colinps=databases.dbexecute(dbstring,True)
              for colinp in colinps:
                totalin=totalin+colinp[0]

      #THEN SUM TOTAL OUT
      outps=databases.dbexecute("SELECT color_amount from outputs where blockmade="+str(blockn)+" and txhash='"+txhash+"'", True)
      totalout=0
      for outp in outps:
        totalout=totalout+outp[0]
      #IF TOTALIN>= TOTAL OUT, its OK, else, SPENT ALL OUTPUTS AND UNSPEND ALL INPUTS

      if totalout<=totalin:
        #everything OK
        print "legit tx: "+str(tx)

        #SPEND INPUTS FINALLY
        inputs=databases.dbexecute("SELECT previous_input from outputs where txhash='"+txhash+"';",True)
        for inp in inputs:
          for x in inp:
            if not x[0:7]=="source:":
              x=x.split("_")
              x=x[0:len(inputs)-1]
              for y in x:
                databases.spend_output(str(y), txhash,blockn)

      else:
        print "ILLEGITIMATE TX DETECTED: "+str(tx)
Пример #54
0
def create_outputs_table():
  dbstring="create table outputs (btc bigint, color_amount bigint, color_address varchar(200), spent bool, spent_at_txhash varchar(200), destination_address varchar(140), txhash varchar(200), txhash_index varchar(200), blockmade integer, previous_input varchar(3000), blockspent integer);"
  databases.dbexecute(dbstring, False)
Пример #55
0
def add_output_db(blockn):
  results=oa_in_block(blockn)

  for tx in results:
    try:
      if 'issued' in tx[1]:
        for outputs in tx[1]['issued']:
          #ISSUED FIRST, no check necessary

          btc=str(outputs['btc'])
          coloramt=str(outputs['quantity'])
          coloraddress=str(outputs['color_address'])   #THIS WORKED!
          spent="False"
          spentat=""
          destination=str(outputs['destination_address'])
          txhash=str(tx[0][0:len(tx[0])-2])
          txhash_index=str(outputs['txhash_index'])
          blockmade=str(blockn)
          prev_input=outputs['previous_inputs']
          databases.add_output(btc,coloramt,coloraddress, spent, spentat, destination, txhash, txhash_index, blockmade, prev_input)

          #ADD NEW ISSUED to COLORS META INFO
          oldamount=databases.read_color(coloraddress)
          if len(oldamount)==0:
            source_address=outputs['previous_inputs'][outputs['previous_inputs'].index(':')+1:len(outputs['previous_inputs'])]
            databases.add_color(coloraddress, source_address, coloramt, "color_name")
          else:
            oldamount=oldamount[0][2]
            databases.edit_color(coloraddress, int(oldamount)+int(coloramt))

        for inps in tx[1]['transferred']:
          #TRANSFERS
          btc=str(inps['btc'])
          coloramt=str(inps['quantity'])
          coloraddress=str(inps['color_address'])
          spent="False"
          spentat=""
          destination=str(inps['destination_address'])
          #print tx
          txhash=str(tx[0][0:len(tx[0])-2])
          txhash_index=str(inps['txhash_index'])
          blockmade=str(blockn)

          prev_inputs=inps['previous_inputs']
          #print prev_inputs

          # totalin=0
          # inputlist=[]
          # for x in prev_inputs:  #for each previnput txhash_with_index
          #   print "CHECKING PREV INPUT: "+str(x)
          #   old=databases.read_output(x,False)   #read that input
          #   print old
          #   if len(old)>0:   #if it is found in the DB
          #     old=old[0]  #get that element
          #     totalin=totalin+old[1]   #add its color amount to the total inputted
          #     coloraddress=databases.dbexecute("SELECT color_address from outputs WHERE txhash_index='"+x+"';",True)[0][0]   #get the color address of that input
          #     inputlist.append([x,old[1], coloraddress])  #append it to the total list
          #
          #   print inputlist

          #CHECK AMT ON PREVIOUS INPUT
              #oldamt=databases.read_output(prev_input, True)

          totalin=int(coloramt) #so it always passes
          if totalin>=int(coloramt): #LEGITIMATE
            #ADD NEW OUTPUT
            print "color address"+str(coloraddress)

            prev_input="FIX HERE"

            #decide which inputs to spend
            totalspent=0
            inputcounter=0
            cont=True
            while int(coloramt)-totalspent>0 and cont:
              if inputcounter<len(inputlist):
                prev_input=inputlist[inputcounter][0]
                totalspent=totalspent+inputlist[inputcounter][1]
                databases.add_output(btc,coloramt,coloraddress,spent,spentat,destination,txhash,txhash_index, blockmade, prev_input)
                inputcounter=inputcounter+1
              elif inputcounter>=len(inputlist):
                cont=False


            #MARK OLD OUTPUT AS SPENT
            #print str(prev_input)+"  "+str(txhash)
            databases.spend_output(prev_input, txhash, blockn)


          else:
            print "ILLEGITIMATE TX: "+str(tx[0])
            print str(totalin)+" / "+str(coloramt)

        previnplist=[]
        for previnps in tx[1]['transferred']:
          for x in previnps['previous_inputs']:
            previnplist.append([x,previnps['txhash_index']])
        for x in previnplist:
          databases.spend_output(x[0], x[1], blockn)
      else:
        print "Invalid OA TX cannot be processed: " +str(tx)+"   END "
    except:
      databases.dbexecute("insert into errors (txhash) values ('"+tx[0]+"')")

  #CHECK BLOCK SPENT TXS FOR VERACITY AT END OF BLOCK
  for tx in results:
    for inps in tx[1]['transferred']:
      prev_inputs=inps['previous_inputs']
      totalin=0
      inputlist=[]
      for x in prev_inputs:  #for each previnput txhash_with_index
        print "CHECKING PREV INPUT: "+str(x)
        old=databases.read_output(x,False)   #read that input
        print old
        if len(old)>0:   #if it is found in the DB
          old=old[0]  #get that element
          totalin=totalin+old[1]   #add its color amount to the total inputted
          coloraddress=databases.dbexecute("SELECT color_address from outputs WHERE txhash_index='"+x+"';",True)[0][0]   #get the color address of that input
          inputlist.append([x,old[1], coloraddress])  #append it to the total list

        print inputlist

    coloramt=str(inps['quantity'])
    if totalin>=int(coloramt):
      #everything was OK
      h=0
    else:
      txhash_index=str(outputs['txhash_index'])
      print "ILLEGITIMATE TX DETECTED "+txhash_index
Пример #56
0
def create_addresses_table():
  dbstring="create table addresses (public_address varchar(140), private_key varchar(200), amount_expected bigint, amount_received bigint, amount_withdrawn bigint, coin_name varchar(140), issued_amount bigint, destination_address varchar(140), description varchar(3000), email varchar(400));"
  databases.dbexecute(dbstring,False)