/** * Binder to hold any data client might want to keep per one transaction. * @return data {@link Binder} from transactional section */ public Binder getTransactionalData() { if (transactional == null) createTransactionalSection(); return transactional.getData(); }
executor.addRequiredReference(executorRef, Role.RequiredMode.ALL_OF); payment.createTransactionalSection(); payment.getTransactional().setId(HashId.createRandom().toBase64String());
consent.addPermission(new RevokePermission(ownerLink)); consent.addPermission(new ChangeOwnerPermission(ownerLink)); consent.createTransactionalSection(); consent.getTransactional().setId(HashId.createRandom().toBase64String()); consent.seal(); source.createTransactionalSection();
twoSignContract.createTransactionalSection(); twoSignContract.getTransactional().setId(HashId.createRandom().toBase64String());
nc = c; nc.createTransactionalSection(); nc.getTransactional().setId(HashId.createRandom().toBase64String()); newContracts1.add(nc); nc = c; nc.createTransactionalSection(); nc.getTransactional().setId(HashId.createRandom().toBase64String()); newContracts2.add(nc);
/** * Creates special contract to set unlimited requests for the {@link PublicKey}. * The base limit is 30 per minute (excludes registration requests). * Unlimited requests for 5 minutes cost 5 U. * Register result contract by {@link com.icodici.universa.node2.network.Client#register(byte[])}. * * @param key is key for setting unlimited requests * @param payment is approved contract with "U" belongs to you * @param amount is number of "U" you want to spend to set unlimited requests for key; get by {@link Config#getRateLimitDisablingPayment()} * @param keys is own private keys, which are set as owner of payment contract * @return contract for setting unlimited requests to key */ public synchronized static Contract createRateLimitDisablingContract(PublicKey key, Contract payment, int amount, Set<PrivateKey> keys) { Contract unlimitContract = payment.createRevision(keys); unlimitContract.createTransactionalSection(); unlimitContract.getTransactional().setId(HashId.createRandom().toBase64String()); unlimitContract.getTransactional().getData().set("unlimited_key", key.pack()); unlimitContract.getStateData().set("transaction_units", payment.getStateData().getIntOrThrow("transaction_units") - amount); unlimitContract.seal(); return unlimitContract; } }
@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); }
@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); }
@Test public void checkTransactional() throws Exception { PrivateKey manufacturePrivateKey = new PrivateKey(Do.read(rootPath + "_xer0yfe2nn1xthc.private.unikey")); Contract delorean = Contract.fromDslFile(rootPath + "DeLoreanOwnership.yml"); delorean.addSignerKey(manufacturePrivateKey); delorean.seal(); delorean.traceErrors(); Contract.Transactional transactional = delorean.createTransactionalSection(); Reference reference = new Reference(); // reference.setName("transactional_example"); transactional.addReference(reference); Contract deloreanTransactional = delorean.createRevision(transactional); deloreanTransactional.addSignerKey(manufacturePrivateKey); deloreanTransactional.seal(); deloreanTransactional.traceErrors(); }
Contract.Transactional transactional1 = newContract1.createTransactionalSection(); transactional1.setId(HashId.createRandom().toBase64String()); Contract.Transactional transactional2 = newContract2.createTransactionalSection(); transactional2.setId(HashId.createRandom().toBase64String());
parcel.getPaymentContract().createTransactionalSection(); parcel.getPaymentContract().getTransactional().setId(HashId.createRandom().toBase64String()); parcel.getPaymentContract().getTransactional().getData().set("var", 1);
contract.addSignerKey(key); contract.createTransactionalSection(); contract.getTransactional().setId(HashId.createRandom().toBase64String());