Search in sources :

Example 1 with Role

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);
}
Also used : SimpleRole(com.icodici.universa.contract.roles.SimpleRole) Role(com.icodici.universa.contract.roles.Role) ListRole(com.icodici.universa.contract.roles.ListRole) RoleLink(com.icodici.universa.contract.roles.RoleLink) PrivateKey(com.icodici.crypto.PrivateKey) PublicKey(com.icodici.crypto.PublicKey) ChangeOwnerPermission(com.icodici.universa.contract.permissions.ChangeOwnerPermission) Test(org.junit.Test)

Example 2 with Role

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);
}
Also used : SimpleRole(com.icodici.universa.contract.roles.SimpleRole) Role(com.icodici.universa.contract.roles.Role) ListRole(com.icodici.universa.contract.roles.ListRole) RoleLink(com.icodici.universa.contract.roles.RoleLink) PrivateKey(com.icodici.crypto.PrivateKey) PublicKey(com.icodici.crypto.PublicKey) ChangeOwnerPermission(com.icodici.universa.contract.permissions.ChangeOwnerPermission) Test(org.junit.Test)

Example 3 with Role

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();
    }
}
Also used : Role(com.icodici.universa.contract.roles.Role) ZonedDateTime(java.time.ZonedDateTime) Quantiser(com.icodici.universa.node2.Quantiser)

Example 4 with Role

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);
}
Also used : ListRole(com.icodici.universa.contract.roles.ListRole) SimpleRole(com.icodici.universa.contract.roles.SimpleRole) Role(com.icodici.universa.contract.roles.Role) HashSet(java.util.HashSet) ErrorRecord(com.icodici.universa.ErrorRecord) Test(org.junit.Test)

Example 5 with Role

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);
}
Also used : ListRole(com.icodici.universa.contract.roles.ListRole) SimpleRole(com.icodici.universa.contract.roles.SimpleRole) Role(com.icodici.universa.contract.roles.Role) PrivateKey(com.icodici.crypto.PrivateKey) PublicKey(com.icodici.crypto.PublicKey) HashSet(java.util.HashSet) ErrorRecord(com.icodici.universa.ErrorRecord) Test(org.junit.Test)

Aggregations

Role (com.icodici.universa.contract.roles.Role)17 ListRole (com.icodici.universa.contract.roles.ListRole)10 SimpleRole (com.icodici.universa.contract.roles.SimpleRole)10 PublicKey (com.icodici.crypto.PublicKey)7 Test (org.junit.Test)7 PrivateKey (com.icodici.crypto.PrivateKey)6 HashSet (java.util.HashSet)5 ErrorRecord (com.icodici.universa.ErrorRecord)3 ChangeOwnerPermission (com.icodici.universa.contract.permissions.ChangeOwnerPermission)2 RoleLink (com.icodici.universa.contract.roles.RoleLink)2 ZonedDateTime (java.time.ZonedDateTime)2 ChangedItem (net.sergeych.diff.ChangedItem)2 KeyAddress (com.icodici.crypto.KeyAddress)1 Quantiser (com.icodici.universa.node2.Quantiser)1 Delta (net.sergeych.diff.Delta)1 MapDelta (net.sergeych.diff.MapDelta)1 Binder (net.sergeych.tools.Binder)1