Search in sources :

Example 1 with FollowerContract

use of com.icodici.universa.contract.services.FollowerContract in project universa by UniversaBlockchain.

the class FollowerContractTest method serializeSmartContract.

@Test
public void serializeSmartContract() throws Exception {
    final PrivateKey key = new PrivateKey(Do.read(rootPath + "_xer0yfe2nn1xthc.private.unikey"));
    final PrivateKey key2 = new PrivateKey(Do.read(rootPath + "test_network_whitekey.private.unikey"));
    Contract simpleContract = new Contract(key2);
    simpleContract.seal();
    simpleContract.check();
    simpleContract.traceErrors();
    assertTrue(simpleContract.isOk());
    PrivateKey privateKey = new PrivateKey(2048);
    PublicKey callbackKey = privateKey.getPublicKey();
    Contract smartContract = new FollowerContract(key);
    assertTrue(smartContract instanceof FollowerContract);
    ((FollowerContract) smartContract).setNodeInfoProvider(nodeInfoProvider);
    smartContract.seal();
    smartContract.check();
    smartContract.traceErrors();
    assertTrue(smartContract.isOk());
    Binder b = BossBiMapper.serialize(smartContract);
    Contract desContract = DefaultBiMapper.deserialize(b);
    assertSameContracts(smartContract, desContract);
    assertEquals(NSmartContract.SmartContractType.FOLLOWER1.name(), desContract.getDefinition().getExtendedType());
    assertEquals(NSmartContract.SmartContractType.FOLLOWER1.name(), desContract.get("definition.extended_type"));
    Multimap<String, Permission> permissions = desContract.getPermissions();
    Collection<Permission> mdp = permissions.get("modify_data");
    assertNotNull(mdp);
    assertTrue(((ModifyDataPermission) mdp.iterator().next()).getFields().containsKey("action"));
    ((FollowerContract) desContract).putTrackingOrigin(simpleContract.getOrigin(), "http://localhost:7777/follow.callback", callbackKey);
    assertEquals(((FollowerContract) desContract).getCallbackKeys().get("http://localhost:7777/follow.callback"), callbackKey);
    assertEquals(((FollowerContract) desContract).getTrackingOrigins().get(simpleContract.getOrigin()), "http://localhost:7777/follow.callback");
    assertTrue(((FollowerContract) desContract).isOriginTracking(simpleContract.getOrigin()));
    assertTrue(((FollowerContract) desContract).isCallbackURLUsed("http://localhost:7777/follow.callback"));
    Contract copiedContract = smartContract.copy();
    assertSameContracts(smartContract, copiedContract);
    assertEquals(NSmartContract.SmartContractType.FOLLOWER1.name(), copiedContract.getDefinition().getExtendedType());
    assertEquals(NSmartContract.SmartContractType.FOLLOWER1.name(), copiedContract.get("definition.extended_type"));
    assertTrue(copiedContract instanceof FollowerContract);
    permissions = desContract.getPermissions();
    mdp = permissions.get("modify_data");
    assertNotNull(mdp);
    assertTrue(((ModifyDataPermission) mdp.iterator().next()).getFields().containsKey("action"));
    ((FollowerContract) copiedContract).putTrackingOrigin(simpleContract.getOrigin(), "http://localhost:7777/follow.callback", callbackKey);
    assertEquals(((FollowerContract) copiedContract).getCallbackKeys().get("http://localhost:7777/follow.callback"), callbackKey);
    assertEquals(((FollowerContract) copiedContract).getTrackingOrigins().get(simpleContract.getOrigin()), "http://localhost:7777/follow.callback");
    assertTrue(((FollowerContract) copiedContract).isOriginTracking(simpleContract.getOrigin()));
    assertTrue(((FollowerContract) copiedContract).isCallbackURLUsed("http://localhost:7777/follow.callback"));
}
Also used : Binder(net.sergeych.tools.Binder) PrivateKey(com.icodici.crypto.PrivateKey) ModifyDataPermission(com.icodici.universa.contract.permissions.ModifyDataPermission) FollowerContract(com.icodici.universa.contract.services.FollowerContract) PublicKey(com.icodici.crypto.PublicKey) ModifyDataPermission(com.icodici.universa.contract.permissions.ModifyDataPermission) Permission(com.icodici.universa.contract.permissions.Permission) FollowerContract(com.icodici.universa.contract.services.FollowerContract) NSmartContract(com.icodici.universa.contract.services.NSmartContract) Test(org.junit.Test)

