Анализ

Аудитория: Архитекторы приложений, разработчики смарт-контрактов и приложений, представители бизнес-функций

Проанализируем коммерческие ценные бумаги несколько подробнее. Участники PaperNet, такие как MagnetoCorp и DigiBank, пользуются транзакциями с ценными бумагами для своих бизнес-целей – взгляните на структуру коммерческой ценной бумаги и на изменяющие ее транзакции. Также давайте рассмотрим, какие организации в PaperNet должны удостоверять транзакции, исходя из отношений доверия между организациями в сети. Впоследствии мы сосредоточимся на тонкостях денежных потоков между покупателями и продавцами, а сейчас - на первой ценной бумаге, выпущенной MagnetoCorp.

Жизненный цикл коммерческой ценной бумаги

Ценная бумага 00001 выпущена MagnetoCorp 31 мая. Дадим себе немного времени на изучение первого состояния этой бумаги, его характеристики и величины переменных:

Issuer = MagnetoCorp
Paper = 00001
Owner = MagnetoCorp
Issue date = 31 May 2020
Maturity = 30 November 2020
Face value = 5M USD
Current state = issued

Это состояние ценной бумаги является результатом транзакции issue (выпуск/эмиссия) и оно в первую очередь создает саму эту ценную бумагу. Обратите внимание на номинал этой ценной бумаги - 5M USD, который и будут выплачен при погашении позже. Обратите внимание, что Issuer (эмитент) и Owner (владелец) идентичны для бумаги 00001 в момент выпуска. Обратите внимание на уникальный идентификатор бумаги - MagnetoCorp00001, который состоит из комбинации свойств Issuer и Paper. И напоследок, обратите внимание на свойство Current state = issued, которое сразу же показывает этап жизненного цикла состояния бумаги MagnetoCorp, как «выпущенная».

Чуть позже бумагу купит DigiBank. Посмотрите на изменение состояния ценной бумаги в результате транзакции buy (купить):

Issuer = MagnetoCorp
Paper = 00001
Owner = DigiBank
Issue date = 31 May 2020
Maturity date = 30 November 2020
Face value = 5M USD
Current state = trading

Важнейшее изменение наступило для свойства Owner (владелец) – убедитесь, как бумага, которой сначала владела MagnetoCorp, теперь принадлежит DigiBank. Легко представить, как изменится свойство Owner, если бумагу потом продадут брокеру BrokerHouse или фонду HedgeMatic. Заметьте, что Current state (текущее состояние) говорит нам о том, что в настоящее время бумага торгуется (trading).

По истечении 6 месяцев, если DigiBank до сих пор является держателем бумаги, он может предъявить ее MagnetoCorp для погашения:

Issuer = MagnetoCorp
Paper = 00001
Owner = MagnetoCorp
Issue date = 31 May 2020
Maturity date = 30 November 2020
Face value = 5M USD
Current state = redeemed

И вот эта последняя транзакция redeem (погасить) завершает жизненный цикл ценной бумаги - его можно считать законченным. Часто участники рынка обязаны хранить записи о погашении ценных бумаг, и в этом случае нам легко знать весь их список по значению состояния redeemed (погашена). Значение свойства Owner (владелец) ценной бумаги, позволяет контролировать допуск к транзакции redeem (погасить), сопоставляя значение Owner (владелец) с идентификатором создателя транзакции. В Fabric это реализуется посредством getCreator() chaincode API. Если в качестве языка чейнкода используется Go, тогда для извлечения других атрибутов создателя транзакции используется библиотека чейнкода идентификации клиента.

Транзакции

Жизненный цикл ценной бумаги 00001 нагляден и прямолинеен – он продвигается по стадиям от issued (выпущен) до trading (торгуется) и redeemed (погашен) последовательно как результат транзакций выпустить, купить, или погасить соответственно.

Эти транзакции инициируются MagnetoCorp и DigiBank (два раза), и меняют состояние ценной бумаги 00001. Рассмотрим подробности этих транзакций:

Выпуск

Вот первая транзакция, инициированная MagnetoCorp:

Txn = issue
Issuer = MagnetoCorp
Paper = 00001
Issue time = 31 May 2020 09:00:00 EST
Maturity date = 30 November 2020
Face value = 5M USD

Транзакция выпустить задается структурой свойств и значений. Структура транзакции отличается от структуры бумаги 00001, но в точности ей соответствует. Различие определяется тем, что бумага 00001 отражает состояние сети PaperNet, которое явилось результатом транзакции выпустить (выпуск). Именно благодаря внутренней логике (которая нам не видна), транзакция выпустить создает бумагу на основании перечисленных свойств. Поскольку транзакция создает бумагу, между их структурами есть тесная взаимосвязь. Единственная организация - участник транзакции выпустить, это - MagnetoCorp. Логично, что MagnetoCorp должна удостоверять эту транзакцию - именно эмитент бумаги должен удостоверять транзакцию выпуска/эмиссии новой ценной бумаги.

