@Override public void run() { ItemResult r = node.checkItem(parcel.getPayloadContract().getId()); System.out.println("Complex contract state: " + r.state); if(r.state == ItemState.DECLINED) ae.fire(); } }, 0, 500);
/** * Save specified parcel to file. * * @param parcel - parcel to save. * @param fileName - name of file to save to. * */ public static boolean saveParcel(Parcel parcel, String fileName) throws IOException { if (fileName == null) { fileName = "Universa_" + DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss").format(parcel.getPayloadContract().getCreatedAt()) + ".uniparcel"; } byte[] data = parcel.pack(); String newFileName = FileTool.writeFileContentsWithRenaming(fileName, data); report("Parcel is saved to: " + newFileName); report("Parcel size: " + data.length); try { if (parcel.getPaymentContract().check() && parcel.getPayloadContract().check()) { report("Parcel has no errors"); } else { addErrors(parcel.getPaymentContract().getErrors()); addErrors(parcel.getPayloadContract().getErrors()); } } catch (Quantiser.QuantiserException e) { addError("QUANTIZER_COST_LIMIT", parcel.toString(), e.getMessage()); } return (newFileName!=null); }
@Override public void run() { ItemResult r = node.checkItem(parcel.getPayloadContract().getId()); System.out.println("Complex contract state: " + r.state); if(r.state == ItemState.DECLINED) ae.fire(); } }, 0, 500);
saveContractSubitems(source,"_payload", ((Parcel) x).getPayloadContract()); saveContract(((Parcel) x).getPaymentContract(),new FilenameTool(source).addSuffixToBase("_payment").setExtension("unicon").toString()); saveContract(((Parcel) x).getPayloadContract(),new FilenameTool(source).addSuffixToBase("_payload").setExtension("unicon").toString()); } else { Contract contract = loadContract(source);
/** * Register a specified parcel. * @param parcel must be ready for register * @param waitTime wait time for responce. * @return ItemResult for parcel's payload * @throws IOException */ public static ItemResult registerParcel(Parcel parcel, int waitTime) throws IOException { getClientNetwork().registerParcel(parcel.pack(), waitTime); ItemResult r = getClientNetwork().check(parcel.getPayloadContract().getId()); report("paid contract " + parcel.getPayloadContract().getId() + " submitted with result: " + r.toString()); report("payment became " + parcel.getPaymentContract().getId()); report("payment rev 1 " + parcel.getPaymentContract().getRevoking().get(0).getId()); return r; }
if(parcel != null) { payment = parcel.getPaymentContract(); payload = parcel.getPayloadContract();
protected synchronized Parcel registerWithNewParcel(Contract c) throws Exception { Set<PrivateKey> stepaPrivateKeys = new HashSet<>(); stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"))); Parcel parcel = createParcelWithClassU(c, stepaPrivateKeys); System.out.println("register parcel: " + parcel.getId() + " " + parcel.getPaymentContract().getId() + " " + parcel.getPayloadContract().getId()); node.registerParcel(parcel); synchronized (uContractLock) { uContract = parcel.getPaymentContract(); } return parcel; }
protected synchronized Parcel registerWithNewParcel(Contract c) throws Exception { Set<PrivateKey> stepaPrivateKeys = new HashSet<>(); stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"))); Parcel parcel = createParcelWithClassU(c, stepaPrivateKeys); System.out.println("register parcel: " + parcel.getId() + " " + parcel.getPaymentContract().getId() + " " + parcel.getPayloadContract().getId()); normalClient.registerParcelWithState(parcel.pack(),8000); synchronized (uContractLock) { uContract = parcel.getPaymentContract(); } return parcel; }
private synchronized void waitAndCheckState(Parcel parcel, ItemState waitState) throws Exception { try { System.out.println("wait parcel: " + parcel.getId() + " " + parcel.getPaymentContract().getId() + " " + parcel.getPayloadContract().getId()); node.waitParcel(parcel.getId(), 30000); System.out.println("wait payment: " + parcel.getId() + " " + parcel.getPaymentContract().getId() + " " + parcel.getPayloadContract().getId()); ItemResult itemResult = node.waitItem(parcel.getPaymentContract().getId(), 8000); assertEquals(ItemState.APPROVED, itemResult.state); System.out.println("wait payload with state: " + waitState + " " + parcel.getId() + " " + parcel.getPaymentContract().getId() + " " + parcel.getPayloadContract().getId()); itemResult = node.waitItem(parcel.getPayloadContract().getId(), 8000); parcel.getPayloadContract().traceErrors(); assertEquals(waitState, itemResult.state); } catch (TimeoutException e) { if (parcel != null) { fail("timeout, " + node + " parcel " + parcel.getId() + " " + parcel.getPaymentContract().getId() + " " + parcel.getPayloadContract().getId()); } else { fail("timeout, " + node); } } }
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); }
@Test(timeout = 90000) public void transactionalValidUntil_good() 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"); if (stepaCoins.getTransactional() == null) stepaCoins.createTransactionalSection(); stepaCoins.getTransactional().setValidUntil(ZonedDateTime.now().plusSeconds(Config.validUntilTailTime.getSeconds()*2).toEpochSecond()); stepaCoins.addSignerKey(stepaPrivateKeys.iterator().next()); stepaCoins.seal(); stepaCoins.check(); stepaCoins.traceErrors(); Parcel parcel = createParcelWithFreshU(stepaCoins, stepaPrivateKeys); assertTrue(parcel.getPayloadContract().isOk()); node.registerParcel(parcel); node.waitParcel(parcel.getId(), 8000); assertEquals(ItemState.APPROVED, node.waitItem(parcel.getPayment().getContract().getId(), 8000).state); assertEquals(ItemState.APPROVED, node.waitItem(parcel.getPayload().getContract().getId(), 8000).state); }
@Test(timeout = 90000) public void transactionalValidUntil_timeEnds() 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"); if (stepaCoins.getTransactional() == null) stepaCoins.createTransactionalSection(); stepaCoins.getTransactional().setValidUntil(ZonedDateTime.now().plusSeconds(Config.validUntilTailTime.getSeconds()/2).toEpochSecond()); stepaCoins.addSignerKey(stepaPrivateKeys.iterator().next()); stepaCoins.seal(); stepaCoins.check(); stepaCoins.traceErrors(); Parcel parcel = createParcelWithFreshU(stepaCoins, stepaPrivateKeys); assertFalse(parcel.getPayloadContract().isOk()); node.registerParcel(parcel); node.waitParcel(parcel.getId(), 8000); assertEquals(ItemState.APPROVED, node.waitItem(parcel.getPayment().getContract().getId(), 8000).state); assertEquals(ItemState.DECLINED, node.waitItem(parcel.getPayload().getContract().getId(), 8000).state); }
uContract = payingParcel.getPayloadContract().getNew().get(0);
@Test(timeout = 90000) public void transactionalValidUntil_timeIsOver() 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"); if (stepaCoins.getTransactional() == null) stepaCoins.createTransactionalSection(); stepaCoins.getTransactional().setValidUntil(ZonedDateTime.now().plusMonths(-1).toEpochSecond()); stepaCoins.addSignerKey(stepaPrivateKeys.iterator().next()); stepaCoins.seal(); stepaCoins.check(); stepaCoins.traceErrors(); Parcel parcel = createParcelWithFreshU(stepaCoins, stepaPrivateKeys); assertFalse(parcel.getPayloadContract().isOk()); node.registerParcel(parcel); node.waitParcel(parcel.getId(), 8000); assertEquals(ItemState.APPROVED, node.waitItem(parcel.getPayment().getContract().getId(), 8000).state); assertEquals(ItemState.DECLINED, node.waitItem(parcel.getPayload().getContract().getId(), 8000).state); }
private void checkCreateParcel(String contract_file_payload, String contract_file_payment) throws Exception { final String ROOT_PATH = "./src/test_contracts/contractService/"; PrivateKey privateKey = TestKeys.privateKey(3); Contract payload = Contract.fromDslFile(ROOT_PATH + contract_file_payload); payload.addSignerKey(privateKey); payload.seal(); Contract payment = Contract.fromDslFile(ROOT_PATH + contract_file_payment); payment.addSignerKey(privateKey); payment.seal(); Set<PrivateKey> PrivateKeys = new HashSet<>(); PrivateKeys.add(privateKey); Parcel parcel = ContractsService.createParcel(payload, payment, 20, PrivateKeys); assertEquals(parcel.getPayloadContract().getState().getBranchId(), payload.getState().getBranchId()); assertEquals(parcel.getPaymentContract().getState().getBranchId(), payment.getState().getBranchId()); assertEquals(parcel.getPayloadContract().getStateData(), payload.getStateData()); assertEquals(parcel.getPaymentContract().getDefinition().getData(), payment.getDefinition().getData()); System.out.println("OK"); }
private void checkCreateParcelFotTestNet(String contract_file_payload, String contract_file_payment) throws Exception { final String ROOT_PATH = "./src/test_contracts/contractService/"; PrivateKey privateKey = TestKeys.privateKey(3); Set<PrivateKey> privateKeys = new HashSet<>(); privateKeys.add(privateKey); Set<PublicKey> publicKeys = new HashSet<>(); publicKeys.add(privateKey.getPublicKey()); Contract payload = Contract.fromDslFile(ROOT_PATH + contract_file_payload); payload.addSignerKey(privateKey); payload.seal(); Contract payment = InnerContractsService.createFreshU(100, publicKeys, true); Parcel parcel = ContractsService.createParcel(payload, payment, 20, privateKeys, true); assertEquals(parcel.getPayloadContract().getState().getBranchId(), payload.getState().getBranchId()); assertEquals(parcel.getPaymentContract().getState().getBranchId(), payment.getState().getBranchId()); assertEquals(parcel.getPayloadContract().getStateData(), payload.getStateData()); assertEquals(parcel.getPaymentContract().getDefinition().getData(), payment.getDefinition().getData()); assertEquals(100, parcel.getPaymentContract().getStateData().getIntOrThrow("transaction_units")); assertEquals(10000 - 20, parcel.getPaymentContract().getStateData().getIntOrThrow("test_transaction_units")); System.out.println("OK"); }
assertTrue(parcel.getPayloadContract().isOk()); System.out.println("Payload contract: " + parcel.getPayloadContract().getId() + " is U: " + parcel.getPayloadContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
@Test(timeout = 90000) public void declineParcelWithBadPayload() 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(); stepaCoins.check(); stepaCoins.traceErrors(); Parcel parcel = createParcelWithFreshU(stepaCoins, stepaPrivateKeys); assertTrue(parcel.getPaymentContract().isOk()); assertFalse(parcel.getPayloadContract().isOk()); node.registerParcel(parcel); // wait parcel node.waitParcel(parcel.getId(), 8000); // check payment and payload contracts assertEquals(ItemState.APPROVED, node.waitItem(parcel.getPayment().getContract().getId(), 8000).state); assertEquals(ItemState.DECLINED, node.waitItem(parcel.getPayload().getContract().getId(), 8000).state); }
assertTrue(parcel.getPayloadContract().isOk());
ItemResult itemResult = node.waitItem(parcel.getPayloadContract().getId(), 3000); if (ItemState.APPROVED != itemResult.state) fail("Wrong state on repetition " + i + ": " + itemResult + ", " + itemResult.errors +