private void checkForSetUnlimit(Contract contract) { // check unlimit contract if (!contract.isUnlimitKeyContract(config)) return; // get key for setting unlimited requests PublicKey key; try { byte[] packedKey = contract.getTransactional().getData().getBinary("unlimited_key"); if (packedKey == null) return; key = new PublicKey(packedKey); } catch (Exception e) { return; } // setting unlimited requests for a key keyRequests.remove(key); keysUnlimited.remove(key); keysUnlimited.put(key, ZonedDateTime.now().plus(config.getUnlimitPeriod())); }
contractHashId.put(c.getTransactional().getId(), c.getId()); if (c.getTransactional() != null && c.getTransactional().getReferences() != null) { for (Reference rm : c.getTransactional().getReferences()) { rm.contract_id = contractHashId.get(rm.transactional_id);
twoSignContract.getTransactional().setId(HashId.createRandom().toBase64String()); reference.transactional_id = twoSignContract.getTransactional().getId(); reference.type = Reference.TYPE_TRANSACTIONAL; reference.required = true; reference.signed_by.add(creatorFrom); reference.signed_by.add(ownerTo); twoSignContract.getTransactional().addReference(reference);
payment.getTransactional().setId(HashId.createRandom().toBase64String());
/** * 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; } }
consent.addPermission(new ChangeOwnerPermission(ownerLink)); consent.createTransactionalSection(); consent.getTransactional().setId(HashId.createRandom().toBase64String()); consent.seal(); reference.setName("consent_"+consent.getId()); reference.type = Reference.TYPE_TRANSACTIONAL; reference.transactional_id = consent.getTransactional().getId(); reference.signed_by.add(consent.getIssuer()); if(source.getTransactional() == null) source.createTransactionalSection();
System.out.println(newDelorean.getTransactional().getId()); System.out.println(newLamborghini.getTransactional().getId()); System.out.println(newDelorean.getTransactional().getReferences().get(0).transactional_id); System.out.println(newLamborghini.getTransactional().getReferences().get(0).transactional_id); newDelorean.getTransactional().setId(""); newLamborghini.getTransactional().setId(""); newDelorean.getTransactional().getReferences().get(0).transactional_id = ""; newLamborghini.getTransactional().getReferences().get(0).transactional_id = ""; newDelorean.seal(); newLamborghini.seal();
System.out.println(newDelorean.getTransactional().getId()); System.out.println(newLamborghini.getTransactional().getId()); System.out.println(newDelorean.getTransactional().getReferences().get(0).transactional_id); System.out.println(newLamborghini.getTransactional().getReferences().get(0).transactional_id); newDelorean.getTransactional().setId(null); newLamborghini.getTransactional().setId(null); newDelorean.getTransactional().getReferences().get(0).transactional_id = null; newLamborghini.getTransactional().getReferences().get(0).transactional_id = null; newDelorean.seal(); newLamborghini.seal();
if(swapContract.getNew().get(0).getParent().equals(lamborghini.getId())) iHack = 0; swapContract.getNew().get(iHack).getTransactional().getReferences().get(0).contract_id = HashId.createRandom(); swapContract.getNew().get(iHack).seal(); swapContract.getNew().get(iHack).addSignatureToSeal(stepaPrivateKeys); System.out.println(newDelorean.getTransactional().getId()); System.out.println(newLamborghini.getTransactional().getId()); System.out.println(newDelorean.getReferences().values().iterator().next().transactional_id); System.out.println(newLamborghini.getReferences().values().iterator().next().transactional_id); System.out.println(newDelorean.getTransactional().getReferences().get(0)); System.out.println(newLamborghini.getTransactional().getReferences().get(0)); System.out.println(swapContract.getNew().get(0).getTransactional().getReferences().get(0)); System.out.println(swapContract.getNew().get(1).getTransactional().getReferences().get(0));
if(c.getTransactional() != null && c.getTransactional().getReferences() != null) { for (Reference rm : c.getTransactional().getReferences()) { rm.contract_id = contractHashId;
Contract second = swapContract.getNew().get(1); first.getTransactional().getReferences().get(0).setConditions(firstLamborghini ? conditions2 : conditions1); first.seal(); second.getTransactional().getReferences().get(0).setConditions(firstLamborghini ? conditions1 : conditions2); second.seal(); swapContract.seal();
Contract second = swapContract.getNew().get(1); first.getTransactional().getReferences().get(0).setConditions(firstLamborghini ? conditions2 : conditions1); first.seal(); second.getTransactional().getReferences().get(0).setConditions(firstLamborghini ? conditions1 : conditions2); second.seal(); swapContract.seal();
byte[] packedKey = unlimitContract.getTransactional().getData().getBinary("unlimited_key"); PublicKey key = new PublicKey(packedKey); assertTrue(unlimitContract.isOk()); unlimitContract.getTransactional().getData().set("unlimited_key", "badkeybadkeybadkeybadkey"); unlimitContract.seal();
@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); }
newDelorean.getTransactional().setId(HashId.createRandom().toBase64String()); newDelorean.seal(); ContractsService.signPresentedSwap(swapContract, stepaPrivateKeys);
newLamborghini.getTransactional().setId(HashId.createRandom().toBase64String()); newLamborghini.seal();
parcel.getPaymentContract().getTransactional().setId(HashId.createRandom().toBase64String()); parcel.getPaymentContract().getTransactional().getData().set("var", 1);
contract.getTransactional().setId(HashId.createRandom().toBase64String());