Example 2 with FollowerContract

use of com.icodici.universa.contract.services.FollowerContract in project universa by UniversaBlockchain.

the class FollowerContractTest method goodSmartContractFromDSL.

@Test
public void goodSmartContractFromDSL() throws Exception {
    final PrivateKey key2 = new PrivateKey(Do.read(rootPath + "test_network_whitekey.private.unikey"));
    Contract simpleContract = new Contract(key2);
    simpleContract.seal();
    simpleContract.check();
    simpleContract.traceErrors();
    assertTrue(simpleContract.isOk());
    PrivateKey privateKey = new PrivateKey(2048);
    PublicKey callbackKey = privateKey.getPublicKey();
    Contract smartContract = FollowerContract.fromDslFile(rootPath + "FollowerDSLTemplate.yml");
    smartContract.addSignerKeyFromFile(rootPath + "_xer0yfe2nn1xthc.private.unikey");
    assertTrue(smartContract instanceof FollowerContract);
    ((FollowerContract) smartContract).setNodeInfoProvider(nodeInfoProvider);
    ((FollowerContract) smartContract).putTrackingOrigin(simpleContract.getOrigin(), "http://localhost:7777/follow.callback", callbackKey);
    smartContract.seal();
    smartContract.check();
    smartContract.traceErrors();
    assertTrue(smartContract.isOk());
    assertEquals(NSmartContract.SmartContractType.FOLLOWER1.name(), smartContract.getDefinition().getExtendedType());
    assertEquals(NSmartContract.SmartContractType.FOLLOWER1.name(), smartContract.get("definition.extended_type"));
    Multimap<String, Permission> permissions = smartContract.getPermissions();
    Collection<Permission> mdp = permissions.get("modify_data");
    assertNotNull(mdp);
    assertTrue(((ModifyDataPermission) mdp.iterator().next()).getFields().containsKey("action"));
    assertEquals(((FollowerContract) smartContract).getCallbackKeys().get("http://localhost:7777/follow.callback"), callbackKey);
    assertEquals(((FollowerContract) smartContract).getTrackingOrigins().get(simpleContract.getOrigin()), "http://localhost:7777/follow.callback");
    assertTrue(((FollowerContract) smartContract).isOriginTracking(simpleContract.getOrigin()));
    assertTrue(((FollowerContract) smartContract).isCallbackURLUsed("http://localhost:7777/follow.callback"));
}
Also used : PrivateKey(com.icodici.crypto.PrivateKey) ModifyDataPermission(com.icodici.universa.contract.permissions.ModifyDataPermission) FollowerContract(com.icodici.universa.contract.services.FollowerContract) PublicKey(com.icodici.crypto.PublicKey) ModifyDataPermission(com.icodici.universa.contract.permissions.ModifyDataPermission) Permission(com.icodici.universa.contract.permissions.Permission) FollowerContract(com.icodici.universa.contract.services.FollowerContract) NSmartContract(com.icodici.universa.contract.services.NSmartContract) Test(org.junit.Test)

Example 3 with FollowerContract

use of com.icodici.universa.contract.services.FollowerContract in project universa by UniversaBlockchain.

the class Contract method fromSealedBinary.

