Архитектурный вопрос для эволюции государства - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть пример использования кредита, где у меня есть два состояния:

  • Состояние счета и
  • Государство займа.

Состояние ссуды создается путем передачи состояния счета в качестве входных данных.

enter image description here

Теперь, когда Corda следует модели UTXO, когда я делаю запрос хранилища по умолчанию, состояние Invoice не отображается, так как оно используется сейчас.

Чтобы решить эту проблему, есть два возможных пути:

  1. Либо я запрашиваю все состояния, то есть использованные и неиспользованные.
  2. Или я может поддерживать статус в состоянии счета и пометить статус в что-то как счет-фактура оплачивается после использования его для создания состояния ссуды (так что это больше похоже на развивающееся состояние, что-то вроде биткойна, где баланс всегда переводится.) . Примерно так:

enter image description here

Кто-нибудь может порекомендовать, какое будет правильное архитектурное решение?

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Я согласен с bartman250. Второй пример, на мой взгляд, имеет больше смысла, так как опционы открыты более очевидным образом.

Скажем, например, по какой-то причине счет должен быть сброшен на неоплаченный, потому что на кредитной карте есть возвратный платеж, при этом счет-фактура, как неиспользованный, работает хорошо.

Проблема беспокойства по поводу повторного использования может быть решена путем обеспечения того, чтобы в кредитном договоре использовались только счета-фактуры, помеченные как неоплаченные. Мы делаем что-то очень похожее с заказом на покупку в демонстрационном аккредитиве, найденном здесь .

Наличие счета-фактуры, доступного для запроса из хранилища как неиспользованного, также является режимом запроса по умолчанию. Это также обеспечивает преимущество, заключающееся в том, что мы по умолчанию работаем с последней версией состояния.

0 голосов
/ 08 сентября 2018

В вашем счете-фактуре должно быть поле «состояние», в котором должно быть не менее «UNPAID» и «PAID». Ваша команда payInvoice должна иметь следующие входы и выходы: входы: Счет-фактура - состояние = НЕПАДНО выходы Счет - состояние = оплачено Loan

Функция проверки должна проверять, чтобы входы и выходы для этой команды были такими же, как указано выше. После чего состояние счета-фактуры «UNPAID» расходуется и больше не может быть использовано. Я надеюсь, что это имеет смысл.

Проверьте метод MeteringInvoiceCommands.Pay в следующем коде. Это похоже на то, что вам нужно, но в этом случае он проверяет, произведен ли платеж, а также состояние ввода «ВЫПУСК» и состояние вывода «ОПЛАТА»

https://gitlab.com/cordite/cordite/blob/master/cordapps/metering-contracts-states/src/main/kotlin/io/cordite/metering/contract/MeteringInvoiceContract.kt

0 голосов
/ 07 сентября 2018

Второй пример выше, на мой взгляд, лучший. По сути, если вы держите Enum на счете-фактуре со всеми различными состояниями - то есть UNPAID, PAID, REJECTED и т. Д. Затем вы можете развить это состояние в своих потоках. Затем можно использовать функцию проверки договора для «платной команды», чтобы проверить, было ли создано состояние ссуды.

...