Beispiel #1
0
def _produce(chain_file, config, item) -> bool:
    try:
        production_local_chain = dao.DiskStorage(chain_file)
        last_local_chain_hash = production_local_chain.get_last_hash()
        print('Last Blockchain state:')
        last_remote_state = config.client.last_state(item.origin)
        print(last_remote_state)
        print('----------')
        produced_data = dao.read_production_data(item, last_local_chain_hash,
                                                 last_remote_state)
        file_name_created = production_local_chain.add_to_chain(produced_data)
        print('Sending to Blockchain:')
        print(produced_data.produced.to_dict())
        print('----------')
        tx_receipt = config.client.mint(produced_data.produced, item.origin)
        print('Receipt Block Number: ' + str(tx_receipt['blockNumber']))
        print('-------------------')
        print('New Blockchain state:')
        last_remote_state = config.client.last_state(item.origin)
        print(last_remote_state)
        print('----------')
        print('New Local File:')
        print(file_name_created)
        print('----------\n')
        return True
    except Exception as e:
        print('[ERROR]')
        print(e)
        return False
Beispiel #2
0
def _produce(chain_file, config, item) -> bool:
    try:
        production_local_chain = dao.DiskStorage(chain_file, PERSISTENCE)
        last_local_chain_hash = production_local_chain.get_last_hash()
        last_remote_state = config.client.last_state(item.origin)
        produced_data = dao.read_production_data(item, last_local_chain_hash,
                                                 last_remote_state)
        created_file = production_local_chain.add_to_chain(produced_data)
        tx_receipt = config.client.mint(produced_data.produced, item.origin)
        class_name = item.energy.__class__.__name__
        data = produced_data.produced
        block_number = str(tx_receipt['blockNumber'])
        msg = '[PROD] meter: {} - {} watts - {} kg of Co2 - block: {}'
        if data.is_meter_down:
            logger.warning(
                msg.format(class_name, data.energy, data.co2_saved,
                           block_number))
        else:
            logger.info(
                msg.format(class_name, data.energy, data.co2_saved,
                           block_number))
        return True
    except Exception as e:
        error_log.exception("[BOND][PROD] meter: {} - stack: {}".format(
            item.energy.__class__.__name__, e))
        return False
Beispiel #3
0
def _consume(chain_file, config, item):
    try:
        consumption_local_chain = dao.DiskStorage(chain_file, PERSISTENCE)
        last_local_chain_hash = consumption_local_chain.get_last_hash()
        last_remote_state = config.client.last_state(item.origin)
        consumed_data = dao.read_consumption_data(item, last_local_chain_hash, last_remote_state)
        created_file = consumption_local_chain.add_to_chain(consumed_data)
        tx_receipt = config.client.mint(consumed_data.consumed, item.origin)
        class_name = item.energy.__class__.__name__
        data = consumed_data.consumed
        block_number = str(tx_receipt['blockNumber'])
        message = '[COMS] meter: {} - {} watts - block: {}'
        if data.is_meter_down:
            logger.warning(message.format(class_name, data.energy, block_number))
        else:
            logger.info(message.format(class_name, data.energy, block_number))
        return True
    except Exception as e:
        error_log.exception("[BOND][COMS] meter: {} - stack: {}".format(item.energy.__class__.__name__, e))
        return False