@Override public Object deserialize(Binder binder, BiDeserializer deserializer) { return new ItemInfo( binder.getOrThrow("item_result"), binder.getOrThrow("item_id"), binder.getList("errors", null) ); } });
public <T> T getOrThrow(String... path) { return (T) getBinderPathOrThrow(path).getOrThrow(path[path.length - 1]); }
public ItemResult getExtendedState(HashId itemId, int nodeNumber) throws ClientError { return protect(() -> { // for (int i = 0; i < nodes.size(); i++) { // System.out.println("checking node " + i); // ItemResult r = getClient(i).command("getState", // "itemId", itemId).getOrThrow("itemResult"); // System.out.println(">> " + r); // } return (ItemResult) httpClient.command("getState", "itemId", itemId).getOrThrow("itemResult"); }); }
/** * Force synchronization with the rest of the network of given item by its id. May require special client key / network configuration * @param itemId to synchronize * @return known {@link ItemState} before synchronization. Query the state later to get it synchronized * @throws ClientError */ public ItemResult resyncItem(HashId itemId) throws ClientError { return protect(() -> { Binder result = httpClient.command("resyncItem", "itemId", itemId); Object ir = result.getOrThrow("itemResult"); if (ir instanceof ItemResult) return (ItemResult) ir; if (ir instanceof String) System.out.println(">> " + ir); return ItemResult.UNDEFINED; }); }
/** * Look for known state of item by given id * @param itemId to find state of * @return known {@link ItemState} if exist or ItemState.UNDEFINED * @throws ClientError */ public ItemResult getState(HashId itemId) throws ClientError { return protect(() -> { // for (int i = 0; i < nodes.size(); i++) { // System.out.println("checking node " + i); // ItemResult r = getClient(i).command("getState", // "itemId", itemId).getOrThrow("itemResult"); // System.out.println(">> " + r); // } Binder result = httpClient.command("getState", "itemId", itemId); Object ir = result.getOrThrow("itemResult"); if (ir instanceof ItemResult) return (ItemResult) ir; if (ir instanceof String) System.out.println(">> " + ir); return ItemResult.UNDEFINED; }); }
public ItemResult setVerboseLevel(int node, int network, int udp) throws ClientError { return protect(() -> { Binder result = httpClient.command("setVerbose", "node", DatagramAdapter.VerboseLevel.intToString(node), "network", DatagramAdapter.VerboseLevel.intToString(network), "udp", DatagramAdapter.VerboseLevel.intToString(udp)); Object ir = result.getOrThrow("itemResult"); if (ir instanceof ItemResult) return (ItemResult) ir; if (ir instanceof String) System.out.println(">> " + ir); return ItemResult.UNDEFINED; }); }
ItemResult r = c.command("getState", "itemId", itemId).getOrThrow("itemResult"); r.meta.put("url", c.getNodeNumber());
case "owner": case "creator": Role role = value.getOrThrow("data"); if (!role.getName().equals(subname)) throw new IllegalArgumentException("Field: " + name + " not equals role name in field value"); default: if (subname.startsWith("data.")) definition.data.set(subname.substring(5), value.getOrThrow("data")); else if (subname.startsWith("references.")) { Reference ref = value.getOrThrow("data"); if (!ref.getName().equals(subname.substring(11))) throw new IllegalArgumentException("Field: " + name + " not equals reference name in field value"); switch (subname) { case "origin": if (value.getOrThrow("data").getClass().equals(HashId.class)) state.setOrigin(value.getOrThrow("data")); else if (value.getOrThrow("data").getClass().equals(String.class)) state.setOrigin(new HashId(Base64u.decodeCompactString(value.getOrThrow("data")))); return; case "created_at": case "owner": case "creator": Role role = value.getOrThrow("data"); if (!role.getName().equals(subname)) throw new IllegalArgumentException("Field: " + name + " not equals role name in field value");
Object x = binderParams.getOrThrow("role"); if (x instanceof Role) {
/** * Get processing state of given parcel * @param parcelId id of the parcel to get state of * @return processing state of the parcel * @throws ClientError */ public Node.ParcelProcessingState getParcelProcessingState(HashId parcelId) throws ClientError { return protect(() -> { Binder result = httpClient.command("getParcelProcessingState", "parcelId", parcelId); Object ps = result.getOrThrow("processingState"); if (ps instanceof Node.ParcelProcessingState) return (Node.ParcelProcessingState) ps; return Node.ParcelProcessingState.valueOf(result.getBinder("processingState").getStringOrThrow("state")); }); }
for (Object signature : (List) data.getOrThrow("signatures")) { byte[] s = ((Bytes) signature).toArray();
public static BasicHttpClientSession reconstructSession(Binder binder) { BasicHttpClientSession restoringSession = new BasicHttpClientSession(); restoringSession.setConnectMessage(binder.getOrThrow("connectMessage")); // restoringSession.privateKey = binder.getBinaryOrThrowgetBinaryOrThrowgetBinaryOrThrow("privateKey"); restoringSession.setSessionKey(new SymmetricKey(binder.getBinaryOrThrow("sessionKey"))); restoringSession.setSessionId(binder.getLongOrThrow("sessionId")); // restoringSession.nodePublicKey = binder.getBinaryOrThrow("nodePublicKey"); return restoringSession; }
private State initializeWithDsl(Binder state) { this.state = state; createdAt = state.getZonedDateTime("created_at", null); expiresAt = state.getZonedDateTime("expires_at", null); revision = state.getIntOrThrow("revision"); data = state.getOrCreateBinder("data"); if (createdAt == null) { if (revision != 1) throw new IllegalArgumentException("state.created_at must be set for revisions > 1"); createdAt = definition.createdAt; } createRole("owner", state.get("owner")); createRole("creator", state.getOrThrow("created_by")); List<LinkedHashMap<String, Binder>> refList = state.getList("references", null); if (refList != null) { for (LinkedHashMap<String, Binder> refItem : refList) { Binder item = new Binder(refItem); Binder ref = item.getBinder("reference"); if (ref != null) references.add(Reference.fromDslBinder(ref, getContract())); else throw new IllegalArgumentException("Expected reference section"); } } return this; }
public void deserializeWith(Binder data, BiDeserializer d) { registerRole(d.deserialize(data.getBinderOrThrow("issuer"))); createdAt = data.getZonedDateTimeOrThrow("created_at"); expiresAt = data.getZonedDateTime("expires_at", null); extendedType = data.getString("extended_type", null); this.data = d.deserialize(data.getBinder("data", Binder.EMPTY)); references = d.deserialize(data.getList("references", null)); Map<String, Permission> perms = d.deserialize(data.getOrThrow("permissions")); perms.forEach((id, perm) -> { perm.setId(id); addPermission(perm); }); }
private Definition initializeWithDsl(Binder definition) { this.definition = definition; Role issuer = createRole("issuer", definition.getOrThrow("issuer")); createdAt = definition.getZonedDateTimeOrThrow("created_at"); Object t = definition.getOrDefault("expires_at", null); if (t != null) expiresAt = decodeDslTime(t); registerRole(issuer); data = definition.getBinder("data"); extendedType = definition.getString("extended_type", null); List<LinkedHashMap<String, Binder>> refList = definition.getList("references", null); if (refList != null) { for (LinkedHashMap<String, Binder> refItem : refList) { Binder item = new Binder(refItem); Binder ref = item.getBinder("reference"); if (ref != null) references.add(Reference.fromDslBinder(ref, getContract())); else throw new IllegalArgumentException("Expected reference section"); } } return this; }
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)); 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)); for (Object signature : (List) data1.getOrThrow("signatures")) { byte[] s = ((Bytes) signature).toArray(); System.out.println(ExtendedSignature.verify(manufacturePrivateKey.getPublicKey(), s, contractBytes2));
@Test public void rawJavaScript() throws Exception { String fileName = "somescript.js"; String scriptDump = "cHJpbnQoJ2hlbGxvIHdvcmxkJyk7DQp2YXIgY3VycmVudENvbnRyYWN0ID0ganNBcGkuZ2V0Q3VycmVudENvbnRyYWN0KCk7DQpwcmludCgnY3VycmVudENvbnRyYWN0LmdldElkKCk6ICcgKyBjdXJyZW50Q29udHJhY3QuZ2V0SWQoKSk7DQpwcmludCgnY3VycmVudENvbnRyYWN0LmdldFJldmlzaW9uKCk6ICcgKyBjdXJyZW50Q29udHJhY3QuZ2V0UmV2aXNpb24oKSk7DQpwcmludCgnY3VycmVudENvbnRyYWN0LmdldENyZWF0ZWRBdCgpOiAnICsgY3VycmVudENvbnRyYWN0LmdldENyZWF0ZWRBdCgpKTsNCnByaW50KCdjdXJyZW50Q29udHJhY3QuZ2V0T3JpZ2luKCk6ICcgKyBjdXJyZW50Q29udHJhY3QuZ2V0T3JpZ2luKCkpOw0KcHJpbnQoJ2N1cnJlbnRDb250cmFjdC5nZXRQYXJlbnQoKTogJyArIGN1cnJlbnRDb250cmFjdC5nZXRQYXJlbnQoKSk7DQpwcmludCgnY3VycmVudENvbnRyYWN0LmdldFN0YXRlRGF0YUZpZWxkKHNvbWVfdmFsdWUpOiAnICsgY3VycmVudENvbnRyYWN0LmdldFN0YXRlRGF0YUZpZWxkKCdzb21lX3ZhbHVlJykpOw0KcHJpbnQoJ2N1cnJlbnRDb250cmFjdC5nZXRTdGF0ZURhdGFGaWVsZChzb21lX2hhc2hfaWQpOiAnICsgY3VycmVudENvbnRyYWN0LmdldFN0YXRlRGF0YUZpZWxkKCdzb21lX2hhc2hfaWQnKSk7DQpwcmludCgnY3VycmVudENvbnRyYWN0LmdldERlZmluaXRpb25EYXRhRmllbGQoc2NyaXB0cyk6ICcgKyBjdXJyZW50Q29udHJhY3QuZ2V0RGVmaW5pdGlvbkRhdGFGaWVsZCgnc2NyaXB0cycpKTsNCnByaW50KCdjdXJyZW50Q29udHJhY3QuZ2V0SXNzdWVyKCk6ICcgKyBjdXJyZW50Q29udHJhY3QuZ2V0SXNzdWVyKCkpOw0KcHJpbnQoJ2N1cnJlbnRDb250cmFjdC5nZXRPd25lcigpOiAnICsgY3VycmVudENvbnRyYWN0LmdldE93bmVyKCkpOw0KcHJpbnQoJ2N1cnJlbnRDb250cmFjdC5nZXRDcmVhdG9yKCk6ICcgKyBjdXJyZW50Q29udHJhY3QuZ2V0Q3JlYXRvcigpKTsNCnByaW50KCdjYWxsIGN1cnJlbnRDb250cmFjdC5zZXRPd25lcigpLi4uJyk7DQpjdXJyZW50Q29udHJhY3Quc2V0T3duZXIoWydaYXN0V3BXTlBNcXZWSkFNb2NzTVVUSmc0NWk4TG9DNU1zbXI3THQ5RWFKSlJ3VjJ4VicsICdhMXN4aGpkdEdoTmVqaThTV0pOUGt3VjVtNmRnV2ZyUUJuaGlBeGJRd1pUNlk1RnNYRCddKTsNCnByaW50KCdjdXJyZW50Q29udHJhY3QuZ2V0T3duZXIoKTogJyArIGN1cnJlbnRDb250cmFjdC5nZXRPd25lcigpKTsNCnJlc3VsdCA9IGpzQXBpUGFyYW1zWzBdICsganNBcGlQYXJhbXNbMV07DQo="; Contract contract = new Contract(TestKeys.privateKey(0)); contract.getStateData().set("some_value", HashId.createRandom().toBase64String()); contract.getStateData().set("some_hash_id", HashId.createRandom()); contract.getDefinition().setJS(Base64.decodeLines(scriptDump), fileName, new JSApiScriptParameters()); contract.seal(); String res = (String)contract.execJS(Base64.decodeLines(scriptDump), "3", "6"); System.out.println("res: " + res); assertEquals("36", res); String compression = contract.getDefinition().getData().getOrThrow("scripts", JSApiHelpers.fileName2fileKey(fileName), "compression"); System.out.println("compression: " + compression); assertEquals(JSApiCompressionEnum.RAW, JSApiCompressionEnum.valueOf(compression)); }
@Test public void jsFileContentInContract_byFilename() throws Exception { String fileName = "somescript.zip"; String scriptDump = "UEsDBBQAAgAIAEGVA02XbF8YbAEAAPoEAAANAAAAc29tZXNjcmlwdC5qc62UXU+DMBSG7038D9yVRUOckTk1XkzmzMiY+xJ0y7JU6KATKLYF9vNlyj6cUtR42/O+z3vSntOI4pDLwEO+T6SUUN8BlavDgwRSyY4pRSHXSMgptLl0LS1YI8KKi7j2uSSvLNEHac+1UrcduXIpAelIKiiK7QOUYIZJKIBsJWKURhHkyGlwAWtHI4bdU+xiUVdrgRjTg6sTAWYtEGOGPOu6CTlsYeQ7MiMBmiXQj1ExeM8Cth7whzAPMm+GnV/G5a6ywCaa4xDz7Il3Um2KI86KA78zgdxVFthmLEZUNLe5oGRG0lBIyes/mFpCy2aW7IGg73/Rsk2koijvm16omIAxZNyKrG7PeE1MvWEQmxkPI909U3G9QzTVYAE97/CLW6jrg9Q8XZrgWAKwypbewuF3XhctcH1o6d3eS2qqQc1xrTnt34Qebiyf++l4VHtSW+yxCab/dokUsdjffFXZ5sCATU6mmW/3oDrNpG9QSwECFAAUAAIACABBlQNNl2xfGGwBAAD6BAAADQAAAAAAAAAAACAAAAAAAAAAc29tZXNjcmlwdC5qc1BLBQYAAAAAAQABADsAAACXAQAAAAA="; Contract contract = new Contract(TestKeys.privateKey(0)); contract.getStateData().set("some_value", HashId.createRandom().toBase64String()); contract.getStateData().set("some_hash_id", HashId.createRandom()); JSApiScriptParameters scriptParameters = new JSApiScriptParameters(); scriptParameters.isCompressed = true; contract.getDefinition().setJS(Base64.decodeLines(scriptDump), fileName, scriptParameters, true); contract.seal(); String res = (String)contract.execJSByName("somescript.zip", "3", "6"); System.out.println("res: " + res); assertEquals("36", res); String compression = contract.getDefinition().getData().getOrThrow("scripts", JSApiHelpers.fileName2fileKey(fileName), "compression"); System.out.println("compression: " + compression); assertEquals(JSApiCompressionEnum.ZIP, JSApiCompressionEnum.valueOf(compression)); }
@Test public void jsFileContentInContract() throws Exception { String fileName = "somescript.js"; String scriptDump = "cHJpbnQoJ2hlbGxvIHdvcmxkJyk7DQp2YXIgY3VycmVudENvbnRyYWN0ID0ganNBcGkuZ2V0Q3VycmVudENvbnRyYWN0KCk7DQpwcmludCgnY3VycmVudENvbnRyYWN0LmdldElkKCk6ICcgKyBjdXJyZW50Q29udHJhY3QuZ2V0SWQoKSk7DQpwcmludCgnY3VycmVudENvbnRyYWN0LmdldFJldmlzaW9uKCk6ICcgKyBjdXJyZW50Q29udHJhY3QuZ2V0UmV2aXNpb24oKSk7DQpwcmludCgnY3VycmVudENvbnRyYWN0LmdldENyZWF0ZWRBdCgpOiAnICsgY3VycmVudENvbnRyYWN0LmdldENyZWF0ZWRBdCgpKTsNCnByaW50KCdjdXJyZW50Q29udHJhY3QuZ2V0T3JpZ2luKCk6ICcgKyBjdXJyZW50Q29udHJhY3QuZ2V0T3JpZ2luKCkpOw0KcHJpbnQoJ2N1cnJlbnRDb250cmFjdC5nZXRQYXJlbnQoKTogJyArIGN1cnJlbnRDb250cmFjdC5nZXRQYXJlbnQoKSk7DQpwcmludCgnY3VycmVudENvbnRyYWN0LmdldFN0YXRlRGF0YUZpZWxkKHNvbWVfdmFsdWUpOiAnICsgY3VycmVudENvbnRyYWN0LmdldFN0YXRlRGF0YUZpZWxkKCdzb21lX3ZhbHVlJykpOw0KcHJpbnQoJ2N1cnJlbnRDb250cmFjdC5nZXRTdGF0ZURhdGFGaWVsZChzb21lX2hhc2hfaWQpOiAnICsgY3VycmVudENvbnRyYWN0LmdldFN0YXRlRGF0YUZpZWxkKCdzb21lX2hhc2hfaWQnKSk7DQpwcmludCgnY3VycmVudENvbnRyYWN0LmdldERlZmluaXRpb25EYXRhRmllbGQoc2NyaXB0cyk6ICcgKyBjdXJyZW50Q29udHJhY3QuZ2V0RGVmaW5pdGlvbkRhdGFGaWVsZCgnc2NyaXB0cycpKTsNCnByaW50KCdjdXJyZW50Q29udHJhY3QuZ2V0SXNzdWVyKCk6ICcgKyBjdXJyZW50Q29udHJhY3QuZ2V0SXNzdWVyKCkpOw0KcHJpbnQoJ2N1cnJlbnRDb250cmFjdC5nZXRPd25lcigpOiAnICsgY3VycmVudENvbnRyYWN0LmdldE93bmVyKCkpOw0KcHJpbnQoJ2N1cnJlbnRDb250cmFjdC5nZXRDcmVhdG9yKCk6ICcgKyBjdXJyZW50Q29udHJhY3QuZ2V0Q3JlYXRvcigpKTsNCnByaW50KCdjYWxsIGN1cnJlbnRDb250cmFjdC5zZXRPd25lcigpLi4uJyk7DQpjdXJyZW50Q29udHJhY3Quc2V0T3duZXIoWydaYXN0V3BXTlBNcXZWSkFNb2NzTVVUSmc0NWk4TG9DNU1zbXI3THQ5RWFKSlJ3VjJ4VicsICdhMXN4aGpkdEdoTmVqaThTV0pOUGt3VjVtNmRnV2ZyUUJuaGlBeGJRd1pUNlk1RnNYRCddKTsNCnByaW50KCdjdXJyZW50Q29udHJhY3QuZ2V0T3duZXIoKTogJyArIGN1cnJlbnRDb250cmFjdC5nZXRPd25lcigpKTsNCnJlc3VsdCA9IGpzQXBpUGFyYW1zWzBdICsganNBcGlQYXJhbXNbMV07DQo="; Contract contract = new Contract(TestKeys.privateKey(0)); contract.getStateData().set("some_value", HashId.createRandom().toBase64String()); contract.getStateData().set("some_hash_id", HashId.createRandom()); contract.getDefinition().setJS(Base64.decodeLines(scriptDump), fileName, new JSApiScriptParameters(), true); contract.seal(); HashId scriptHash = HashId.of(Base64.decodeLines(scriptDump)); String res = (String)contract.execJSByScriptHash(scriptHash, "3", "6"); System.out.println("res: " + res); assertEquals("36", res); String compression = contract.getDefinition().getData().getOrThrow("scripts", JSApiHelpers.fileName2fileKey(fileName), "compression"); System.out.println("compression: " + compression); assertEquals(JSApiCompressionEnum.RAW, JSApiCompressionEnum.valueOf(compression)); }
@Test public void compressedJavaScript() throws Exception { String fileName = "somescript.zip"; String scriptDump = "UEsDBBQAAgAIAEGVA02XbF8YbAEAAPoEAAANAAAAc29tZXNjcmlwdC5qc62UXU+DMBSG7038D9yVRUOckTk1XkzmzMiY+xJ0y7JU6KATKLYF9vNlyj6cUtR42/O+z3vSntOI4pDLwEO+T6SUUN8BlavDgwRSyY4pRSHXSMgptLl0LS1YI8KKi7j2uSSvLNEHac+1UrcduXIpAelIKiiK7QOUYIZJKIBsJWKURhHkyGlwAWtHI4bdU+xiUVdrgRjTg6sTAWYtEGOGPOu6CTlsYeQ7MiMBmiXQj1ExeM8Cth7whzAPMm+GnV/G5a6ywCaa4xDz7Il3Um2KI86KA78zgdxVFthmLEZUNLe5oGRG0lBIyes/mFpCy2aW7IGg73/Rsk2koijvm16omIAxZNyKrG7PeE1MvWEQmxkPI909U3G9QzTVYAE97/CLW6jrg9Q8XZrgWAKwypbewuF3XhctcH1o6d3eS2qqQc1xrTnt34Qebiyf++l4VHtSW+yxCab/dokUsdjffFXZ5sCATU6mmW/3oDrNpG9QSwECFAAUAAIACABBlQNNl2xfGGwBAAD6BAAADQAAAAAAAAAAACAAAAAAAAAAc29tZXNjcmlwdC5qc1BLBQYAAAAAAQABADsAAACXAQAAAAA="; Contract contract = new Contract(TestKeys.privateKey(0)); contract.getStateData().set("some_value", HashId.createRandom().toBase64String()); contract.getStateData().set("some_hash_id", HashId.createRandom()); JSApiScriptParameters scriptParameters = new JSApiScriptParameters(); scriptParameters.isCompressed = true; contract.getDefinition().setJS(Base64.decodeLines(scriptDump), fileName, scriptParameters); contract.seal(); String res = (String)contract.execJS(Base64.decodeLines(scriptDump), "3", "6"); System.out.println("res: " + res); assertEquals("36", res); String compression = contract.getDefinition().getData().getOrThrow("scripts", JSApiHelpers.fileName2fileKey(fileName), "compression"); System.out.println("compression: " + compression); assertEquals(JSApiCompressionEnum.ZIP, JSApiCompressionEnum.valueOf(compression)); }