def RunEnclaveService(config, enclave): httpport = config['EnclaveService']['HttpPort'] logger.info('service started on port %s', httpport) root = ContractEnclaveServer(config, enclave) site = server.Site(root) threadpool = reactor.getThreadPool() threadpool.start() threadpool.adjustPoolsize( 8, 100) # Min & Max number of request to service at a time logger.info('# of workers: %d', threadpool.workers) reactor.listenTCP(httpport, site) @defer.inlineCallbacks def shutdown_twisted(): logger.info("Stopping Twisted") yield reactor.callFromThread(reactor.stop) reactor.addSystemEventTrigger('before', 'shutdown', shutdown_twisted) try: reactor.run() except ReactorNotRunning: logger.warn('shutdown') except: logger.warn('shutdown') pdo_enclave_helper.shutdown() sys.exit(0)
def ErrorShutdown(): """ Perform a clean shutdown after an error """ try: enclave_helper.shutdown() except Exception as e: logger.exception('shutdown failed') sys.exit(-1)
def LocalMain(config): # create the enclave ledger_config = config.get('Sawtooth') # keys of the contract creator contract_creator_keys = keys.ServiceKeys.create_service_keys() # -------------------------------------------------- logger.info('create and register the enclave') # -------------------------------------------------- enclave = CreateAndRegisterEnclave(config) # -------------------------------------------------- logger.info('create the contract and register it') # -------------------------------------------------- contract = CreateAndRegisterContract(config, enclave, contract_creator_keys) # -------------------------------------------------- logger.info('invoke a few methods on the contract, load from file') # -------------------------------------------------- data_dir = config['Contract']['DataDirectory'] try: if use_ledger: logger.info('reload the contract from local file') contract_save_file = config['Contract']['SaveFile'] contract = contract_helper.Contract.read_from_file( ledger_config, contract_save_file, data_dir=data_dir) except Exception as e: logger.error('failed to load the contract from a file; %s', str(e)) ErrorShutdown() try: UpdateTheContract(config, enclave, contract, contract_creator_keys) except Exception as e: logger.error('contract execution failed; %s', str(e)) ErrorShutdown() enclave_helper.shutdown() sys.exit(0)
try: bad_contract_id = crypto.byte_array_to_hex(crypto.random_bit_string(256))[:32] secret_list = secret_helper.create_secret_list(3, enclave_keys, contract_id, contract_creator_id) secretinfo = enclave_client.verify_secrets(bad_contract_id, contract_creator_id, secret_list) logger.error('failed to catch invalid secret list') ErrorShutdown() except : pass # ----------------------------------------------------------------- logger.info('test with invalid creator id') logger.info('expected error: failed to verify the secret signature') # ----------------------------------------------------------------- try: bad_contract_creator_keys = keys.ServiceKeys.create_service_keys() bad_contract_creator_id = bad_contract_creator_keys.identity bad_contract_id = crypto.byte_array_to_hex(crypto.random_bit_string(256))[:32] secret_list = secret_helper.create_secret_list(3, enclave_keys, contract_id, contract_creator_id) secretinfo = enclave_client.verify_secrets(contract_id, bad_contract_creator_id, secret_list) logger.error('failed to catch invalid secret list') ErrorShutdown() except : pass # this is necessary for a clean shutdown enclave_helper.shutdown() sys.exit(0)