public static Contract fromSealedBinary(byte[] sealedBinary, TransactionPack tp) throws IOException {
    Binder data = Boss.unpack(sealedBinary);
    if (!data.getStringOrThrow("type").equals("unicapsule"))
        throw new UnicapsuleExpectedException("wrong object type, unicapsule required");
    byte[] contractBytes = data.getBinaryOrThrow("data");
    // This must be explained. By default, Boss.load will apply contract transformation in place
    // as it is registered BiSerializable type, and we want to avoid it. Therefore, we decode boss
    // data without BiSerializer and then do it by hand calling deserialize:
    Binder payload = Boss.load(contractBytes, null);
    // contract can be extended type - we need know about it before
    String extendedType = payload.getBinder("contract").getBinder("definition").getString("extended_type", null);
    NSmartContract.SmartContractType scType = null;
    if (extendedType != null) {
        try {
            scType = NSmartContract.SmartContractType.valueOf(extendedType);
        } catch (IllegalArgumentException e) {
        }
    }
    Contract result;
    // and if extended type of contract is allowed - create extended contrac, otherwise create simple contract
    if (scType != null) {
        switch(scType) {
            case N_SMART_CONTRACT:
                result = new NSmartContract(data, tp);
                break;
            case SLOT1:
                result = new SlotContract(data, tp);
                break;
            case UNS1:
                result = new UnsContract(data, tp);
                break;
            case UNS2:
                result = new UnsContract(data, tp);
                break;
            case FOLLOWER1:
                result = new FollowerContract(data, tp);
                break;
            default:
                // unknwon extended type. create simple contract
                // TODO: should we throw?
                result = new Contract(data, tp);
        }
    } else {
        result = new Contract(data, tp);
    }
    result.sealedBinary = sealedBinary;
    return result;
}
Also used : Binder(net.sergeych.tools.Binder) NSmartContract(com.icodici.universa.contract.services.NSmartContract) FollowerContract(com.icodici.universa.contract.services.FollowerContract) UnsContract(com.icodici.universa.contract.services.UnsContract) NSmartContract(com.icodici.universa.contract.services.NSmartContract) UnsContract(com.icodici.universa.contract.services.UnsContract) FollowerContract(com.icodici.universa.contract.services.FollowerContract) SlotContract(com.icodici.universa.contract.services.SlotContract) SlotContract(com.icodici.universa.contract.services.SlotContract)

Example 4 with FollowerContract

use of com.icodici.universa.contract.services.FollowerContract in project universa by UniversaBlockchain.

the class FollowerContractTest method goodFollowerContract.

