首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Corda -检查AbstractParty、Party和AnonymousParty的等式

Corda -检查AbstractParty、Party和AnonymousParty的等式
EN

Stack Overflow用户
提问于 2022-04-08 10:53:05
回答 2查看 92关注 0票数 1

在Corda中,我们有以下类型的层次结构来提供分类账身份:

代码语言:javascript
复制
abstract class AbstractParty(val owningKey: PublicKey): Destination {

    /** Anonymised parties do not include any detail apart from owning key, 
        so equality is dependent solely on the key */

    override fun equals(other: Any?): Boolean {
        return other === this 
            || other is AbstractParty 
            && other.owningKey == owningKey
    }

    ...
}

// Shortened for brevity
class Party(...) : AbstractParty(...) { ... }
class AnonymousParty(...) : AbstractParty(...) { ... }

请注意以下评论:

匿名政党除了拥有密钥外,不包括任何细节,因此等式完全取决于密钥。

我想知道的是,为什么平等被定义在层次结构的根上,而没有其他地方?

例如:

代码语言:javascript
复制
val wellKnownAlice = Party(aliceKey, aliceX500name)
val anonymousAlice = AnonymousParty(aliceKey)

wellKnownAlice == anonymousAlice
// true

虽然我有一种固执己见的观点,但当它们是根本不同的东西时,我觉得它们不应该是平等的。我觉得这样做会更好:

代码语言:javascript
复制
abstract class AbstractParty(val owningKey: PublicKey): Destination {

    override fun equals(other: Any?): Boolean {
        return other === this 
            || other is AbstractParty 
            && other.javaClass == javaClass
            && equalsByKey(other)
    }

    fun equalsByKey(other: AbstractParty): Boolean {
        return other === this || other.owningKey == owningKey
    } 

    ...
}

class Party(...) : AbstractParty(...) {

    override fun equals(other: Any?): Boolean {
        return other === this 
            || other is Party
            && other.name == name
            && equalsByKey(other)
    }

    ...
}

class AnonymousParty(...) : AbstractParty(...) { ... }

关于这一点的想法非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2022-04-25 16:51:37

我同意这有点不一致。我知道您是一个比我更有经验的CorDapp开发人员(因为您以前的问题帮助我学习了Corda),但是我将分享我自己的经验。

当我第一次开始和Corda合作的时候,我想到(并编码)了派对。然而,我在CorDapps中引入的机密身份越多,我就越开始从PublicKey (AnonymousParty)的角度思考。

所以我发现这种“不一致”有点方便。

我想知道R3的开发人员是否知道CorDapps通常应该总是使用AnonymousParty,因此希望尽可能容易地比较AnonymousParty和AnonymousParty。只是猜一下。

票数 1
EN

Stack Overflow用户

发布于 2022-04-11 06:00:13

考虑有name: CordaX500Namekey: PublicKey的情况。然后定义

代码语言:javascript
复制
val p1 = AnonymousParty(key)
val p2 = Party(name, key)

对于您提议的实现,您将拥有p1 == p2,而不是p2 == p1,因此这种关系不是对称的,因此不是一个有效的等价关系。

众所周知的名称对于任何给定的键都是唯一的,所以我认为当前的实现是合理的。否则,我们将根据它们是否被解析为某个名称来区分其他相同的身份。

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

https://stackoverflow.com/questions/71795762

复制
相关文章

相似问题

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