use of com.icodici.universa.contract.roles.Role in project universa by UniversaBlockchain.
the class MainTest method registerContractWithAnonymousId.
@Test
public void registerContractWithAnonymousId() throws Exception {
TestSpace ts = prepareTestSpace();
PrivateKey myPrivKey = TestKeys.privateKey(1);
PublicKey myPubKey = myPrivKey.getPublicKey();
byte[] myAnonId = myPrivKey.createAnonymousId();
Contract contract = new Contract();
contract.setExpiresAt(ZonedDateTime.now().plusDays(90));
Role r = contract.setIssuerKeys(AnonymousId.fromBytes(myAnonId));
contract.registerRole(new RoleLink("owner", "issuer"));
contract.registerRole(new RoleLink("creator", "issuer"));
contract.addPermission(new ChangeOwnerPermission(r));
contract.addSignerKey(myPrivKey);
contract.seal();
System.out.println("contract.check(): " + contract.check());
contract.traceErrors();
// ItemResult itemResult = ts.client.register(contract.getPackedTransaction(), 5000);
ItemResult itemResult0 = ts.node.node.registerItem(contract);
// Thread.sleep(1000000000);
ItemResult itemResult = ts.node.node.waitItem(contract.getId(), 100);
assertEquals(ItemState.APPROVED, itemResult.state);
}
use of com.icodici.universa.contract.roles.Role in project universa by UniversaBlockchain.
the class MainTest method registerContractWithAnonymousId_bak.
@Test
public void registerContractWithAnonymousId_bak() throws Exception {
TestSpace ts = prepareTestSpace();
PrivateKey myPrivKey = TestKeys.privateKey(1);
PublicKey myPubKey = myPrivKey.getPublicKey();
byte[] myAnonId = myPrivKey.createAnonymousId();
Contract contract = new Contract();
contract.setExpiresAt(ZonedDateTime.now().plusDays(90));
Role r = contract.setIssuerKeys(myPubKey);
contract.registerRole(new RoleLink("owner", "issuer"));
contract.registerRole(new RoleLink("creator", "issuer"));
contract.addPermission(new ChangeOwnerPermission(r));
contract.addSignerKey(myPrivKey);
contract.seal();
ItemResult itemResult = ts.client.register(contract.getPackedTransaction(), 5000);
assertEquals(ItemState.APPROVED, itemResult.state);
}
use of com.icodici.universa.contract.roles.Role in project universa by UniversaBlockchain.
the class ContractTestBase method assertProperSimpleRootContract.
protected void assertProperSimpleRootContract(Contract c) {
// assertEquals(3, c.getApiLevel());
// -- issuer
KeyRecord issuer = c.getIssuer().getKeyRecords().iterator().next();
assertNotNull(issuer);
assertThat(issuer.getPublicKey(), is(instanceOf(PublicKey.class)));
assertEquals(issuer.getStringOrThrow("name"), "Universa");
// --- times
ZonedDateTime t = c.getCreatedAt();
assertAlmostSame(ZonedDateTime.now(), c.getCreatedAt());
assertEquals("2022-08-05T17:25:37Z", c.getExpiresAt().withZoneSameInstant(ZoneOffset.UTC).toString());
// -- data
assertThat(c.getDefinition().getData().get("active_since"), is(instanceOf(ZonedDateTime.class)));
assertEquals("2017-08-05T17:24:49Z", c.getDefinition().getData().getZonedDateTimeOrThrow("active_since").withZoneSameInstant(ZoneOffset.UTC).toString());
assertEquals("access certificate", c.getDefinition().getData().get("type").toString());
// -- state
Contract.State state = c.getState();
assertEquals(1, state.getRevision());
assertEquals(c.getCreatedAt().truncatedTo(ChronoUnit.SECONDS), state.getCreatedAt().truncatedTo(ChronoUnit.SECONDS));
KeyRecord owner = c.testGetOwner();
assertNotNull(owner);
assertEquals("Pupkin", owner.getBinderOrThrow("name").getStringOrThrow("last"));
// -- roles
Map<String, Role> roles = c.getRoles();
assertEquals(owner, roles.get("owner").getKeyRecord());
assertEquals(issuer, roles.get("issuer").getKeyRecord());
assertEquals(issuer, roles.get("creator").getKeyRecord());
// -- permissions
try {
assertTrue(c.isPermitted("change_owner", owner));
assertFalse(c.isPermitted("change_owner", issuer));
assertTrue(c.isPermitted("revoke", owner));
assertFalse(c.isPermitted("revoke", issuer));
} catch (Quantiser.QuantiserException e) {
e.printStackTrace();
}
}
use of com.icodici.universa.contract.roles.Role in project universa by UniversaBlockchain.
the class PermissionsTest method changeOwner.
@Test
public void changeOwner() throws Exception {
Contract c = Contract.fromDslFile(ROOT_CONTRACT);
c.addSignerKeyFromFile(PRIVATE_KEY_PATH);
c.setOwnerKey(ownerKey1);
assertThat(c.getPermissions().getFirst("change_owner").getRole(), is(instanceOf(RoleLink.class)));
assertTrue(c.getPermissions().getFirst("change_owner").getRole().isAllowedForKeys(new HashSet(Do.listOf(ownerKey1))));
// System.out.println("Owner now :" + c.getOwner());
// System.out.println("change owner permission :" + c.getPermissions().get("change_owner"));
c.seal();
c.check();
c.traceErrors();
assertTrue(c.check());
assertEquals(c, ((RoleLink) c.getPermissions().getFirst("change_owner").getRole()).getContract());
Role cOwner = c.getOwner();
assertTrue(cOwner.isAllowedForKeys(new HashSet<>(Do.listOf(ownerKey1))));
assertTrue(!cOwner.isAllowedForKeys(new HashSet<>(Do.listOf(ownerKey2))));
// Bad contract change: owner has no right to change owner ;)
Contract c1 = c.createRevision(TestKeys.privateKey(0));
c1.setOwnerKey(ownerKey2);
assertNotEquals(c.getOwner(), c1.getOwner());
c1.seal();
c1.check();
c1.traceErrors();
assertEquals(1, c1.getErrors().size());
ErrorRecord error = c1.getErrors().get(0);
assertEquals(Errors.FORBIDDEN, error.getError());
// good contract change: creator is an owner
Contract c2 = c.createRevision(TestKeys.privateKey(0), ownerKey1);
assertEquals(c, ((RoleLink) c.getPermissions().getFirst("change_owner").getRole()).getContract());
// System.out.println("c owner : "+c.getRole("owner"));
// System.out.println("c2 creator: "+c2.getRole("creator"));
assertEquals(c.getOwner(), ((RoleLink) c.getPermissions().getFirst("change_owner").getRole()).getRole());
assertEquals(c2, ((RoleLink) c2.getPermissions().getFirst("change_owner").getRole()).getContract());
assertEquals(c, ((RoleLink) c.getPermissions().getFirst("change_owner").getRole()).getContract());
c2.setOwnerKey(ownerKey3);
assertNotEquals(c.getOwner(), c2.getOwner());
assertEquals(c.getOwner(), ((RoleLink) c.getPermissions().getFirst("change_owner").getRole()).getRole());
sealCheckTrace(c2, true);
}
use of com.icodici.universa.contract.roles.Role in project universa by UniversaBlockchain.
the class PermissionsTest method revokeWithReference.
@Test
public void revokeWithReference() throws Exception {
Set<PrivateKey> stepaPrivateKeys = new HashSet<>();
stepaPrivateKeys.add(new PrivateKey(Do.read(rootPath + "keys/stepan_mamontov.private.unikey")));
Set<PublicKey> stepaPublicKeys = new HashSet<>();
for (PrivateKey pk : stepaPrivateKeys) {
stepaPublicKeys.add(pk.getPublicKey());
}
Set<String> references = new HashSet<>();
references.add("certification_contract");
Contract c = Contract.fromDslFile(rootPath + "NotaryWithReferenceDSLTemplate.yml");
c.addSignerKeyFromFile(PRIVATE_KEY_PATH);
Role r = c.getPermissions().getFirst("revoke").getRole();
assertThat(r, is(instanceOf(ListRole.class)));
assertFalse(r.isAllowedFor(stepaPublicKeys, null));
assertTrue(r.isAllowedFor(stepaPublicKeys, references));
System.out.println("revoke permission :" + c.getPermissions().get("revoke"));
c.seal();
c.check();
c.traceErrors();
assertTrue(c.isOk());
assertEquals(c, (c.getPermissions().getFirst("revoke").getRole()).getContract());
// Bad contract change: owner has no right to change owner ;)
Contract c1 = c.createRevision(TestKeys.privateKey(0));
c1.setOwnerKey(ownerKey2);
assertNotEquals(c.getOwner(), c1.getOwner());
c1.seal();
c1.check();
c1.traceErrors();
assertEquals(1, c1.getErrors().size());
ErrorRecord error = c1.getErrors().get(0);
assertEquals(Errors.FORBIDDEN, error.getError());
// bad contract change: good key but bad reference
Contract c2 = ContractsService.createRevocation(c, stepaPrivateKeys.iterator().next());
assertEquals(c2.getRevoking().get(0), c2.getRevoking().get(0).getPermissions().getFirst("revoke").getRole().getContract());
c2.seal();
c2.check();
c2.traceErrors();
assertEquals(1, c2.getErrors().size());
error = c2.getErrors().get(0);
assertEquals(Errors.FORBIDDEN, error.getError());
// good contract change: creator is an owner
Contract c3 = ContractsService.createRevocation(c, stepaPrivateKeys.iterator().next());
Reference ref = new Reference();
ref.name = "certification_contract";
ref.type = Reference.TYPE_EXISTING;
ref.addMatchingItem(new Contract());
c3.getRevoking().get(0).getReferences().put(ref.name, ref);
// assertEquals(c3.getRevoking().get(0), c3.getPermissions().getFirst("revoke").getRole().getContract());
System.out.println("-------------");
sealCheckTrace(c3, true);
}
Aggregations