@Test
public void goodFollowerContract() throws Exception {
    final PrivateKey key = new PrivateKey(Do.read(rootPath + "_xer0yfe2nn1xthc.private.unikey"));
    final PrivateKey key2 = new PrivateKey(Do.read(rootPath + "test_network_whitekey.private.unikey"));
    Contract simpleContract = new Contract(key2);
    simpleContract.seal();
    simpleContract.check();
    simpleContract.traceErrors();
    assertTrue(simpleContract.isOk());
    PrivateKey privateKey = new PrivateKey(2048);
    PublicKey callbackKey = privateKey.getPublicKey();
    Contract smartContract = new FollowerContract(key);
    assertTrue(smartContract instanceof FollowerContract);
    ((FollowerContract) smartContract).setNodeInfoProvider(nodeInfoProvider);
    ((FollowerContract) smartContract).putTrackingOrigin(simpleContract.getOrigin(), "http://localhost:7777/follow.callback", callbackKey);
    smartContract.seal();
    smartContract.check();
    smartContract.traceErrors();
    assertTrue(smartContract.isOk());
    assertEquals(NSmartContract.SmartContractType.FOLLOWER1.name(), smartContract.getDefinition().getExtendedType());
    assertEquals(NSmartContract.SmartContractType.FOLLOWER1.name(), smartContract.get("definition.extended_type"));
    Multimap<String, Permission> permissions = smartContract.getPermissions();
    Collection<Permission> mdp = permissions.get("modify_data");
    assertNotNull(mdp);
    assertTrue(((ModifyDataPermission) mdp.iterator().next()).getFields().containsKey("action"));
    assertEquals(((FollowerContract) smartContract).getCallbackKeys().get("http://localhost:7777/follow.callback"), callbackKey);
    assertEquals(((FollowerContract) smartContract).getTrackingOrigins().get(simpleContract.getOrigin()), "http://localhost:7777/follow.callback");
    assertTrue(((FollowerContract) smartContract).isOriginTracking(simpleContract.getOrigin()));
    assertTrue(((FollowerContract) smartContract).isCallbackURLUsed("http://localhost:7777/follow.callback"));
    // updateCallbackKey
    PrivateKey newCallbackKey = new PrivateKey(2048);
    assertFalse(((FollowerContract) smartContract).updateCallbackKey("http://localhost:8888/follow.callback", newCallbackKey.getPublicKey()));
    assertTrue(((FollowerContract) smartContract).updateCallbackKey("http://localhost:7777/follow.callback", newCallbackKey.getPublicKey()));
    assertEquals(((FollowerContract) smartContract).getCallbackKeys().get("http://localhost:7777/follow.callback"), newCallbackKey.getPublicKey());
    assertNotEquals(((FollowerContract) smartContract).getCallbackKeys().get("http://localhost:7777/follow.callback"), callbackKey);
    assertEquals(((FollowerContract) smartContract).getTrackingOrigins().get(simpleContract.getOrigin()), "http://localhost:7777/follow.callback");
    assertTrue(((FollowerContract) smartContract).isOriginTracking(simpleContract.getOrigin()));
    assertTrue(((FollowerContract) smartContract).isCallbackURLUsed("http://localhost:7777/follow.callback"));
    // removeTrackingOrigin
    ((FollowerContract) smartContract).removeTrackingOrigin(simpleContract.getOrigin());
    assertNotEquals(((FollowerContract) smartContract).getCallbackKeys().get("http://localhost:7777/follow.callback"), callbackKey);
    assertNotEquals(((FollowerContract) smartContract).getTrackingOrigins().get(simpleContract.getOrigin()), "http://localhost:7777/follow.callback");
    assertFalse(((FollowerContract) smartContract).isOriginTracking(simpleContract.getOrigin()));
    assertFalse(((FollowerContract) smartContract).isCallbackURLUsed("http://localhost:7777/follow.callback"));
}
Also used : PrivateKey(com.icodici.crypto.PrivateKey) ModifyDataPermission(com.icodici.universa.contract.permissions.ModifyDataPermission) FollowerContract(com.icodici.universa.contract.services.FollowerContract) PublicKey(com.icodici.crypto.PublicKey) ModifyDataPermission(com.icodici.universa.contract.permissions.ModifyDataPermission) Permission(com.icodici.universa.contract.permissions.Permission) FollowerContract(com.icodici.universa.contract.services.FollowerContract) NSmartContract(com.icodici.universa.contract.services.NSmartContract) Test(org.junit.Test)

Example 5 with FollowerContract

use of com.icodici.universa.contract.services.FollowerContract in project universa by UniversaBlockchain.

the class FollowerContractTest method followerContractNewRevision.

