@Test public void shouldNotSplitWithNegativeCount() throws Exception { Contract c = createCoin(); c.addSignerKeyFromFile(PRIVATE_KEY_PATH); sealCheckTrace(c, true); try { c.split(-1); fail("Expected exception to be thrown."); } catch (IllegalArgumentException e) { assertTrue(e.getMessage().equalsIgnoreCase("split: count should be > 0")); } try { c.split(0); fail("Expected exception to be thrown."); } catch (IllegalArgumentException e) { assertTrue(e.getMessage().equalsIgnoreCase("split: count should be > 0")); } }
@Test public void shouldNotSplitWithAnotherRevision() throws Exception { Contract c = createCoin(); c.addSignerKeyFromFile(PRIVATE_KEY_PATH); c.getState().setBranchNumber(1); try { Contract c2 = c.split(1)[0]; fail("Expected exception to be thrown."); } catch (IllegalArgumentException e) { assertTrue(e.getMessage().equalsIgnoreCase("this revision is already split")); } }
partContracts = contract.split(parts.size()); for (int i = 0; i < partContracts.length; i++) { Decimal partSize = new Decimal((String) parts.get(i));
/** * Split this contract extracting specified value from a named field. The contract must have suitable {@link * com.icodici.universa.contract.permissions.SplitJoinPermission} and be signed with proper keys to pass checks. * <p> * Important. This contract must be a new revision: call {@link #createRevision(PrivateKey...)} first. * * @param fieldName field to extract from * @param valueToExtract how much to extract * * @return new sibling contract with the extracted value. */ public Contract splitValue(String fieldName, Decimal valueToExtract) { Contract sibling = split(1)[0]; Binder stateData = getStateData(); Decimal value = new Decimal(stateData.getStringOrThrow(fieldName)); stateData.set(fieldName, value.subtract(valueToExtract).toString()); sibling.getStateData().put(fieldName, valueToExtract.toString()); return sibling; }
@Test public void checkTransactionPack() throws Exception { Contract r = new Contract(ownerKey1); r.seal(); Contract c = r.createRevision(ownerKey1); Contract n = c.split(1)[0]; n.seal(); c.seal(); c.addNewItems(n); String path = rootPath + "/testtranspack.unicon"; // path = "/Users/sergeych/dev/!/e7810197-d148-4936-866b-44daae182e83.transaction"; c.seal(); Files.deleteIfExists(Paths.get(path)); CLIMain.saveContract(c, path, true, true); // try (FileOutputStream fs = new FileOutputStream(path)) { // fs.write(c.getPackedTransaction()); // fs.close(); // } callMain("--check", path, "-v"); System.out.println(output); }
Contract splitNest = contractMoney.createRevision(); splitNest.addSignerKey(TestKeys.privateKey(1)); Contract[] contracts = splitNest.split(10); Decimal valChange = new Decimal(contractMoney.getStateData().getStringOrThrow("amount")); for (int i = 0; i < contracts.length; ++i) {
@Test public void shouldNotSplitWithWrongDataAmountSerialize() throws Exception { Contract c = createCoin(); c.addSignerKeyFromFile(PRIVATE_KEY_PATH); sealCheckTrace(c, true); Contract c2 = c.split(1)[0]; sealCheckTrace(c2, true); Binder sd2 = DefaultBiMapper.serialize(c2); Binder state = (Binder) sd2.get("state"); assertNotNull(state); assertTrue(state.size() > 0); Binder data = (Binder) state.get("data"); assertNotNull(data); assertTrue(data.size() > 0); data.remove(FIELD_NAME); Contract dc2 = DefaultBiMapper.deserialize(sd2); sealCheckTrace(dc2, false); }
@Test public void shouldNotSplitWithWrongOriginSerialize() throws Exception { Contract c = createCoin(); c.addSignerKeyFromFile(PRIVATE_KEY_PATH); sealCheckTrace(c, true); Contract c2 = c.split(1)[0]; sealCheckTrace(c2, true); Binder sd2 = DefaultBiMapper.serialize(c2); Binder state = (Binder) sd2.get("state"); assertNotNull(state); assertTrue(state.size() > 0); HashId origin = HashId.withDigest(Do.randomNegativeBytes(64)); Binder originB = DefaultBiMapper.serialize(origin); state.set("origin", originB); Contract dc2 = DefaultBiMapper.deserialize(sd2); sealCheckTrace(dc2, false); state.remove("origin"); Contract dc3 = DefaultBiMapper.deserialize(sd2); sealCheckTrace(dc3, false); }
Contract[] parts = part1.split(2); Contract part2 = parts[0]; Contract part3 = parts[1];
@Test public void shouldNotSplitWithWrongCreatedBySerialize() throws Exception { Contract c = createCoin(); c.addSignerKeyFromFile(PRIVATE_KEY_PATH); sealCheckTrace(c, true); Contract c2 = c.split(1)[0]; sealCheckTrace(c2, true); Binder sd2 = DefaultBiMapper.serialize(c2); Binder state = (Binder) sd2.get("state"); assertNotNull(state); assertTrue(state.size() > 0); state.set("createdBy", "other"); Contract dc2 = DefaultBiMapper.deserialize(sd2); sealCheckTrace(dc2, false); state.set("createdBy", "owner"); Contract dc3 = DefaultBiMapper.deserialize(sd2); sealCheckTrace(dc3, false); state.remove("createdBy"); Contract dc4 = DefaultBiMapper.deserialize(sd2); sealCheckTrace(dc4, false); }
@Test public void shouldNotSplitWithWrongParentSerialize() throws Exception { Contract c = createCoin(); c.addSignerKeyFromFile(PRIVATE_KEY_PATH); sealCheckTrace(c, true); Contract c2 = c.split(1)[0]; sealCheckTrace(c2, true); Binder sd2 = DefaultBiMapper.serialize(c2); Binder state = (Binder) sd2.get("state"); assertNotNull(state); assertTrue(state.size() > 0); HashId parent = HashId.withDigest(Do.randomNegativeBytes(64)); Binder parentB = DefaultBiMapper.serialize(parent); state.set("parent", parentB); Contract dc2 = DefaultBiMapper.deserialize(sd2); sealCheckTrace(dc2, false); state.remove("parent"); Contract dc3 = DefaultBiMapper.deserialize(sd2); sealCheckTrace(dc3, false); }
Assert.assertTrue(c1.check()); Contract[] array = c1.split(2); Contract c2 = array[0]; Contract c3 = array[1];