예제 #1
0
 def dispatch_request(self):
     config = app.config['yada_config']
     mongo = app.config['yada_mongo']
     address = request.args.get('address')
     bulletin_secret = request.args.get('bulletin_secret').replace(' ', "+")
     rid = TU.generate_rid(config, bulletin_secret)
     unspent_transactions = [
         x for x in BU.get_wallet_unspent_transactions(
             config, mongo, address)
     ]
     regular_txns = []
     txns_for_fastgraph = []
     for txn in unspent_transactions:
         if 'signatures' in txn and txn['signatures']:
             fastgraph = FastGraph.from_dict(config, mongo, txn)
             origin_fasttrack = fastgraph.get_origin_relationship(rid)
             if origin_fasttrack:
                 txns_for_fastgraph.append(txn)
         else:
             if 'rid' in txn and txn[
                     'rid'] == rid and 'dh_public_key' in txn and txn[
                         'dh_public_key']:
                 txns_for_fastgraph.append(txn)
             else:
                 regular_txns.append(txn)
     wallet = {
         'balance': BU.get_wallet_balance(config, mongo, address),
         'unspent_transactions': regular_txns,
         'txns_for_fastgraph': txns_for_fastgraph
     }
     return json.dumps(wallet, indent=4)
예제 #2
0
 def dispatch_request(self):
     address = request.args.get('address')
     wallet = {
         'balance': BU.get_wallet_balance(address),
         'unspent_transactions': [x for x in BU.get_wallet_unspent_transactions(address)]
     }
     return json.dumps(wallet, indent=4)
예제 #3
0
def faucet():
    Mongo.init()
    used_inputs = []
    new_inputs = []
    for x in Mongo.site_db.faucet.find({'active': True}):
        balance = BU.get_wallet_balance(x['address'])
        if balance >= 25:
            Mongo.site_db.faucet.update({'_id': x['_id']}, {
                'active': False,
                'address': x['address']
            })

            continue
        last_id_in_blockchain = x.get('last_id')
        if last_id_in_blockchain and not Mongo.db.blocks.find({
                'transactions.id':
                last_id_in_blockchain
        }).count():

            continue

        try:
            transaction = TransactionFactory(
                fee=0.01,
                public_key=Config.public_key,
                private_key=Config.private_key,
                outputs=[Output(to=x['address'], value=5)])
        except NotEnoughMoneyException as e:
            print "not enough money yet"
            return
        except Exception as e:
            print x
        try:
            transaction.transaction.verify()
        except:
            Mongo.site_db.failed_faucet_transactions.insert(
                transaction.transaction.to_dict())
            print 'faucet transaction failed'
        TU.save(transaction.transaction)
        x['last_id'] = transaction.transaction.transaction_signature
        Mongo.site_db.faucet.update({'_id': x['_id']}, x)
        print 'saved. sending...', x['address']
        for peer in Peers.peers:
            try:
                socketIO = SocketIO(peer.host,
                                    peer.port,
                                    wait_for_connection=False)
                chat_namespace = socketIO.define(ChatNamespace, '/chat')
                chat_namespace.emit('newtransaction',
                                    transaction.transaction.to_dict())
                socketIO.disconnect()
            except Exception as e:
                print e
예제 #4
0
 def dispatch_request(self):
     config = app.config['yada_config']
     mongo = app.config['yada_mongo']
     address = request.args.get('address')
     wallet = {
         'balance':
         BU.get_wallet_balance(config, mongo, address),
         'unspent_transactions': [
             x for x in BU.get_wallet_unspent_transactions(
                 config, mongo, address)
         ],
     }
     return json.dumps(wallet, indent=4)
