Когда мне нужно waitForLedgerCommit - PullRequest
0 голосов
/ 26 декабря 2018

Во многих примерах потоков я вижу следующую схему:

// Notarises and records transaction
val stx = subFlow(FinalityFlow(signedTx))
waitForLedgerCommit(stx.id)

Как точно меняется поведение системы при добавлении waitForLedgerCommit после FinalityFlow?Нужно ли использовать этот шаблон в каждом потоке или только в некоторых?

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Чтобы добавить к ответу Каиса, предположим, что у вас есть поток с двумя участниками, Алисой и Бобом.Алиса вызывает FinalityFlow для транзакции, а затем Боб хочет выполнить действие после завершения транзакции.

Боб вызовет waitForLedgerCommit, чтобы дождаться завершения FinalityFlow и записать транзакцию вего хранилище перед выполнением действия.

Другими словами, вы, как правило, видите, что оно используется не стороной, которая вызывает FinalityFlow, а другими сторонами потока.

0 голосов
/ 26 декабря 2018

waitForLedgerCommit приостанавливает поток до тех пор, пока транзакция с указанным идентификатором не будет принята, успешно проверена и отправлена ​​в хранилище для обработки.

FinalityFlow проверяет данную транзакцию, а затем отправляет ее указанному нотариусу.Если нотариус соглашается с тем, что транзакция является приемлемой, то с этого момента она передается в бухгалтерскую книгу и будет записана в хранилище.

Если вы посмотрите на код в FinalityFlow, вы увидите, что он вызывает функцию notariseAndRecord(), которая в свою очередь вызывает serviceHub.recordTransactions().Именно здесь мы записываем подтвержденную транзакцию в наше хранилище.

Если FinalityFlow успешно завершается, мы гарантируем, что транзакция была проверена и отправлена ​​в хранилище для обработки, поэтому мы не требуемwaitForLedgerCommit.

...