#transactions #hyperledger-fabric #hyperledger-composer
#транзакции #hyperledger-fabric #hyperledger-composer
Вопрос:
Мне было интересно, может ли транзакция вызвать другую транзакцию, поскольку я стою перед проблемой:
Я пытаюсь реализовать двойной аукцион, на котором производители энергии и потребители энергии могут совершать bids
(покупать определенное количество энергии по определенной цене) и asks
(предлагать определенное количество энергии по определенной цене). Предполагается, что аукцион очищает рынок каждые X минут, и в настоящее время мне интересно, как должна быть вызвана clear_market
транзакция. В идеале, нет центрального органа, вызывающего ее, когда пришло время, но некоторый код автоматически выполняется «по цепочке» по истечении времени аукциона. Однако в настоящее время я не вижу, как это реализовать.
Моя первоначальная идея заключалась в том, что когда участник совершает bid
другую ask
транзакцию, он сначала проверяет, существует ли новый период аукциона, и если да, вызывает clear_market
транзакцию для предыдущего периода аукциона. Но, насколько я понимаю выполнение транзакции, если транзакция выполняется внутри другой транзакции, вызванная транзакция не будет отображаться в реестре транзакций. Однако было бы неплохо иметь трассировку этой транзакции, поскольку она возвращает рыночную клиринговую цену и обновляет балансы монет производителей / потребителей.
Вы видите решение? Заранее спасибо!
Ответ №1:
насколько глубоко вы уже проникли в тему fabric? Похоже, вы путаете транзакции с цепным кодом. Транзакции являются результатом вызванного цепного кода, который изменяет состояние книги, объединенной заказчиком в блоки.
Возвращаясь к вашему вопросу: в принципе, можно разрешить chaincode вызывать другой chaincode (когда он находится на том же канале), но это не рекомендуется. Что бы я хотел предложить вам, так это взглянуть на события отправки и подписки. Надеюсь, это поможет вашей проблеме!
Комментарии:
1. спасибо за ваш ответ! Поскольку язык моделирования Composer использует этот термин
transaction
, я просто принял его. Но вы правы, мне было интересно, может ли chaincode вызывать другой chaincode. Почему это не рекомендуется? Я знаю о событиях, я просто надеялся найти элегантный способ автоматического выполнения моегоclear_market
цепного кода каждые X минут.2. Возможно, было немного преувеличено «Не рекомендуется». Я был в такой же ситуации, желая отреагировать на sth при вызове определенной функции из chaincode. После того, как я узнал об отправке событий по цепочке и подписке на них вне цепочки, это стало идеальным решением для упрощения обработки и автоматизации с точки зрения обзора и идентификации пользователя. Существует специальная функция
InvokeChaincode
для выполнения того, что вы просили, но не зная точного варианта использования, я не знаю, служит ли это вашей цели в конечном итоге. Я просто могу порекомендовать вам взглянуть на обработку событий и еще раз продумать свой вариант использования3. Хорошо, спасибо … Я сделаю это и, возможно, найду лучший способ справиться с ситуацией.