下载H2

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,其他的不用更改(每个节点进行同样的操作)

可以选择语言

h2连接

创建IOU

在PartyA输入一下命令:

flow start Initiator iouValue: 50,otherParty:"O=PartyB,L=New York,C=US"

当然可以在PartyB先进行监听(上面已经提到vaultTrack

PartyAPartyB的web控制台上找到并点击VAULT_STATES,然后点击运行,会显示一条记录,在其他的节点查询不到相关信息。

PartyAPartyB会多一个IOU_STATES,查询得到如下的信息:

iouStates

列名在IOUStateschema中定义。

我们知道,一个’state’的唯一性由产生它的transaction和作为输出的列表中的index表示,这个特性在StateRdf class中定义

在h2web控制台中PartyAPartyBIOU_STATES可以看到(VAULT_STATES也可以看到):
unique

checkpoints

关闭PartyCNotary,在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中有一条记录如下:
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中将Notaryvalidating,改为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。