Skip to content

DemoScenariesRus_GettingStarted_PrivEth

Paul edited this page Feb 15, 2020 · 15 revisions

Сценарий Getting Started

Сценарий демонстрирует распространение сделки по узлам и переключение статуса сделки.

Данный сценарий проводится в кластере Private Ethereum (PrivEth).

Используется предустановленный смарт-контракт с типом сделки FirstDeal (без карты переходов).

Сценарий заключается в последовательном исполнении следующих шагов:

  1. На узле PrivEth-1 создается сделка с атрибутами DocNumber, DocDate, DocSumma
  2. На узле PrivEth-1 переключаем статус сделки в Status1
  3. Убеждаемся в приходе сделки на узлы PrivEth-1, PrivEth-2, а также в отсутствии сделки на узле PrivEth-3
  4. На узле PrivEth-2 переключаем статус сделки в Status2, добавляем атрибут PaymentDate и изменяем атрибут DocSumma
  5. Убеждаемся в приходе изменения сделки на узлы PrivEth-1, PrivEth-2
  6. На узле PrivEth-1 переключаем статус сделки в Closed
  7. Убеждаемся в приходе изменения сделки на узлы PrivEth-1, PrivEth-2, а также в том, что на узле PrivEth-3 сделки по-прежнему нет

ВНИМАНИЕ! В примерах вызовов подставлен идентификатор пробной сделки - Вам надо подставлять вместо него идентификатор, полученный при создании сделки на шаге 1.

ВНИМАНИЕ! В запросах в заголовке CHANNEL необходимо использовать полученный Вами при регистрации персональный идентификатор. Это позволит не мешать одновременной работе нескольких пользователей, а также облегчит работу службы Технической поддержки при возникновении у Вас каких-либо вопросов. В примерах запросов используется персональный идентификатор Demo.

1. Создание сделки

Создание сделки состоит из следующих шагов:

  • Получение идентификатора сделки
  • Проверка отсутствия сделки на других узлах (этот шаг носит чисто демонстрационный характер, дабы убедится, что сделки нигде "заранее" нет и ее репликация произойдет только после создания)
  • Собственно создание сделки

Получение идентификатора сделки

Используется вызов GET-метода /api/uid. Метод возвращает GUID, который может быть однократно использован для создания сделки

Пример вызова:

curl -X GET "http://democlient1.kekker.com/api/uid" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

Пример ответа:

"840a0671-4afa-4f87-9f3f-12c252b30ca0"

Проверка отсутствия сделки

Используется вызов GET-метода /api/deals/{UID}. Где {UID} - идентификатор сделки, например, полученный на предыдущем шаге

Пример вызовов (отличие в URL узла):

curl -X GET "http://democlient1.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252b30ca0" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

curl -X GET "http://democlient2.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252b30ca0" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

curl -X GET "http://democlient3.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252b30ca0" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

Пример ответа:

{"ErrorMessage":"Deal not found"}

Создание сделки

Используется вызов POST-метода /api/deals/. В качестве данных запроса указывается json-спецификация сделки, в нашем случае: { "dealUid": "[UID]", "kind": "FirstDeal", "parties": [ { "key": "CLIENT1", "role": "Role1" }, { "key": "ClIENT2", "role": "Role2" } ], "parameters": [ { "key": "DocNumber", "value": "1" }, { "key": "DocDate", "value": "11.02.2020" }, { "key": "DocSumma", "value": "10000" } ], "parentDealUid": null }

Пример вызова:

