Corda帐户:从公钥返回获取帐户信息”;空";

Corda帐户:从公钥返回获取帐户信息”;空";,corda,Corda,我正在尝试使用以下方法从存储在匿名方中的公钥获取Account Info对象: accountService.accountInfo(programCurrency.getPartner().getOwningKey()).getState().getData(); 但每次我都是空的。我在记录时检查了来自vault查询的匿名参与方对象是否为非空,并得到以下结果: accountService.accountInfo(programCurrency.getPartner().getOwningK

我正在尝试使用以下方法从存储在匿名方中的公钥获取Account Info对象:

accountService.accountInfo(programCurrency.getPartner().getOwningKey()).getState().getData();
但每次我都是空的。我在记录时检查了来自vault查询的匿名参与方对象是否为非空,并得到以下结果:

accountService.accountInfo(programCurrency.getPartner().getOwningKey()).getState().getData();
匿名(DL5Z9SV3285QANUNK5VM6CRWTFK2TE4QXUFEOYUWH7AHM)

我仍然无法理解它为什么返回空值


注意:我试图获取信息的帐户托管在另一个节点上,但在创建时,我使用:ShareAccountInfo()子流与其他节点共享帐户信息。

可能为该帐户分配了一个新的公钥,而您的节点(正在使用该公钥进行查询的节点)不知道该公钥;因此,尽管它有这个账户(因为它与它共享);它没有与帐户获得的新公钥保持同步

了解有关同步键的信息;检查它们的流
SyncKeyMappingInitiator
,它使用
SyncKeyMappingFlow
同步键


您还可以阅读有关同步键的内容(搜索
SyncKeyMappingFlow
)。

因此,为了澄清每次我执行RequestKeyForAccount()时,我还需要调用SyncKeyMappingInitiator流?不,我想说的是,您的
AccountInfo
的相同
UUID
将有许多公钥存储在节点的数据库中的一个表中(该表将
UUID
映射到所有相关的公钥),但这是可能的(因为您的节点不是帐户的主机)其映射表没有为该帐户生成的一些公钥(假设您的节点是Node1,并且有一个帐户主机和Node2;如果Node2为该帐户请求了一个新密钥,则主机和Node2将使用新值将其
UUID
更新为公钥映射,但Node1不会)。因此,主机和节点2基本上会知道该公钥属于该帐户,但节点1不会(在您的案例中可能就是这样)。当您调用
SyncKeyMappingFlow
时,主机将向您发送该帐户的所有公钥。嘿,阿德尔,我尝试同步密钥,但仍然为空。在深入查看日志时,我发现了如下错误:persistence.AbstractPartyToX500NameAsStringConverter。-身份服务无法解析AbstractParty:Anonymous(DLAWSSSZSSOZAMCAQGXW8OAYX42JY6C96NJGRQLKHGEOB7L)。这可能是原因吗?我不太确定,但我假设托管帐户的节点与另一个节点(发生错误的节点)共享该帐户是参与者的状态;如果是这样,您是否也与该节点共享该帐户?因为接收状态的节点(其中帐户是参与者)不知道该帐户,所以也必须将其发送给该节点。看一看。