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
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()
# 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())