UnsContract UnsContract = new UnsContract(); UnsContract.setNodeInfoProvider(nodeInfoProvider); UnsContract.setApiLevel(3); Contract.Definition cd = UnsContract.getDefinition(); cd.setExpiresAt(UnsContract.getCreatedAt().plusMonths(60)); UnsContract.registerRole(issuerRole); UnsContract.createRole("issuer", issuerRole); UnsContract.createRole("creator", issuerRole); UnsContract.registerRole(ownerRole); UnsContract.createRole("owner", ownerRole); UnsContract.addPermission(changeOwnerPerm); UnsContract.addPermission(revokePerm1); UnsContract.addPermission(revokePerm2); UnsContract.addUnsSpecific(); UnsContract.seal(); UnsContract.addSignatureToSeal(issuerKeys);
addError(Errors.FAILED_CHECK, "Environment should be not null"); return checkResult; checkResult = getExtendedType().equals(SmartContractType.UNS1.name()); if (!checkResult) { addError(Errors.FAILED_CHECK, "definition.extended_type", "illegal value, should be " + SmartContractType.UNS1.name() + " instead " + getExtendedType()); return checkResult; addError(Errors.FAILED_CHECK, NAMES_FIELD_NAME,"Names for storing is missing"); return checkResult; if(unsRecord.getOrigin() != null) { if(!unsRecord.getAddresses().isEmpty()) { addError(Errors.FAILED_CHECK, NAMES_FIELD_NAME, "name " + n.getUnsName() + " referencing to origin AND addresses. Should be either origin or addresses"); return false; if(!isOriginReferenceExists(unsRecord.getOrigin())) { addError(Errors.FAILED_CHECK, NAMES_FIELD_NAME, "name " + n.getUnsName() + " referencing to origin " + unsRecord.getOrigin().toString() + " but no corresponding reference is found"); return false; List<Contract> matchingContracts = getTransactionPack().getReferencedItems().values().stream() .filter(contract -> contract.getId().equals(unsRecord.getOrigin()) || contract.getOrigin() != null && contract.getOrigin().equals(unsRecord.getOrigin())) addError(Errors.FAILED_CHECK, NAMES_FIELD_NAME, "name " + n.getUnsName() + " referencing to origin " + unsRecord.getOrigin().toString() + " but no corresponding referenced contract is found"); return false; if(!contract.getRole("issuer").isAllowedForKeys(getEffectiveKeys())) { addError(Errors.FAILED_CHECK, NAMES_FIELD_NAME, "name " + n.getUnsName() + " referencing to origin " + unsRecord.getOrigin().toString() + ". UNS1 contract should be also signed by this contract issuer key.");
@Override public boolean beforeUpdate(ImmutableEnvironment c) { boolean checkResult = false; calculatePrepaidNamesForDays(false); checkResult = prepaidNamesForDays == getStateData().getDouble(PREPAID_ND_FIELD_NAME); if (!checkResult) { addError(Errors.FAILED_CHECK, "Wrong [state.data." + PREPAID_ND_FIELD_NAME + "] value. " + "Should be sum of early paid U and paid U by current revision."); return checkResult; } checkResult = additionallyUnsCheck(c); return checkResult; }
@Override public boolean beforeCreate(ImmutableEnvironment c) { boolean checkResult = true; calculatePrepaidNamesForDays(false); int paidU = getPaidU(); if(paidU == 0) { if(getPaidU(true) > 0) { addError(Errors.FAILED_CHECK, "Test payment is not allowed for storing storing names"); } checkResult = false; } else if(paidU < getMinPayment()) { addError(Errors.FAILED_CHECK, "Payment for UNS contract is below minimum level of " + getMinPayment() + "U"); checkResult = false; } if (!checkResult) { addError(Errors.FAILED_CHECK, "UNS contract hasn't valid payment"); return checkResult; } checkResult = prepaidNamesForDays == getStateData().getDouble(PREPAID_ND_FIELD_NAME); if (!checkResult) { addError(Errors.FAILED_CHECK, "Wrong [state.data." + PREPAID_ND_FIELD_NAME + "] value. " + "Should be sum of early paid U and paid U by current revision."); return checkResult; } checkResult = additionallyUnsCheck(c); return checkResult; }
/** * Method creates {@link UnsContract} contract from dsl file where contract is described. * @param fileName is path to dsl file with yaml structure of data for contract. */ public static UnsContract fromDslFile(String fileName) throws IOException { Yaml yaml = new Yaml(); try (FileReader r = new FileReader(fileName)) { Binder binder = Binder.from(DefaultBiMapper.deserialize((Map) yaml.load(r))); return new UnsContract().initializeWithDsl(binder); } }
uns1.addSignerKey(authorizedNameServiceKey); uns1.seal(); unsName.addUnsRecord(unsRecord1); unsName.addUnsRecord(unsRecord2); uns1.addUnsName(unsName); uns1.addOriginContract(nameContract); uns1.seal(); uns1.addSignatureToSeal(randomPrivateKey1); uns1.addSignatureToSeal(TestKeys.privateKey(8)); uns1.check(); uns1.traceErrors(); Parcel payingParcel = ContractsService.createPayingParcel(uns1.getTransactionPack(), paymentContract, 1, 1470, stepaPrivateKeys, false); assertEquals(ItemState.APPROVED, node.waitItem(uns1.getNew().get(0).getId(), 8000).state); uns2.addSignerKey(authorizedNameServiceKey); uns2.seal(); unsName.addUnsRecord(unsRecord1); unsName.addUnsRecord(unsRecord2); uns2.addUnsName(unsName); uns2.addOriginContract(nameContract); uns2.setNodeInfoProvider(nodeInfoProvider); uns2.seal(); uns2.addSignatureToSeal(randomPrivateKey2);
uns.addSignerKey(TestKeys.privateKey(1)); uns.addSignerKey(randomPrivKey1); uns.addSignerKey(randomPrivKey3); uns.addSignerKey(authorizedNameServiceKey); uns.seal(); uns.addUnsName(unsNameToChange); uns.addUnsName(unsNameToRemove); uns.addOriginContract(referencesContract1); uns.setNodeInfoProvider(nodeInfoProvider); uns.seal(); uns.check(); uns.traceErrors(); Parcel payingParcel = ContractsService.createPayingParcel(uns.getTransactionPack(), paymentContract, 1, 1470, stepaPrivateKeys, false); assertEquals(ItemState.APPROVED, node.waitItem(uns.getNew().get(0).getId(), 8000).state); ItemResult itemResult = node.waitItem(uns.getId(), 8000); assertEquals("ok", itemResult.extraDataBinder.getBinder("onCreatedResult").getString("status", null)); uns = (UnsContract) uns.createRevision(keys); uns.addUnsName(unsNameToAdd); uns.addOriginContract(referencesContract2); uns.removeName(unsNameToRemove.getUnsName()); UnsName unsNameToChangeCopy = uns.getUnsName(unsNameToChange.getUnsName());
UnsContract uns = new UnsContract(manufacturePrivateKeys.iterator().next()); uns.setNodeInfoProvider(nodeInfoProvider); uns.addSignerKey(authorizedNameServiceKey); uns.seal(); unsName.addUnsRecord(unsRecord1); unsName.addUnsRecord(unsRecord2); uns.addUnsName(unsName); uns.addOriginContract(referencesContract); uns.setNodeInfoProvider(nodeInfoProvider); uns.seal(); uns.addSignatureToSeal(randomPrivKey); uns.addSignatureToSeal(TestKeys.privateKey(8)); uns.check(); uns.traceErrors(); Parcel payingParcel = ContractsService.createPayingParcel(uns.getTransactionPack(), paymentContract, 1, 1470, stepaPrivateKeys, false); assertEquals(1470 * config.getServiceRate(NSmartContract.SmartContractType.UNS1.name()).doubleValue(), uns.getPrepaidNamesDays().doubleValue(), 0.01); assertEquals(ItemState.APPROVED, node.waitItem(uns.getNew().get(0).getId(), 8000).state); double days = (double) 1470 * config.getServiceRate(NSmartContract.SmartContractType.UNS1.name()).doubleValue() / uns.getUnsName(reducedName).getRecordsCount(); long seconds = (long) (days * 24 * 3600); ZonedDateTime calculateExpires = timeReg1.plusSeconds(seconds); UnsContract refilledUnsContract = (UnsContract) uns.createRevision(manufacturePrivateKeys.iterator().next()); refilledUnsContract.setNodeInfoProvider(nodeInfoProvider);
UnsContract uns = new UnsContract(key); unsName.addUnsRecord(unsRecord1); unsName.addUnsRecord(unsRecord2); uns.addUnsName(unsName); uns.addOriginContract(referencesContract); uns.setNodeInfoProvider(nodeInfoProvider); uns.addNewItems(paymentDecreased); uns.addSignerKey(authorizedNameServiceKey); uns.addSignerKey(randomPrivKey); uns.seal(); uns.check(); uns.traceErrors(); assertTrue(uns.isOk()); assertEquals(NSmartContract.SmartContractType.UNS1.name(), uns.getDefinition().getExtendedType()); assertEquals(NSmartContract.SmartContractType.UNS1.name(), uns.get("definition.extended_type")); Multimap<String, Permission> permissions = uns.getPermissions(); Collection<Permission> mdp = permissions.get("modify_data"); assertNotNull(mdp); assertTrue(((ModifyDataPermission)mdp.iterator().next()).getFields().containsKey("action")); assertEquals(uns.getUnsName(reducedName).getUnsReducedName(), reducedName); assertEquals(uns.getUnsName(reducedName).getUnsDescription(), "test description modified"); assertEquals(uns.getUnsName(reducedName).getUnsURL(), "http://test_modified.com"); assertNotEquals(uns.getUnsName(reducedName).findUnsRecordByOrigin(referencesContract.getOrigin()), -1);
name, "test description", "http://test.com", referencesContract); uns.getUnsName(name).setUnsReducedName(name); uns.addSignerKey(authorizedNameServiceKey); uns.addSignerKey(TestKeys.privateKey(8)); uns.seal(); uns.check(); uns.traceErrors(); Parcel payingParcel = ContractsService.createPayingParcel(uns.getTransactionPack(), paymentContract, 1, 1470, stepaPrivateKeys, false); assertEquals(ItemState.UNDEFINED, node.waitItem(uns.getNew().get(0).getId(), 8000).state);
UnsContract uns = new UnsContract(key); unsName.addUnsRecord(unsRecord1); unsName.addUnsRecord(unsRecord2); uns.addUnsName(unsName); uns.addOriginContract(referencesContract); uns.setNodeInfoProvider(nodeInfoProvider); uns.addNewItems(paymentDecreased); uns.addSignerKey(authorizedNameServiceKey); uns.addSignerKey(randomPrivKey); uns.seal(); uns.check(); uns.traceErrors(); assertTrue(uns.isOk()); assertEquals(((UnsContract)desUns).getUnsName(reducedName).getUnsReducedName(), reducedName); assertEquals(((UnsContract)desUns).getUnsName(reducedName).getUnsDescription(), "test description"); assertEquals(((UnsContract)desUns).getUnsName(reducedName).getUnsURL(), "http://test.com"); assertNotEquals(((UnsContract)desUns).getUnsName(reducedName).findUnsRecordByOrigin(referencesContract.getOrigin()), -1); assertNotEquals(((UnsContract)desUns).getUnsName(reducedName).findUnsRecordByKey(randomPrivKey.getPublicKey()), -1); assertNotEquals(((UnsContract)desUns).getUnsName(reducedName).findUnsRecordByAddress(new KeyAddress(randomPrivKey.getPublicKey(), 0, true)), -1); Contract copiedUns = uns.copy(); assertEquals(((UnsContract)copiedUns).getUnsName(reducedName).getUnsReducedName(), reducedName); assertEquals(((UnsContract)copiedUns).getUnsName(reducedName).getUnsDescription(), "test description"); assertEquals(((UnsContract)copiedUns).getUnsName(reducedName).getUnsURL(), "http://test.com");
uns3.getUnsName(name).setUnsReducedName(name); uns3.addSignatureToSeal(authorizedNameServiceKey); uns3.addSignatureToSeal(randomPrivKey); uns3.addSignatureToSeal(TestKeys.privateKey(8)); uns3.check(); uns3.traceErrors(); uns2.getUnsName(name).setUnsReducedName(name); uns2.addSignatureToSeal(authorizedNameServiceKey); uns2.addSignatureToSeal(randomPrivKey); uns2.addSignatureToSeal(TestKeys.privateKey(8)); uns2.check(); uns2.traceErrors(); uns.getUnsName(name).setUnsReducedName(name); uns.addSignatureToSeal(authorizedNameServiceKey); uns.addSignatureToSeal(randomPrivKey); uns.addSignatureToSeal(TestKeys.privateKey(8)); uns.check(); uns.traceErrors(); Parcel payingParcel = ContractsService.createPayingParcel(uns.getTransactionPack(), paymentContract, 1, nodeInfoProvider.getMinPayment(uns.getExtendedType()), stepaPrivateKeys, false); assertEquals(ItemState.APPROVED, node.waitItem(uns.getNew().get(0).getId(), 8000).state); payingParcel = ContractsService.createPayingParcel(uns2.getTransactionPack(), paymentContract, 1, nodeInfoProvider.getMinPayment(uns.getExtendedType()), stepaPrivateKeys, false); assertEquals(ItemState.UNDEFINED, node.waitItem(uns2.getNew().get(0).getId(), 8000).state);
@Test public void goodUnsContractFromDSL() throws Exception { PrivateKey authorizedNameServiceKey = TestKeys.privateKey(3); config.setAuthorizedNameServiceCenterKeyData(new Bytes(authorizedNameServiceKey.getPublicKey().pack())); Contract paymentDecreased = createUnsPayment(); UnsContract uns = UnsContract.fromDslFile(rootPath + "uns/simple_uns_contract.yml"); uns.setNodeInfoProvider(nodeInfoProvider); uns.addSignerKeyFromFile(rootPath + "_xer0yfe2nn1xthc.private.unikey"); uns.addSignerKey(authorizedNameServiceKey); uns.addNewItems(paymentDecreased); uns.seal(); uns.check(); uns.traceErrors(); assertTrue(uns.isOk()); assertEquals(NSmartContract.SmartContractType.UNS1.name(), uns.getDefinition().getExtendedType()); assertEquals(NSmartContract.SmartContractType.UNS1.name(), uns.get("definition.extended_type")); assertTrue(uns instanceof UnsContract); assertTrue(uns instanceof NSmartContract); assertTrue(uns instanceof NContract); }
config.setAuthorizedNameServiceCenterKeyData(new Bytes(authorizedNameServiceKey.getPublicKey().pack())); UnsContract uns = UnsContract.fromDslFile(ROOT_PATH + "uns/simple_uns_contract.yml"); UnsName unsName = uns.getUnsName("test_from_dsl"); unsName.removeUnsRecord(0); unsName.setUnsName("test_from_dsl" + Instant.now().getEpochSecond()); unsName.addUnsRecord(new UnsRecord(randomPrivKey.getPublicKey())); uns.setNodeInfoProvider(nodeInfoProvider); uns.addSignerKey(manufacturePrivateKeys.iterator().next()); uns.addSignerKey(authorizedNameServiceKey); uns.addSignerKey(randomPrivKey); uns.seal(); uns.check(); uns.traceErrors(); Parcel payingParcel = ContractsService.createPayingParcel(uns.getTransactionPack(), paymentContract, 1, 2000, stepaPrivateKeys, false); assertEquals(ItemState.APPROVED, node.waitItem(uns.getNew().get(0).getId(), 8000).state); ItemResult itemResult = node.waitItem(uns.getId(), 8000); assertEquals("ok", itemResult.extraDataBinder.getBinder("onCreatedResult").getString("status", null));
unsContract.getUnsName(unsTestName).setUnsReducedName(unsTestName); unsContract.addSignerKey(authorizedNameServiceKey); unsContract.seal(); unsContract.check(); unsContract.traceErrors(); Parcel payingParcel = ContractsService.createPayingParcel(unsContract.getTransactionPack(), paymentContract, 1, 2000, manufacturePrivateKeys, false); assertEquals(false, Arrays.equals(unsContract.getPackedTransaction(), unsContractBytes)); itemResult = testSpace.client.getState(unsContract.getId()); System.out.println("Uns : " + itemResult); assertEquals(ItemState.APPROVED, itemResult.state); assertEquals(true, Arrays.equals(unsContract.getPackedTransaction(), unsContractBytes)); unsContract2.getUnsName(unsTestName).setUnsReducedName(unsTestName); unsContract2.addSignerKey(authorizedNameServiceKey); unsContract2.addSignerKey(randomPrivKey); unsContract2.seal(); unsContract2.check(); unsContract2.traceErrors(); payingParcel = ContractsService.createPayingParcel(unsContract2.getTransactionPack(), paymentContract, 1, 2000, manufacturePrivateKeys, false); assertEquals(false, Arrays.equals(unsContract2.getPackedTransaction(), unsContractBytes)); itemResult = testSpace.client.getState(unsContract2.getId()); System.out.println("Uns : " + itemResult);
if(getDefinition().getExtendedType() == null || !getDefinition().getExtendedType().equals(SmartContractType.UNS1.name())) getDefinition().setExtendedType(SmartContractType.UNS1.name()); registerRole(ownerLink); HashMap<String, Object> fieldsMap = new HashMap<>(); fieldsMap.put("action", null); Binder modifyDataParams = Binder.of("fields", fieldsMap); ModifyDataPermission modifyDataPermission = new ModifyDataPermission(ownerLink, modifyDataParams); addPermission(modifyDataPermission); addPermission(revokePermission);
contract = new UnsContract(bb, this); break;
manufacturePublicKeys.add(manufacturePrivateKeys.iterator().next().getPublicKey()); UnsContract uns = ContractsService.createUnsContract(manufacturePrivateKeys, manufacturePublicKeys, nodeInfoProvider); uns.addSignerKey(authorizedNameServiceKey); uns.seal(); unsName.addUnsRecord(unsRecord1); unsName.addUnsRecord(unsRecord2); uns.addUnsName(unsName); uns.addOriginContract(referencesContract); uns.setNodeInfoProvider(nodeInfoProvider); uns.seal(); uns.addSignatureToSeal(randomPrivKey); uns.addSignatureToSeal(TestKeys.privateKey(8)); uns.check(); uns.traceErrors(); Parcel payingParcel = ContractsService.createPayingParcel(uns.getTransactionPack(), paymentContract, 1, 1470, stepaPrivateKeys, false); assertEquals(ItemState.APPROVED, irPayload.state); assertEquals(ItemState.REVOKED, node.waitItem(payingParcel.getPayment().getContract().getId(), 8000).state); assertEquals(ItemState.APPROVED, node.waitItem(uns.getNew().get(0).getId(), 8000).state); ItemResult itemResult = node.waitItem(uns.getId(), 8000); assertEquals("ok", itemResult.extraDataBinder.getBinder("onCreatedResult").getString("status", null));
uns.getUnsName(reducedName).setUnsReducedName(reducedName); uns.addSignerKey(TestKeys.privateKey(1)); uns.addSignerKey(authorizedNameServiceKey); uns.seal(); uns.check(); uns.traceErrors(); Parcel payingParcel = ContractsService.createPayingParcel(uns.getTransactionPack(), paymentContract, 1, 1470, stepaPrivateKeys, false); assertEquals(ItemState.APPROVED, node.waitItem(uns.getNew().get(0).getId(), 8000).state); ItemResult itemResult = node.waitItem(uns.getId(), 8000); assertEquals("ok", itemResult.extraDataBinder.getBinder("onCreatedResult").getString("status", null)); uns = (UnsContract) unsOriginal.createRevision(keys); uns.addOriginContract(referencesContract1); uns.setNodeInfoProvider(nodeInfoProvider); uns.seal(); payingParcel = ContractsService.createPayingParcel(uns.getTransactionPack(), paymentContract, 1, 1470, stepaPrivateKeys, false); assertEquals(ItemState.UNDEFINED, node.waitItem(uns.getNew().get(0).getId(), 8000).state); uns = (UnsContract) unsOriginal.createRevision(keys); uns.addOriginContract(referencesContract2); uns.setNodeInfoProvider(nodeInfoProvider); uns.seal(); payingParcel = ContractsService.createPayingParcel(uns.getTransactionPack(), paymentContract, 1, 1470, stepaPrivateKeys, false);
name, "test description", "http://test.com", randomPrivKey.getPublicKey()); uns.getUnsName(name).setUnsReducedName(name); uns.addSignerKey(authorizedNameServiceKey); uns.seal(); uns.check(); uns.traceErrors(); Parcel payingParcel = ContractsService.createPayingParcel(uns.getTransactionPack(), paymentContract, 1, 1470, stepaPrivateKeys, false); assertEquals(ItemState.UNDEFINED, node.waitItem(uns.getNew().get(0).getId(), 8000).state);