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"));
}
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"));
}
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;
}
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"));
}
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"));
}
Aggregations