Corda(2)——示例
运行Corda的示例
下载源码(java版)
cd [your workspace]
git clone https://github.com/corda/samples-java.git
在IDE中打开samples-java/Basic/cordapp-examples
目录结构如下:
├── LICENCE
├── README.md
├── TRADEMARK
├── build.gradle
├── clients
│ ├── build.gradle
│ └── src
│ └── main
│ ├── java
│ │ └── net
│ │ └── corda
│ │ └── samples
│ │ └── example
│ │ ├── Client.java
│ │ └── webserver
│ │ ├── Controller.java
│ │ ├── NodeRPCConnection.java
│ │ └── Starter.java
│ └── resources
│ └── static
│ ├── app.js
│ └── index.html
├── config
│ ├── dev
│ │ └── log4j2.xml
│ └── test
│ └── log4j2.xml
├── contracts
│ ├── build.gradle
│ └── src
│ ├── main
│ │ └── java
│ │ └── net
│ │ └── corda
│ │ └── samples
│ │ └── example
│ │ ├── contracts
│ │ │ └── IOUContract.java
│ │ ├── schema
│ │ │ ├── IOUSchema.java
│ │ │ └── IOUSchemaV1.java
│ │ └── states
│ │ └── IOUState.java
│ └── test
│ └── java
│ └── net
│ └── corda
│ └── samples
│ └── example
│ └── contracts
│ ├── ContractTests.java
│ └── StateTests.java
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── repositories.gradle
├── settings.gradle
└── workflows
├── build.gradle
└── src
├── integrationTest
│ └── java
│ └── net
│ └── corda
│ └── samples
│ └── example
│ └── DriverBasedTest.java
├── main
│ ├── java
│ │ └── net
│ │ └── corda
│ │ └── samples
│ │ └── example
│ │ └── flows
│ │ └── ExampleFlow.java
│ └── resources
│ └── migration
│ ├── iou.changelog-master.xml
│ └── iou.changelog-v1.xml
└── test
└── java
└── net
└── corda
└── samples
└── example
└── FlowTests.java
- clients文件夹包含的是用于Spring Boot集成的源码
- config是配置文件,包含log4j2
- contracts和workflows是CorDapp的源码
- gradle是包含Gradle Wrapper
部署节点并运行示例CorDapp
打开终端输入一下命令:
gradlew.bat deployNodes
// tips可以只部署java(或者kotlin)
// -b表示 --build-file
gradlew.bat -b workflows-java/build.gradle deploynodes
会在根目录下创建文件夹build/nodes,里面会有三个Node文件夹(PartyA,PartyB,Notary),节点信息在根目录下的build.gradle中定义。
输入如下命令运行示例CorDapp
call build\nodes\runnodes.bat
会打开三个如下的界面,当出现如下图红色方框所示的”welocme”语句时表示成功运行
三种交互方式
通过http
这一部分的内容还要进一步研究
通过交互式shell
可以直接在每个节点的shell与节点进行交互,比如在节点A和B之间创建一个IOU(i owe you)账单,在PartyA中输入如下命令:
>>>flow start Initiator iouValue: 50, otherParty: "O=PartyB,L=New York,C=US"
上面命令中Initiator
是一个流(extends FlowLogic),iouValue
和otherParty
是Initiator中的两个参数。
生产环境中使用Network Map Service来定义节点名字和查找节点,并使用Doorman Service管理准入
得到类似如下结果:
上图中出现如下信息,表示交易完成
Flow completed with result: SignedTransaction(id=AEE179389C8F701C940489BF208D13C09B6E8D48F6AC32979C7F0C2B0BD1B526)
然后可以使用如下命令进行查看:
run vaultQuery contractStateType: com.example.state.IOUState
在PartyA
和PartyB
可以查看类似如下信息,但是Notary
是没有的,如果有其他节点也是看不到的,这正是Corda的Need-to-know
特性。
contractStateClassName: "com.example.state.IOUState"
recordedTime: "2021-04-05T00:05:24.579Z"
consumedTime: null
status: "UNCONSUMED"
notary: "O=Notary, L=London, C=GB"
可以看到是UNCONSUMED
,com.example.state.IOUState
是IOUState的package名。
可以输入以下命令实时查看
在PartyB中输入以下命令:
run vaultTrack contractStateType com.example.state.IOUState
当其他节点与B进行交易时,交易信息会在PartyB实时显示。
...# 省略
totalStatesAvailable: -1
stateTypes: "UNCONSUMED"
otherResults: []
Updates:
Waiting for completion or Ctrl-C ...
通过h2的web控制台
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 chl'blog!