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(TransactionPack tp) throws Exception { Set<PrivateKey> stepaPrivateKeys = new HashSet<>(); stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"))); Contract tu = getApprovedUContract(); // stepaPrivateKeys - is also U keys Parcel parcel = ContractsService.createParcel(tp, tu, 150, stepaPrivateKeys); System.out.println("-------------"); node.registerParcel(parcel); synchronized (uContractLock) { uContract = parcel.getPaymentContract(); } return parcel; }
protected synchronized Contract checkPayment_preparePaymentContract(Set<PrivateKey> privateKeys) throws Exception { Contract stepaCoins = Contract.fromDslFile(ROOT_PATH + "stepaCoins.yml"); stepaCoins.addSignerKey(privateKeys.iterator().next()); stepaCoins.seal(); registerAndCheckApproved(stepaCoins); Parcel parcel = createParcelWithFreshU(stepaCoins, privateKeys); return parcel.getPaymentContract(); }
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; }
saveContractSubitems(source,"_payment", ((Parcel) x).getPaymentContract()); 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 {
protected synchronized Parcel registerWithNewParcel(TransactionPack tp) throws Exception { Set<PrivateKey> stepaPrivateKeys = new HashSet<>(); stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"))); Contract tu = getApprovedUContract(); // stepaPrivateKeys - is also U keys Parcel parcel = ContractsService.createParcel(tp, tu, 150, stepaPrivateKeys); System.out.println("-------------"); normalClient.registerParcelWithState(parcel.pack(),8000); synchronized (uContractLock) { uContract = parcel.getPaymentContract(); } return parcel; }
/** * 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); }
/** * 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; }
@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); } }
@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); }
@Test(timeout = 90000) public void declinePaymentAndPaymentWithRemovedPermissions() throws Exception { Set<PrivateKey> stepaPrivateKeys = new HashSet<>(); stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"))); Contract uContract = getApprovedUContract(); Contract modifiedU = uContract.createRevision(stepaPrivateKeys); modifiedU.getPermissions().remove("revoke"); modifiedU.seal(); // stepaPrivateKeys - is also U keys Parcel parcel = ContractsService.createParcel(modifiedU, uContract, 150, stepaPrivateKeys); System.out.println("-------------"); node.registerParcel(parcel); synchronized (uContractLock) { uContract = parcel.getPaymentContract(); } waitAndCheckState(parcel, ItemState.UNDEFINED); }
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); } } }
@Test(timeout = 90000) public void declinePaymentAndPaymentWithChangedData() throws Exception { Set<PrivateKey> stepaPrivateKeys = new HashSet<>(); stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"))); Contract uContract = getApprovedUContract(); Contract modifiedU = uContract.createRevision(stepaPrivateKeys); modifiedU.getStateData().set("transaction_units", modifiedU.getStateData().getIntOrThrow("transaction_units") - 1); modifiedU.seal(); // stepaPrivateKeys - is also U keys Parcel parcel = ContractsService.createParcel(modifiedU, uContract, 150, stepaPrivateKeys); System.out.println("-------------"); node.registerParcel(parcel); synchronized (uContractLock) { uContract = parcel.getPaymentContract(); } waitAndCheckState(parcel, ItemState.UNDEFINED); }
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); }
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"); }
@Test(timeout = 90000) public void payForParcelWithLastU() 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 paidContract = new Contract(stepaPrivateKeys.iterator().next()); paidContract.seal(); paidContract.check(); paidContract.traceErrors(); // create 1 U Contract stepaU = InnerContractsService.createFreshU(1, stepaPublicKeys, true); stepaU.check(); stepaU.traceErrors(); node.registerItem(stepaU); ItemResult itemResult = node.waitItem(stepaU.getId(), 18000); assertEquals(ItemState.APPROVED, itemResult.state); assertEquals(stepaU.getStateData().getIntOrThrow("transaction_units"), 1); assertEquals(stepaU.getStateData().getIntOrThrow("test_transaction_units"), 100); // pay 1 U Parcel parcel = ContractsService.createParcel(paidContract, stepaU, 1, stepaPrivateKeys, false); node.registerParcel(parcel); node.waitParcel(parcel.getId(), 8000); // check zero U registered assertEquals(ItemState.APPROVED, node.waitItem(paidContract.getId(), 8000).state); assertEquals(ItemState.APPROVED, node.waitItem(parcel.getPaymentContract().getId(), 8000).state); assertEquals(parcel.getPaymentContract().getStateData().getIntOrThrow("transaction_units"), 0); assertEquals(parcel.getPaymentContract().getStateData().getIntOrThrow("test_transaction_units"), 100); }
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"); }
parcel.getPayload().getContract().traceErrors(); assertTrue(parcel.getPaymentContract().isOk()); assertTrue(parcel.getPayloadContract().isOk()); System.out.println("Payment contract: " + parcel.getPaymentContract().getId() + " is U: " + parcel.getPaymentContract().isU(config.getUIssuerKeys(), config.getUIssuerName())); System.out.println("Payload contract: " + parcel.getPayloadContract().getId() + " is U: " + parcel.getPayloadContract().isU(config.getUIssuerKeys(), config.getUIssuerName()));
@Test(timeout = 90000) public void declinePaymentAndPaymentWithChangedData2() throws Exception { Set<PrivateKey> stepaPrivateKeys = new HashSet<>(); stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"))); Contract uContract = getApprovedUContract(); // stepaPrivateKeys - is also U keys Contract paymentDecreased = uContract.createRevision(stepaPrivateKeys); paymentDecreased.getStateData().set("transaction_units", uContract.getStateData().getIntOrThrow("transaction_units") - 5); paymentDecreased.seal(); Contract modifiedU = paymentDecreased.createRevision(stepaPrivateKeys); modifiedU.getStateData().set("transaction_units", modifiedU.getStateData().getIntOrThrow("transaction_units") - 1); modifiedU.seal(); Parcel parcel = new Parcel(modifiedU.getTransactionPack(), paymentDecreased.getTransactionPack()); System.out.println("-------------"); node.registerParcel(parcel); synchronized (uContractLock) { uContract = parcel.getPaymentContract(); } waitAndCheckState(parcel, ItemState.UNDEFINED); }
@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); }