def initialize_blockchain(self, overwrite: bool = True) -> None: log = Logger('nucypher-geth-init') with open(self.GENESIS_SOURCE_FILEPATH, 'r') as file: genesis_data = json.loads(file.read()) log.info(f"Read genesis file '{self.GENESIS_SOURCE_FILEPATH}'") genesis_data.update(dict(overwrite=overwrite)) log.info(f'Initializing new blockchain database and genesis block.') initialize_chain(genesis_data=genesis_data, **self.geth_kwargs) # Write static nodes file to data dir bootnodes_filepath = os.path.join(DEPLOY_DIR, 'static-nodes.json') shutil.copy(bootnodes_filepath, os.path.join(self.data_dir))
def __init__(self, chain_name, base_dir=None, overrides=None, genesis_data=None): if overrides is None: overrides = {} if genesis_data is None: genesis_data = {} if 'data_dir' in overrides: raise ValueError( "You cannot specify `data_dir` for a DevGethProcess") if base_dir is None: base_dir = get_default_base_dir() self.data_dir = get_chain_data_dir(base_dir, chain_name) geth_kwargs = construct_test_chain_kwargs(data_dir=self.data_dir, **overrides) # ensure that an account is present coinbase = ensure_account_exists(**geth_kwargs) # ensure that the chain is initialized genesis_file_path = get_genesis_file_path(self.data_dir) needs_init = all(( not os.path.exists(genesis_file_path), not is_live_chain(self.data_dir), not is_ropsten_chain(self.data_dir), )) if needs_init: genesis_data.setdefault( 'alloc', dict([ (coinbase, { "balance": "1000000000000000000000000000000" }), # 1 billion ether. ])) initialize_chain(genesis_data, **geth_kwargs) super(DevGethProcess, self).__init__(geth_kwargs)
def __init__(self, chain_name, base_dir=None, overrides=None, genesis_data=None): if overrides is None: overrides = {} if genesis_data is None: genesis_data = {} if 'data_dir' in overrides: raise ValueError("You cannot specify `data_dir` for a DevGethProcess") if base_dir is None: base_dir = get_default_base_dir() self.data_dir = get_chain_data_dir(base_dir, chain_name) geth_kwargs = construct_test_chain_kwargs( data_dir=self.data_dir, **overrides ) # ensure that an account is present coinbase = ensure_account_exists(**geth_kwargs) # ensure that the chain is initialized genesis_file_path = get_genesis_file_path(self.data_dir) needs_init = all(( not os.path.exists(genesis_file_path), not is_live_chain(self.data_dir), not is_ropsten_chain(self.data_dir), )) if needs_init: genesis_data.setdefault( 'alloc', dict([ (coinbase, {"balance": "1000000000000000000000000000000"}), # 1 billion ether. ]) ) initialize_chain(genesis_data, **geth_kwargs) super(DevGethProcess, self).__init__(geth_kwargs)
#sort genesis.json (prettify) json_file = open("./blockchains/genesis.json", "r") data = json.load(json_file) json_file = open("./blockchains/genesis.json", "w") json.dump(data, json_file, sort_keys=True, indent=2) enodes = [] for i in range(number): name = "Hospital" + str(i + 1) account_file_path = "./blockchains/" + name #init account with created genesis file json_file = open(genesis_file_path, "r") data = json.load(json_file) initialize_chain(data, account_file_path) print("Initialized account", accounts[i], "with created genesis.json") #generate nodekey subprocess.run( ["bootnode --genkey=" + account_file_path + "/geth/nodekey"], shell=True) print("Generated nodekey") #get enode enode = subprocess.run([ "bootnode --nodekey=" + account_file_path + "/geth/nodekey --writeaddress" ], shell=True, stdout=subprocess.PIPE)
def __init__( self, base_directory: Path, hostname: str, port: int, mnemonic: str, number_of_accounts: int, chain_id: int = 1337, initial_balance: Union[str, int] = to_wei(10000, "ether"), ): self.data_dir = base_directory / "dev" self._hostname = hostname self._port = port geth_kwargs = construct_test_chain_kwargs( data_dir=self.data_dir, rpc_addr=hostname, rpc_port=port, network_id=chain_id, ) # Ensure a clean data-dir. self._clean() sealer = ensure_account_exists(**geth_kwargs).decode().replace("0x", "") accounts = generate_dev_accounts(mnemonic, number_of_accounts=number_of_accounts) genesis_data: Dict = { "overwrite": True, "coinbase": "0x0000000000000000000000000000000000000000", "difficulty": "0x0", "extraData": f"0x{'0' * 64}{sealer}{'0' * 130}", "config": { "chainId": chain_id, "gasLimit": 0, "homesteadBlock": 0, "difficulty": "0x0", "eip150Block": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "berlinBlock": 0, "londonBlock": 0, "clique": {"period": 0, "epoch": 30000}, }, "alloc": {a.address: {"balance": str(initial_balance)} for a in accounts}, } def make_logs_paths(stream_name: str): path = base_directory / "geth-logs" / f"{stream_name}_{self._port}" path.parent.mkdir(exist_ok=True, parents=True) return path initialize_chain(genesis_data, **geth_kwargs) super().__init__( geth_kwargs, stdout_logfile_path=make_logs_paths("stdout"), stderr_logfile_path=make_logs_paths("stderr"), )