/** * Just print contracts info to console. * * @param contracts */ private static void printContracts(HashMap<String, Contract> contracts) { reporter.verbose(""); reporter.verbose("found contracts list: "); reporter.verbose(""); for (String key : contracts.keySet()) { try { String description; try { description = contracts.get(key).getDefinition().getData().getString("description"); } catch (Exception e) { description = ""; } reporter.verbose(key + ": " + "contract created at " + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(contracts.get(key).getCreatedAt()) + ": " + description ); } catch (Exception e) { e.printStackTrace(); } } }
static public BasicHttpClientSession getSession(int nodeNumber) throws IOException { if (session == null) { String keyFileName = prefs.get("session_" + nodeNumber, null); if (keyFileName != null) { reporter.verbose("Loading session from " + keyFileName); try { session = BasicHttpClientSession.reconstructSession(Boss.unpack(Do.read(keyFileName))); } catch(FileNotFoundException e) { // it is ok - session is not reconstructed } catch (Exception e) { reporter.warning("can't read session file: " + keyFileName); e.printStackTrace(); } } else { reporter.verbose("No session found at the prefs "); } } return session; }
static public void saveSession() throws IOException { if( clientNetwork != null) { int nodeNumber = getClientNetwork().getNodeNumber(); reporter.verbose("Session from ClientNetwork is exist: " + (session != null)); if (session != null) { Path keysDir = Paths.get(System.getProperty("user.home") + "/.universa"); if (!Files.exists(keysDir)) { reporter.verbose("creating new keys directory: " + keysDir.toString()); final Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwx------"); final FileAttribute<Set<PosixFilePermission>> ownerOnly = PosixFilePermissions.asFileAttribute(perms); Files.createDirectory(keysDir, ownerOnly); } Path sessionFile = keysDir.resolve("node_" + nodeNumber + ".session"); try (OutputStream out = Files.newOutputStream(sessionFile)) { out.write(Boss.pack(session.asBinder())); } final Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rw-------"); try { Files.setPosixFilePermissions(sessionFile, perms); } catch (UnsupportedOperationException x) { // fucking windows :( have no idea what to do with it } prefs.put("session_" + nodeNumber, sessionFile.toString()); // report("Session has been stored to the " + keysDir + "/" + sessionFile); } } }
public ClientNetwork(String nodeUrl, PrivateKey privateKey, BasicHttpClientSession session) throws IOException { client = new Client(nodeUrl, privateKey, session); if (client == null) throw new IOException("failed to connect to to the universa network"); reporter.verbose("Read Universa network configuration: " + client.size() + " nodes"); reporter.message("Network version: " + client.getVersion()); }
es.submit(() -> { final String url = nodes.get(nodeNumber).url; reporter.verbose("Checking node " + url); for (int i = 0; i < 5; i++) { try { if (client.ping(nodeNumber)) { okNodes.getAndIncrement(); reporter.verbose("Got an answer from " + url); return; f.get(4, TimeUnit.SECONDS); } catch (TimeoutException e) { reporter.verbose("node test is timed out"); f.cancel(true); } catch (Exception e) {
public ClientNetwork(String nodeUrl, BasicHttpClientSession session, boolean delayedStart) throws IOException { client = new Client(nodeUrl, CLIMain.getPrivateKey(), session, delayedStart); if (client == null) throw new IOException("failed to connect to to the universa network"); reporter.verbose("Read Universa network configuration: " + client.size() + " nodes"); reporter.message("Network version: " + client.getVersion()); }
/** * Only for test purposes * * @param nodeNumber * @throws IOException */ static public void breakSession(int nodeNumber) throws IOException { BasicHttpClientSession s = getSession(nodeNumber); s.setSessionId(666); s.setSessionKey(new SymmetricKey()); Path keysDir = Paths.get(System.getProperty("user.home") + "/.universa"); if (!Files.exists(keysDir)) { reporter.verbose("creating new keys directory: " + keysDir.toString()); final Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwx------"); final FileAttribute<Set<PosixFilePermission>> ownerOnly = PosixFilePermissions.asFileAttribute(perms); Files.createDirectory(keysDir, ownerOnly); } Path sessionFile = keysDir.resolve("node_" + nodeNumber + ".session"); try (OutputStream out = Files.newOutputStream(sessionFile)) { out.write(Boss.pack(s.asBinder())); } final Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rw-------"); Files.setPosixFilePermissions(sessionFile, perms); prefs.put("session_" + nodeNumber, sessionFile.toString()); // reporter.verbose("Broken session has been stored to the " + keysDir + "/" + sessionFile); }
private static void checkSj(Contract contract, Permission sj) { Binder params = sj.getParams(); String fieldName = "state.data." + params.getStringOrThrow("field_name"); reporter.verbose("splitjoins permission fond on field '" + fieldName + "'"); StringBuilder outcome = new StringBuilder(); List<Decimal> values = new ArrayList<>(); reporter.verbose("operation is: "+ outcome.toString()); Decimal saldo = values.stream().reduce(Decimal.ZERO, (a, b) -> a.add(b)); if( saldo.compareTo(Decimal.ZERO) == 0 ) reporter.verbose("Saldo looks good (zero)"); else reporter.warning("Saldo is not zero: "+saldo);
String keyFileName = prefs.get("privateKeyFile", null); if (keyFileName != null) { reporter.verbose("Loading private key from " + keyFileName); try { privateKey = new PrivateKey(Do.read(keyFileName)); reporter.verbose("creating new keys directory: " + keysDir.toString()); final Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwx------"); final FileAttribute<Set<PosixFilePermission>> ownerOnly = PosixFilePermissions.asFileAttribute(perms);
public static synchronized ClientNetwork getClientNetwork() throws IOException { if (clientNetwork == null) { reporter.verbose("ClientNetwork not exist, create one"); BasicHttpClientSession s = null; reporter.verbose("ClientNetwork nodeUrl: " + nodeUrl); if(nodeUrl != null) { clientNetwork = new ClientNetwork(nodeUrl, null, true); } else { clientNetwork = new ClientNetwork(null, true); } if (clientNetwork.client == null) throw new IOException("failed to connect to to the universa network"); if(nodeNumber != -1) { List<Client.NodeRecord> nodes = clientNetwork.client.getNodes(); clientNetwork.client = clientNetwork.client.getClient(nodeNumber-1); clientNetwork.client.setNodes(nodes); } if(!options.has("no-cache")) { s = getSession(clientNetwork.getNodeNumber()); } reporter.verbose("Session for " + clientNetwork.getNodeNumber() + " is exist: " + (s != null)); if(s != null) reporter.verbose("Session id is " + s.getSessionId()); clientNetwork.start(s); } if(clientNetwork != null) session = clientNetwork.getSession(); return clientNetwork; }
public ClientNetwork(BasicHttpClientSession session, boolean delayedStart) throws IOException { for (int i = 1; i < 10; i++) { try { client = new Client("http://node-" + Do.randomIntInRange(1, 10) + "-com.universa.io:8080", CLIMain.getPrivateKey(), session, delayedStart); break; } catch (IOException e) { reporter.warning("failed to read network from node " + i); } } if (client == null) throw new IOException("failed to connect to to the universa network"); reporter.verbose("Read Universa network configuration: " + client.size() + " nodes"); reporter.message("Network version: " + client.getVersion()); }
reporter.verbose(""); walletValueModel.contract = contract; balance.add(walletValueModel); reporter.verbose("found coins: " + contract.getOrigin().toString() + " -> " + numcoins + " (" + currencyTag + ") "); } catch (Exception e) { e.printStackTrace(); reporter.verbose(""); reporter.message("total in the wallet: "); for (WalletValueModel w : balance) {