curl -X POST "http://democlient1.kekker.com/api/deals" -H "accept: text/plain" -H "Content-Type: application/json-patch+json" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo" -d "{ \"dealUid\": \"840a0671-4afa-4f87-9f3f-12c252b30ca0\", \"kind\": \"FirstDeal\", \"parties\": [ { \"key\": \"CLIENT1\", \"role\": \"Role1\" } ,{ \"key\": \"CLIENT2\", \"role\": \"Role2\" } ], \"parameters\": [ { \"key\": \"DocNumber\", \"value\": \"1\" },{ \"key\": \"DocDate\", \"value\": \"11.02.2020\" },{ \"key\": \"DocSumma\", \"value\": \"10000\" } ], \"parentDealUid\": null}"

Если всё хорошо - ответ пустой.

2. На узле PrivEth-1 переключаем статус сделки в Status1

Используется вызов POST-метода /api/deals/setstatus. В качестве данных запроса указывается json-спецификация сделки, в нашем случае: { "dealUid": "[UID]", "status": "Status1__", "remark": "Status changed to Status1 by CLIENT1", "parameters": [] }

Пример вызова:

curl -X POST "http://democlient1.kekker.com/api/deals/setstatus" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "Content-Type: application/json-patch+json" -H "channel: Demo" -d "{ \"dealUid\":\"840a0671-4afa-4f87-9f3f-12c252b30ca0\", \"status\":\"Status1__\", \"remark\":\"Status changed to Status1 by CLIENT1\", \"parameters\": []}"

Если всё хорошо - ответ пустой.

3. Убеждаемся в приходе сделки на узлы PrivEth-1, PrivEth-2, а также в отсутствии сделки на узле PrivEth-3

Используется вызов GET-метода /api/deals/{UID}. Где {UID} - идентификатор нашей сделки

Перед выполнением запросов лучше выдержать паузу в 2-3 минуты после шага [2]

Пример вызовов (отличие в URL узла):

curl -X GET "http://democlient1.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252b30ca0" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

curl -X GET "http://democlient2.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252b30ca0" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

curl -X GET "http://democlient3.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252b30ca0" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

Пример ответа на узлах PrivEth-1, PrivEth-2 (полная расшифровка ответа дается в ..., в данном случае нас интересуют поля kind, status и коллекция parameters):

{"uid":"840a0671-4afa-4f87-9f3f-12c252b30ca0","kind":"FirstDeal","status":"Status1__","remark":"Status changed to Status1 by CLIENT1","parameters":[{"key":"DocNumber","value":"1"},{"key":"DocDate","value":"11.02.2020"},{"key":"DocSumma","value":"10000"}],"parties":[{"key":"CLIENT1","role":"Role1"},{"key":"CLIENT2","role":"Role2"}],"files":[],"history":[{"status":"Status1__","party":{"key":"CLIENT1","role":"Role1"},"remark":"Status changed to Status1 by CLIENT1","version":2}],"statusMap":[]}

На узле PrivEth-3 ответ должен быть:

{"ErrorMessage":"Deal not found"}

4. На узле PrivEth-2 переключаем статус сделки в Status2, добавляем атрибут PaymentDate и изменяем атрибут DocSumma

Используется вызов POST-метода /api/deals/setstatus. В качестве данных запроса указывается json-спецификация сделки, в нашем случае: { "dealUid": "[UID]", "status": "Status2__", "remark": "Status changed to Status2 by CLIENT2", "parameters": [ { "key": "DocSumma", "value": "20022" }, { "key": "PaymentDate", "value": "15.03.2020" } ], }

Пример вызова:

curl -X POST "http://democlient2.kekker.com/api/deals/setstatus" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "Content-Type: application/json-patch+json" -H "channel: Demo" -d "{ \"dealUid\":\"840a0671-4afa-4f87-9f3f-12c252b30ca0\", \"status\":\"Status2__\", \"remark\":\"Status changed to Status2 by CLIENT2\", \"parameters\": [{\"key\":\"DocSumma\",\"value\":"20022"}, {\"key\":\"PaymentDate\",\"value\":\"15.03.2020\"}]}"

Если всё хорошо - ответ пустой.

5. Убеждаемся в приходе изменения сделки на узлы PrivEth-1, PrivEth-2

Используется вызов GET-метода /api/deals/{UID}. Где {UID} - идентификатор нашей сделки

Перед выполнением запросов лучше выдержать паузу 1-2 минуты после шага [4]

Пример вызовов (отличие в URL узла):

curl -X GET "http://democlient1.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252b30ca0" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

curl -X GET "http://democlient2.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252b30ca0" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

Пример ответа (обращаем внимание на изменение поля status и коллекции parameters и history):

{"uid":"840a0671-4afa-4f87-9f3f-12c252b30ca0","kind":"FirstDeal","status":"Status2__","remark":"Status changed to Status2 by CLIENT2","parameters":[{"key":"DocNumber","value":"1"},{"key":"DocDate","value":"11.02.2020"},{"key":"DocSumma","value":"20022"},{"key":"PaymentDate","value":"15.03.2020"}],"parties":[{"key":"CLIENT1","role":"Role1"},{"key":"CLIENT2","role":"Role2"}],"files":[],"history":[{"status":"Status1__","party":{"key":"CLIENT1","role":"Role1"},"remark":"Status changed to Status1 by CLIENT1","version":2},{"status":"Status2__","party":{"key":"CLIENT2","role":"Role2"},"remark":"Status changed to Status2 by CLIENT2","version":3}],"statusMap":[]}

6. На узле PrivEth-1 переключаем статус сделки в Closed

Используется вызов POST-метода /api/deals/setstatus. В качестве данных запроса указывается json-спецификация сделки, в нашем случае: { "dealUid": "[UID]", "status": "Closed___", "remark": "Deal closed by CLIENT1", "parameters": [] }

Пример вызова:

curl -X POST "http://democlient1.kekker.com/api/deals/setstatus" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "Content-Type: application/json-patch+json" -H "channel: Demo" -d "{ \"dealUid\":\"840a0671-4afa-4f87-9f3f-12c252b30ca0\", \"status\":\"Closed___\", \"remark\":\"Deal closed by CLIENT1\", \"parameters\": []}"

Если всё хорошо - ответ пустой.

7. Убеждаемся в приходе изменения сделки на узлы PrivEth-1, PrivEth-2, а также в том, что на узле PrivEth-3 сделки по-прежнему нет

Используется вызов GET-метода /api/deals/{UID}. Где {UID} - идентификатор нашей сделки

Перед выполнением запросов лучше выдержать паузу 1-2 минуты после шага [6]

Пример вызовов (отличие в URL узла):

curl -X GET "http://democlient1.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252b30ca0" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

curl -X GET "http://democlient2.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252b30ca0" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

curl -X GET "http://democlient3.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252b30ca0" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz" -H "channel: Demo"

Пример ответа на узлах PrivEth-1, PrivEth-2 (обращаем внимание на изменение поля status и коллекцию history):

{"uid":"840a0671-4afa-4f87-9f3f-12c252b30ca0","kind":"FirstDeal","status":"Closed___","remark":"Deal closed by CLIENT1","parameters":[{"key":"DocNumber","value":"1"},{"key":"DocDate","value":"11.02.2020"},{"key":"DocSumma","value":"20022"},{"key":"PaymentDate","value":"15.03.2020"}],"parties":[{"key":"CLIENT1","role":"Role1"},{"key":"CLIENT2","role":"Role2"}],"files":[],"history":[{"status":"Status1__","party":{"key":"CLIENT1","role":"Role1"},"remark":"Status changed to Status1 by CLIENT1","version":2},{"status":"Status2__","party":{"key":"CLIENT2","role":"Role2"},"remark":"Status changed to Status2 by CLIENT2","version":3},{"status":"Closed___","party":{"key":"CLIENT1","role":"Role1"},"remark":"Deal closed by CLIENT1","version":4}],"statusMap":[]}

На узле PrivEth-3 ответ должен быть:

{"ErrorMessage":"Deal not found"}

Clone this wiki locally