- Add the Codota plugin to your IDE and get smart completions
private void myMethod () {}
static Contract createComplexConctract(PrivateKey key, int subcontracts, int n) { Contract root = createSimpleContract(key); for(int i = 0; i < subcontracts; i++) { Contract c = createSimpleContract(key); c.setExpiresAt(c.getExpiresAt().plusSeconds(i+1+(subcontracts+1)*n)); c.seal(); root.addNewItems(c); } root.setExpiresAt(root.getExpiresAt().plusSeconds((subcontracts+1)*n)); root.addSignerKey(key); root.seal(); return root; }
static Contract createSimpleContract(PrivateKey key) { Contract result = new Contract(); // default expiration date result.setExpiresAt(ZonedDateTime.now().plusDays(90)); // issuer role is a key for a new contract result.setIssuerKeys(key.getPublicKey().getShortAddress()); // issuer is owner, link roles result.registerRole(new RoleLink("owner", "issuer")); result.registerRole(new RoleLink("creator", "issuer")); return result; }
/** * Create a batch contract, which registers all the included contracts, possibily referencing each other, * in the single transaction, saving time and reducing U cost. Note that if any of the batched contracts * fails, the whole batch is rejected. * * @param contracts to register all in one batch. Shuld be prepared and sealed. * @param keys to sign batch with. * @return batch contract that includes all contracts as new items. */ public static Contract createBatch(Collection<PrivateKey> keys, Contract... contracts) { Contract batch = new Contract(); batch.setIssuerKeys(keys); batch.registerRole(new RoleLink("creator","issuer")); batch.registerRole(new RoleLink("owner","issuer")); batch.setExpiresAt(ZonedDateTime.now().plusDays(3)); for(Contract c : contracts) { batch.addNewItems(c); } batch.addSignerKeys(keys); batch.seal(); return batch; }
public void asd() throws Exception { PrivateKey key = new PrivateKey(Do.read("/Users/romanu/Downloads/ru/roman.uskov.privateKey.unikey")); Set<PrivateKey> issuers = new HashSet<>(); issuers.add(key); Set<PublicKey> owners = new HashSet<>(); owners.add(key.getPublicKey()); TestSpace testSpace = prepareTestSpace(); testSpace.nodes.forEach(n->n.config.setIsFreeRegistrationsAllowedFromYaml(true)); for(int i = 109; i < 110; i++) { Contract c = ContractsService.createTokenContract(issuers, owners, new BigDecimal("100000.9"), new BigDecimal("0.01")); c.setIssuerKeys(key.getPublicKey().getShortAddress()); c.setCreatorKeys(key.getPublicKey().getShortAddress()); c.setExpiresAt(ZonedDateTime.now().plusDays(10)); c.seal(); new FileOutputStream("/Users/romanu/Downloads/ru/token"+i+".unicon").write(c.getPackedTransaction()); assertEquals(testSpace.client.register(Contract.fromPackedTransaction(Do.read("/Users/romanu/Downloads/ru/token"+i+".unicon")).getPackedTransaction(),10000).state,ItemState.APPROVED); } }
@Ignore("removed functionality") @Test(timeout = 90000) public void declineItemFromoutWhiteList() throws Exception { Set<PrivateKey> stepaPrivateKeys = new HashSet<>(); stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"))); Contract stepaCoins = Contract.fromDslFile(ROOT_PATH + "stepaCoins.yml"); stepaCoins.setExpiresAt(ZonedDateTime.now().plusMonths(1)); stepaCoins.addSignerKey(stepaPrivateKeys.iterator().next()); stepaCoins.seal(); stepaCoins.check(); stepaCoins.traceErrors(); node.registerItem(stepaCoins); ItemResult itemResult = node.waitItem(stepaCoins.getId(), 18000); assertEquals(ItemState.UNDEFINED, itemResult.state); }
/** * Create a default empty new contract using a provided key as issuer and owner and sealer. Default expiration is * set to 90 days. * <p> * This constructor adds key as sealing signature so it is ready to {@link #seal()} just after construction, thought * it is necessary to put real data to it first. It is allowed to change owner, expiration and data fields after * creation (but before sealing). * <p> * Change owner permission is added by default * @param key is {@link PrivateKey} for creating roles "issuer", "owner", "creator" and sign contract */ public Contract(PrivateKey key) { this(); // default expiration date setExpiresAt(ZonedDateTime.now().plusDays(90)); // issuer role is a key for a new contract setIssuerKeys(key.getPublicKey()); // issuer is owner, link roles registerRole(new RoleLink("owner", "issuer")); registerRole(new RoleLink("creator", "issuer")); RoleLink roleLink = new RoleLink("@change_ower_role","owner"); roleLink.setContract(this); // owner can change permission addPermission(new ChangeOwnerPermission(roleLink)); // issuer should sign addSignerKey(key); }
@Test public void checkTestnetNewItemExpirationDateCriteria() throws Exception { PrivateKey key = new PrivateKey(Do.read(rootPath + "keys/stepan_mamontov.private.unikey")); Contract newItem = Contract.fromDslFile(rootPath + "LamborghiniTestDrive.yml"); newItem.addSignerKey(key); sealCheckTrace(newItem, true); newItem.setExpiresAt(ZonedDateTime.now().plusMonths(13)); Contract contract = Contract.fromDslFile(rootPath + "LamborghiniTestDrive.yml"); contract.addSignerKey(key); contract.setExpiresAt(ZonedDateTime.now().plusMonths(1)); contract.addNewItems(newItem); sealCheckTrace(contract, true); assertFalse(contract.isSuitableForTestnet()); // now set contract limited for testnet contract.setLimitedForTestnet(true); sealCheckTrace(contract, false); assertFalse(contract.isSuitableForTestnet()); }
@Test public void checkFitTestnetCriteria() throws Exception { PrivateKey key = new PrivateKey(Do.read(rootPath + "keys/stepan_mamontov.private.unikey")); Contract contract = Contract.fromDslFile(rootPath + "LamborghiniTestDrive.yml"); contract.setExpiresAt(ZonedDateTime.now().plusMonths(1)); contract.addSignerKey(key); sealCheckTrace(contract, true); System.out.println("Processing cost is " + contract.getProcessedCostU()); assertTrue(contract.isSuitableForTestnet()); // now set contract limited for testnet contract.setLimitedForTestnet(true); sealCheckTrace(contract, true); assertTrue(contract.isSuitableForTestnet()); }
@Test public void checkTestnetCostUCriteria() throws Exception { PrivateKey key = new PrivateKey(Do.read(rootPath + "keys/stepan_mamontov.private.unikey")); Contract contract = Contract.fromDslFile(rootPath + "LamborghiniTestDrive.yml"); contract.setExpiresAt(ZonedDateTime.now().plusMonths(1)); contract.addSignerKey(key); for (int i = 0; i < 100; i++) { Contract newItem = Contract.fromDslFile(rootPath + "LamborghiniTestDrive.yml"); newItem.setExpiresAt(ZonedDateTime.now().plusMonths(1)); newItem.addSignerKey(key); sealCheckTrace(newItem, true); contract.addNewItems(newItem); } sealCheckTrace(contract, true); System.out.println("Processing cost is " + contract.getProcessedCostU()); assertTrue(contract.getProcessedCostU() > Config.maxCostUInTestMode); assertFalse(contract.isSuitableForTestnet()); // now set contract limited for testnet contract.setLimitedForTestnet(true); sealCheckTrace(contract, false); assertFalse(contract.isSuitableForTestnet()); }
@Test public void checkTestnetKeyStrengthCriteria() throws Exception { PrivateKey key = new PrivateKey(Do.read(PRIVATE_KEY_PATH)); Contract contract = createCoin100apiv3(); contract.setExpiresAt(ZonedDateTime.now().plusMonths(1)); contract.addSignerKey(key); sealCheckTrace(contract, true); assertFalse(contract.isSuitableForTestnet()); // now set contract limited for testnet contract.setLimitedForTestnet(true); sealCheckTrace(contract, false); assertFalse(contract.isSuitableForTestnet()); }
@Test public void checkTestnetExpirationDateCriteria() throws Exception { PrivateKey key = new PrivateKey(Do.read(rootPath + "keys/stepan_mamontov.private.unikey")); Contract contract = Contract.fromDslFile(rootPath + "LamborghiniTestDrive.yml"); contract.addSignerKey(key); sealCheckTrace(contract, true); contract.setExpiresAt(ZonedDateTime.now().plusMonths(13)); assertFalse(contract.isSuitableForTestnet()); // now set contract limited for testnet contract.setLimitedForTestnet(true); sealCheckTrace(contract, false); assertFalse(contract.isSuitableForTestnet()); }
@Test public void modifyExpiresAtWhiteList() throws Exception { ZonedDateTime now = ZonedDateTime.ofInstant(Instant.ofEpochSecond(ZonedDateTime.now().toEpochSecond()), ZoneId.systemDefault()); Contract contract = new Contract(TestKeys.privateKey(0)); ModifyDataPermission modifyDataPermission = new ModifyDataPermission(contract.getRole("owner"), new Binder()); modifyDataPermission.addField("/expires_at", Do.listOf(now.plusDays(1), now.plusDays(2))); contract.addPermission(modifyDataPermission); contract.seal(); Contract changed = contract.createRevision(); changed.addSignerKey(TestKeys.privateKey(0)); changed.setExpiresAt(now.plusDays(1)); changed.seal(); changed.check(); changed.traceErrors(); assertTrue(changed.isOk()); changed = contract.createRevision(); changed.addSignerKey(TestKeys.privateKey(0)); changed.setExpiresAt(now.plusDays(2)); changed.seal(); changed.check(); assertTrue(changed.isOk()); changed = contract.createRevision(); changed.addSignerKey(TestKeys.privateKey(0)); changed.setExpiresAt(now.plusDays(3)); changed.seal(); changed.check(); assertTrue(!changed.isOk()); }
@Ignore @Test public void checkRevisionExpiresAtDistantPastTime() throws Exception{ Contract baseContract = Contract.fromDslFile(ROOT_PATH + "DeLoreanOwnership.yml"); PrivateKey manufacturePrivateKey = new PrivateKey(Do.read(ROOT_PATH + "_xer0yfe2nn1xthc.private.unikey")); PrivateKey ownerPrivateKey = new PrivateKey(Do.read(ROOT_PATH + "keys/marty_mcfly.private.unikey")); baseContract.addSignerKey(manufacturePrivateKey); baseContract.seal(); baseContract.check(); baseContract.traceErrors(); System.out.println("Base contract is valid: " + baseContract.isOk()); registerAndCheckApproved(baseContract); Contract revContract = baseContract.createRevision(ownerPrivateKey); revContract.setExpiresAt(ZonedDateTime.of(LocalDateTime.MIN.truncatedTo(ChronoUnit.SECONDS), ZoneOffset.UTC)); revContract.seal(); revContract.check(); revContract.traceErrors(); assertTrue(revContract.isOk()); }
@Ignore @Test public void checkRevisionExpiresAtDistantFutureTime() throws Exception{ Contract baseContract = Contract.fromDslFile(ROOT_PATH + "DeLoreanOwnership.yml"); PrivateKey manufacturePrivateKey = new PrivateKey(Do.read(ROOT_PATH + "_xer0yfe2nn1xthc.private.unikey")); PrivateKey ownerPrivateKey = new PrivateKey(Do.read(ROOT_PATH + "keys/marty_mcfly.private.unikey")); baseContract.addSignerKey(manufacturePrivateKey); baseContract.seal(); baseContract.check(); baseContract.traceErrors(); System.out.println("Base contract is valid: " + baseContract.isOk()); registerAndCheckApproved(baseContract); Contract revContract = baseContract.createRevision(ownerPrivateKey); revContract.setExpiresAt(ZonedDateTime.of(LocalDateTime.MAX.truncatedTo(ChronoUnit.SECONDS), ZoneOffset.UTC)); revContract.seal(); revContract.check(); revContract.traceErrors(); assertTrue(revContract.isOk()); }
private Contract createNetConfigContract(List<NodeInfo> netConfig,PrivateKey issuerKey) throws IOException { Contract contract = new Contract(); contract.setIssuerKeys(issuerKey.getPublicKey()); contract.registerRole(new RoleLink("creator", "issuer")); ListRole listRole = new ListRole("owner"); for(NodeInfo ni: netConfig) { SimpleRole role = new SimpleRole(ni.getName()); contract.registerRole(role); role.addKeyRecord(new KeyRecord(ni.getPublicKey())); listRole.addRole(role); } listRole.setQuorum(netConfig.size()-1); contract.registerRole(listRole); RoleLink ownerLink = new RoleLink("ownerlink","owner"); ChangeOwnerPermission changeOwnerPermission = new ChangeOwnerPermission(ownerLink); HashMap<String,Object> fieldsMap = new HashMap<>(); fieldsMap.put("net_config",null); Binder modifyDataParams = Binder.of("fields",fieldsMap); ModifyDataPermission modifyDataPermission = new ModifyDataPermission(ownerLink,modifyDataParams); contract.addPermission(changeOwnerPermission); contract.addPermission(modifyDataPermission); contract.setExpiresAt(ZonedDateTime.now().plusYears(40)); contract.getStateData().set("net_config",netConfig); contract.addSignerKey(issuerKey); contract.seal(); return contract; }
@Test public void modifyExpiresAtDeclined() throws Exception { Contract contract = new Contract(TestKeys.privateKey(0)); contract.getStateData().put("field_to_be_changed", "value1"); ModifyDataPermission modifyDataPermission = new ModifyDataPermission(contract.getRole("owner"), new Binder()); modifyDataPermission.addField("expires_at", null); contract.addPermission(modifyDataPermission); contract.seal(); Contract changed = contract.createRevision(); changed.addSignerKey(TestKeys.privateKey(0)); changed.setExpiresAt(ZonedDateTime.now().plusDays(1)); changed.seal(); changed.check(); assertTrue(!changed.isOk()); }
@Test public void modifyExpiresAtAllowed() throws Exception { Contract contract = new Contract(TestKeys.privateKey(0)); contract.getStateData().put("field_to_be_changed", "value1"); ModifyDataPermission modifyDataPermission = new ModifyDataPermission(contract.getRole("owner"), new Binder()); modifyDataPermission.addField("/expires_at", null); contract.addPermission(modifyDataPermission); contract.seal(); Contract changed = contract.createRevision(); changed.addSignerKey(TestKeys.privateKey(0)); changed.setExpiresAt(ZonedDateTime.now().plusDays(1)); changed.seal(); changed.check(); assertTrue(changed.isOk()); }
@Test public void registerContractWithAnonymousId() throws Exception { TestSpace ts = prepareTestSpace(); PrivateKey newPrivateKey = new PrivateKey(Do.read("./src/test_contracts/keys/u_key.private.unikey")); byte[] myAnonId = newPrivateKey.createAnonymousId(); Contract contract = new Contract(); contract.setExpiresAt(ZonedDateTime.now().plusDays(90)); Role r = contract.setIssuerKeys(AnonymousId.fromBytes(myAnonId)); contract.registerRole(new RoleLink("owner", "issuer")); contract.registerRole(new RoleLink("creator", "issuer")); contract.addPermission(new ChangeOwnerPermission(r)); contract.addSignerKey(newPrivateKey); contract.seal(); assertTrue(contract.isOk()); System.out.println("contract.check(): " + contract.check()); contract.traceErrors(); ts.client.getSession().setPrivateKey(newPrivateKey); ts.client.restart(); ItemResult itemResult = ts.client.register(contract.getPackedTransaction(), 5000); assertEquals(ItemState.APPROVED, itemResult.state); ts.nodes.forEach(x -> x.shutdown()); }
@Ignore @Test public void checkRevisionExpiresAtReсentPastTime() throws Exception{ Contract baseContract = Contract.fromDslFile(ROOT_PATH + "DeLoreanOwnership.yml"); PrivateKey manufacturePrivateKey = new PrivateKey(Do.read(ROOT_PATH + "_xer0yfe2nn1xthc.private.unikey")); PrivateKey ownerPrivateKey = new PrivateKey(Do.read(ROOT_PATH + "keys/marty_mcfly.private.unikey")); baseContract.addSignerKey(manufacturePrivateKey); baseContract.seal(); baseContract.check(); baseContract.traceErrors(); System.out.println("Base contract is valid: " + baseContract.isOk()); registerAndCheckApproved(baseContract); Contract revContract = baseContract.createRevision(ownerPrivateKey); revContract.setExpiresAt(revContract.getCreatedAt().minusMinutes(1)); revContract.seal(); revContract.check(); revContract.traceErrors(); assertTrue(revContract.isOk()); }
@Ignore @Test public void checkRevisionExpiresAtReсentFutureTime() throws Exception{ Contract baseContract = Contract.fromDslFile(ROOT_PATH + "DeLoreanOwnership.yml"); PrivateKey manufacturePrivateKey = new PrivateKey(Do.read(ROOT_PATH + "_xer0yfe2nn1xthc.private.unikey")); PrivateKey ownerPrivateKey = new PrivateKey(Do.read(ROOT_PATH + "keys/marty_mcfly.private.unikey")); baseContract.addSignerKey(manufacturePrivateKey); baseContract.seal(); baseContract.check(); baseContract.traceErrors(); System.out.println("Base contract is valid: " + baseContract.isOk()); registerAndCheckApproved(baseContract); Contract revContract = baseContract.createRevision(ownerPrivateKey); revContract.setExpiresAt(revContract.getCreatedAt().plusMinutes(1)); revContract.seal(); revContract.check(); revContract.traceErrors(); assertTrue(revContract.isOk()); }