/** * Get contract reference with given name * @param name name of the reference * @return found reference or null */ public Reference findReferenceByName(String name) { if (getReferences() == null) return null; return getReferences().get(name); }
public void removeReferencedItem(Contract removed) { for (Reference ref: getReferences().values()) ref.matchingItems.remove(removed); if (transactional != null && transactional.references != null) for (Reference ref: transactional.references) ref.matchingItems.remove(removed); if (definition != null && definition.references != null) for(Reference ref : definition.references) ref.matchingItems.remove(removed); if (state != null && state.references != null) for(Reference ref : state.references) ref.matchingItems.remove(removed); newItems.remove(removed); revokingItems.remove(removed); }
/** * Transfers payment contract to new owner on the result of escrow. * Use payment contract that was added to external escrow contract by * {@link ContractsService#addPaymentToEscrowContract(Contract, Contract, Collection, Collection, Collection)} or * was modified by {@link ContractsService#modifyPaymentForEscrowContract(Contract, Contract, Collection, Collection, Collection)}. * Executor can take the payment contract, if internal escrow contract are completed. * Customer can take the payment contract, if internal escrow contract are canceled. * For registration payment contract (returned by this method) need to add result internal escrow contract by * {@link TransactionPack#addReferencedItem(Contract)}. * * @param newOwnerKeys are private keys of new owner of payment * @param payment contract to take by new owner. Must be registered for creation new revision * * @return new revision of payment contract with new owner */ public static Contract takeEscrowPayment(Collection<PrivateKey> newOwnerKeys, Contract payment) { Contract revisionPayment = payment.createRevision(newOwnerKeys); // set new owner revisionPayment.setOwnerKeys(newOwnerKeys); // remove escrow references from Contract.references (from transactional section references removed automatically) revisionPayment.getReferences().remove("return_payment_to_customer"); revisionPayment.getReferences().remove("send_payment_to_executor"); revisionPayment.seal(); return revisionPayment; }
private boolean checkReferencedItems(Map<HashId, Contract> neighbourContracts, boolean roleRefsOnly) throws Quantiser.QuantiserException { validRoleReferences.clear(); if (getReferences().size() == 0) { for (final Reference rm : getReferences().values()) {
refContract2.check(); assertTrue(refContract1.getReferences().get("ref_cont").matchingItems.contains(refContract1)); assertTrue(refContract1.getReferences().get("ref_cont").matchingItems.contains(contract2)); assertFalse(refContract1.getReferences().get("ref_cont").matchingItems.contains(contract3)); assertFalse(refContract1.getReferences().get("ref_cont2").matchingItems.contains(refContract1)); assertFalse(refContract1.getReferences().get("ref_cont2").matchingItems.contains(contract2)); assertTrue(refContract1.getReferences().get("ref_cont2").matchingItems.contains(contract3)); assertTrue(refContract1.getReferences().get("ref_cont_inherit").matchingItems.contains(refContract1)); assertFalse(refContract1.getReferences().get("ref_cont_inherit").matchingItems.contains(contract2)); assertFalse(refContract1.getReferences().get("ref_cont_inherit").matchingItems.contains(contract3)); assertTrue(refContract2.getReferences().get("ref_cont3").matchingItems.contains(contract1)); assertTrue(refContract2.getReferences().get("ref_cont3").matchingItems.contains(contract2)); assertTrue(refContract2.getReferences().get("ref_cont3").matchingItems.contains(refContract2)); assertTrue(refContract2.getReferences().get("ref_cont4").matchingItems.contains(contract1)); assertFalse(refContract2.getReferences().get("ref_cont4").matchingItems.contains(contract2)); assertTrue(refContract2.getReferences().get("ref_cont4").matchingItems.contains(refContract2));
for (int i = 0; i < getReferences().size(); i++) { quantiser.addWorkCost(Quantiser.QuantiserProcesses.PRICE_CHECK_REFERENCED_VERSION);
Binder conditions = contract1.getReferences().get("ref_string").getConditions(); List<Object> condList = conditions.getList(all_of.name(), null); " MexOc3/kPEEdfjH/GcJU0Mw6DgoY8QgfaNwXcFbBUvf3TwZ5Mysf21OLHH13g8gzREm+h8c=\"==ref.definition.issuer"); condList.add("\"1:25\"==this.state.branchId"); contract1.getReferences().get("ref_string").setConditions(conditions); conditions = contract1.getReferences().get("ref_time").getConditions(); condList = conditions.getList(all_of.name(), null); contract1.getReferences().get("ref_time").setConditions(conditions); assertTrue(refContract.getReferences().get("ref_roles").matchingItems.contains(contract2)); System.out.println("Check integer conditions"); assertTrue(refContract.getReferences().get("ref_integer").matchingItems.contains(contract2)); System.out.println("Check float conditions"); assertTrue(refContract.getReferences().get("ref_float").matchingItems.contains(contract2)); System.out.println("Check string conditions"); assertTrue(refContract.getReferences().get("ref_string").matchingItems.contains(contract2)); System.out.println("Check boolean conditions"); assertTrue(refContract.getReferences().get("ref_boolean").matchingItems.contains(contract2)); System.out.println("Check inherited conditions"); assertTrue(refContract.getReferences().get("ref_inherited").matchingItems.contains(contract2)); System.out.println("Check time conditions"); assertTrue(refContract.getReferences().get("ref_time").matchingItems.contains(contract2)); System.out.println("Check ref_hashes conditions"); assertTrue(refContract.getReferences().get("ref_hashes").matchingItems.contains(contract2)); System.out.println("Check ref_bigdecimal conditions"); assertTrue(refContract.getReferences().get("ref_bigdecimal").matchingItems.contains(contract2));
c.traceErrors(); System.out.println("c " + " isok=" + c.isOk() + " new: " + c.getNew().size() + " rev: " + c.getRevoking().size() + " ref: " + c.getReferences().size() + " signs:" + c.getSealedByKeys().size() + " data:" + c.getStateData() + " id:" + c.getId()); Contract cNew1 = c.getNew().get(0); Contract cNew2 = c.getNew().get(1); System.out.println("cNew1 new: " + cNew1.getNew().size() + " rev: " + cNew1.getRevoking().size() + " ref: " + cNew1.getReferences().size() + " signs:" + cNew1.getSealedByKeys().size() + " data:" + cNew1.getStateData() + " id:" + cNew1.getId()); System.out.println("cNew2 new: " + cNew2.getNew().size() + " rev: " + cNew2.getRevoking().size() + " ref: " + cNew2.getReferences().size() + " signs:" + cNew2.getSealedByKeys().size() + " data:" + cNew2.getStateData() + " id:" + cNew2.getId()); Contract cRevoke1 = cNew1.getRevoking().get(0); Contract cRevoke2 = cNew2.getRevoking().get(0); System.out.println("cRevoke1 new: " + cRevoke1.getNew().size() + " rev: " + cRevoke1.getRevoking().size() + " ref: " + cRevoke1.getReferences().size() + " signs:" + cRevoke1.getSealedByKeys().size() + " data:" + cRevoke1.getStateData() + " id:" + cRevoke1.getId()); System.out.println("cRevoke2 new: " + cRevoke2.getNew().size() + " rev: " + cRevoke2.getRevoking().size() + " ref: " + cRevoke2.getReferences().size() + " signs:" + cRevoke2.getSealedByKeys().size() + " data:" + cRevoke2.getStateData() + " id:" + cRevoke2.getId()); System.out.println("cNew1_1 new: " + cNew1_1.getNew().size() + " rev: " + cNew1_1.getRevoking().size() + " ref: " + cNew1_1.getReferences().size() + " signs:" + cNew1_1.getSealedByKeys().size() + " data:" + cNew1_1.getStateData() + " id:" + cNew1_1.getId());
System.out.println(newDelorean.getReferences().values().iterator().next().transactional_id); System.out.println(newLamborghini.getReferences().values().iterator().next().transactional_id);
remRefContract2.check(); assertTrue(remRefContract1.getReferences().get("certification_contract_def").matchingItems.contains(contractCertificate)); assertTrue(remRefContract1.getReferences().get("certification_contract_state").matchingItems.contains(contractCertificate)); assertFalse(remRefContract1.getReferences().get("certification_contract_def").matchingItems.contains(contractCertificate)); assertFalse(remRefContract1.getReferences().get("certification_contract_state").matchingItems.contains(contractCertificate)); assertTrue(remRefContract2.getReferences().get("certification_contract_def").matchingItems.contains(contractCertificate)); assertTrue(remRefContract2.getReferences().get("certification_contract_state").matchingItems.contains(contractCertificate)); assertFalse(remRefContract2.getReferences().get("certification_contract_def").matchingItems.contains(contractCertificate)); assertFalse(remRefContract2.getReferences().get("certification_contract_state").matchingItems.contains(contractCertificate));
Binder conditions = refContract.getReferences().get("test_ref4").getConditions(); List<Object> condList = conditions.getList(all_of.name(), null); condList.add("\"string\"==this.state.data.string4"); refContract.getReferences().get("test_ref4").setConditions(conditions); conditions = refContract.getReferences().get("test_ref3").getConditions(); condList = conditions.getList(all_of.name(), null); assertEquals(parsed.getIntOrThrow("operator"), 3); conditions = refContract.getReferences().get("test_ref4").getConditions(); condList = conditions.getList(all_of.name(), null);
newListConditions.add("inherits this.definition.references.bank_certificate"); llcProperty2.getState().getReferences().remove(llcProperty2.getReferences().get("account_in_bank_certificate")); llcProperty2.getReferences().remove("account_in_bank_certificate");
llcProperty.getReferences().get("bank_certificate").matchingItems.clear(); llcProperty.getDefinition().getReferences().get(0).matchingItems.clear();
ref.type = Reference.TYPE_EXISTING_DEFINITION; ref.addMatchingItem(new Contract()); c3.getRevoking().get(0).getReferences().put(ref.name, ref);
llcProperty3.getState().getReferences().remove(llcProperty3.getReferences().get("temp_certification_contract")); llcProperty3.getReferences().remove("temp_certification_contract");
/** * Check serialization and deserialization contract with references * @throws Exception */ @Test public void checkReferenceSerialization() throws Exception { Contract contract = Contract.fromDslFile(rootPath + "simple_root_contract_with_references.yml"); assertEquals(contract.findReferenceByName("ref_cont").getComment(), "ref_comment"); contract.findReferenceByName("ref_cont3").setComment("ref_comment3"); contract.seal(); Binder b = BossBiMapper.serialize(contract); Contract desContract = DefaultBiMapper.deserialize(b); assertEquals(desContract.findReferenceByName("ref_cont").getComment(), "ref_comment"); assertEquals(desContract.findReferenceByName("ref_cont3").getComment(), "ref_comment3"); assertNull(desContract.findReferenceByName("ref_cont2").getComment()); for (Reference ref: contract.getReferences().values()) { Reference desRef = desContract.findReferenceByName(ref.getName()); assertTrue(desRef != null); assertEquals(ref.getConditions(), desRef.getConditions()); } }
for (Reference ref: originContract.getReferences().values()) { Reference desRef = checkingContract.findReferenceByName(ref.getName()); assertTrue(desRef != null);