Search in sources :

Example 11 with Binder

use of net.sergeych.tools.Binder in project universa by UniversaBlockchain.

the class ContractTest method checkReferenceSerialization.

/**
 * 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");
    contract.seal();
    Binder b = BossBiMapper.serialize(contract);
    Contract desContract = DefaultBiMapper.deserialize(b);
    for (Reference ref : contract.getReferences().values()) {
        Reference desRef = desContract.findReferenceByName(ref.getName());
        assertTrue(desRef != null);
        assertEquals(ref.getConditions(), desRef.getConditions());
    }
}
Also used : Binder(net.sergeych.tools.Binder) Test(org.junit.Test)

Example 12 with Binder

use of net.sergeych.tools.Binder in project universa by UniversaBlockchain.

the class ContractTest method checkSealedBytes.

@Test
public void checkSealedBytes() throws Exception {
    PrivateKey martyPrivateKey = new PrivateKey(Do.read(rootPath + "keys/marty_mcfly.private.unikey"));
    PrivateKey stepaPrivateKey = new PrivateKey(Do.read(rootPath + "keys/stepan_mamontov.private.unikey"));
    PrivateKey manufacturePrivateKey = new PrivateKey(Do.read(rootPath + "_xer0yfe2nn1xthc.private.unikey"));
    Contract delorean = Contract.fromDslFile(rootPath + "DeLoreanOwnership.yml");
    delorean.addSignerKey(manufacturePrivateKey);
    delorean.seal();
    System.out.println("----");
    delorean = delorean.createRevision(manufacturePrivateKey);
    delorean.addSignerKey(manufacturePrivateKey);
    delorean.seal();
    byte[] firstSeal = delorean.getLastSealedBinary();
    System.out.println("--delorean 1--");
    System.out.println(delorean.getRevoking().size());
    TransactionPack tp_before = delorean.getTransactionPack();
    byte[] data = tp_before.pack();
    System.out.println("----");
    TransactionPack tp_after = TransactionPack.unpack(data);
    Contract delorean2 = tp_after.getContract();
    System.out.println("----");
    delorean2.addSignerKey(stepaPrivateKey);
    delorean2.seal();
    System.out.println("--delorean 2--");
    System.out.println(delorean2.getRevoking().size());
    byte[] secondSeal = delorean2.getLastSealedBinary();
    Binder data1 = Boss.unpack(firstSeal);
    byte[] contractBytes1 = data1.getBinaryOrThrow("data");
    for (Object signature : (List) data1.getOrThrow("signatures")) {
        byte[] s = ((Bytes) signature).toArray();
        System.out.println(ExtendedSignature.verify(manufacturePrivateKey.getPublicKey(), s, contractBytes1));
    }
    System.out.println("----");
    Binder data2 = Boss.unpack(secondSeal);
    byte[] contractBytes2 = data2.getBinaryOrThrow("data");
    for (Object signature : (List) data2.getOrThrow("signatures")) {
        byte[] s = ((Bytes) signature).toArray();
        System.out.println("m: " + ExtendedSignature.verify(manufacturePrivateKey.getPublicKey(), s, contractBytes2));
        System.out.println("s: " + ExtendedSignature.verify(stepaPrivateKey.getPublicKey(), s, contractBytes2));
    }
    System.out.println("----");
    for (Object signature : (List) data1.getOrThrow("signatures")) {
        byte[] s = ((Bytes) signature).toArray();
        System.out.println(ExtendedSignature.verify(manufacturePrivateKey.getPublicKey(), s, contractBytes2));
    }
}
Also used : Binder(net.sergeych.tools.Binder) Bytes(net.sergeych.utils.Bytes) PrivateKey(com.icodici.crypto.PrivateKey) Test(org.junit.Test)

Example 13 with Binder

use of net.sergeych.tools.Binder in project universa by UniversaBlockchain.

the class ContractsServiceTest method goodToken.

@Test
public void goodToken() throws Exception {
    Set<PrivateKey> martyPrivateKeys = new HashSet<>();
    Set<PrivateKey> stepaPrivateKeys = new HashSet<>();
    Set<PublicKey> martyPublicKeys = new HashSet<>();
    Set<PublicKey> stepaPublicKeys = new HashSet<>();
    martyPrivateKeys.add(new PrivateKey(Do.read(rootPath + "keys/marty_mcfly.private.unikey")));
    stepaPrivateKeys.add(new PrivateKey(Do.read(rootPath + "keys/stepan_mamontov.private.unikey")));
    for (PrivateKey pk : stepaPrivateKeys) stepaPublicKeys.add(pk.getPublicKey());
    for (PrivateKey pk : martyPrivateKeys) martyPublicKeys.add(pk.getPublicKey());
    Contract notaryContract = ContractsService.createTokenContract(martyPrivateKeys, stepaPublicKeys, "100");
    notaryContract.check();
    notaryContract.traceErrors();
    assertTrue(notaryContract.isOk());
    assertTrue(notaryContract.getOwner().isAllowedForKeys(stepaPublicKeys));
    assertTrue(notaryContract.getIssuer().isAllowedForKeys(martyPrivateKeys));
    assertTrue(notaryContract.getCreator().isAllowedForKeys(martyPrivateKeys));
    assertFalse(notaryContract.getOwner().isAllowedForKeys(martyPrivateKeys));
    assertFalse(notaryContract.getIssuer().isAllowedForKeys(stepaPublicKeys));
    assertFalse(notaryContract.getCreator().isAllowedForKeys(stepaPublicKeys));
    assertTrue(notaryContract.getExpiresAt().isAfter(ZonedDateTime.now().plusMonths(3)));
    assertTrue(notaryContract.getCreatedAt().isBefore(ZonedDateTime.now()));
    assertEquals(InnerContractsService.getDecimalField(notaryContract, "amount"), new Decimal(100));
    assertEquals(notaryContract.getPermissions().get("split_join").size(), 1);
    Binder splitJoinParams = notaryContract.getPermissions().get("split_join").iterator().next().getParams();
    assertEquals(splitJoinParams.get("min_value"), 0.01);
    assertEquals(splitJoinParams.get("min_unit"), 0.01);
    assertEquals(splitJoinParams.get("field_name"), "amount");
    assertTrue(splitJoinParams.get("join_match_fields") instanceof List);
    assertEquals(((List) splitJoinParams.get("join_match_fields")).get(0), "state.origin");
    assertTrue(notaryContract.isPermitted("revoke", stepaPublicKeys));
    assertTrue(notaryContract.isPermitted("revoke", martyPublicKeys));
    assertTrue(notaryContract.isPermitted("change_owner", stepaPublicKeys));
    assertFalse(notaryContract.isPermitted("change_owner", martyPublicKeys));
    assertTrue(notaryContract.isPermitted("split_join", stepaPublicKeys));
    assertFalse(notaryContract.isPermitted("split_join", martyPublicKeys));
}
Also used : Binder(net.sergeych.tools.Binder) PrivateKey(com.icodici.crypto.PrivateKey) Decimal(com.icodici.universa.Decimal) PublicKey(com.icodici.crypto.PublicKey) List(java.util.List) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 14 with Binder

use of net.sergeych.tools.Binder in project universa by UniversaBlockchain.

the class ParcelTest method serializeDeserialize.

@Test
public void serializeDeserialize() throws Exception {
    // serialize
    Binder b1 = serialize(parcel);
    Binder b2 = serialize(parcelFromFile);
    // deserialize
    des_parcel = deserialize(b1);
    des_parcelFromFile = deserialize(b2);
    parcelAssertions(parcel, des_parcel);
    parcelAssertions(des_parcelFromFile, des_parcelFromFile);
}
Also used : Binder(net.sergeych.tools.Binder) Test(org.junit.Test)

Example 15 with Binder

use of net.sergeych.tools.Binder in project universa by UniversaBlockchain.

the class PermissionsTest method changeNumber.

@Test
public void changeNumber() throws Exception {
    Contract c = Contract.fromDslFile(SUBSCRIPTION_PATH);
    c.setOwnerKey(ownerKey2);
    // c.getPermission("change_value")
    // assertThat(c.getPermissions().get("change_owner").getRole(), is(instanceOf(RoleLink.class)));
    // assertTrue(c.getPermissions().get("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.addSignerKeyFromFile(PRIVATE_KEY_PATH);
    Binder d = c.getStateData();
    assertEquals(1000, d.getIntOrThrow("transactional_units_left"));
    c.seal();
    c.check();
    c.traceErrors();
    assertTrue(c.check());
    // valid decrement: by owner
    Contract c1 = c.createRevision(ownerKey2);
    Binder d1 = c1.getStateData();
    assertNotSame(c, c1);
    assertNotSame(d, d1);
    assertEquals(1000, d.getIntOrThrow("transactional_units_left"));
    assertEquals(1000, d1.getIntOrThrow("transactional_units_left"));
    d1.addToInt("transactional_units_left", -10);
    assertEquals(990, d1.getIntOrThrow("transactional_units_left"));
    assertEquals(1000, d.getIntOrThrow("transactional_units_left"));
    sealCheckTrace(c1, true);
    // not valid: increment by owner
    d1.addToInt("transactional_units_left", +11);
    assertEquals(1001, d1.getIntOrThrow("transactional_units_left"));
    assertEquals(1000, d.getIntOrThrow("transactional_units_left"));
    sealCheckTrace(c1, false);
// todo: check valid increment by issuer
}
Also used : Binder(net.sergeych.tools.Binder) Test(org.junit.Test)

Aggregations

Binder (net.sergeych.tools.Binder)136 Test (org.junit.Test)67 PrivateKey (com.icodici.crypto.PrivateKey)21 Contract (com.icodici.universa.contract.Contract)14 PublicKey (com.icodici.crypto.PublicKey)13 IOException (java.io.IOException)11 KeyRecord (com.icodici.universa.contract.KeyRecord)10 SimpleRole (com.icodici.universa.contract.roles.SimpleRole)10 Yaml (org.yaml.snakeyaml.Yaml)9 Bytes (net.sergeych.utils.Bytes)8 Decimal (com.icodici.universa.Decimal)7 ListRole (com.icodici.universa.contract.roles.ListRole)6 NonNull (org.checkerframework.checker.nullness.qual.NonNull)5 Gson (com.google.gson.Gson)4 GsonBuilder (com.google.gson.GsonBuilder)4 XStream (com.thoughtworks.xstream.XStream)4 DomDriver (com.thoughtworks.xstream.io.xml.DomDriver)4 List (java.util.List)4 RoleLink (com.icodici.universa.contract.roles.RoleLink)3 ItemResult (com.icodici.universa.node.ItemResult)3