Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web 如何将前端与我的自定义Cordapp集成?_Web_Frontend_Blockchain_Corda - Fatal编程技术网

Web 如何将前端与我的自定义Cordapp集成?

Web 如何将前端与我的自定义Cordapp集成?,web,frontend,blockchain,corda,Web,Frontend,Blockchain,Corda,你好,我正在学习一些科尔达的概念。我有一个Cordapp在我的系统上本地运行。我想把前端和它结合起来。我如何才能做到这一点?在Corda中,您可以通过RPC与节点进行交互。您的前端服务器需要: 创建到节点的RPC连接 使用此RPC连接发出命令并从节点读回数据 以下是在Spring中创建到节点的RPC连接的示例: private const val CORDA_USER_NAME = "config.rpc.username" private const val CORDA_USER_PASS

你好,我正在学习一些科尔达的概念。我有一个Cordapp在我的系统上本地运行。我想把前端和它结合起来。我如何才能做到这一点?

在Corda中,您可以通过RPC与节点进行交互。您的前端服务器需要:

  • 创建到节点的RPC连接
  • 使用此RPC连接发出命令并从节点读回数据
以下是在Spring中创建到节点的RPC连接的示例:

private const val CORDA_USER_NAME = "config.rpc.username"
private const val CORDA_USER_PASSWORD = "config.rpc.password"
private const val CORDA_NODE_HOST = "config.rpc.host"
private const val CORDA_RPC_PORT = "config.rpc.port"

/**
 * Wraps a node RPC proxy.
 *
 * The RPC proxy is configured based on the properties in `application.properties`.
 *
 * @param host The host of the node we are connecting to.
 * @param rpcPort The RPC port of the node we are connecting to.
 * @param username The username for logging into the RPC client.
 * @param password The password for logging into the RPC client.
 * @property proxy The RPC proxy.
 */
@Component
open class NodeRPCConnection(
        @Value("\${$CORDA_NODE_HOST}") private val host: String,
        @Value("\${$CORDA_USER_NAME}") private val username: String,
        @Value("\${$CORDA_USER_PASSWORD}") private val password: String,
        @Value("\${$CORDA_RPC_PORT}") private val rpcPort: Int): AutoCloseable {

    lateinit var rpcConnection: CordaRPCConnection
        private set
    lateinit var proxy: CordaRPCOps
        private set

    @PostConstruct
    fun initialiseNodeRPCConnection() {
            val rpcAddress = NetworkHostAndPort(host, rpcPort)
            val rpcClient = CordaRPCClient(rpcAddress)
            val rpcConnection = rpcClient.start(username, password)
            proxy = rpcConnection.proxy
    }

    @PreDestroy
    override fun close() {
        rpcConnection.notifyServerAndClose()
    }
}
下面是在Spring控制器中使用RPC连接的示例:

/**
 * A CorDapp-agnostic controller that exposes standard endpoints.
 */
@RestController
@RequestMapping("/") // The paths for GET and POST requests are relative to this base path.
class StandardController(
        private val rpc: NodeRPCConnection) {

    companion object {
        private val logger = LoggerFactory.getLogger(RestController::class.java)
    }

    private val proxy = rpc.proxy

    @GetMapping(value = "/status", produces = arrayOf("text/plain"))
    private fun status() = "200"

    @GetMapping(value = "/servertime", produces = arrayOf("text/plain"))
    private fun serverTime() = LocalDateTime.ofInstant(proxy.currentNodeTime(), ZoneId.of("UTC")).toString()

    @GetMapping(value = "/addresses", produces = arrayOf("text/plain"))
    private fun addresses() = proxy.nodeInfo().addresses.toString()

    @GetMapping(value = "/identities", produces = arrayOf("text/plain"))
    private fun identities() = proxy.nodeInfo().legalIdentities.toString()

    @GetMapping(value = "/platformversion", produces = arrayOf("text/plain"))
    private fun platformVersion() = proxy.nodeInfo().platformVersion.toString()

    @GetMapping(value = "/peers", produces = arrayOf("text/plain"))
    private fun peers() = proxy.networkMapSnapshot().flatMap { it.legalIdentities }.toString()

    @GetMapping(value = "/notaries", produces = arrayOf("text/plain"))
    private fun notaries() = proxy.notaryIdentities().toString()

    @GetMapping(value = "/flows", produces = arrayOf("text/plain"))
    private fun flows() = proxy.registeredFlows().toString()

    @GetMapping(value = "/states", produces = arrayOf("text/plain"))
    private fun states() = proxy.vaultQueryBy<ContractState>().states.toString()
}
/**
*公开标准端点的CorDapp不可知控制器。
*/
@RestController
@RequestMapping(“/”//GET和POST请求的路径相对于此基本路径。
类标准控制器(
私有值(rpc:NodeRPCConnection){
伴星{
private val logger=LoggerFactory.getLogger(RestController::class.java)
}
private val proxy=rpc.proxy
@GetMapping(value=“/status”,products=arrayOf(“text/plain”))
私人娱乐状态()=“200”
@GetMapping(value=“/servertime”,products=arrayOf(“text/plain”))
private fun serverTime()=LocalDateTime.ofInstant(proxy.currentNodeTime(),ZoneId.of(“UTC”)).toString()
@GetMapping(value=“/addresses”,products=arrayOf(“text/plain”))
private fun addresses()=proxy.nodeInfo().addresses.toString()
@GetMapping(value=“/identies”,products=arrayOf(“text/plain”))
private fun identities()=proxy.nodeInfo().Legalidenties.toString()
@GetMapping(value=“/platformversion”,products=arrayOf(“text/plain”))
private fun platformVersion()=代理.nodeInfo().platformVersion.toString()
@GetMapping(value=“/peers”,products=arrayOf(“text/plain”))
private fun peers()=proxy.networkmapsnashot().flatMap{it.legidenties}.toString()
@GetMapping(value=“/junaries”,products=arrayOf(“text/plain”))
private fun公证人()=proxy.notaryIdentities().toString()
@GetMapping(value=“/flows”,products=arrayOf(“text/plain”))
private fun flows()=proxy.registeredFlows().toString()
@GetMapping(value=“/states”,products=arrayOf(“text/plain”))
private fun states()=proxy.vaultQueryBy().states.toString()
}
您将注意到,您需要使用Java类来创建到节点的连接。这意味着Web服务器需要用JVM语言编写。或者,您可以使用类似于Graal的东西,用非JVM语言编写服务器,并将其编译为JVM字节码。有一个例子