def do_genesis(self, node_config): ''' Creates a key, then uses this key to author a genesis block. The node corresponding to node_config must be initially available on the network in order to serve this genesis block. Args: node_config (NodeConfig): ''' node_name = node_config.node_name if self.is_running(node_name) is False: # Create key for initial validator key_dir = self._base_config['KeyDirectory'] cmd = get_executable_script('sawtooth') cmd += ['keygen', node_name] cmd += ['--key-dir', key_dir] if self._verbose is False: cmd += ['--quiet'] proc = subprocess.Popen(cmd) proc.wait() # Create genesis block cmd = get_executable_script('sawtooth') cmd += ['admin', 'poet0-genesis'] if self._verbose is True: cmd += ['-vv'] cmd += ['--node', node_name] cmd += ['--keyfile', os.path.join(key_dir, '%s.wif' % node_name)] proc = subprocess.Popen(cmd) proc.wait()
def create_genesis_block(self, node_args): ''' Creates a key, then uses this key to author a genesis block. The node corresponding to node_args must be initially available on the network in order to serve this genesis block. Args: node_args (NodeArguments): ''' if self.is_running(node_args.node_name) is False: # Create key for initial validator cmd = get_executable_script('sawtooth') cmd += ['keygen', node_args.node_name] # ...sawtooth keygen does not assume validator's CURRENCYHOME key_dir = self._base_config['KeyDirectory'] if node_args.currency_home is not None: key_dir = os.path.join(node_args.currency_home, 'keys') cmd += ['--key-dir', key_dir] if self._verbose is False: cmd += ['--quiet'] proc = subprocess.Popen(cmd, env=self._build_env(node_args)) proc.wait() # Create genesis block cmd = get_executable_script('sawtooth') cmd += ['admin', 'poet0-genesis'] if self._verbose is True: cmd += ['-vv'] cmd += ['--node', node_args.node_name] for x in node_args.config_files: cmd += ['--config', x] proc = subprocess.Popen(cmd, env=self._build_env(node_args)) proc.wait()
def create_genesis_block(self, node_args): ''' Creates a key, then uses this key to author a genesis block. The node corresponding to node_args must be initially available on the network in order to serve this genesis block. Args: node_args (NodeArguments): ''' if self.is_running(node_args.node_name) is False: # Create key for initial validator cmd = get_executable_script('sawtooth') cmd += ['keygen', node_args.node_name] # ...sawtooth keygen does not assume validator's CURRENCYHOME key_dir = self._base_config['KeyDirectory'] if node_args.currency_home is not None: key_dir = os.path.join(node_args.currency_home, 'keys') cmd += ['--key-dir', key_dir] if self._verbose is False: cmd += ['--quiet'] proc = subprocess.Popen(cmd, env=self._build_env(node_args)) proc.wait() # Create genesis block cmd = get_executable_script('sawtooth') cmd += ['admin', 'poet1-genesis'] if self._verbose is True: cmd += ['-vv'] cmd += ['--node', node_args.node_name] for x in node_args.config_files: cmd += ['--config', x] proc = subprocess.Popen(cmd, env=self._build_env(node_args)) proc.wait()
def _construct_start_command(self, node_args): host = self._host_name node_name = node_args.node_name http_port = node_args.http_port gossip_port = node_args.gossip_port cmd = get_executable_script('txnvalidator') if self._verbose is True: cmd += ['-vv'] cmd += ['--node', node_name] cmd += ['--listen', "{}:{}/TCP http".format(host, http_port)] cmd += ['--listen', "{}:{}/UDP gossip".format(host, gossip_port)] for x in node_args.config_files: cmd += ['--config', x] if node_args.genesis: # Create and indicate special config file config_dir = self._base_config['ConfigDirectory'] if node_args.currency_home is not None: config_dir = os.path.join(node_args.currency_home, 'etc') if not os.path.exists(config_dir): os.makedirs(config_dir) config_file = '{}_bootstrap.json'.format(node_name) with open(os.path.join(config_dir, config_file), 'w') as f: f.write(json.dumps(self._v0_cfg, indent=4)) cmd += ['--config', config_file] return cmd
def _construct_start_command(self, node_args): host = self._host_name node_name = node_args.node_name http_port = node_args.http_port gossip_port = node_args.gossip_port pid_file = os.path.join(self._state_dir, "{}.pid".format(node_name)) cmd = get_executable_script('txnvalidator') if self._verbose is True: cmd += ['-vv'] cmd += ['--node', node_name] cmd += ['--listen', "{}:{}/TCP http".format(host, http_port)] cmd += ['--listen', "{}:{}/UDP gossip".format(host, gossip_port)] cmd += ['--daemon'] cmd += ['--pidfile', pid_file] for x in node_args.config_files: cmd += ['--config', x] # Create and indicate special config file config_dir = self._base_config['ConfigDirectory'] if node_args.currency_home is not None: config_dir = os.path.join(node_args.currency_home, 'etc') if not os.path.exists(config_dir): os.makedirs(config_dir) config_file = '{}_bootstrap.json'.format(node_name) cfg = self._non_genesis_cfg if node_args.genesis: cfg = self._genesis_cfg with open(os.path.join(config_dir, config_file), 'w') as f: f.write(json.dumps(cfg, indent=4)) cmd += ['--config', config_file] return cmd
def start(self, node_args): state = self._load_state() node_name = node_args.node_name node_num = int(node_name[len('validator-'):]) base_component_port = 40000 port = str(base_component_port + node_num) url = '0.0.0.0:' + port base_gossip_port = 8800 gossip_port_num = str(base_gossip_port + node_num) gossip_port = 'tcp://0.0.0.0:' + gossip_port_num state['Nodes'][node_name]['pid'] = [] commands = ['validator'] + state['Processors'] if node_args.genesis: commands = ['sawtooth-0.8'] + commands for cmd in commands: # get_executable_script returns (path, executable) _, executable = get_executable_script(cmd) # validator takes ports as separate args, but this might change if cmd == 'validator': component = '--component-endpoint', url network = '--network-endpoint', gossip_port flags = component + network elif cmd == 'sawtooth-0.8': flags = 'admin', 'genesis' else: flags = (url, ) handle = subprocess.Popen((executable, ) + flags) pid = handle.pid state['Nodes'][node_name]['pid'] += [pid] self._save_state(state) if node_args.genesis: time.sleep(5)
def start(self, node_args): state = self._load_state() node_name = node_args.node_name node_num = int(node_name[len('validator-'):]) base_component_port = 40000 port = str(base_component_port + node_num) url = '0.0.0.0:' + port base_gossip_port = 8800 gossip_port_num = str(base_gossip_port + node_num) gossip_port = 'tcp://0.0.0.0:' + gossip_port_num state['Nodes'][node_name]['pid'] = [] commands = ['validator'] + state['Processors'] if node_args.genesis: commands = ['sawtooth-0.8'] + commands for cmd in commands: # get_executable_script returns (path, executable) _, executable = get_executable_script(cmd) # validator takes ports as separate args, but this might change if cmd == 'validator': component = '--component-endpoint', url network = '--network-endpoint', gossip_port flags = component + network elif cmd == 'sawtooth-0.8': flags = 'admin', 'genesis' else: flags = (url,) handle = subprocess.Popen((executable,) + flags) pid = handle.pid state['Nodes'][node_name]['pid'] += [pid] self._save_state(state) if node_args.genesis: time.sleep(5)
def _construct_start_command(self, node_config): host = self._host_name node_name = node_config.node_name http_port = node_config.http_port gossip_port = node_config.gossip_port cmd = get_executable_script('txnvalidator') if self._verbose is True: cmd += ['-vv'] cmd += ['--node', node_name] cmd += ['--listen', "{}:{}/TCP http".format(host, http_port)] cmd += ['--listen', "{}:{}/UDP gossip".format(host, gossip_port)] if node_config.genesis: # Create and indicate special config file config_dir = self._base_config['ConfigDirectory'] config_file = 'initial_node.json' os.makedirs(config_dir) with open(os.path.join(config_dir, config_file), 'w') as f: f.write(json.dumps(self._v0_cfg, indent=4)) cmd += ['--conf-dir', config_dir, '--config', config_file] return cmd