Skip to content

DemoScenariesRus_GettingStarted_PrivEth

NickGorshenev edited this page Mar 22, 2020 · 15 revisions

Сценарий Purchase order

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

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

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

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

  1. На узле PrivEth-1 создается сделка с атрибутами DocNumber=123, Item=Pepper, DeliveryDate=2020-08-08, Quantity=10
  2. Убеждаемся в приходе сделки на узлы PrivEth-1, PrivEth-2
  3. На узле PrivEth-1 переключаем статус сделки в "Issued"
  4. Убеждаемся в переключении статуса сделки на узлах PrivEth-1, PrivEth-2 в "Issued"
  5. На узле PrivEth-2 переключаем статус сделки в "Adjusted", добавляем атрибут PaymentDate=2020-01-02 и изменяем атрибут DeliveryDate=2020-08-09
  6. Убеждаемся в переключении статуса сделки на узлах PrivEth-1, PrivEth-2 в "Adjusted"
  7. На узле PrivEth-1 переключаем статус сделки в Ordered
  8. Убеждаемся в переключении статуса сделки на узлах PrivEth-1, PrivEth-2 в "Adjusted"

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

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

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

Используется вызов POST-метода /api/deals/. В качестве данных запроса указывается json-спецификация сделки, в нашем случае:

{
  "dealUid": null,
  "kind": "FirstDeal",
  "parties": [
    {
      "key": "CLIENT2",
      "role": "Seller"
    },
    {
      "key": "CLIENT1",
      "role": "Buyer"
    }
  ],
  "parameters": [
    {
      "key": "DocNumber",
      "value": "123"
    },
    {
      "key": "Item",
      "value": "Pepper"
    },
    {
      "key": "DeliveryDate",
      "value": "2020-08-08"
    },
    {
      "key": "Quantity",
      "value": "10"
    }
  ],
}
Пример вызова Пример ответа
curl --request POST 'http://democlient1.kekker.com/api/deals' --header 'Content-Type: application/json' --header 'Channel: Demo' --header 'Authorization: Basic S2Vra2VyVXNlcjp6RGZqbTMz' --data-raw '{ "dealUid": null, "kind": "FirstDeal", "parties": [ { "key": "CLIENT2", "role": "Seller" }, { "key": "CLIENT1", "role": "Buyer" } ], "parameters": [ { "key": "DocNumber", "value": "123" }, { "key": "Item", "value": "Pepper" }, { "key": "DeliveryDate", "value": "2020-08-08" }, { "key": "Quantity", "value": "10" } ], }' Если всё хорошо - код ответа 200. В теле ответа прийдет идентификатор сделки [UID]

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 S2Vra2VyVXNlcjp6RGZXXXXX" -H "Content-Type: application/json-patch+json" -H "channel: Demo" -d "{ \"dealUid\":\"840a0671-4afa-4f87-9f3f-12c252bXXXXX\", \"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 узла) Пример ответа (в данном случае нас интересуют поля "kind", "status" и коллекция "parameters")
curl -X GET "http://democlient1.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" На узлах PrivEth-1, PrivEth-2 ответ:
{
  "uid": "840a0671-4afa-4f87-9f3f-12c252bXXXXX",
  "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": []
}
    
curl -X GET "http://democlient2.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo"
curl -X GET "http://democlient3.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" На узле 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 S2Vra2VyVXNlcjp6RGZXXXXX" -H "Content-Type: application/json-patch+json" -H "channel: Demo" -d "{ \"dealUid\":\"840a0671-4afa-4f87-9f3f-12c252bXXXXX\", \"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 узла) Пример ответа (обращаем внимание на изменение поля "status" и коллекции "parameters" и "history"):
curl -X GET "http://democlient1.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo"
{
  "uid": "840a0671-4afa-4f87-9f3f-12c252bXXXXX",
  "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": []
}
    
curl -X GET "http://democlient2.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo"

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 S2Vra2VyVXNlcjp6RGZXXXXX" -H "Content-Type: application/json-patch+json" -H "channel: Demo" -d "{ \"dealUid\":\"840a0671-4afa-4f87-9f3f-12c252bXXXXX\", \"status\":\"Closed___\", \"remark\":\"Deal closed by CLIENT1\", \"parameters\": []}" Если всё хорошо - ответ пустой.

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

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

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

Пример вызовов (отличие в URL узла): Пример ответа (обращаем внимание на изменение поля **status** и коллекцию **history**)
curl -X GET "http://democlient1.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" На узлах PrivEth-1, PrivEth-2 ответ:
{
  "uid": "840a0671-4afa-4f87-9f3f-12c252XXXXX",
  "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": []
}
    
curl -X GET "http://democlient2.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo"
curl -X GET "http://democlient3.kekker.com/api/deals/840a0671-4afa-4f87-9f3f-12c252bXXXXX" -H "accept: text/plain" -H "Authorization: Basic S2Vra2VyVXNlcjp6RGZXXXXX" -H "channel: Demo" На узле PrivEth-3 ответ должен быть: {"ErrorMessage":"Deal not found"}

Clone this wiki locally