async def main_loop(w3): pp_elements = PreProcessedElements() # deletes sharedata/ if present pp_elements.clear_preprocessing() # Step 1. # Create the coordinator contract and web3 interface to it compiled_sol = compile_source( open(os.path.join(os.path.dirname(__file__), "asynchromix.sol")).read()) # Compiled source code contract_interface = compiled_sol["<stdin>:AsynchromixCoordinator"] contract_class = w3.eth.contract(abi=contract_interface["abi"], bytecode=contract_interface["bin"]) # tx_hash = contract_class.constructor(w3.eth.accounts[:7],2).transact( # {'from':w3.eth.accounts[0]}) # n=7, t=2 tx_hash = contract_class.constructor(w3.eth.accounts[:4], 1).transact( {"from": w3.eth.accounts[0]}) # n=4, t=1 # Get tx receipt to get contract address tx_receipt = await wait_for_receipt(w3, tx_hash) contract_address = tx_receipt["contractAddress"] if w3.eth.getCode(contract_address) == b"": logging.critical( "code was empty 0x, constructor may have run out of gas") raise ValueError # Contract instance in concise mode abi = contract_interface["abi"] contract = w3.eth.contract(address=contract_address, abi=abi) contract_concise = ConciseContract(contract) # Call read only methods to check n = contract_concise.n() # Step 2: Create the servers router = SimpleRouter(n) sends, recvs = router.sends, router.recvs servers = [ AsynchromixServer("sid", i, sends[i], recvs[i], w3, contract) for i in range(n) ] # Step 3. Create the client async def req_mask(i, idx): # client requests input mask {idx} from server {i} return servers[i]._inputmasks[idx] client = AsynchromixClient("sid", "client", None, None, w3, contract, req_mask) # Step 4. Wait for conclusion for i, server in enumerate(servers): await server.join() await client.join()
bench_logger.info(f"[SolverPhase] Run Newton Solver: {time() - stime}") logging.info("Equation solver completed.") logging.debug(result) return result if __name__ == "__main__": from honeybadgermpc.config import HbmpcConfig HbmpcConfig.load_config() run_id = HbmpcConfig.extras["run_id"] k = int(HbmpcConfig.extras["k"]) pp_elements = PreProcessedElements() pp_elements.clear_preprocessing() asyncio.set_event_loop(asyncio.new_event_loop()) loop = asyncio.get_event_loop() try: if not HbmpcConfig.skip_preprocessing: # Need to keep these fixed when running on processes. field = GF(Subgroup.BLS12_381) a_s = [field(i) for i in range(1000 + k, 1000, -1)] if HbmpcConfig.my_id == 0: pp_elements.generate_rands(k, HbmpcConfig.N, HbmpcConfig.t) pp_elements.generate_powers(k, HbmpcConfig.N, HbmpcConfig.t, k) pp_elements.preprocessing_done() else:
def test_benchmark_generate_rands(benchmark, n, t, k): pp_elements = PreProcessedElements() pp_elements.clear_preprocessing() benchmark(pp_elements.generate_rands, k, n, t)