Как восстановить 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.

Источники