Будет ли архитектура execute-order-validate создавать много недействительных транзакций, если одноранговые узлы будут вызывать одну и ту же функцию? - PullRequest
1 голос
/ 17 июня 2019

Я хотел бы понять преимущество архитектуры execute-order-validate Hyperledger Fabric по сравнению с архитектурой order-execute с точки зрения эффективности.

Подход execute-order-validate позволяет партнерам выполнять транзакции без учета их заказа. Это позволяет партнерам параллельно выполнять транзакции во время фазы execute .

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

Учитывая это, будет ли архитектура execute-order-validate потенциально производить много недействительных транзакций?

Ниже приведен пример умного контракта, который проиллюстрирует мою обеспокоенность:

reserveTicket(eventId, ticketingAgencyId, ticketCount){

  //check if there is not enough tickets left
  if (worldState[eventId] < ticketCount) 
    throw "there is not enough tickets"

  worldState[eventId] -= ticketCount;

  if (worldState[eventId + ":" + ticketingAgencyId] == null)
    worldState[eventId + ":" + ticketingAgencyId] = 0;

  worldState[eventId + ":" + ticketingAgencyId] += ticketCount

}

В этом умном договоре реализована система бронирования билетов. Для конкретного события может быть много билетных агентств, которые могут забронировать билеты, вызвав функцию reserveTicket.

Если есть 10 билетных агентств (например, от agency1 до agency10), которые будут резервировать одно и то же событие (например, event9999) в одно и то же время (т. Е. Заказчик совершит 10 транзакций является частью того же блока), означает ли это, что 9 транзакций будут признаны недействительными в фазе validate, поскольку все они обновят один и тот же ключ в состоянии мира:

worldState["event9999"] -= ticketCount;

Сделает ли это execute-order-validate менее эффективным, поскольку необходимо повторить попытку 9 из 10 транзакций?

В подходе order-execute 10 транзакций не будут выполняться параллельно, однако, если осталось достаточно билетов, все транзакции будут успешными.

Правильно ли мое понимание, если execute-order-validate верно? Если да, есть ли способ избежать аннулирования 9 из 10 транзакций?

1 Ответ

0 голосов
/ 17 июня 2019

Здесь приведена ссылка на пример цепного кода (из официального репозитория образцов ), который может помочь вам в достижении вашей цели.

Образцы ткани HL - высокая пропускная способность

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...