예제 #5
0
def get_logged_in_user():
    user = None
    tests = []
    res = Mongo.db.blocks.aggregate([{
        "$match": {
            "transactions.challenge_code": session['challenge_code']
        }
    }, {
        '$unwind': "$transactions"
    }, {
        "$match": {
            "transactions.challenge_code": session['challenge_code']
        }
    }])
    for transaction in res:
        transaction = transaction['transactions']
        tests = BU.get_transactions_by_rid(transaction['rid'], rid=True)
        for test in tests:
            if 'relationship' in test and 'shared_secret' in test[
                    'relationship']:
                cipher = Crypt(
                    hashlib.sha256(test['relationship']
                                   ['shared_secret']).digest().encode('hex'))
                answer = cipher.decrypt(transaction['answer'])
                if answer == transaction['challenge_code']:
                    for txn_output in transaction['outputs']:
                        if txn_output['to'] != Config.address:
                            to = txn_output['to']
                    user = {
                        'balance': BU.get_wallet_balance(to),
                        'authenticated': True,
                        'rid': transaction['rid'],
                        'bulletin_secret':
                        test['relationship']['bulletin_secret']
                    }
    return user if user else {'authenticated': False}
예제 #6
0
    def dispatch_request(self):
        config = app.config['yada_config']
        mongo = app.config['yada_mongo']
        if not request.args.get('term'):
            return '{}'

        try:
            term = int(request.args.get('term'))
            res = mongo.db.blocks.find({'index': term}, {'_id': 0})
            if res.count():
                return json.dumps(
                    {
                        'resultType': 'block_height',
                        'result': [self.changetime(x) for x in res]
                    },
                    indent=4)
        except:
            pass
        try:
            term = request.args.get('term')
            res = mongo.db.blocks.find({'public_key': term}, {'_id': 0})
            if res.count():
                return json.dumps(
                    {
                        'resultType': 'block_height',
                        'result': [self.changetime(x) for x in res]
                    },
                    indent=4)
        except:
            pass
        try:
            term = request.args.get('term')
            res = mongo.db.blocks.find({'transactions.public_key': term},
                                       {'_id': 0})
            if res.count():
                return json.dumps(
                    {
                        'resultType': 'block_height',
                        'result': [self.changetime(x) for x in res]
                    },
                    indent=4)
        except:
            pass
        try:
            term = request.args.get('term')
            re.search(r'[A-Fa-f0-9]{64}', term).group(0)
            res = mongo.db.blocks.find({'hash': term}, {'_id': 0})
            if res.count():
                return json.dumps(
                    {
                        'resultType': 'block_hash',
                        'result': [self.changetime(x) for x in res]
                    },
                    indent=4)
        except:
            pass

        try:
            term = request.args.get('term').replace(' ', '+')
            base64.b64decode(term)
            res = mongo.db.blocks.find({'id': term}, {'_id': 0})
            if res.count():
                return json.dumps(
                    {
                        'resultType': 'block_id',
                        'result': [self.changetime(x) for x in res]
                    },
                    indent=4)
        except:
            pass

        try:
            term = request.args.get('term')
            re.search(r'[A-Fa-f0-9]{64}', term).group(0)
            res = mongo.db.blocks.find({'transactions.hash': term}, {'_id': 0})
            if res.count():
                return json.dumps(
                    {
                        'resultType': 'txn_hash',
                        'result': [self.changetime(x) for x in res]
                    },
                    indent=4)
        except:
            pass

        try:
            term = request.args.get('term')
            re.search(r'[A-Fa-f0-9]{64}', term).group(0)
            res = mongo.db.blocks.find({'transactions.rid': term}, {'_id': 0})
            if res.count():
                return json.dumps(
                    {
                        'resultType': 'txn_rid',
                        'result': [self.changetime(x) for x in res]
                    },
                    indent=4)
        except:
            pass

        try:
            term = request.args.get('term').replace(' ', '+')
            base64.b64decode(term)
            res = mongo.db.blocks.find({'transactions.id': term}, {'_id': 0})
            if res.count():
                return json.dumps(
                    {
                        'resultType': 'txn_id',
                        'result': [self.changetime(x) for x in res]
                    },
                    indent=4)
        except:
            pass

        try:
            term = request.args.get('term')
            re.search(r'[A-Fa-f0-9]+', term).group(0)
            res = mongo.db.blocks.find({
                'transactions.outputs.to': term
            }, {
                '_id': 0
            }).sort('index', -1).limit(10)
            if res.count():
                balance = BU.get_wallet_balance(config, mongo, term)
                return json.dumps(
                    {
                        'balance': "{0:.8f}".format(balance),
                        'resultType': 'txn_outputs_to',
                        'result': [self.changetime(x) for x in res]
                    },
                    indent=4)
        except:
            pass

        return '{}'
