Как связать взаимоисключающие попытки возврата в Algorand через lease

Два варианта оплаты одного возврата могут иметь разные идентификаторы транзакций. Общий lease позволяет реестру отклонить конкурирующую транзакцию того же отправителя в защищённом интервале раундов.

Сформируйте один lease на прикладную операцию

Сохраните 32 байта lease в записи возврата и используйте их для разрешённых альтернатив. Учитывайте отправителя в идентификаторе БД. Lease аккаунта A не блокирует транзакцию от B. Для независимых возвратов используйте разные значения.

import hashlib

lease = hashlib.sha256(b"merchant-17:refund:order-402").digest()
assert len(lease) == 32

Согласуйте последние допустимые раунды

Укажите альтернативам одинаковый последний допустимый раунд. После подтверждения одной операции пара отправителя и lease блокируется до этого раунда включительно. Если вторая попытка действительна дольше, она может исполниться уже после снятия блокировки. По окончании интервала сверьте подтверждённые транзакции до разрешения нового возврата.

Источники