首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在网络中部署默认公证节点的正确配置是什么?

在网络中部署默认公证节点的正确配置是什么?
EN

Stack Overflow用户
提问于 2018-07-17 10:18:25
回答 1查看 125关注 0票数 0

我使用两台不同的机器部署corda网络:在第一台机器中,我使用以下配置部署公证员和oracle服务:

公证

代码语言:javascript
复制
myLegalName="O=Notary,L=London,C=GB"
keyStorePassword : "cordacadevpass"
trustStorePassword : "trustpass"
p2pAddress="machine-ip1:10004"
notary : {
    validating : false
}
devMode : true

甲骨文

代码语言:javascript
复制
myLegalName="O=Oracle,L=London,C=GB"
keyStorePassword : "cordacadevpass"
trustStorePassword : "trustpass"
p2pAddress="machine-ip1:10001"
rpcSettings {
    address="0.0.0.0:10002"
    adminAddress="0.0.0.0:10003"
}
rpcUsers=[
    {
        password=test
        permissions=[
            ALL
        ]
        user=user1
    }
]
devMode : true

在第二个过程中,我部署了以下各方节点:

Party

代码语言:javascript
复制
myLegalName="O=Party,L=London,C=GB"
keyStorePassword : "cordacadevpass"
trustStorePassword : "trustpass"
p2pAddress="machine-ip2:10001"
rpcSettings {
    address="0.0.0.0:10002"
    adminAddress="0.0.0.0:10003"
}
rpcUsers=[
    {
        password=test
        permissions=[
            ALL
        ]
        user=user1
    }
]
devMode : true

一旦Party启动一个流程,构建一个事务,它就会失败,引发这个异常:

代码语言:javascript
复制
java.lang.IllegalStateException: Need to specify a notary for the state, or set a default one on TransactionBuilder 
        at net.corda.core.transactions.TransactionBuilder.addOutputState(TransactionBuilder.kt:172) 
        at net.corda.core.transactions.TransactionBuilder.addOutputState$default(TransactionBuilder.kt:171) 

呼叫功能是:

代码语言:javascript
复制
override fun call(): SignedTransaction {

    val notary = serviceHub.networkMapCache.getNotary(CordaX500Name("Notary", "London", "GB"))!!

    val issueState = CashOwningState(amount, ourIdentity)
    val issueCommand = Command(
        CashIssueContract.Commands.Issue(),
        issueState.participants.map { it.owningKey })

    val txBuilder = TransactionBuilder(notary).withItems(
        StateAndContract(issueState, CashIssueContract.TEST_CONTRACT_ID),
        issueCommand)

    txBuilder.verify(serviceHub)

    val fullySignedTx = serviceHub.signInitialTransaction(txBuilder)

    return subFlow(FinalityFlow(fullySignedTx, FINALIZING_TX.childProgressTracker()))
}

Notary似乎是在网络中找到的,但CordApp不承认它是公证人。

EN

回答 1

Stack Overflow用户

发布于 2018-07-17 11:38:09

这不是CorDapp不承认公证人的问题。引发此异常的唯一地方是这里

代码语言:javascript
复制
@JvmOverloads
fun addOutputState(state: ContractState, contract: ContractClassName, constraint: AttachmentConstraint = AutomaticHashConstraint): TransactionBuilder {
    checkNotNull(notary) { "Need to specify a notary for the state, or set a default one on TransactionBuilder initialisation" }
    addOutputState(state, contract, notary!!, constraint = constraint)
    return this
}

当通过传递公证人来实例化TransactionBuilder时,不执行检查所传递的一方是否实际上是公证人。

您必须尝试在代码中没有公证的情况下向TransactionBuilder添加输出状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51378891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档