예제 #7
0
def explorer_search():
    if not request.args.get('term'):
        return '{}'

    try:
        term = int(request.args.get('term'))
        res = Mongo.db.blocks.find({'index': term}, {'_id': 0})
        if res.count():
            return json.dumps(
                {
                    'resultType': 'block_height',
                    'result': [changetime(x) for x in res]
                },
                indent=4)
    except:
        pass
    try:
        term = request.args.get('term')
        res = Mongo.db.blocks.find({'public_key': term}, {'_id': 0})
        if res.count():
            return json.dumps(
                {
                    'resultType': 'block_height',
                    'result': [changetime(x) for x in res]
                },
                indent=4)
    except:
        pass
    try:
        term = request.args.get('term')
        res = Mongo.db.blocks.find({'transactions.public_key': term},
                                   {'_id': 0})
        if res.count():
            return json.dumps(
                {
                    'resultType': 'block_height',
                    'result': [changetime(x) for x in res]
                },
                indent=4)
    except:
        pass
    try:
        term = request.args.get('term')
        re.search(r'[A-Fa-f0-9]{64}', term).group(0)
        res = Mongo.db.blocks.find({'hash': term}, {'_id': 0})
        if res.count():
            return json.dumps(
                {
                    'resultType': 'block_hash',
                    'result': [changetime(x) for x in res]
                },
                indent=4)
    except:
        pass

    try:
        term = request.args.get('term').replace(' ', '+')
        base64.b64decode(term)
        res = Mongo.db.blocks.find({'id': term}, {'_id': 0})
        if res.count():
            return json.dumps(
                {
                    'resultType': 'block_id',
                    'result': [changetime(x) for x in res]
                },
                indent=4)
    except:
        pass

    try:
        term = request.args.get('term')
        re.search(r'[A-Fa-f0-9]{64}', term).group(0)
        res = Mongo.db.blocks.find({'transactions.hash': term}, {'_id': 0})
        if res.count():
            return json.dumps(
                {
                    'resultType': 'txn_hash',
                    'result': [changetime(x) for x in res]
                },
                indent=4)
    except:
        pass

    try:
        term = request.args.get('term')
        re.search(r'[A-Fa-f0-9]{64}', term).group(0)
        res = Mongo.db.blocks.find({'transactions.rid': term}, {'_id': 0})
        if res.count():
            return json.dumps(
                {
                    'resultType': 'txn_rid',
                    'result': [changetime(x) for x in res]
                },
                indent=4)
    except:
        pass

    try:
        term = request.args.get('term').replace(' ', '+')
        base64.b64decode(term)
        res = Mongo.db.blocks.find({'transactions.id': term}, {'_id': 0})
        if res.count():
            return json.dumps(
                {
                    'resultType': 'txn_id',
                    'result': [changetime(x) for x in res]
                },
                indent=4)
    except:
        pass

    try:
        term = request.args.get('term')
        re.search(r'[A-Fa-f0-9]+', term).group(0)
        res = Mongo.db.blocks.find({
            'transactions.outputs.to': term
        }, {
            '_id': 0
        }).sort('index', -1)
        if res.count():
            balance = BU.get_wallet_balance(term)
            return json.dumps(
                {
                    'balance': balance,
                    'resultType': 'txn_outputs_to',
                    'result': [changetime(x) for x in res]
                },
                indent=4)
    except:
        pass

    return '{}'