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());
}
}
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));
}
}
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));
}
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);
}
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
}
Aggregations