Корда - Можем ли мы использовать NULL_PARTY в рабочем коде (снова)? - PullRequest
1 голос
/ 18 июня 2019

Относительно предыдущего вопроса, который я задал 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, а в других случаях мы просто хотим знать, кто они, независимо от того, являются ли ониВы в цепочке или нет.

Есть мысли об этом подходе?

1 Ответ

2 голосов
/ 18 июня 2019

Это очень хорошая идея, вы бы по сути внедрили OffChainParty в состояние (и, следовательно, в бухгалтерскую книгу), не делая их обязательным членом сети, к которой присоединен узел.

Единственное, что я хотел бы сказать, это то, нужна ли вам вообще NULL_PARTY, и вы должны быть осторожны, чтобы всегда фильтровать своих участников.

Предлагается интересная работа по представлению Destination Corda, которая может быть чем-то вроде NetworkDestination или OffNetworkDestination, так что следите за репо с открытым исходным кодом.

...