@Test
public void followerContractNewRevision() throws Exception {
    final PrivateKey key = new PrivateKey(Do.read(rootPath + "_xer0yfe2nn1xthc.private.unikey"));
    final PrivateKey key2 = new PrivateKey(Do.read(rootPath + "test_network_whitekey.private.unikey"));
    Contract simpleContract = new Contract(key2);
    simpleContract.seal();
    simpleContract.check();
    simpleContract.traceErrors();
    assertTrue(simpleContract.isOk());
    PrivateKey privateKey = new PrivateKey(2048);
    PublicKey callbackKey = privateKey.getPublicKey();
    Contract smartContract = new FollowerContract(key);
    assertTrue(smartContract instanceof FollowerContract);
    ((FollowerContract) smartContract).setNodeInfoProvider(nodeInfoProvider);
    ((FollowerContract) smartContract).putTrackingOrigin(simpleContract.getOrigin(), "http://localhost:7777/follow.callback", callbackKey);
    smartContract.seal();
    smartContract.check();
    smartContract.traceErrors();
    assertTrue(smartContract.isOk());
    assertEquals(NSmartContract.SmartContractType.FOLLOWER1.name(), smartContract.getDefinition().getExtendedType());
    assertEquals(NSmartContract.SmartContractType.FOLLOWER1.name(), smartContract.get("definition.extended_type"));
    Multimap<String, Permission> permissions = smartContract.getPermissions();
    Collection<Permission> mdp = permissions.get("modify_data");
    assertNotNull(mdp);
    assertTrue(((ModifyDataPermission) mdp.iterator().next()).getFields().containsKey("action"));
    assertEquals(((FollowerContract) smartContract).getCallbackKeys().get("http://localhost:7777/follow.callback"), callbackKey);
    assertEquals(((FollowerContract) smartContract).getTrackingOrigins().get(simpleContract.getOrigin()), "http://localhost:7777/follow.callback");
    assertTrue(((FollowerContract) smartContract).isOriginTracking(simpleContract.getOrigin()));
    assertTrue(((FollowerContract) smartContract).isCallbackURLUsed("http://localhost:7777/follow.callback"));
    // //////////////////////
    Contract simpleContract2 = new Contract(key2);
    simpleContract2.seal();
    simpleContract2.check();
    simpleContract2.traceErrors();
    assertTrue(simpleContract2.isOk());
    FollowerContract newRevFollowerContract = (FollowerContract) smartContract.createRevision(key);
    assertTrue(newRevFollowerContract instanceof FollowerContract);
    newRevFollowerContract.putTrackingOrigin(simpleContract2.getOrigin(), "http://localhost:7777/follow.callbackTwo", callbackKey);
    newRevFollowerContract.setNodeInfoProvider(nodeInfoProvider);
    newRevFollowerContract.seal();
    newRevFollowerContract.check();
    newRevFollowerContract.traceErrors();
    assertTrue(newRevFollowerContract.isOk());
    assertEquals(NSmartContract.SmartContractType.FOLLOWER1.name(), newRevFollowerContract.getDefinition().getExtendedType());
    assertEquals(NSmartContract.SmartContractType.FOLLOWER1.name(), newRevFollowerContract.get("definition.extended_type"));
    permissions = smartContract.getPermissions();
    mdp = permissions.get("modify_data");
    assertNotNull(mdp);
    assertTrue(((ModifyDataPermission) mdp.iterator().next()).getFields().containsKey("action"));
    assertEquals(newRevFollowerContract.getCallbackKeys().get("http://localhost:7777/follow.callback"), callbackKey);
    assertEquals(newRevFollowerContract.getTrackingOrigins().get(simpleContract.getOrigin()), "http://localhost:7777/follow.callback");
    assertTrue(newRevFollowerContract.isOriginTracking(simpleContract.getOrigin()));
    assertTrue(newRevFollowerContract.isCallbackURLUsed("http://localhost:7777/follow.callback"));
    assertEquals(newRevFollowerContract.getCallbackKeys().get("http://localhost:7777/follow.callbackTwo"), callbackKey);
    assertEquals(newRevFollowerContract.getTrackingOrigins().get(simpleContract2.getOrigin()), "http://localhost:7777/follow.callbackTwo");
    assertTrue(newRevFollowerContract.isOriginTracking(simpleContract2.getOrigin()));
    assertTrue(newRevFollowerContract.isCallbackURLUsed("http://localhost:7777/follow.callbackTwo"));
    // updateCallbackKey
    PrivateKey newCallbackKey = new PrivateKey(2048);
    assertFalse(((FollowerContract) smartContract).updateCallbackKey("http://localhost:8888/follow.callback", newCallbackKey.getPublicKey()));
    assertTrue(((FollowerContract) smartContract).updateCallbackKey("http://localhost:7777/follow.callback", newCallbackKey.getPublicKey()));
    assertEquals(((FollowerContract) smartContract).getCallbackKeys().get("http://localhost:7777/follow.callback"), newCallbackKey.getPublicKey());
    assertNotEquals(((FollowerContract) smartContract).getCallbackKeys().get("http://localhost:7777/follow.callback"), callbackKey);
    assertEquals(((FollowerContract) smartContract).getTrackingOrigins().get(simpleContract.getOrigin()), "http://localhost:7777/follow.callback");
    assertTrue(((FollowerContract) smartContract).isOriginTracking(simpleContract.getOrigin()));
    assertTrue(((FollowerContract) smartContract).isCallbackURLUsed("http://localhost:7777/follow.callback"));
    assertEquals(newRevFollowerContract.getCallbackKeys().get("http://localhost:7777/follow.callbackTwo"), callbackKey);
    assertEquals(newRevFollowerContract.getTrackingOrigins().get(simpleContract2.getOrigin()), "http://localhost:7777/follow.callbackTwo");
    assertTrue(newRevFollowerContract.isOriginTracking(simpleContract2.getOrigin()));
    assertTrue(newRevFollowerContract.isCallbackURLUsed("http://localhost:7777/follow.callbackTwo"));
    // removeTrackingOrigin
    ((FollowerContract) smartContract).removeTrackingOrigin(simpleContract.getOrigin());
    assertNotEquals(((FollowerContract) smartContract).getCallbackKeys().get("http://localhost:7777/follow.callback"), callbackKey);
    assertNotEquals(((FollowerContract) smartContract).getTrackingOrigins().get(simpleContract.getOrigin()), "http://localhost:7777/follow.callback");
    assertFalse(((FollowerContract) smartContract).isOriginTracking(simpleContract.getOrigin()));
    assertFalse(((FollowerContract) smartContract).isCallbackURLUsed("http://localhost:7777/follow.callback"));
    assertEquals(newRevFollowerContract.getCallbackKeys().get("http://localhost:7777/follow.callbackTwo"), callbackKey);
    assertEquals(newRevFollowerContract.getTrackingOrigins().get(simpleContract2.getOrigin()), "http://localhost:7777/follow.callbackTwo");
    assertTrue(newRevFollowerContract.isOriginTracking(simpleContract2.getOrigin()));
    assertTrue(newRevFollowerContract.isCallbackURLUsed("http://localhost:7777/follow.callbackTwo"));
}
Also used : PrivateKey(com.icodici.crypto.PrivateKey) ModifyDataPermission(com.icodici.universa.contract.permissions.ModifyDataPermission) FollowerContract(com.icodici.universa.contract.services.FollowerContract) PublicKey(com.icodici.crypto.PublicKey) ModifyDataPermission(com.icodici.universa.contract.permissions.ModifyDataPermission) Permission(com.icodici.universa.contract.permissions.Permission) FollowerContract(com.icodici.universa.contract.services.FollowerContract) NSmartContract(com.icodici.universa.contract.services.NSmartContract) Test(org.junit.Test)

Aggregations

FollowerContract (com.icodici.universa.contract.services.FollowerContract)7 NSmartContract (com.icodici.universa.contract.services.NSmartContract)7 PrivateKey (com.icodici.crypto.PrivateKey)6 Test (org.junit.Test)6 PublicKey (com.icodici.crypto.PublicKey)4 ModifyDataPermission (com.icodici.universa.contract.permissions.ModifyDataPermission)4 Permission (com.icodici.universa.contract.permissions.Permission)4 Binder (net.sergeych.tools.Binder)4 ListRole (com.icodici.universa.contract.roles.ListRole)2 Role (com.icodici.universa.contract.roles.Role)2 SimpleRole (com.icodici.universa.contract.roles.SimpleRole)2 SlotContract (com.icodici.universa.contract.services.SlotContract)1 UnsContract (com.icodici.universa.contract.services.UnsContract)1