Commit 2ca6ae4e authored by Konstantin Munichev's avatar Konstantin Munichev
Browse files

[dlt]: http/protobuf configuration

parent bd8fbc5b
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -6,9 +6,11 @@ import com.google.protobuf.gradle.protobuf
import com.google.protobuf.gradle.protoc

ext["protobufVersion"] = "3.19.1"
ext["ktorVersion"] = "1.6.5"

plugins {
    kotlin("jvm") version "1.5.31"
    kotlin("plugin.serialization") version "1.4.21"
    id("com.google.protobuf") version "0.8.17"
    application
}
@@ -24,6 +26,15 @@ dependencies {
    testImplementation("org.jetbrains.kotlin:kotlin-test:1.5.31")
    implementation("org.hyperledger.fabric:fabric-gateway-java:2.2.2")
    api("com.google.protobuf:protobuf-kotlin:${rootProject.ext["protobufVersion"]}")
    implementation("io.ktor:ktor-server-core:${rootProject.ext["ktorVersion"]}")
    implementation("io.ktor:ktor-server-netty:${rootProject.ext["ktorVersion"]}")
    implementation("io.ktor:ktor-serialization:${rootProject.ext["ktorVersion"]}")
    implementation("io.ktor:ktor-client-serialization:${rootProject.ext["ktorVersion"]}")
    implementation("io.ktor:ktor-client-core:${rootProject.ext["ktorVersion"]}")
    implementation("io.ktor:ktor-client-cio:${rootProject.ext["ktorVersion"]}")
    implementation("ch.qos.logback:logback-classic:1.2.5")
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.1")
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-protobuf:1.3.1")
}

tasks.test {
+31 −15
Original line number Diff line number Diff line
import fabric.enrollAdmin
import fabric.registerUser
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.request.*
import io.ktor.http.*
import kotlinx.serialization.ExperimentalSerializationApi
import org.hyperledger.fabric.gateway.Gateway
import org.hyperledger.fabric.gateway.Network
import org.hyperledger.fabric.gateway.Wallets
import proto.Config.DltConfig
import java.nio.file.Paths


// helper function for getting connected to the gateway
fun connect(): Gateway {
    // Load a file system based wallet for managing identities.
@@ -17,18 +21,30 @@ fun connect(): Gateway {
    return builder.connect()
}

fun main(args: Array<String>) {
    enrollAdmin()
    registerUser()
@OptIn(ExperimentalSerializationApi::class)
suspend fun main(args: Array<String>) {
//    enrollAdmin()
//    registerUser()
//
//    // connect to the network and invoke the smart contract
//    connect().use { gateway ->
//        // get the network and contract
//        val network = gateway.getNetwork("dlt")
//        val contract = network.getContract("basic")
//        println("Submit Transaction: InitLedger creates the initial set of assets on the ledger.")
//        contract.submitTransaction("InitLedger")
//        val result = contract.evaluateTransaction("GetAllAssets")
//        println("Evaluate Transaction: GetAllAssets, result: " + String(result))
//    }
//
    val cfg = DltConfig.newBuilder().setWallet("wallet123").setConnectionFile("file").setUser("uuser").setChannel("ch1")
        .setContract("basic").build()
    val cfgBytes = cfg.toByteArray()

    // connect to the network and invoke the smart contract
    connect().use { gateway ->
        // get the network and contract
        val network = gateway.getNetwork("dlt")
        val contract = network.getContract("basic")
        println("Submit Transaction: InitLedger creates the initial set of assets on the ledger.")
        contract.submitTransaction("InitLedger")
        val result = contract.evaluateTransaction("GetAllAssets")
        println("Evaluate Transaction: GetAllAssets, result: " + String(result))
    val client = HttpClient(CIO)
    val config = client.post<ByteArray>("http://localhost:8080/dlt/configure") {
        contentType(ContentType.Any)
        body = cfgBytes
    }
    println(DltConfig.parseFrom(config))
}
 No newline at end of file
+0 −5
Original line number Diff line number Diff line
package config

class Config(wallet: String, connectionFile: String, user: String, channel: String, contract: String) {

}
 No newline at end of file
+30 −0
Original line number Diff line number Diff line
package http

import io.ktor.application.*
import io.ktor.features.*
import io.ktor.request.*
import io.ktor.response.*
import io.ktor.routing.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import proto.Config.DltConfig.parseFrom

fun main() {
    embeddedServer(Netty, port = 8080) {
        install(ContentNegotiation)
        routing {
            post("/dlt/configure") {
                withContext(Dispatchers.IO) {
                    println("incoming connection")
                    val data = call.receiveStream()
                    val config = parseFrom(data)
                    println(config)
                    val encodedBack = config.toByteArray()
                    call.respond(encodedBack)
                }
            }
        }
    }.start(wait = true)
}