public ItemResult check(HashId id) throws ClientError { return client.getState(id, reporter); }
@Override public ItemResult getItemState(NodeInfo nodeInfo, HashId id) throws IOException { Client client; synchronized (cachedClients) { client = cachedClients.get(nodeInfo); if( client == null ) { client = new Client(myKey, nodeInfo, null); cachedClients.put(nodeInfo, client); } } return client.getState(id); }
public ItemResult check(String base64Id) throws ClientError { return client.getState(HashId.withDigest(base64Id),reporter); }
/** * Look for known state of approvable item on the network * @param item to find state of * @return known {@link ItemState} if exist or ItemState.UNDEFINED * @throws ClientError */ public final ItemResult getState(@NonNull Approvable item) throws ClientError { return getState(item.getId()); }
private static void doExecJs() throws Exception { String contractFile = (String) options.valueOf("exec-js"); String scriptName = null; if (options.has("script-name")) scriptName = (String)options.valueOf("script-name"); Contract c = Contract.fromPackedTransaction(Files.readAllBytes(Paths.get(contractFile))); if(c != null) { ItemResult itemResult = getClientNetwork().client.getState(c.getId(), reporter); if (itemResult.state == ItemState.APPROVED) { if (scriptName != null) { c.execJSByName(scriptName); } else { List<String> scriptNames = c.extractJSNames(); if (scriptNames.size() == 1) c.execJSByName(scriptNames.get(0)); else if (scriptNames.size() > 1) report("error: contract has " + scriptNames.size() + " scripts attached, specify script filename please"); else report("error: contract has no scripts attached"); } } else { report("error: contract should be approved"); } } finish(); }
@Test public void nodeVersion() throws Exception { System.out.println("nodeClient.getNodeNumber(): " + nodeClient.getNodeNumber()); System.out.println("nodeClient.getSession(): " + nodeClient.getSession()); System.out.println("nodeClient.ping(): " + nodeClient.ping()); System.out.println("nodeClient.getState(random): " + nodeClient.getState(HashId.createRandom())); System.out.println("nodeClient.getNodes().size(): " + nodeClient.getNodes().size()); System.out.println("nodeClient.getVersion(): " + nodeClient.getVersion()); System.out.println("nodeClient.getPositiveConsensus(): " + nodeClient.getPositiveConsensus()); System.out.println("nodeClient.getUrl(): " + nodeClient.getUrl()); // PublicKey publicKey = new PublicKey(Bytes.fromHex("1E 08 1C 01 00 01 C4 00 01 C5 24 96 7D 75 B6 D3 01 AC 46 7F 64 85 56 43 B6 F7 02 B5 4A 8F FE C7 0D DE 85 4F 53 7A F4 D7 9D 85 BB AD A9 7F 1F 4C 8D CD 5C 99 09 D1 61 29 1E 67 35 80 E7 44 58 41 35 37 16 55 C2 E6 22 0D EF 0F 8B 9B A4 C6 3D 0C 56 7B EB 98 18 C8 0A 2C 26 C0 9B 23 17 3D 6B A9 BF 37 81 E5 21 0C B7 29 50 E6 69 75 DA 2C 05 42 46 A6 A8 E8 85 13 62 96 31 8C FF 50 68 56 F3 BF C4 2C F7 24 9A 9A 1A 9D 95 1A F0 E1 82 00 25 1F 14 60 0B 01 95 74 1B EA D0 FF CC 62 5B 78 64 18 79 8E 14 FD 24 7A 36 5A 09 91 8F 3B F5 C6 55 AC BE DA AD 15 D9 CC 3A 08 76 AB F8 3F 45 F4 5A 26 5D 80 38 6C 02 27 95 8D F3 38 B1 DD 1B C7 5D 51 3C E1 1D 05 8E 2A 6C E8 17 D7 88 5B AE D4 F6 B7 7D A8 84 74 E1 4F 65 B3 DC 06 2D 07 21 AA 51 BF 93 11 C7 7D 1E 09 B3 CE A6 C1 83 60 50 A5 B8 F5 F4 11 A6 98 A0 F9 2B 2B 8D").getData()); // PublicKey publicKey = new PublicKey(Bytes.fromBase64("HggcAQABxAABxSSWfXW20wGsRn9khVZDtvcCtUqP/scN3oVPU3r0152Fu62pfx9Mjc1cmQnRYSkeZzWA50RYQTU3FlXC5iIN7w+Lm6TGPQxWe+uYGMgKLCbAmyMXPWupvzeB5SEMtylQ5ml12iwFQkamqOiFE2KWMYz/UGhW87/ELPckmpoanZUa8OGCACUfFGALAZV0G+rQ/8xiW3hkGHmOFP0kejZaCZGPO/XGVay+2q0V2cw6CHar+D9F9FomXYA4bAInlY3zOLHdG8ddUTzhHQWOKmzoF9eIW67U9rd9qIR04U9ls9wGLQchqlG/kxHHfR4Js86mwYNgUKW49fQRppig+SsrjQ==").getData()); // System.out.println("transactionUnitsIssuerKey address: " + publicKey.getShortAddress()); // System.out.println("transactionUnitsIssuerKey base64: " + publicKey.packToBase64String()); }
@Test public void registerSimpleContract_getStateOnly() throws Exception { Set<PrivateKey> stepaPrivateKeys = new HashSet<>(); Set<PublicKey> stepaPublicKeys = new HashSet<>(); stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"))); for (PrivateKey pk : stepaPrivateKeys) { stepaPublicKeys.add(pk.getPublicKey()); } Contract stepaCoins = Contract.fromDslFile(ROOT_PATH + "stepaCoins.yml"); stepaCoins.addSignerKey(stepaPrivateKeys.iterator().next()); stepaCoins.seal(); ItemResult itemResult = nodeClient.getState(stepaCoins.getId()); System.out.println("nodeClient.getState(stepaCoins): " + itemResult.state); assertEquals(ItemState.APPROVED, itemResult.state); }
@Test public void registerSimpleContract() throws Exception { Set<PrivateKey> stepaPrivateKeys = new HashSet<>(); Set<PublicKey> stepaPublicKeys = new HashSet<>(); stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"))); for (PrivateKey pk : stepaPrivateKeys) { stepaPublicKeys.add(pk.getPublicKey()); } Contract stepaCoins = Contract.fromDslFile(ROOT_PATH + "stepaCoins.yml"); stepaCoins.addSignerKey(stepaPrivateKeys.iterator().next()); stepaCoins.seal(); System.out.println("nodeClient.register(stepaCoins)..."); //ItemResult itemResult = nodeClient.register(stepaCoins.getLastSealedBinary(), 5000); ItemResult itemResult = nodeClient.register(stepaCoins.getPackedTransaction(), 5000); System.out.println("nodeClient.register(stepaCoins)... done! itemResult: " + itemResult.state); itemResult = nodeClient.getState(stepaCoins.getId()); System.out.println("nodeClient.getState(stepaCoins): " + itemResult.state); assertEquals(ItemState.APPROVED, itemResult.state); }
@Test public void registerSimpleContractWhite() throws Exception { Contract whiteContract = new Contract(TestKeys.privateKey(0)); whiteContract.seal(); System.out.println("whiteClient.register(whiteContract)..."); ItemResult itemResult = whiteClient.register(whiteContract.getPackedTransaction(), 5000); System.out.println("whiteClient.register(whiteContract)... done! itemResult: " + itemResult.state); itemResult = whiteClient.getState(whiteContract.getId()); System.out.println("whiteClient.getState(whiteContract): " + itemResult.state); assertEquals(ItemState.APPROVED, itemResult.state); }
@Test public void checkPaymentContract() throws Exception { // to register manually, execute from deploy project: // bin/sql_all pro "insert into ledger(hash,state,created_at, expires_at, locked_by_id) values(decode('9186C0A9E9471E4559E74B5DAC3DBBB8445807DF80CAE4CE06FDB6588FAEBA1CE004AD378BEF3C445DECF3375E3CA5FD16227DBE5831A21207BB1BD21C85F30D0CED014E152F77E62082E0442FBD9FD2458C20778F7501B5D425AF9984062E54','hex'),'4','1520977039','1552513039','0');" // to erase all ledgers, execute: // bin/sql_all pro "truncate table ledger" // (after erasing ledgers, items still stay in cache -> need to restart (or redeploy) nodes) Contract contract = paymentContract; contract.check(); System.out.println("uno bin: " + Base64.encodeString(contract.getPackedTransaction())); System.out.println("uno hashId: " + Bytes.toHex(contract.getId().getDigest()).replace(" ", "")); System.out.println("approved ord: " + ItemState.APPROVED.ordinal()); System.out.println("getCreatedAt: " + StateRecord.unixTime(contract.getCreatedAt())); System.out.println("getExpiresAt: " + StateRecord.unixTime(contract.getExpiresAt())); ItemResult itemResult = normalClient.getState(contract.getId()); System.out.println("getState... done! itemResult: " + itemResult.state); }
Thread.sleep(waitPeriod); millisToWait -= waitPeriod; ir = testSpace.clients.get(testSpace.clients.size()-1).getState(contractMoney.getId()); if (ir.state == ItemState.APPROVED) break;
@Test public void registerSimpleContractWhite() throws Exception { // Contract whiteContract = new Contract(); // whiteContract.setIssuerKeys(TestKeys.privateKey(0)); // whiteContract.setOwnerKeys(TestKeys.privateKey(0)); // whiteContract.setCreatorKeys(TestKeys.privateKey(0)); // whiteContract.addSignerKey(TestKeys.privateKey(0)); // whiteContract.seal(); Contract whiteContract = new Contract(TestKeys.privateKey(0)); whiteContract.seal(); System.out.println("nodeClient.register(whiteContract)..."); //ItemResult itemResult = nodeClient.register(whiteContract.getLastSealedBinary(), 5000); ItemResult itemResult = nodeClient.register(whiteContract.getPackedTransaction(), 5000); System.out.println("nodeClient.register(whiteContract)... done! itemResult: " + itemResult.state); itemResult = nodeClient.getState(whiteContract.getId()); System.out.println("nodeClient.getState(whiteContract): " + itemResult.state); assertEquals(ItemState.APPROVED, itemResult.state); }
@Ignore @Test public void registerFromFile() throws Exception { TestSpace testSpace = prepareTestSpace(TestKeys.privateKey(0)); testSpace.nodes.forEach(m -> m.config.setIsFreeRegistrationsAllowedFromYaml(true)); Path path = Paths.get("/tmp/not3.unicon"); byte[] testTransactionPackBytes = Files.readAllBytes(path); Contract contract = Contract.fromPackedTransaction(testTransactionPackBytes); System.out.println("======================"); System.out.println("check(): " + contract.check()); System.out.println("------- errors -------"); contract.traceErrors(); int i = 0; for (Approvable a : contract.getNewItems()) { Contract nc = (Contract) a; System.out.println("------- errors n"+i+" ----"); System.out.println(" check: " + nc.check()); nc.traceErrors(); ++i; } System.out.println("======================"); System.out.println("hashId: " + contract.getId().toBase64String()); testSpace.node.setVerboseLevel(DatagramAdapter.VerboseLevel.BASE); ItemResult itemResult = testSpace.client.register(testTransactionPackBytes, 5000); ItemResult itemResult2 = testSpace.client.getState(contract.getId()); System.out.println("itemResult: " + itemResult); System.out.println("itemResult2: " + itemResult2); testSpace.nodes.forEach(m -> m.shutdown()); }
@Ignore @Test public void registerSimpleContractWithPayment() throws Exception { Contract contractToRegister = new Contract(TestKeys.privateKey(10)); contractToRegister.seal(); ItemResult itemResult = normalClient.register(contractToRegister.getPackedTransaction(), 5000); System.out.println("register... done! itemResult: " + itemResult.state); assertEquals(ItemState.UNDEFINED, itemResult.state); Parcel parcel = ContractsService.createParcel(contractToRegister, paymentContract, 1, Stream.of(paymentContractPrivKey).collect(Collectors.toSet()), true); normalClient.registerParcelWithState(parcel.pack(), 5000); itemResult = normalClient.getState(parcel.getPaymentContract().getId()); if (itemResult.state == ItemState.APPROVED) paymentContract = parcel.getPaymentContract(); System.out.println("registerParcel... done!"); System.out.println("parcel.paymentContract.itemResult: " + itemResult); assertEquals(ItemState.APPROVED, itemResult.state); itemResult = normalClient.getState(contractToRegister.getId()); System.out.println("contractToRegister.itemResult: " + itemResult); assertEquals(ItemState.APPROVED, itemResult.state); }
@Ignore @Test public void registerSeveralSimpleContractWithPayment() throws Exception { for (int i = 0; i < 20; ++i) { System.out.println("\ni = " + i); Contract contractToRegister = new Contract(TestKeys.privateKey(10)); contractToRegister.seal(); ItemResult itemResult = normalClient.register(contractToRegister.getPackedTransaction(), 5000); System.out.println("register... done! itemResult: " + itemResult.state); assertEquals(ItemState.UNDEFINED, itemResult.state); Parcel parcel = ContractsService.createParcel(contractToRegister, paymentContract, 1, Stream.of(paymentContractPrivKey).collect(Collectors.toSet()), true); normalClient.registerParcelWithState(parcel.pack(), 5000); itemResult = normalClient.getState(parcel.getPaymentContract().getId()); if (itemResult.state == ItemState.APPROVED) paymentContract = parcel.getPaymentContract(); System.out.println("registerParcel... done!"); System.out.println("parcel.paymentContract.itemResult: " + itemResult); assertEquals(ItemState.APPROVED, itemResult.state); itemResult = normalClient.getState(contractToRegister.getId()); System.out.println("contractToRegister.itemResult: " + itemResult); assertEquals(ItemState.APPROVED, itemResult.state); } }
@Test public void testRevocationContractsApi() throws Exception { List<Main> mm = new ArrayList<>(); for (int i = 0; i < 4; i++) mm.add(createMain("node" + (i + 1), false)); Main main = mm.get(0); main.config.setIsFreeRegistrationsAllowedFromYaml(true); Client client = new Client(TestKeys.privateKey(20), main.myInfo, null); Set<PrivateKey> issuerPrivateKeys = new HashSet<>(Arrays.asList(TestKeys.privateKey(1))); Set<PublicKey> ownerPublicKeys = new HashSet<>(Arrays.asList(TestKeys.publicKey(2))); Contract sourceContract = ContractsService.createShareContract(issuerPrivateKeys, ownerPublicKeys, new BigDecimal("100")); sourceContract.check(); sourceContract.traceErrors(); ItemResult itemResult = client.register(sourceContract.getPackedTransaction(), 5000); System.out.println("sourceContract : " + itemResult); assertEquals(ItemState.APPROVED, client.getState(sourceContract.getId()).state); Contract revokeContract = ContractsService.createRevocation(sourceContract, TestKeys.privateKey(1)); revokeContract.check(); revokeContract.traceErrors(); itemResult = client.register(revokeContract.getPackedTransaction(), 5000); System.out.println("revokeContract : " + itemResult); assertEquals(ItemState.APPROVED, client.getState(revokeContract.getId()).state); assertEquals(ItemState.REVOKED, client.getState(sourceContract.getId()).state); mm.forEach(x -> x.shutdown()); }
@Test public void paymentTest1() throws Exception { List<Main> mm = new ArrayList<>(); for (int i = 0; i < 4; i++) mm.add(createMain("node" + (i + 1), false)); Main main = mm.get(0); main.config.setIsFreeRegistrationsAllowedFromYaml(true); Client client = new Client(TestKeys.privateKey(20), main.myInfo, null); Contract simpleContract = new Contract(TestKeys.privateKey(1)); simpleContract.seal(); Contract stepaU = InnerContractsService.createFreshU(100000000, new HashSet<>(Arrays.asList(TestKeys.publicKey(1)))); ItemResult itemResult = client.register(stepaU.getPackedTransaction(), 5000); System.out.println("stepaU itemResult: " + itemResult); assertEquals(ItemState.APPROVED, itemResult.state); main.config.setIsFreeRegistrationsAllowedFromYaml(false); Parcel parcel = ContractsService.createParcel(simpleContract, stepaU, 1, new HashSet<>(Arrays.asList(TestKeys.privateKey(1))), false); client.registerParcelWithState(parcel.pack(), 5000); assertEquals(ItemState.APPROVED, client.getState(simpleContract.getId()).state); mm.forEach(x -> x.shutdown()); } protected static final String ROOT_PATH = "./src/test_contracts/";
private synchronized void waitAndCheckState(Parcel parcel, ItemState waitState) throws Exception { int attemps = 30; ItemResult itemResult; do { itemResult = normalClient.getState(parcel.getPaymentContract().getId()); if(!itemResult.state.isPending()) break; attemps--; if(attemps <= 0) fail("timeout1, parcel " + parcel.getId() + " " + parcel.getPaymentContract().getId() + " " + parcel.getPayloadContract().getId()); Thread.sleep(500); } while(true); assertEquals(ItemState.APPROVED, itemResult.state); attemps = 30; do { itemResult = normalClient.getState(parcel.getPayloadContract().getId()); if(!itemResult.state.isPending()) break; attemps--; if(attemps <= 0) fail("timeout2, parcel " + parcel.getId() + " " + parcel.getPaymentContract().getId() + " " + parcel.getPayloadContract().getId()); Thread.sleep(500); } while(true); assertEquals(waitState, itemResult.state); }
ir = testSpace.client.getState(c.getId());