示例#1
0
    def dispatch_request(self):
        try:
            mp = app.config['mining_pool']
            config = app.config['yada_config']
            mongo = app.config['yada_mongo']
            block = mp.block_factory.block
            block.target = mp.block_factory.block.target
            block.version = mp.block_factory.block.version
            block.special_min = mp.block_factory.block.special_min
            block.hash = request.json.get('hash')
            block.nonce = request.json.get('nonce')
            block.signature = BU.generate_signature(block.hash,
                                                    config.private_key)
            try:
                block.verify()
            except:
                print 'block failed verification'
                mongo.db.log.insert({
                    'error': 'block failed verification',
                    'block': block.to_dict(),
                    'request': request.json
                })
                return '', 400

            # submit share
            mongo.db.shares.update(
                {
                    'address': request.json.get('address'),
                    'index': block.index,
                    'hash': block.hash
                }, {
                    'address': request.json.get('address'),
                    'index': block.index,
                    'hash': block.hash,
                    'block': block.to_dict()
                },
                upsert=True)

            if int(block.target) > int(block.hash, 16) or block.special_min:
                # broadcast winning block
                mp.broadcast_block(block)
                print 'block ok'
            else:
                print 'share ok'
            return block.to_json()
        except:
            raise
            return 'error', 400
示例#2
0
def generate_some_blocks(keys):
    for key in keys:
        transactions = []
        existing_input = mongo.db.blocks.find({'transactions.outputs.to': key.get('address')})
        if existing_input.count() == 0:
            config = Wallet(key)
            index = BU.get_latest_block(config, mongo)['index'] + 1
            block = BlockFactory(transactions, key.get('public_key'), key.get('private_key'), index=index)
            block.block.special_min = True
            block.block.target = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
            block.block.nonce = 0
            header = BlockFactory.generate_header(block.block)
            block.block.hash = BlockFactory.generate_hash_from_header(header, block.block.nonce)
            block.block.signature = BU.generate_signature(block.block.hash, key['private_key'])
            mongo.db.consensus.insert({
                'peer': 'me',
                'index': block.block.index,
                'id': block.block.signature,
                'block': block.block.to_dict()
            })
            consensus.sync_bottom_up()
示例#3
0
    # this
    transaction = Transaction(
        block_height=BU.get_latest_block(config, mongo)['index'],
        fee=0.01,
        public_key=config.public_key,
        outputs=[
            {'to': config.address, 'value': float(args.value)}
        ],
        inputs=picked,
    )
    transaction.hash = transaction.generate_hash()
    transaction.transaction_signature = TU.generate_signature(transaction.hash, config.private_key)
    transaction.verify()
    index = BU.get_latest_block(config, mongo)['index'] + 1
    block = BlockFactory([transaction], config.public_key, config.private_key, index=index)
    block.block.special_min = True
    block.block.target = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
    block.block.nonce = 0
    header = BlockFactory.generate_header(block.block)
    block.block.hash = BlockFactory.generate_hash_from_header(header, block.block.nonce)
    block.block.signature = BU.generate_signature(block.block.hash, config.private_key)
    block.block.verify()
    mongo.db.consensus.insert({
        'peer': 'me',
        'index': block.block.index,
        'id': block.block.signature,
        'block': block.block.to_dict()
    })
    consensus.sync_bottom_up()
    print(transaction.to_json())