Corda(3)——节点数据库配置以及访问
下载H2
配置节点
在每个节点的shell中输入bye
关闭所有节点。
到workflows-java/build.gradle
文件夹中修改配置
nodeDefaults {
cordapp project(":contracts-java")
// 添加一下代码
extraConfig = [
h2Settings: [
// A random port will be selected.
address : 'localhost:0'
]
]
}
重新部署并运行节点
在每个shell里面会多出类似下面一行代码:
Database connection url is : jdbc:h2:tcp://localhost:61433/node
启动h2,在页面添加JDBC URL
,其他的不用更改(每个节点进行同样的操作)
可以选择语言
创建IOU
在PartyA输入一下命令:
flow start Initiator iouValue: 50,otherParty:"O=PartyB,L=New York,C=US"
当然可以在PartyB
先进行监听(上面已经提到vaultTrack
)
在PartyA
和PartyB
的web控制台上找到并点击VAULT_STATES,然后点击运行,会显示一条记录,在其他的节点查询不到相关信息。
在PartyA
和PartyB
会多一个IOU_STATES
,查询得到如下的信息:
列名在IOUState
的schema中定义。
我们知道,一个’state’的唯一性由产生它的transaction
和作为输出的列表中的index
表示,这个特性在StateRdf class
中定义
在h2web控制台中PartyA
和PartyB
的IOU_STATES
可以看到(VAULT_STATES
也可以看到):
checkpoints
关闭PartyC
和Notary
,在PartyA
中创建和 PartyC
的IOU,
Mon Apr 05 15:37:24 CST 2021>>> flow start Initiator iouValue: 5,otherParty: "O=PartyC,L=Paris,C=FR"
Starting
Generating transaction based on new IOU.
Verifying contract constraints.
Signing transaction with our private key.
Gathering the counterparty's signature.
Collecting signatures from counterparties.
会停在colecting signatures from counterparties
这里,可以在h2web控制台中查看PartyA
的信息,可以看到IOU_STATE
没有增加记录,但是在NODE_CHECKPOINTS
中有一条记录如下:
重新运行PartyC:
// 必须先进入workflows-java/build/nodes/PartyC
cd workflows-java/build/nodes/PartyC
java -jar corda.jar
//下面这个命令是不行的,提示找不到`node.conf`
//java -jar workflows-java/build/nodes/PartyC/corda.jar
more details
Notary
提供交易的唯一性标识,并且避免双花,但是我们上面的创建IOU的过程是不涉及到state
的消耗的,所以就算在workflows-java/build.gradle
中将Notary
的validating
,改为true
,当不启动Natory
时,也会完成上面的流程,或者说上面的transactions
是没有输入的,是不需要Notary
参与的。
node {
name "O=Notary,L=London,C=GB"
notary = [validating : false] //这里改为true
p2pPort 10000
rpcSettings {
address("localhost:10001")
adminAddress("localhost:10002")
}
projectCordapp {
deploy = false
}
cordapps.clear()
}
.jar 注入
在每一个节点的文件夹中都有数据cordapps,这是完整整个flow
必须的.jar。