Loading src/dlt/gateway/config/ca.org1.example.com-cert.pem +8 −8 Original line number Diff line number Diff line -----BEGIN CERTIFICATE----- MIICJzCCAc2gAwIBAgIUGgC/inWY+75+oERoZUbGo0YGtV4wCgYIKoZIzj0EAwIw MIICJjCCAc2gAwIBAgIUVSFCRQNScNJyIwJz89vi6tazYJ4wCgYIKoZIzj0EAwIw cDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQH EwZEdXJoYW0xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh Lm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwNzEyMDg0MTAwWhcNMzcwNzA4MDg0MTAw Lm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwNzEzMTQ1MjAwWhcNMzcwNzA5MTQ1MjAw WjBwMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzANBgNV BAcTBkR1cmhhbTEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMT Y2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABL9u lEZaQqSTzwsf5zhWmPPytwiBrhma5wshEEDMeN2D49RgVJjtmSpImrZoucpgAzSU 4ZvZkGQ4CznTp5kLUfSjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG AQH/AgEBMB0GA1UdDgQWBBSRPP23/S9Hs3Fgddh4NIEhbQ9ExzAKBggqhkjOPQQD AgNIADBFAiEAv97c3x7fy5gfA+lmSb0XlWD+x1o7i09kGFHYDyFx8UkCIGVugTW6 H4GmqRZJsVM1TbtbS3YUrZ4eVghstBqrhmBz Y2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLg8 zJvOKBR1fS+hrrMc3xEhOalkSG+5vGGpwzgHv5NNMlDZcbQVuEBHPmRowbLWx4nw 2CIUSfkhtQGC5GmUncOjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG AQH/AgEBMB0GA1UdDgQWBBRm7lBNvvkP8iy6f0cXwz9BTeSYDzAKBggqhkjOPQQD AgNHADBEAiB1p8QFXHszJsMqiShmyuTA6zGPfHlnan3dgYMCTNR7mwIgFx3SqSYk FizTEfVfOcdjIYGc3pTPTyK5PVbO1k2BW80= -----END CERTIFICATE----- src/dlt/gateway/config/connection-org1.json +4 −4 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ "peer0.org1.example.com": { "url": "grpcs://teraflow.nlehd.de:7051", "tlsCACerts": { "pem": "-----BEGIN CERTIFICATE-----\nMIICJzCCAc2gAwIBAgIUGgC/inWY+75+oERoZUbGo0YGtV4wCgYIKoZIzj0EAwIw\ncDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQH\nEwZEdXJoYW0xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwNzEyMDg0MTAwWhcNMzcwNzA4MDg0MTAw\nWjBwMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzANBgNV\nBAcTBkR1cmhhbTEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMT\nY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABL9u\nlEZaQqSTzwsf5zhWmPPytwiBrhma5wshEEDMeN2D49RgVJjtmSpImrZoucpgAzSU\n4ZvZkGQ4CznTp5kLUfSjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG\nAQH/AgEBMB0GA1UdDgQWBBSRPP23/S9Hs3Fgddh4NIEhbQ9ExzAKBggqhkjOPQQD\nAgNIADBFAiEAv97c3x7fy5gfA+lmSb0XlWD+x1o7i09kGFHYDyFx8UkCIGVugTW6\nH4GmqRZJsVM1TbtbS3YUrZ4eVghstBqrhmBz\n-----END CERTIFICATE-----\n" "pem": "-----BEGIN CERTIFICATE-----\nMIICJjCCAc2gAwIBAgIUVSFCRQNScNJyIwJz89vi6tazYJ4wCgYIKoZIzj0EAwIw\ncDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQH\nEwZEdXJoYW0xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwNzEzMTQ1MjAwWhcNMzcwNzA5MTQ1MjAw\nWjBwMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzANBgNV\nBAcTBkR1cmhhbTEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMT\nY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLg8\nzJvOKBR1fS+hrrMc3xEhOalkSG+5vGGpwzgHv5NNMlDZcbQVuEBHPmRowbLWx4nw\n2CIUSfkhtQGC5GmUncOjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG\nAQH/AgEBMB0GA1UdDgQWBBRm7lBNvvkP8iy6f0cXwz9BTeSYDzAKBggqhkjOPQQD\nAgNHADBEAiB1p8QFXHszJsMqiShmyuTA6zGPfHlnan3dgYMCTNR7mwIgFx3SqSYk\nFizTEfVfOcdjIYGc3pTPTyK5PVbO1k2BW80=\n-----END CERTIFICATE-----\n" }, "grpcOptions": { "ssl-target-name-override": "peer0.org1.example.com", Loading @@ -36,7 +36,7 @@ "peer0.org2.example.com": { "url": "grpcs://teraflow.nlehd.de:9051", "tlsCACerts": { "pem": "-----BEGIN CERTIFICATE-----\nMIICHjCCAcWgAwIBAgIUMyzCixoqXQBzqrCTv301KO5Ub3wwCgYIKoZIzj0EAwIw\nbDELMAkGA1UEBhMCVUsxEjAQBgNVBAgTCUhhbXBzaGlyZTEQMA4GA1UEBxMHSHVy\nc2xleTEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eub3Jn\nMi5leGFtcGxlLmNvbTAeFw0yMjA3MTIwODQxMDBaFw0zNzA3MDgwODQxMDBaMGwx\nCzAJBgNVBAYTAlVLMRIwEAYDVQQIEwlIYW1wc2hpcmUxEDAOBgNVBAcTB0h1cnNs\nZXkxGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2NhLm9yZzIu\nZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATpsE9qr9oDDxEZ\nLNDGZduPAslCFl3AY8wC2dURdTJQmn3V/AMeFGiC+a9xEXF5+C/UR/GHE8Cca8/j\nK8GtiM06o0UwQzAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBATAd\nBgNVHQ4EFgQUE4+hU1/yQ/NCcqrhtAOcSj3O/3EwCgYIKoZIzj0EAwIDRwAwRAIg\nVDsbCz7hPyZ2tULxWiTUnG0aPg7TBh6lD5mRMObX1vUCIA1kcgFnfMPWA1lJJMRQ\nqGw7ydxYTyZ4X4M1b1PPAa3f\n-----END CERTIFICATE-----\n" "pem": "-----BEGIN CERTIFICATE-----\nMIICHzCCAcWgAwIBAgIUOsbw943VjFitBzBEXAcxLlOLow8wCgYIKoZIzj0EAwIw\nbDELMAkGA1UEBhMCVUsxEjAQBgNVBAgTCUhhbXBzaGlyZTEQMA4GA1UEBxMHSHVy\nc2xleTEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eub3Jn\nMi5leGFtcGxlLmNvbTAeFw0yMjA3MTMxNDUyMDBaFw0zNzA3MDkxNDUyMDBaMGwx\nCzAJBgNVBAYTAlVLMRIwEAYDVQQIEwlIYW1wc2hpcmUxEDAOBgNVBAcTB0h1cnNs\nZXkxGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2NhLm9yZzIu\nZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARKov9QrWe9dklr\nqYJxOOoqoO3EI18LtPizVCKYrG3IMqkaatM6DLc/2SBTSIqIDeTR6N8WZAPVgLKA\nboRt87Heo0UwQzAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBATAd\nBgNVHQ4EFgQUYe4sT8J0Y2iN/9Q14FcpmxK5dYcwCgYIKoZIzj0EAwIDSAAwRQIh\nAJh2+1QXc5/ZlPaN2qnh3TXbzPFeCDXjoMAoBsOYtRcMAiAF+tcoFY0NcLDfTZBm\nNuuiQDIasoTB9Wuu4PBv8T7I5w==\n-----END CERTIFICATE-----\n" }, "grpcOptions": { "ssl-target-name-override": "peer0.org2.example.com", Loading @@ -50,7 +50,7 @@ "caName": "ca-org1", "tlsCACerts": { "pem": [ "-----BEGIN CERTIFICATE-----\nMIICJzCCAc2gAwIBAgIUGgC/inWY+75+oERoZUbGo0YGtV4wCgYIKoZIzj0EAwIw\ncDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQH\nEwZEdXJoYW0xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwNzEyMDg0MTAwWhcNMzcwNzA4MDg0MTAw\nWjBwMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzANBgNV\nBAcTBkR1cmhhbTEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMT\nY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABL9u\nlEZaQqSTzwsf5zhWmPPytwiBrhma5wshEEDMeN2D49RgVJjtmSpImrZoucpgAzSU\n4ZvZkGQ4CznTp5kLUfSjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG\nAQH/AgEBMB0GA1UdDgQWBBSRPP23/S9Hs3Fgddh4NIEhbQ9ExzAKBggqhkjOPQQD\nAgNIADBFAiEAv97c3x7fy5gfA+lmSb0XlWD+x1o7i09kGFHYDyFx8UkCIGVugTW6\nH4GmqRZJsVM1TbtbS3YUrZ4eVghstBqrhmBz\n-----END CERTIFICATE-----\n" "-----BEGIN CERTIFICATE-----\nMIICJjCCAc2gAwIBAgIUVSFCRQNScNJyIwJz89vi6tazYJ4wCgYIKoZIzj0EAwIw\ncDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQH\nEwZEdXJoYW0xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwNzEzMTQ1MjAwWhcNMzcwNzA5MTQ1MjAw\nWjBwMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzANBgNV\nBAcTBkR1cmhhbTEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMT\nY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLg8\nzJvOKBR1fS+hrrMc3xEhOalkSG+5vGGpwzgHv5NNMlDZcbQVuEBHPmRowbLWx4nw\n2CIUSfkhtQGC5GmUncOjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG\nAQH/AgEBMB0GA1UdDgQWBBRm7lBNvvkP8iy6f0cXwz9BTeSYDzAKBggqhkjOPQQD\nAgNHADBEAiB1p8QFXHszJsMqiShmyuTA6zGPfHlnan3dgYMCTNR7mwIgFx3SqSYk\nFizTEfVfOcdjIYGc3pTPTyK5PVbO1k2BW80=\n-----END CERTIFICATE-----\n" ] }, "httpOptions": { Loading @@ -62,7 +62,7 @@ "orderer0.example.com": { "url": "grpcs://teraflow.nlehd.de:7050", "tlsCACerts": { "pem": "-----BEGIN CERTIFICATE-----\nMIICCjCCAbGgAwIBAgIULAsUlO5yAbjj/6xnDbyiWeoj6rkwCgYIKoZIzj0EAwIw\nYjELMAkGA1UEBhMCVVMxETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcg\nWW9yazEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1wbGUu\nY29tMB4XDTIyMDcxMjA4NDAwMFoXDTM3MDcwODA4NDAwMFowYjELMAkGA1UEBhMC\nVVMxETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcgWW9yazEUMBIGA1UE\nChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1wbGUuY29tMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAEjwa9/lOenYmcYL+Kqns6lV+UFt8+3tKZHlcwogZf\ngYnBEbsdL9oTZXSFgIvpCpQee65KKFUl7SqMDXrO3Mg0hqNFMEMwDgYDVR0PAQH/\nBAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYEFPuDBFVg+lhySQO0\nICEnNQ/TzRXeMAoGCCqGSM49BAMCA0cAMEQCIEadLxytDs79F5qTrTuI6SdaFoLB\n6AoQ5VGUNm2mF8tGAiAlWrLs8g3Ni2c7cjFeHZfiFy/2pqJLtor1ieGlFslq1w==\n-----END CERTIFICATE-----\n" "pem": "-----BEGIN CERTIFICATE-----\nMIICCjCCAbGgAwIBAgIUA6RVRhhZD8pvcNAQJ6HWPUkbNNIwCgYIKoZIzj0EAwIw\nYjELMAkGA1UEBhMCVVMxETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcg\nWW9yazEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1wbGUu\nY29tMB4XDTIyMDcxMzE0NTIwMFoXDTM3MDcwOTE0NTIwMFowYjELMAkGA1UEBhMC\nVVMxETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcgWW9yazEUMBIGA1UE\nChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1wbGUuY29tMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAEs7mmo5MY0oO9zCYcraUN/MXWxHiQ04xG6tWLaeWX\nqfSmFnfO8UBFq4OF5Li861UWGe+s9QxNXIELchBG8M7qLqNFMEMwDgYDVR0PAQH/\nBAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYEFBGG7kbCLEXzlQUF\nQfx845Qf2WKCMAoGCCqGSM49BAMCA0cAMEQCIAwABAqRopU+Qt3myyt4YiKQFpyO\nWTZifesVFe3fM/Q3AiA7oZ9XdQ5EuPhqFxSz7ASF45iyL3k078ilusjpc6IZ/g==\n-----END CERTIFICATE-----\n" }, "grpcOptions": { "ssl-target-name-override": "orderer0.example.com", Loading src/dlt/gateway/src/main/kotlin/Main.kt +31 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,8 @@ fun main() = runBlocking { val domainUuid = UUID.randomUUID().toString() val recordUuid = UUID.randomUUID().toString() println("New domain uuid $domainUuid") println("New record uuid $recordUuid") val id = Dlt.DltRecordId.newBuilder() .setDomainUuid( Loading @@ -104,6 +106,7 @@ fun main() = runBlocking { .addType(Dlt.DltRecordTypeEnum.DLTRECORDTYPE_LINK) .addType(Dlt.DltRecordTypeEnum.DLTRECORDTYPE_SERVICE) .addOperation(Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_ADD) .addOperation(Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_UPDATE) .addOperation(Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_DELETE) .build() Loading @@ -117,8 +120,36 @@ fun main() = runBlocking { .setDataJson("{}") .build() println("sending new record") client.putData(data) client.getData(id) Thread.sleep(5000) val updateData = Dlt.DltRecord.newBuilder() .setRecordId(id) .setOperation(Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_UPDATE) .setDataJson("{\"name\": \"test\"}") .build() println("updating record") client.putData(updateData) client.getData(id) Thread.sleep(5000) val removeData = Dlt.DltRecord.newBuilder() .setRecordId(id) .setOperation(Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_DELETE) .setDataJson("{\"name\": \"test\"}") .build() println("removing record") client.putData(removeData) try { client.getData(id) } catch (e: Exception) { println(e.toString()) } Thread.sleep(5000) } src/dlt/gateway/src/main/kotlin/fabric/FabricConnector.kt +10 −2 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ class FabricConnector(val config: Config.DltConfig) { return String( contract.submitTransaction( "UpdateRecord", record.recordId.domainUuid.uuid, record.recordId.recordUuid.uuid, record.recordId.type.number.toString(), record.dataJson Loading @@ -125,8 +126,15 @@ class FabricConnector(val config: Config.DltConfig) { ) } fun deleteData(uuid: String): String { return String(contract.submitTransaction("DeactivateRecord", uuid)) fun deleteData(record: Dlt.DltRecord): String { return String( contract.submitTransaction( "DeleteRecord", record.recordId.domainUuid.uuid, record.recordId.recordUuid.uuid, record.recordId.type.number.toString() ) ) } fun subscribeForEvents(): Channel<Dlt.DltRecordEvent> { Loading src/dlt/gateway/src/main/kotlin/grpc/GrpcHandler.kt +20 −16 Original line number Diff line number Diff line Loading @@ -40,20 +40,34 @@ package grpc import proto.Dlt import fabric.FabricConnector import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.consumeAsFlow import proto.ContextOuterClass import proto.DltServiceGrpcKt class DLTService(private val connector: FabricConnector) : DltServiceGrpcKt.DltServiceCoroutineImplBase() { override suspend fun recordToDlt(request: Dlt.DltRecord): Dlt.DltRecordStatus { println("Incoming request ${request.recordId.recordUuid}") val error = connector.putData(request) val error = when (request.operation) { Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_ADD -> { println("Adding new record") connector.putData(request) } Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_UPDATE -> { println("Updating record") connector.updateData(request) } Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_DELETE -> { println("Deleting record") connector.deleteData(request) } else -> "Undefined or unknown operation" } val dltStatusEnum: Dlt.DltRecordStatusEnum = if (error == "") { Dlt.DltRecordStatusEnum.DLTRECORDSTATUS_SUCCEEDED } else { Dlt.DltRecordStatusEnum.DLTRECORDSTATUS_FAILED } println("Put data status: $error") return Dlt.DltRecordStatus.newBuilder() .setRecordId(request.recordId) .setStatus(dltStatusEnum) Loading @@ -65,19 +79,9 @@ class DLTService(private val connector: FabricConnector): DltServiceGrpcKt.DltSe return connector.getData(request.recordUuid.uuid) } override fun subscribeToDlt(request: Dlt.DltRecordSubscription): Flow<Dlt.DltRecordEvent> = flow { override fun subscribeToDlt(request: Dlt.DltRecordSubscription): Flow<Dlt.DltRecordEvent> { println("Subscription request: $request") val c = connector.subscribeForEvents() println("Got channel") val event = c.receive() println("Received event from channel") // TODO: mistype, proto scheme fix required if (request.operationValueList.contains(event.event.eventType.number)) { if (request.typeList.contains(event.recordId.type)) { emit(event) } } return connector.subscribeForEvents().consumeAsFlow() } override suspend fun getDltStatus(request: ContextOuterClass.TeraFlowController): Dlt.DltPeerStatus { Loading Loading
src/dlt/gateway/config/ca.org1.example.com-cert.pem +8 −8 Original line number Diff line number Diff line -----BEGIN CERTIFICATE----- MIICJzCCAc2gAwIBAgIUGgC/inWY+75+oERoZUbGo0YGtV4wCgYIKoZIzj0EAwIw MIICJjCCAc2gAwIBAgIUVSFCRQNScNJyIwJz89vi6tazYJ4wCgYIKoZIzj0EAwIw cDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQH EwZEdXJoYW0xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh Lm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwNzEyMDg0MTAwWhcNMzcwNzA4MDg0MTAw Lm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwNzEzMTQ1MjAwWhcNMzcwNzA5MTQ1MjAw WjBwMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzANBgNV BAcTBkR1cmhhbTEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMT Y2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABL9u lEZaQqSTzwsf5zhWmPPytwiBrhma5wshEEDMeN2D49RgVJjtmSpImrZoucpgAzSU 4ZvZkGQ4CznTp5kLUfSjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG AQH/AgEBMB0GA1UdDgQWBBSRPP23/S9Hs3Fgddh4NIEhbQ9ExzAKBggqhkjOPQQD AgNIADBFAiEAv97c3x7fy5gfA+lmSb0XlWD+x1o7i09kGFHYDyFx8UkCIGVugTW6 H4GmqRZJsVM1TbtbS3YUrZ4eVghstBqrhmBz Y2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLg8 zJvOKBR1fS+hrrMc3xEhOalkSG+5vGGpwzgHv5NNMlDZcbQVuEBHPmRowbLWx4nw 2CIUSfkhtQGC5GmUncOjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG AQH/AgEBMB0GA1UdDgQWBBRm7lBNvvkP8iy6f0cXwz9BTeSYDzAKBggqhkjOPQQD AgNHADBEAiB1p8QFXHszJsMqiShmyuTA6zGPfHlnan3dgYMCTNR7mwIgFx3SqSYk FizTEfVfOcdjIYGc3pTPTyK5PVbO1k2BW80= -----END CERTIFICATE-----
src/dlt/gateway/config/connection-org1.json +4 −4 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ "peer0.org1.example.com": { "url": "grpcs://teraflow.nlehd.de:7051", "tlsCACerts": { "pem": "-----BEGIN CERTIFICATE-----\nMIICJzCCAc2gAwIBAgIUGgC/inWY+75+oERoZUbGo0YGtV4wCgYIKoZIzj0EAwIw\ncDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQH\nEwZEdXJoYW0xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwNzEyMDg0MTAwWhcNMzcwNzA4MDg0MTAw\nWjBwMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzANBgNV\nBAcTBkR1cmhhbTEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMT\nY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABL9u\nlEZaQqSTzwsf5zhWmPPytwiBrhma5wshEEDMeN2D49RgVJjtmSpImrZoucpgAzSU\n4ZvZkGQ4CznTp5kLUfSjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG\nAQH/AgEBMB0GA1UdDgQWBBSRPP23/S9Hs3Fgddh4NIEhbQ9ExzAKBggqhkjOPQQD\nAgNIADBFAiEAv97c3x7fy5gfA+lmSb0XlWD+x1o7i09kGFHYDyFx8UkCIGVugTW6\nH4GmqRZJsVM1TbtbS3YUrZ4eVghstBqrhmBz\n-----END CERTIFICATE-----\n" "pem": "-----BEGIN CERTIFICATE-----\nMIICJjCCAc2gAwIBAgIUVSFCRQNScNJyIwJz89vi6tazYJ4wCgYIKoZIzj0EAwIw\ncDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQH\nEwZEdXJoYW0xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwNzEzMTQ1MjAwWhcNMzcwNzA5MTQ1MjAw\nWjBwMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzANBgNV\nBAcTBkR1cmhhbTEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMT\nY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLg8\nzJvOKBR1fS+hrrMc3xEhOalkSG+5vGGpwzgHv5NNMlDZcbQVuEBHPmRowbLWx4nw\n2CIUSfkhtQGC5GmUncOjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG\nAQH/AgEBMB0GA1UdDgQWBBRm7lBNvvkP8iy6f0cXwz9BTeSYDzAKBggqhkjOPQQD\nAgNHADBEAiB1p8QFXHszJsMqiShmyuTA6zGPfHlnan3dgYMCTNR7mwIgFx3SqSYk\nFizTEfVfOcdjIYGc3pTPTyK5PVbO1k2BW80=\n-----END CERTIFICATE-----\n" }, "grpcOptions": { "ssl-target-name-override": "peer0.org1.example.com", Loading @@ -36,7 +36,7 @@ "peer0.org2.example.com": { "url": "grpcs://teraflow.nlehd.de:9051", "tlsCACerts": { "pem": "-----BEGIN CERTIFICATE-----\nMIICHjCCAcWgAwIBAgIUMyzCixoqXQBzqrCTv301KO5Ub3wwCgYIKoZIzj0EAwIw\nbDELMAkGA1UEBhMCVUsxEjAQBgNVBAgTCUhhbXBzaGlyZTEQMA4GA1UEBxMHSHVy\nc2xleTEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eub3Jn\nMi5leGFtcGxlLmNvbTAeFw0yMjA3MTIwODQxMDBaFw0zNzA3MDgwODQxMDBaMGwx\nCzAJBgNVBAYTAlVLMRIwEAYDVQQIEwlIYW1wc2hpcmUxEDAOBgNVBAcTB0h1cnNs\nZXkxGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2NhLm9yZzIu\nZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATpsE9qr9oDDxEZ\nLNDGZduPAslCFl3AY8wC2dURdTJQmn3V/AMeFGiC+a9xEXF5+C/UR/GHE8Cca8/j\nK8GtiM06o0UwQzAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBATAd\nBgNVHQ4EFgQUE4+hU1/yQ/NCcqrhtAOcSj3O/3EwCgYIKoZIzj0EAwIDRwAwRAIg\nVDsbCz7hPyZ2tULxWiTUnG0aPg7TBh6lD5mRMObX1vUCIA1kcgFnfMPWA1lJJMRQ\nqGw7ydxYTyZ4X4M1b1PPAa3f\n-----END CERTIFICATE-----\n" "pem": "-----BEGIN CERTIFICATE-----\nMIICHzCCAcWgAwIBAgIUOsbw943VjFitBzBEXAcxLlOLow8wCgYIKoZIzj0EAwIw\nbDELMAkGA1UEBhMCVUsxEjAQBgNVBAgTCUhhbXBzaGlyZTEQMA4GA1UEBxMHSHVy\nc2xleTEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eub3Jn\nMi5leGFtcGxlLmNvbTAeFw0yMjA3MTMxNDUyMDBaFw0zNzA3MDkxNDUyMDBaMGwx\nCzAJBgNVBAYTAlVLMRIwEAYDVQQIEwlIYW1wc2hpcmUxEDAOBgNVBAcTB0h1cnNs\nZXkxGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2NhLm9yZzIu\nZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARKov9QrWe9dklr\nqYJxOOoqoO3EI18LtPizVCKYrG3IMqkaatM6DLc/2SBTSIqIDeTR6N8WZAPVgLKA\nboRt87Heo0UwQzAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBATAd\nBgNVHQ4EFgQUYe4sT8J0Y2iN/9Q14FcpmxK5dYcwCgYIKoZIzj0EAwIDSAAwRQIh\nAJh2+1QXc5/ZlPaN2qnh3TXbzPFeCDXjoMAoBsOYtRcMAiAF+tcoFY0NcLDfTZBm\nNuuiQDIasoTB9Wuu4PBv8T7I5w==\n-----END CERTIFICATE-----\n" }, "grpcOptions": { "ssl-target-name-override": "peer0.org2.example.com", Loading @@ -50,7 +50,7 @@ "caName": "ca-org1", "tlsCACerts": { "pem": [ "-----BEGIN CERTIFICATE-----\nMIICJzCCAc2gAwIBAgIUGgC/inWY+75+oERoZUbGo0YGtV4wCgYIKoZIzj0EAwIw\ncDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQH\nEwZEdXJoYW0xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwNzEyMDg0MTAwWhcNMzcwNzA4MDg0MTAw\nWjBwMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzANBgNV\nBAcTBkR1cmhhbTEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMT\nY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABL9u\nlEZaQqSTzwsf5zhWmPPytwiBrhma5wshEEDMeN2D49RgVJjtmSpImrZoucpgAzSU\n4ZvZkGQ4CznTp5kLUfSjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG\nAQH/AgEBMB0GA1UdDgQWBBSRPP23/S9Hs3Fgddh4NIEhbQ9ExzAKBggqhkjOPQQD\nAgNIADBFAiEAv97c3x7fy5gfA+lmSb0XlWD+x1o7i09kGFHYDyFx8UkCIGVugTW6\nH4GmqRZJsVM1TbtbS3YUrZ4eVghstBqrhmBz\n-----END CERTIFICATE-----\n" "-----BEGIN CERTIFICATE-----\nMIICJjCCAc2gAwIBAgIUVSFCRQNScNJyIwJz89vi6tazYJ4wCgYIKoZIzj0EAwIw\ncDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQH\nEwZEdXJoYW0xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwNzEzMTQ1MjAwWhcNMzcwNzA5MTQ1MjAw\nWjBwMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzANBgNV\nBAcTBkR1cmhhbTEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMT\nY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLg8\nzJvOKBR1fS+hrrMc3xEhOalkSG+5vGGpwzgHv5NNMlDZcbQVuEBHPmRowbLWx4nw\n2CIUSfkhtQGC5GmUncOjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG\nAQH/AgEBMB0GA1UdDgQWBBRm7lBNvvkP8iy6f0cXwz9BTeSYDzAKBggqhkjOPQQD\nAgNHADBEAiB1p8QFXHszJsMqiShmyuTA6zGPfHlnan3dgYMCTNR7mwIgFx3SqSYk\nFizTEfVfOcdjIYGc3pTPTyK5PVbO1k2BW80=\n-----END CERTIFICATE-----\n" ] }, "httpOptions": { Loading @@ -62,7 +62,7 @@ "orderer0.example.com": { "url": "grpcs://teraflow.nlehd.de:7050", "tlsCACerts": { "pem": "-----BEGIN CERTIFICATE-----\nMIICCjCCAbGgAwIBAgIULAsUlO5yAbjj/6xnDbyiWeoj6rkwCgYIKoZIzj0EAwIw\nYjELMAkGA1UEBhMCVVMxETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcg\nWW9yazEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1wbGUu\nY29tMB4XDTIyMDcxMjA4NDAwMFoXDTM3MDcwODA4NDAwMFowYjELMAkGA1UEBhMC\nVVMxETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcgWW9yazEUMBIGA1UE\nChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1wbGUuY29tMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAEjwa9/lOenYmcYL+Kqns6lV+UFt8+3tKZHlcwogZf\ngYnBEbsdL9oTZXSFgIvpCpQee65KKFUl7SqMDXrO3Mg0hqNFMEMwDgYDVR0PAQH/\nBAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYEFPuDBFVg+lhySQO0\nICEnNQ/TzRXeMAoGCCqGSM49BAMCA0cAMEQCIEadLxytDs79F5qTrTuI6SdaFoLB\n6AoQ5VGUNm2mF8tGAiAlWrLs8g3Ni2c7cjFeHZfiFy/2pqJLtor1ieGlFslq1w==\n-----END CERTIFICATE-----\n" "pem": "-----BEGIN CERTIFICATE-----\nMIICCjCCAbGgAwIBAgIUA6RVRhhZD8pvcNAQJ6HWPUkbNNIwCgYIKoZIzj0EAwIw\nYjELMAkGA1UEBhMCVVMxETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcg\nWW9yazEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1wbGUu\nY29tMB4XDTIyMDcxMzE0NTIwMFoXDTM3MDcwOTE0NTIwMFowYjELMAkGA1UEBhMC\nVVMxETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcgWW9yazEUMBIGA1UE\nChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1wbGUuY29tMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAEs7mmo5MY0oO9zCYcraUN/MXWxHiQ04xG6tWLaeWX\nqfSmFnfO8UBFq4OF5Li861UWGe+s9QxNXIELchBG8M7qLqNFMEMwDgYDVR0PAQH/\nBAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYEFBGG7kbCLEXzlQUF\nQfx845Qf2WKCMAoGCCqGSM49BAMCA0cAMEQCIAwABAqRopU+Qt3myyt4YiKQFpyO\nWTZifesVFe3fM/Q3AiA7oZ9XdQ5EuPhqFxSz7ASF45iyL3k078ilusjpc6IZ/g==\n-----END CERTIFICATE-----\n" }, "grpcOptions": { "ssl-target-name-override": "orderer0.example.com", Loading
src/dlt/gateway/src/main/kotlin/Main.kt +31 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,8 @@ fun main() = runBlocking { val domainUuid = UUID.randomUUID().toString() val recordUuid = UUID.randomUUID().toString() println("New domain uuid $domainUuid") println("New record uuid $recordUuid") val id = Dlt.DltRecordId.newBuilder() .setDomainUuid( Loading @@ -104,6 +106,7 @@ fun main() = runBlocking { .addType(Dlt.DltRecordTypeEnum.DLTRECORDTYPE_LINK) .addType(Dlt.DltRecordTypeEnum.DLTRECORDTYPE_SERVICE) .addOperation(Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_ADD) .addOperation(Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_UPDATE) .addOperation(Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_DELETE) .build() Loading @@ -117,8 +120,36 @@ fun main() = runBlocking { .setDataJson("{}") .build() println("sending new record") client.putData(data) client.getData(id) Thread.sleep(5000) val updateData = Dlt.DltRecord.newBuilder() .setRecordId(id) .setOperation(Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_UPDATE) .setDataJson("{\"name\": \"test\"}") .build() println("updating record") client.putData(updateData) client.getData(id) Thread.sleep(5000) val removeData = Dlt.DltRecord.newBuilder() .setRecordId(id) .setOperation(Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_DELETE) .setDataJson("{\"name\": \"test\"}") .build() println("removing record") client.putData(removeData) try { client.getData(id) } catch (e: Exception) { println(e.toString()) } Thread.sleep(5000) }
src/dlt/gateway/src/main/kotlin/fabric/FabricConnector.kt +10 −2 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ class FabricConnector(val config: Config.DltConfig) { return String( contract.submitTransaction( "UpdateRecord", record.recordId.domainUuid.uuid, record.recordId.recordUuid.uuid, record.recordId.type.number.toString(), record.dataJson Loading @@ -125,8 +126,15 @@ class FabricConnector(val config: Config.DltConfig) { ) } fun deleteData(uuid: String): String { return String(contract.submitTransaction("DeactivateRecord", uuid)) fun deleteData(record: Dlt.DltRecord): String { return String( contract.submitTransaction( "DeleteRecord", record.recordId.domainUuid.uuid, record.recordId.recordUuid.uuid, record.recordId.type.number.toString() ) ) } fun subscribeForEvents(): Channel<Dlt.DltRecordEvent> { Loading
src/dlt/gateway/src/main/kotlin/grpc/GrpcHandler.kt +20 −16 Original line number Diff line number Diff line Loading @@ -40,20 +40,34 @@ package grpc import proto.Dlt import fabric.FabricConnector import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.consumeAsFlow import proto.ContextOuterClass import proto.DltServiceGrpcKt class DLTService(private val connector: FabricConnector) : DltServiceGrpcKt.DltServiceCoroutineImplBase() { override suspend fun recordToDlt(request: Dlt.DltRecord): Dlt.DltRecordStatus { println("Incoming request ${request.recordId.recordUuid}") val error = connector.putData(request) val error = when (request.operation) { Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_ADD -> { println("Adding new record") connector.putData(request) } Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_UPDATE -> { println("Updating record") connector.updateData(request) } Dlt.DltRecordOperationEnum.DLTRECORDOPERATION_DELETE -> { println("Deleting record") connector.deleteData(request) } else -> "Undefined or unknown operation" } val dltStatusEnum: Dlt.DltRecordStatusEnum = if (error == "") { Dlt.DltRecordStatusEnum.DLTRECORDSTATUS_SUCCEEDED } else { Dlt.DltRecordStatusEnum.DLTRECORDSTATUS_FAILED } println("Put data status: $error") return Dlt.DltRecordStatus.newBuilder() .setRecordId(request.recordId) .setStatus(dltStatusEnum) Loading @@ -65,19 +79,9 @@ class DLTService(private val connector: FabricConnector): DltServiceGrpcKt.DltSe return connector.getData(request.recordUuid.uuid) } override fun subscribeToDlt(request: Dlt.DltRecordSubscription): Flow<Dlt.DltRecordEvent> = flow { override fun subscribeToDlt(request: Dlt.DltRecordSubscription): Flow<Dlt.DltRecordEvent> { println("Subscription request: $request") val c = connector.subscribeForEvents() println("Got channel") val event = c.receive() println("Received event from channel") // TODO: mistype, proto scheme fix required if (request.operationValueList.contains(event.event.eventType.number)) { if (request.typeList.contains(event.recordId.type)) { emit(event) } } return connector.subscribeForEvents().consumeAsFlow() } override suspend fun getDltStatus(request: ContextOuterClass.TeraFlowController): Dlt.DltPeerStatus { Loading