Как восстановить timepoint для ожидающего multisig в Substrate
При повторном использовании одинакового вызова одного хеша недостаточно для различения операций multisig во времени. Следующему подписанту нужна точка, в которой была открыта текущая операция.
Найдите текущую запись в цепочке
Подключите polkadot-js к нужной сети. Подставьте вычисленный аккаунт multisig и хеш кодированного внутреннего вызова. Поле when содержит номер блока и индекс extrinsic первоначального одобрения.
const snapshot = await api.at(await api.rpc.chain.getFinalizedHead())
const operation = await snapshot.query.multisig.multisigs(multisigAddress, callHash)
if (operation.isSome) {
const record = operation.unwrap()
console.log(record.when.toJSON(), record.approvals.toJSON())
}
Передайте исходную позицию следующему подписанту
Если when содержит высоту 900 и индекс 4, обе величины относятся к открытию операции. Подстановка текущей финализированной высоты или позиции события в общем массиве даст другой timepoint. Перед запросом следующей подписи сверьте список уже полученных одобрений.
Отсутствие записи возможно при завершении, отмене либо неверной паре аккаунта и хеша вызова. До запуска новой операции сверьте исторические события multisig.