public void checkAllContracts() { //final AtomicBoolean needToReload = new AtomicBoolean(false); endpoints.forEach((endpoint, env) -> { HashId slotId = env.getSlotId(); HashId originId = env.getCurrentContract().getOrigin(); byte[] contractBinFromSlot1 = slot1Requestor.queryContract(slotId, originId); if (contractBinFromSlot1 != null) { try { Contract contractFromSlot1 = Contract.fromPackedTransaction(contractBinFromSlot1); if (contractFromSlot1.getRevision() > env.getCurrentContract().getRevision()) { System.err.println("JSApiHttpServer warning: contract origin="+originId+" changed in slot1, endpoint: " + endpoint); env.updateThisEnvironmentByName(contractFromSlot1, execOptions); } } catch (IOException e) { System.err.println("JSApiHttpServer error: unable to unpack latest contract origin=" + originId + " from slot1, update it, endpoint: " + endpoint + ", err: " + e); } catch (Exception e) { System.err.println("JSApiHttpServer error while update JSApiEnvironment: " + e); e.printStackTrace(); } } HashId id = env.getCurrentContract().getId(); if (!contractChecker.isApproved(id)) { System.err.println("JSApiHttpServer warning: contract id="+id+" is not approved, disabled " + endpoint); endpoints.remove(endpoint); } }); }
return (T) getRole("creator"); case "revision": return (T) ((Integer) getRevision()); case "parent": return (T) getParent();
contract.getState().setParent(parent.getId()); contract.getState().setOrigin(parent.getOrigin()); contract.getState().setRevision(parent.getRevision()+1); contract.getDefinition().setExpiresAt(parent.getDefinition().getExpiresAt()); contract.getDefinition().setCreatedAt(parent.getDefinition().getCreatedAt());
for (byte[] bin : storedRevisions) { Contract c = Contract.fromPackedTransaction(bin); if (latestRevision < c.getRevision()) { latestRevision = c.getRevision(); latestContract = bin;
StandardCopyOption.ATOMIC_MOVE }; String uDest = new FilenameTool(uSource).addSuffixToBase("_rev" + u.getRevision()).toString(); uDest = FileTool.writeFileContentsWithRenaming(uDest, new byte[0]); if (uDest != null) {
}; String utnDest = new FilenameTool(utnPath).addSuffixToBase("_rev" + utnContract.getRevision()).toString(); utnDest = FileTool.writeFileContentsWithRenaming(utnDest, new byte[0]); if (utnDest != null) {
StandardCopyOption.ATOMIC_MOVE }; String uDest = new FilenameTool(uSource).addSuffixToBase("_rev" + u.getRevision()).toString(); uDest = FileTool.writeFileContentsWithRenaming(uDest, new byte[0]); if (uDest != null) {
StandardCopyOption.ATOMIC_MOVE }; String uDest = new FilenameTool(uSource).addSuffixToBase("_rev" + u.getRevision()).toString(); uDest = FileTool.writeFileContentsWithRenaming(uDest, new byte[0]); if (uDest != null) {
System.out.println("DeLorean revoked ownership contract revision " + delorean.getRevision() + " is " + deloreanResult + " by Network"); System.out.println("DeLorean revoked ownership was belongs to Marty: " + delorean.getOwner().isAllowedForKeys(martyPublicKeys)); assertEquals(ItemState.REVOKED, deloreanResult.state); System.out.println("Lamborghini revoked ownership contract revision " + lamborghini.getRevision() + " is " + lamborghiniResult + " by Network"); System.out.println("Lamborghini revoked ownership was belongs to Stepa: " + lamborghini.getOwner().isAllowedForKeys(stepaPublicKeys)); assertEquals(ItemState.REVOKED, lamborghiniResult.state); System.out.println("DeLorean ownership contract revision " + newDelorean.getRevision() + " is " + deloreanResult + " by Network"); System.out.println("DeLorean ownership is now belongs to Stepa: " + newDelorean.getOwner().isAllowedForKeys(stepaPublicKeys)); assertEquals(ItemState.APPROVED, deloreanResult.state); System.out.println("Lamborghini ownership contract revision " + newLamborghini.getRevision() + " is " + lamborghiniResult + " by Network"); System.out.println("Lamborghini ownership is now belongs to Marty: " + newLamborghini.getOwner().isAllowedForKeys(martyPublicKeys)); assertEquals(ItemState.APPROVED, lamborghiniResult.state);
System.out.println("DeLorean revoked ownership contract revision " + delorean.getRevision() + " is " + deloreanResult + " by Network"); System.out.println("DeLorean revoked ownership still belongs to Marty: " + delorean.getOwner().isAllowedForKeys(martyPublicKeys)); assertEquals(ItemState.APPROVED, deloreanResult.state); System.out.println("Lamborghini revoked ownership contract revision " + lamborghini.getRevision() + " is " + lamborghiniResult + " by Network"); System.out.println("Lamborghini revoked ownership still belongs to Stepa: " + lamborghini.getOwner().isAllowedForKeys(stepaPublicKeys)); assertEquals(ItemState.APPROVED, lamborghiniResult.state); System.out.println("DeLorean ownership contract revision " + newDelorean.getRevision() + " is " + deloreanResult + " by Network"); System.out.println("DeLorean ownership should belongs to Stepa: " + newDelorean.getOwner().isAllowedForKeys(stepaPublicKeys)); assertEquals(ItemState.UNDEFINED, deloreanResult.state); System.out.println("Lamborghini ownership contract revision " + newLamborghini.getRevision() + " is " + lamborghiniResult + " by Network"); System.out.println("Lamborghini ownership should belongs to Marty: " + newLamborghini.getOwner().isAllowedForKeys(martyPublicKeys)); assertEquals(ItemState.UNDEFINED, lamborghiniResult.state);
ime.setNameCache(nameCache); if (((Contract) newItem).getRevision() == 1) { if (!((NSmartContract) newItem).beforeCreate(ime)) newItem.addError(Errors.BAD_NEW_ITEM, item.getId().toString(), "newItem.beforeCreate fails");
report("contract id: " + contract.getId().toBase64String()); report("issued: " + contract.getIssuedAt()); report("revision: " + contract.getRevision()); report("created: " + contract.getCreatedAt()); report("expires: " + contract.getExpiresAt());
if ((getRevision() != 1) || (getParent()!=null)) { if (getOrigin().equals(getId())) { res = false; addError(Errors.BAD_VALUE, "can't origin itself"); if (getRevision() <= 1) { res = false; addError(Errors.BAD_VALUE, "revision must be greater than 1");
@Test public void newRevision() throws Exception { Contract c = Contract.fromDslFile(ROOT_CONTRACT); c.addSignerKeyFromFile(PRIVATE_KEY_PATH); byte[] sealed = c.seal(); assertTrue(c.check()); Contract c2 = c.createRevision(TestKeys.privateKey(0), TestKeys.privateKey(3)); assertEquals(1, c2.getRevokingItems().size()); assertEquals(c, c2.getRevokingItems().iterator().next()); assertEquals(2, c2.getKeysToSignWith().size()); assertEquals(2, c2.getRevision()); assertEquals(c.getId(), c2.getParent()); assertEquals(c.getId(), c2.getRawOrigin()); c2.seal(); Contract c3 = c2.createRevision(TestKeys.privateKey(0), TestKeys.privateKey(3)); assertEquals(1, c3.getRevokingItems().size()); assertEquals(c2, c3.getRevokingItems().iterator().next()); assertEquals(2, c3.getKeysToSignWith().size()); assertEquals(3, c3.getRevision()); assertEquals(c2.getId(), c3.getParent()); assertEquals(c.getId(), c3.getRawOrigin()); // c2.check(); // c2.traceErrors(); }
System.out.println("DeLorean revoked ownership contract revision " + delorean.getRevision() + " is " + deloreanResult + " by Network"); System.out.println("DeLorean revoked ownership was belongs to Marty: " + delorean.getOwner().isAllowedForKeys(martyPublicKeys)); assertEquals(ItemState.REVOKED, deloreanResult.state); System.out.println("Lamborghini revoked ownership contract revision " + lamborghini.getRevision() + " is " + lamborghiniResult + " by Network"); System.out.println("Lamborghini revoked ownership was belongs to Stepa: " + lamborghini.getOwner().isAllowedForKeys(stepaPublicKeys)); assertEquals(ItemState.REVOKED, lamborghiniResult.state); System.out.println("DeLorean ownership contract revision " + newDelorean.getRevision() + " is " + deloreanResult + " by Network"); System.out.println("DeLorean ownership is now belongs to Stepa: " + newDelorean.getOwner().isAllowedForKeys(stepaPublicKeys)); assertEquals(ItemState.APPROVED, deloreanResult.state); System.out.println("Lamborghini ownership contract revision " + newLamborghini.getRevision() + " is " + lamborghiniResult + " by Network"); System.out.println("Lamborghini ownership is now belongs to Marty: " + newLamborghini.getOwner().isAllowedForKeys(martyPublicKeys)); assertEquals(ItemState.APPROVED, lamborghiniResult.state);