编写一个 CorDapp

概要

CorDapp 可以使用 Java 或者 Kotlin 语言来编写,或者你可以两个一起用。每一个 CorDapp 组件使用一个 JVM 类的形式来作为 Corda library 类型的子类或者是实现了一个 Corda library 类型:

Web 内容 和 RPC 客户端

为了测试的目的,CorDapp 也可能包含:

对于生产环境,应该使用一个适用于生产环境的 webserver,并且这些文件应该被移动到一个不同的模块或者项目,这样他们才不会在创建 CorDapp 的时候不会让 CorDapp 变得很大很臃肿。

结构

你应该基于 Java 或者 Kotlin 的模板结构来创建你的项目:

Java CorDapp 模板 Kotlin CorDapp 模板

项目应该被划分为两个模块:

每一个模块会被编译成他们自己的 CorDapp。这会使 JAR 文件具有最小的size,为了更好地在节点都同意账本更新的时候在网络中进行传播。

第一个模块 - cordapp-contract-states

下边是 cordapp-contracts-states 模块的 src 路径结构:

.
└── main
    └── java
        └── com
            └── template
                ├── TemplateContract.java
                └── TemplateState.java

这个路径仅仅包含两个类定义:

这些是我们希望在网络中进行传输的内容的类定义。他们会被编译成为自己的 CorDapp。

第二个模块 - cordapp

下边是 cordapp 模块的 src 路径结构:

.
├── main
│   ├── java
│   │   └── com
│   │       └── template
│   │           ├── TemplateApi.java
│   │           ├── TemplateClient.java
│   │           ├── TemplateFlow.java
│   │           ├── TemplateSerializationWhitelist.java
│   │           └── TemplateWebPlugin.java
│   └── resources
│       ├── META-INF
│       │   └── services
│       │       ├── net.corda.core.serialization.SerializationWhitelist
│       │       └── net.corda.webserver.services.WebServerPluginRegistry
│       ├── certificates
│       └── templateWeb
├── test
│   └── java
│       └── com
│           └── template
│               ├── ContractTests.java
│               ├── FlowTests.java
│               └── NodeDriver.java
└── integrationTest
    └── java
        └── com
            └── template
                └── DriverBasedTest.java

src 路径结构包括:

main 中,我们还有以下的路径结构:

CorDapp 的源代码还可以被拆解成下边的几部分:

在开发 CorDapp 的时候,你应该从修改这些类开始来定义你的 CorDapp 的组件。一个单独的 CorDapp 可以定义多个 flows,states 和 contracts。

这个模板还包含了一个 web API 和 RPC 客户端:

这些都是为了测试为目的的,不应该被用在生产环境。