Как вычислить срок действия подписи mortal extrinsic в Substrate
Офлайн-подписант может вернуть корректную подпись уже после истечения выбранной эры. До отправки задержанной транзакции определите исходную контрольную точку и конечную высоту.
Воспроизведите эру из контекста подписи
В примере Rust тип Era из SDK создаётся для периода 64 блока и высоты подписания 1000. Сохраните фактический хеш контрольной точки, номер блока и кодированную эру. Та же фаза периода повторяется позднее с другим хешем.
use sp_runtime::generic::Era;
let era = Era::mortal(64, 1000);
assert_eq!(era.birth(1000), 1000);
assert_eq!(era.death(1000), 1064);
Учтите, что конечная граница исключается
В примере исходное окно завершается перед блоком 1064. При отправке на высоте 1065 нельзя продлить старую подпись выбором повторившейся фазы. Другой хеш контрольной точки меняет подписываемые данные и требует новой подписи. До повторения прикладной операции проверьте включение первоначальной транзакции.
Для диагностики используйте реально закодированную эру. SDK нормализует запрошенные периоды и может округлять фазы длинных периодов. Простое сложение значения из интерфейса с текущей высотой может дать неверный срок.