在Corda中,我们有以下类型的层次结构来提供分类账身份:
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(...) { ... }请注意以下评论:
匿名政党除了拥有密钥外,不包括任何细节,因此等式完全取决于密钥。
我想知道的是,为什么平等被定义在层次结构的根上,而没有其他地方?
例如:
val wellKnownAlice = Party(aliceKey, aliceX500name)
val anonymousAlice = AnonymousParty(aliceKey)
wellKnownAlice == anonymousAlice
// true虽然我有一种固执己见的观点,但当它们是根本不同的东西时,我觉得它们不应该是平等的。我觉得这样做会更好:
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(...) { ... }关于这一点的想法非常感谢。
发布于 2022-04-25 16:51:37
我同意这有点不一致。我知道您是一个比我更有经验的CorDapp开发人员(因为您以前的问题帮助我学习了Corda),但是我将分享我自己的经验。
当我第一次开始和Corda合作的时候,我想到(并编码)了派对。然而,我在CorDapps中引入的机密身份越多,我就越开始从PublicKey (AnonymousParty)的角度思考。
所以我发现这种“不一致”有点方便。
我想知道R3的开发人员是否知道CorDapps通常应该总是使用AnonymousParty,因此希望尽可能容易地比较AnonymousParty和AnonymousParty。只是猜一下。
发布于 2022-04-11 06:00:13
考虑有name: CordaX500Name和key: PublicKey的情况。然后定义
val p1 = AnonymousParty(key)
val p2 = Party(name, key)对于您提议的实现,您将拥有p1 == p2,而不是p2 == p1,因此这种关系不是对称的,因此不是一个有效的等价关系。
众所周知的名称对于任何给定的键都是唯一的,所以我认为当前的实现是合理的。否则,我们将根据它们是否被解析为某个名称来区分其他相同的身份。
https://stackoverflow.com/questions/71795762
复制相似问题