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())); }
default: if (subname.startsWith("data.")) transactional.getData().set(subname.substring(5), value.getOrThrow("data")); else if (subname.startsWith("references.")) { Reference ref = value.getOrThrow("data");
parcel.getPaymentContract().getTransactional().getData().set("var", 1);
/** * 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; } }
/** * 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(); }