Относительно предыдущего вопроса, который я задал Corda - Цель NULL_PARTY Каис отметил, что NULL_PARTY
, вероятно, не следует использовать в производственном коде, но поговорив с несколькими другими разработчиками на R3,Я хочу представить пример использования, в котором это может быть полезно.
У меня есть конкретный случай использования, когда сторона может быть подписывающей стороной в сети Corda или стороной, не подписавшей соглашение, не в сети Corda, но другие участники все еще должны знать, что эта вечеринка "вне цепочки".
Имея это в виду, я реализовал вечеринку вне цепочки:
import net.corda.core.crypto.NullKeys.NULL_PARTY
import net.corda.core.identity.AbstractParty
import net.corda.core.utilities.OpaqueBytes
class OffChainParty(val reference: String) : AbstractParty(party.owningKey) {
companion object {
private val party = NULL_PARTY
}
override fun nameOrNull() = party.nameOrNull()
override fun ref(bytes: OpaqueBytes) = party.ref(bytes)
}
Состояния, которые потенциально требуют участия вне цепочки, будут реализованы следующим образом:
data class ObligationState(
val obligor: AbstractParty,
val obligee: AbstractParty,
val insurer: AbstractParty
) : ContractState {
val participants: List<AbstractParty>
get() = listOf(obligor, obligee, insurer).filter { it !is OffChainParty }
}
Затем мы могли бы включить подписывающих участников следующим образом:
val state = ObligationState(alice, bob, charlie) // assume they're all known parties.
И мы могли бы включить неподписывающих участников, таких какитак:
val state = ObligationState(alice, bob, OffChainParty("acme technology"))
Q & A
Q: Почему бы вам просто не использовать AbstractParty?
и сделать его null
?
A: Потому что другие участники не могут определить, кто null
есть, но они могут определить, кто такая "технология acme", не требуя от них подписи.
Q: Почему бы вам просто не использовать ссылку String
вместо обхода AbstractParty
?
A: потому что иногда мы хотим, чтобы партия подписывалась, поэтому они должны быть реальными Party
, а в других случаях мы просто хотим знать, кто они, независимо от того, являются ли ониВы в цепочке или нет.
Есть мысли об этом подходе?