Купить

Теперь изучим транзакцию покупки купить, которая передает право собственности бумаги 00001 от MagnetoCorp к банку DigiBank:

Txn = buy
Issuer = MagnetoCorp
Paper = 00001
Current owner = MagnetoCorp
New owner = DigiBank
Purchase time = 31 May 2020 10:00:00 EST
Price = 4.94M USD

Заметьте, что транзакция купить содержит меньше свойств, чем записываются в бумагу. Причиной этому - то, что транзакция лишь модифицирует эту бумагу. В результате транзакции изменяется только New owner = DigiBank, все остальное остается неизменным. Это нормально - самое важное в транзакции купить* это смена собственника, и после указания нового транзакции достаточно еще лишь указать текущего собственника, MagnetoCorp.

Вы спросите, почему время покупки (Purchase time) и цена (Price) не указаны в свойствах бумаги 00001? Эта особенность происходит из той разницы, которая существует между транзакцией и бумагой. Ценник в 4.94 M USD на самом деле является свойством исключительно транзакции, но не свойством самой бумаги. Подумайте над этим отличием, оно не такое простое, как кажется. В дальнейшем будет видно, что в реестр записывается и та и другая информация – история всех транзакций, которые влияли на эту бумагу, как и ее последнее зарегистрированное состояние. Крайне важно иметь в виду, что одна информация отделена от другой.

Стоит помнить также, что бумага 00001 может быть перепродана много раз. Забегая немного вперед, давайте посмотрим, что мы могли бы видеть, если бы бумага 00001 поменяла владельца.

В случае покупки фондом BigFund:

Txn = buy
Issuer = MagnetoCorp
Paper = 00001
Current owner = DigiBank
New owner = BigFund
Purchase time = 2 June 2020 12:20:00 EST
Price = 4.93M USD

Затем ее купил фонд HedgeMatic:

Txn = buy
Issuer = MagnetoCorp
Paper = 00001
Current owner = BigFund
New owner = HedgeMatic
Purchase time = 3 June 2020 15:59:00 EST
Price = 4.90M USD

Выше показано, как меняется собственник бумаги, а также как в данном случае меняется ее цена. Можете доказать, почему цена ценной бумаги MagnetoCorp снижается?

Интуитивно ясно что транзакция покупки (купить) требует, чтобы ее удостоверила как продающая, так и покупающая сторона, что отражает и будет служить доказательством достижения взаимного согласия сторон о параметрах сделки.

Погашение

Транзакция погашения погасить для бумаги 00001 завершает ее жизненный цикл. В сравнительно простом примере покажем, как фонд HedgeMatic инициирует транзакцию, при помощи которой передает коммерческую ценную бумагу обратно в собственность MagnetoCorp:

Txn = redeem
Issuer = MagnetoCorp
Paper = 00001
Current owner = HedgeMatic
Redeem time = 30 Nov 2020 12:00:00 EST

И снова транзакция погасить содержит достаточно мало свойств; все изменения, которые происходят с бумагой 00001, могут быть выведены из логики транзакции погашения: новым собственником становится эмитент (Issuer), а текущее состояние Current state меняется на «погашена» (redeemed). Свойство, обозначающее текущего владельца Current owner в нашем случае имеет конкретное определение, так что его можно сопоставить со значением текущего владельца в состоянии бумаги.

С точки зрения доверия, к транзакции погасить применяется ровно та же логика, что и к транзакции купить: транзакцию должны заверить обе стороны.

Реестр

В этой главе мы объяснили, почему двумя важнейшими концепциями для сети PaperNet являются концепция транзакции и концепция состояния ценной бумаги. Два этих элемента являются фундаментом для любого распределенного реестра Hyperledger Fabric – глобальное состояние, содержащее актуальные значения переменных всех объектов, и блокчейн, в который записывается вся история транзакций, приведших к данному глобальному состоянию.

Обязательство по заверению транзакций предписывается правилами, с которыми сверяются перед записью транзакции в реестр. И лишь в случае наличия всех необходимых заверений, транзакция будет признана действительной со стороны Fabric.

Теперь самое время перевести эти идеи в собственный смарт-контракт. Не беда, если вы не очень уверенно программируете - мы дадим подсказки к пониманию кода. Если вы достигнете уверенного понимания смарт-контракта коммерческой ценной бумаги, это станет первым шагом к разработке собственного приложения. Ну, а если вы бизнес-аналитик, и можете немного программировать, не бойтесь продвигаться в своем понимании дальше!