Exemplo n.º 1
0
    def setUp(self):

        self.directory_node, self.onion_nodes = generate_nodes()

        self.directory_node.start()
        for node in self.onion_nodes:
            node.connect(DIR_IP, DIR_PORT)
            node.start()

        # Start the test website, that listens on port 80.
        self.website = TestingWebsite(port=WEBSITE_PORT)
        self.website.start()
        time.sleep(1)  # Give enough time for the local network to be setup
Exemplo n.º 2
0
def tx_inputs(txhash):
  txdata=tx_lookup(txhash)

  global prevtxidsq
  automatic=False
  txins=txdata['vin']
  prevtxids=[]
  for x in txins:
    if 'txid' in x: #is normal transaction, not automatic block reward
      prevtxids.append([x['txid'],x['vout']])
    else:
      height=node.connect('getblock',[txdata['blockhash']])['height']
      prevtxids.append(height)
      automatic=True

  answer={}

  if automatic==False:
    #who was the destination of that txid,outputn pair?
    answer['inputs']=[]
    for a in prevtxids:
      data=tx_lookup(a[0])
      address=data['vout'][a[1]]['scriptPubKey']['addresses'][0]  #ONLY ONE ADDRESS PER OUTPUT!!!
      amount=data['vout'][a[1]]['value']
      f={}
      f['address']=address
      f['amount']=amount
      f['txid']=a[0]
      answer['inputs'].append(f)
  else:
    answer['block']=prevtxids[0]

  return answer
Exemplo n.º 3
0
def tx_inputs(txhash):
    txdata = tx_lookup(txhash)

    global prevtxidsq
    automatic = False
    txins = txdata['vin']
    prevtxids = []
    for x in txins:
        if 'txid' in x:  #is normal transaction, not automatic block reward
            prevtxids.append([x['txid'], x['vout']])
        else:
            height = node.connect('getblock', [txdata['blockhash']])['height']
            prevtxids.append(height)
            automatic = True

    answer = {}

    if automatic == False:
        #who was the destination of that txid,outputn pair?
        answer['inputs'] = []
        for a in prevtxids:
            data = tx_lookup(a[0])
            address = data['vout'][a[1]]['scriptPubKey']['addresses'][
                0]  #ONLY ONE ADDRESS PER OUTPUT!!!
            amount = data['vout'][a[1]]['value']
            f = {}
            f['address'] = address
            f['amount'] = amount
            f['txid'] = a[0]
            answer['inputs'].append(f)
    else:
        answer['block'] = prevtxids[0]

    return answer
Exemplo n.º 4
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)
Exemplo n.º 5
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)
Exemplo n.º 6
0
def create_raw_tx(fromaddr, outs, fee):
  global ins, rawtx
  unspent=addresses.getunspent(fromaddr)
  ins=[]

  totaloutgoing=0

  for out in outs:
    totaloutgoing=totaloutgoing+outs[out]*100000000 #IN SATOSHI

  totalin=0
  for x in unspent:
    r={}
    r['txid']=x['tx_hash']
    r['vout']=x['tx_output_n']
    totalin=totalin+x['value'] #IN SATOSHI
    ins.append(r)

  difference=totalin-totaloutgoing-fee*100000000

  outs['fromaddr']=difference/100000000.0

  rawtx=node.connect('createrawtransaction',[ins,outs])
  return rawtx
Exemplo n.º 7
0
def pushtx_local(rawtx):
    print "Trying to push: " + str(rawtx)
    response = node.connect('sendrawtransaction', [rawtx])
    print "Push Response was " + str(response)

    return response
Exemplo n.º 8
0
def tx_lookup(txhash):
    print txhash
    c = node.connect('getrawtransaction', [txhash, 1])
    return c
Exemplo n.º 9
0
def getrawtx(txhash):
    txdata = node.connect('getrawtransaction', [txhash])
    return txdata
Exemplo n.º 10
0
def getblockmeta(n):
    #get hash of block at height n
    blockhash = node.connect('getblockhash', [n])

    blockdata = node.connect('getblock', [blockhash])
    return blockdata
Exemplo n.º 11
0
 def connectNodes(self, labelA, labelB):
     connect(self.nodes[labelA], self.nodes[labelB])
Exemplo n.º 12
0
def pushtx(rawtx):
  print "Trying to push: "+ str(rawtx)
  response=node.connect('sendrawtransaction',[rawtx])
  print "Push Response was "+str(response)

  return response
Exemplo n.º 13
0
def get_current_block_localnode():
    count = node.connect("getblockcount", [])
    return int(count)
Exemplo n.º 14
0
def getblockcount():
    count = node.connect("getblockcount", [])
    response = make_response(str(count), 200)
    response.headers['Access-Control-Allow-Origin'] = '*'
    return response
Exemplo n.º 15
0
def getblockmeta(n):
  #get hash of block at height n
  blockhash=node.connect('getblockhash',[n])

  blockdata=node.connect('getblock',[blockhash])
  return blockdata
Exemplo n.º 16
0
def getblockcount():
  count=node.connect("getblockcount",[])
  response=make_response(str(count), 200)
  response.headers['Access-Control-Allow-Origin']= '*'
  return response
Exemplo n.º 17
0
def getrawtx(txhash):
  txdata=node.connect('getrawtransaction',[txhash])
  return txdata
Exemplo n.º 18
0
def tx_lookup(txhash):
   print txhash
   c=node.connect('getrawtransaction',[txhash,1])
   return c
Exemplo n.º 19
0
def get_current_block_localnode():
  count=node.connect("getblockcount",[])
  return int(count)
Exemplo n.º 20
0
def pushtx(rawtx):
  response=node.connect('sendrawtransaction',[rawtx])
  return response
Exemplo n.º 21
0
def main():
    """
    Use: 
        > python create_node.py -port 12346 [-dirIP '185.172.0.3' -dirPort 12345]
    """

    directory_node_ip = None
    directory_node_port = None
    try:
        with open("config.json") as config_file:
            print("Loading Directory Node Info from 'config.json' file...")
            config = json.load(config_file)
            directory_node_ip = config['DIR_NODE_IP']
            directory_node_port = config['DIR_NODE_PORT']
    except FileNotFoundError:
        raise RuntimeWarning("'config.json' file not found")

    parser = argparse.ArgumentParser(
        description='Initialize a node in the onion_routing network.')
    parser.add_argument('-ip',
                        action='store',
                        dest='ip',
                        type=str,
                        default=socket.gethostname(),
                        help='the ip to create the node on.')
    parser.add_argument('-port',
                        action='store',
                        dest='port',
                        type=str,
                        help='the port to create the node on.')
    parser.add_argument('-dirIP',
                        action='store',
                        dest='dirIP',
                        type=str,
                        default=directory_node_ip,
                        help='the IP address of the Directory Node.')
    parser.add_argument('-dirPort',
                        action='store',
                        dest='dirPort',
                        type=int,
                        default=directory_node_port,
                        help='the Port the Directory Node is listening on.')

    args = parser.parse_args()

    ip = args.ip
    port = int(args.port)

    print("Using Directory Node IP:", args.dirIP)
    print("Using Directory Node PORT:", args.dirPort)

    if args.port is None:
        raise RuntimeError("Invalid 'port' argument")

    print("Creating an Onion Node at ", ip, ":", port)

    node = OnionNode(ip, port)
    node.connect(directory_node_ip, int(directory_node_port))
    node.start()

    while ("exit" not in input()):
        time.sleep(1)

    print("Closing Node")
    node.stop()