use of net.sergeych.tools.Binder in project universa by UniversaBlockchain.
the class MainTest method startNode.
@Test
public void startNode() throws Exception {
String path = new File("src/test_node_config_v2/node1").getAbsolutePath();
System.out.println(path);
String[] args = new String[] { "--test", "--config", path, "--nolog" };
Main main = new Main(args);
main.waitReady();
BufferedLogger l = main.logger;
Client client = new Client("http://localhost:8080", TestKeys.privateKey(3), main.getNodePublicKey(), null);
Binder data = client.command("status");
data.getStringOrThrow("status");
// assertThat(data.getListOrThrow("log").size(), greaterThan(3));
BasicHttpClient.Answer a = client.request("ping");
assertEquals("200: {ping=pong}", a.toString());
Contract c = new Contract();
c.setIssuerKeys(TestKeys.publicKey(3));
c.addSignerKey(TestKeys.privateKey(3));
c.registerRole(new RoleLink("owner", "issuer"));
c.registerRole(new RoleLink("creator", "issuer"));
c.setExpiresAt(ZonedDateTime.now().plusDays(2));
byte[] sealed = c.seal();
// Bytes.dump(sealed);
Contract c1 = new Contract(sealed);
assertArrayEquals(c.getLastSealedBinary(), c1.getLastSealedBinary());
main.cache.put(c);
assertNotNull(main.cache.get(c.getId()));
URL url = new URL("http://localhost:8080/contracts/" + c.getId().toBase64String());
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
assertEquals(200, con.getResponseCode());
byte[] data2 = Do.read(con.getInputStream());
assertArrayEquals(c.getPackedTransaction(), data2);
url = new URL("http://localhost:8080/network");
con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
assertEquals(200, con.getResponseCode());
Binder bres = Boss.unpack((Do.read(con.getInputStream()))).getBinderOrThrow("response");
List<Binder> ni = bres.getBinders("nodes");
String pubUrls = ni.stream().map(x -> x.getStringOrThrow("url")).collect(Collectors.toList()).toString();
assertEquals("[http://localhost:8080, http://localhost:6002, http://localhost:6004, http://localhost:6006]", pubUrls);
main.shutdown();
main.logger.stopInterceptingStdOut();
;
main.logger.getCopy().forEach(x -> System.out.println(x));
}
use of net.sergeych.tools.Binder in project universa by UniversaBlockchain.
the class BaseNetworkTest method referenceForRevokeWithCreateContract.
@Test
public void referenceForRevokeWithCreateContract() throws Exception {
Set<PrivateKey> stepaPrivateKeys = new HashSet<>();
Set<PrivateKey> llcPrivateKeys = new HashSet<>();
Set<PrivateKey> thirdPartyPrivateKeys = new HashSet<>();
llcPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "_xer0yfe2nn1xthc.private.unikey")));
stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey")));
thirdPartyPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/marty_mcfly.private.unikey")));
Set<PublicKey> stepaPublicKeys = new HashSet<>();
for (PrivateKey pk : stepaPrivateKeys) {
stepaPublicKeys.add(pk.getPublicKey());
}
Set<PublicKey> thirdPartyPublicKeys = new HashSet<>();
for (PrivateKey pk : thirdPartyPrivateKeys) {
thirdPartyPublicKeys.add(pk.getPublicKey());
}
Contract jobCertificate = new Contract(llcPrivateKeys.iterator().next());
jobCertificate.setOwnerKeys(stepaPublicKeys);
jobCertificate.getDefinition().getData().set("issuer", "Roga & Kopita");
jobCertificate.getDefinition().getData().set("type", "chief accountant assignment");
jobCertificate.seal();
registerAndCheckApproved(jobCertificate);
Contract llcProperty = ContractsService.createNotaryContract(llcPrivateKeys, stepaPublicKeys);
List<String> listConditions = new ArrayList<>();
listConditions.add("ref.definition.issuer == \"26RzRJDLqze3P5Z1AzpnucF75RLi1oa6jqBaDh8MJ3XmTaUoF8R\"");
listConditions.add("ref.definition.data.issuer == \"Roga & Kopita\"");
listConditions.add("ref.definition.data.type == \"chief accountant assignment\"");
Reference reference = new Reference(llcProperty);
reference.name = "certification_contract";
reference.type = Reference.TYPE_EXISTING;
Binder conditions = new Binder();
conditions.set("all_of", listConditions);
reference.setConditions(conditions);
reference.addMatchingItem(jobCertificate);
// llcProperty.getDefinition().getReferences().add(reference);
llcProperty.addReference(reference);
ListRole listRole = new ListRole("list_role");
SimpleRole ownerRole = new SimpleRole("owner", stepaPrivateKeys);
listRole.addRole(ownerRole);
listRole.addRequiredReference("certification_contract", Role.RequiredMode.ALL_OF);
llcProperty.getPermissions().remove("change_owner");
llcProperty.getPermissions().remove("revoke");
ChangeOwnerPermission changeOwnerPerm = new ChangeOwnerPermission(listRole);
llcProperty.addPermission(changeOwnerPerm);
RevokePermission revokePerm = new RevokePermission(listRole);
llcProperty.addPermission(revokePerm);
llcProperty.addSignerKey(llcPrivateKeys.iterator().next());
llcProperty.seal();
registerAndCheckApproved(llcProperty);
Contract llcProperty2 = ContractsService.createRevocation(llcProperty, stepaPrivateKeys.iterator().next());
llcProperty2.check();
llcProperty2.traceErrors();
// assertFalse(llcProperty2.isOk());
TransactionPack tp_before = llcProperty2.getTransactionPack();
// tp_before.addReferencedItem(jobCertificate);
byte[] data = tp_before.pack();
TransactionPack tp_after = TransactionPack.unpack(data);
registerAndCheckApproved(tp_after);
}
use of net.sergeych.tools.Binder in project universa by UniversaBlockchain.
the class ContractsServiceTest method goodShare.
@Test
public void goodShare() 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.createShareContract(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"), 1);
assertEquals(splitJoinParams.get("min_unit"), 1);
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 PermissionsTest method shouldNotPopulateWithEmptyStateDataValues.
@Test
public void shouldNotPopulateWithEmptyStateDataValues() throws Exception {
PrivateKey ownerKey2 = TestKeys.privateKey(1);
Contract c = basicContractCreation(SUBSCRIPTION_WITH_DATA, PRIVATE_KEY, ownerKey2);
Binder d = c.getStateData();
Contract c1 = c.createRevision(ownerKey2);
Binder d1 = c1.getStateData();
final String oldValue = "2";
final String newValue = "";
final String field = "direction";
setAndCheckOldNewValues(d, d1, oldValue, newValue, field);
sealCheckTrace(c1, false);
}
use of net.sergeych.tools.Binder in project universa by UniversaBlockchain.
the class PermissionsTest method shouldModifyStateDataValues.
@Test
public void shouldModifyStateDataValues() throws Exception {
Contract c = basicContractCreation(SUBSCRIPTION_WITH_DATA, PRIVATE_KEY, ownerKey2);
Binder d = c.getStateData();
Contract c1 = c.createRevision(ownerKey2);
Binder d1 = c1.getStateData();
final String oldValue = "An example of smart contract.";
final String newValue = "UniversaSmartContract";
final String field = "description";
setAndCheckOldNewValues(d, d1, oldValue, newValue, field);
sealCheckTrace(c1, true);
}
Aggregations