使用 Corda 基于账户的模型,我可以确定交易签名者是否与状态上持久化的账户相匹配吗?

Using the Corda account-based model, can I ascertain whether a transaction signer matches an account persisted on the state?

我正在 Corda 中试验哈希时间锁定合约,使用 Corda 基于帐户的模型。在我看来,要使用帐户进行交易,您必须始终通过子流 RequestKeyForAccount 获得匿名方作为其 public 密钥。而且似乎每次 RequestKeyForAccount 时您总是会获得不同的密钥,即使是同一个帐户也是如此。

假设以上说法正确,我发现无法执行合约,因为合约必须能够识别调用它的 public key 是属于“locker”还是“lockee” “ 派对。匿名方将始终不同,并且永远不会匹配“储物柜”或“被锁者”,因为每次我调用 RequestKeyForAccount 时它都会不同。

我也尝试过以不同的方式解决这个问题,方法是在我的帐户中存储“locker”account 和“lockee”account持续状态 - 但是,合约无权访问调用它的 account。它可以访问 signers - 这是 AbstractParties。调用交易的账户似乎无法获得。

归根结底,由于 RequestKeyForAccount 返回的随机匿名值,我无法实施试图确定调用它的帐户是否与存储在关联状态中的特定帐户相匹配的合约;并且由于帐户无法访问,而我只能访问交易的签名者,即 AbstractParties。如果有人能告诉我我的任何陈述是否有误,我将不胜感激。

永远记住,Corda 中的账户只是逻辑实体。他们不签署交易,也不调用 cordapp 中的流程。这是他们的托管节点代表他们拥有的帐户。

因此,如 training.corda.net 中所述,如果您想限制特定帐户对某些状态的访问,您必须在 Corda 之外对其进行管理(例如,创建链接的 RPC 用户应用程序级别的帐户,具有所需的限制):

Data access restrictions, i.e. restricting users (i.e. Corda accounts) to interact only with states that they own, is the CorDapp developer's responsibility as implementing them is outside of Corda’s scope.