/** * Get issuer of the contract * @return issuer role */ public Role getIssuer() { // maybe we should cache it return getRole("issuer"); }
/** * Get owner role * @return owner role */ public Role getOwner() { return getRole("owner"); }
/** * Get creator role * @return creator role */ public Role getCreator() { return getRole("creator"); }
/** * Get all addresses, used by registered role from the contract. For public keys returns addresses too. * @return list of strings with addresses */ @Deprecated public List<String> getRoleAddresses(String roleName) { return getRole(roleName).getAllAddresses(); }
@Deprecated public KeyRecord testGetOwner() { return getRole("owner").getKeyRecords().iterator().next(); }
/** * Return the resolved role taken from a bound contract. A resolved role may be a {@link RoleLink} itself, or null * (if a link is incorrect). * * @return {@link Role} */ @Nullable public Role getRole() { return getContract().getRole(roleName); }
public Binder serializeWith(BiSerializer serializer) { Binder of = Binder.of( "created_at", createdAt, "revision", revision, "owner", getRole("owner"), "created_by", getRole("creator"), "branch_id", branchId, "origin", serializer.serialize(origin), "parent", serializer.serialize(parent), "data", data ); if (expiresAt != null) of.set("expires_at", expiresAt); if (references != null) of.set("references", references); return serializer.serialize( of ); }
@Test public void serializeContractWithListRole() throws Exception { Contract c = Contract.fromDslFile("./src/test_contracts/simple_root_contract.yml"); SimpleRole s1 = new SimpleRole("role"); ListRole listRole = new ListRole("owner", 1, Do.listOf(s1)); c.registerRole(listRole); Binder b = BossBiMapper.serialize(c); Contract c1 = DefaultBiMapper.deserialize(b); assertEquals(c.getRole("owner"), c1.getRole("owner")); }
@Test public void createU() throws Exception { PrivateKey privateKey = TestKeys.privateKey(3); Set<PublicKey> keys = new HashSet(); keys.add(privateKey.getPublicKey()); Contract u = InnerContractsService.createFreshU(100, keys); u.check(); u.traceErrors(); assertEquals(true, u.getRole("owner").isAllowedForKeys(keys)); assertEquals(100, u.getStateData().getIntOrThrow("transaction_units")); PrivateKey manufacturePrivateKey = new PrivateKey(Do.read( "./src/test_contracts/keys/u_key.private.unikey")); Set<PublicKey> badKeys = new HashSet(); badKeys.add(manufacturePrivateKey.getPublicKey()); assertEquals(false, u.getRole("owner").isAllowedForKeys(badKeys)); }
@Test public void createTestU() throws Exception { PrivateKey privateKey = TestKeys.privateKey(3); Set<PublicKey> keys = new HashSet(); keys.add(privateKey.getPublicKey()); Contract u = InnerContractsService.createFreshU(100, keys, true); u.check(); u.traceErrors(); assertEquals(true, u.getRole("owner").isAllowedForKeys(keys)); assertEquals(100, u.getStateData().getIntOrThrow("transaction_units")); assertEquals(10000, u.getStateData().getIntOrThrow("test_transaction_units")); PrivateKey manufacturePrivateKey = new PrivateKey(Do.read( "./src/test_contracts/keys/u_key.private.unikey")); Set<PublicKey> badKeys = new HashSet(); badKeys.add(manufacturePrivateKey.getPublicKey()); assertEquals(false, u.getRole("owner").isAllowedForKeys(badKeys)); }
@Test public void getAllAddresses() throws Exception { Contract contract = new Contract(TestKeys.privateKey(0)); ListRole owner = new ListRole("owner"); owner.addRole(new SimpleRole("owner", Arrays.asList(TestKeys.publicKey(0), TestKeys.publicKey(1)))); owner.addRole(new SimpleRole("owner", Arrays.asList(TestKeys.publicKey(2).getLongAddress()))); owner.addRole(new SimpleRole("owner", Arrays.asList(TestKeys.publicKey(3).getShortAddress(), TestKeys.publicKey(4)))); contract.registerRole(owner); List<String> addresses = contract.getRole("owner").getAllAddresses(); System.out.println("owner: " + addresses); for (String addr : addresses) assertThat(addr, Matchers.anyOf( Matchers.equalTo(TestKeys.publicKey(0).getShortAddress().toString()), Matchers.equalTo(TestKeys.publicKey(1).getShortAddress().toString()), Matchers.equalTo(TestKeys.publicKey(2).getLongAddress().toString()), Matchers.equalTo(TestKeys.publicKey(3).getShortAddress().toString()), Matchers.equalTo(TestKeys.publicKey(4).getShortAddress().toString()) )); }
@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 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 defaultParameters() throws Exception { Contract contract = new Contract(TestKeys.privateKey(0)); contract.getStateData().put("field1", "33.000000000000000001"); ChangeNumberPermission changeNumberPermission = new ChangeNumberPermission(contract.getRole("owner"), Binder.of("field_name", "field1")); contract.addPermission(changeNumberPermission); contract.seal(); Contract changed = contract.createRevision(); changed.addSignerKey(TestKeys.privateKey(0)); changed.getStateData().set("field1", "33.000000000000000002"); changed.seal(); changed.check(); assertTrue(changed.isOk()); }
@Test public void modifyDataDeclined() 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()); contract.addPermission(modifyDataPermission); contract.seal(); Contract changed = contract.createRevision(); changed.addSignerKey(TestKeys.privateKey(0)); changed.getStateData().set("field_to_be_changed", "value2"); changed.seal(); changed.check(); assertTrue(!changed.isOk()); }
@Test public void changeDeclined() throws Exception { Contract contract = new Contract(TestKeys.privateKey(0)); contract.getStateData().put("field1", 33); ChangeNumberPermission changeNumberPermission = new ChangeNumberPermission(contract.getRole("owner"), Binder.of( "field_name", "field1", "min_value", 33, "max_value", 36, "min_step", 1, "max_step", 2 ) ); contract.addPermission(changeNumberPermission); contract.seal(); Contract changed = contract.createRevision(); changed.addSignerKey(TestKeys.privateKey(0)); changed.getStateData().set("field1", 36); changed.seal(); changed.check(); assertFalse(changed.isOk()); }
@Test public void lessMinValueDeclined() throws Exception { Contract contract = new Contract(TestKeys.privateKey(0)); contract.getStateData().put("field1", "33.000000000000000012"); ChangeNumberPermission changeNumberPermission = new ChangeNumberPermission(contract.getRole("owner"), Binder.of( "field_name", "field1", "min_value", "33.000000000000000008", "max_value", "34", "min_step", "-0.000000000000000005", "max_step", "0.000000000000000005" ) ); contract.addPermission(changeNumberPermission); contract.seal(); Contract changed = contract.createRevision(); changed.addSignerKey(TestKeys.privateKey(0)); changed.getStateData().set("field1", "33.000000000000000007"); changed.seal(); changed.check(); assertFalse(changed.isOk()); }
@Test public void modifyDataAllowed() 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("field_to_be_changed", null); contract.addPermission(modifyDataPermission); contract.seal(); Contract changed = contract.createRevision(); changed.addSignerKey(TestKeys.privateKey(0)); changed.getStateData().set("field_to_be_changed", "value2"); changed.seal(); changed.check(); assertTrue(changed.isOk()); }
@Test public void modifyReferencesDeclined() throws Exception { Contract contract = new Contract(TestKeys.privateKey(0)); ModifyDataPermission modifyDataPermission = new ModifyDataPermission(contract.getRole("owner"),new Binder()); modifyDataPermission.addField("references", null); contract.addPermission(modifyDataPermission); contract.seal(); Contract referencedContract = new Contract(TestKeys.privateKey(1)); referencedContract.seal(); Contract changed = contract.createRevision(); changed.addSignerKey(TestKeys.privateKey(0)); Reference ref = new Reference(referencedContract); ref.addMatchingItem(referencedContract); ref.type = Reference.TYPE_EXISTING_STATE; changed.addReference(ref); changed.seal(); changed.check(); assertTrue(!changed.isOk()); }
@Test public void modifyReferencesAllowed() throws Exception { Contract contract = new Contract(TestKeys.privateKey(0)); ModifyDataPermission modifyDataPermission = new ModifyDataPermission(contract.getRole("owner"),new Binder()); modifyDataPermission.addField("/references", null); contract.addPermission(modifyDataPermission); contract.seal(); Contract referencedContract = new Contract(TestKeys.privateKey(1)); referencedContract.seal(); Contract changed = contract.createRevision(); changed.addSignerKey(TestKeys.privateKey(0)); Reference ref = new Reference(referencedContract); ref.type = Reference.TYPE_EXISTING_STATE; ref.addMatchingItem(referencedContract); changed.addReference(ref); changed.seal(); changed.check(); changed.traceErrors(); assertTrue(changed.isOk()); }