Как исключить timestamp inherent из счётчика подписанных транзакций Substrate

Даже блок без пользовательских переводов может содержать extrinsic. Если считать каждый из них подписанной операцией пользователя, в тихие периоды активность будет завышена.

Проверьте подпись и тип вызова

Используйте подключённый polkadot-js с подходящими метаданными runtime. Pallet timestamp обычно получает время через неподписанный inherent timestamp.set. Пример считает его отдельно от подписанных extrinsic.

const hash = await api.rpc.chain.getFinalizedHead()
const {block} = await api.rpc.chain.getBlock(hash)
const signed = block.extrinsics.filter(ex => ex.isSigned)
const timestamps = block.extrinsics.filter(ex =>
  !ex.isSigned && ex.method.section === "timestamp" &&
  ex.method.method === "set")
console.log(block.extrinsics.length, signed.length, timestamps.length)

Укажите состав измеряемого показателя

Допустим, в блоке четыре extrinsic: timestamp inherent, другой неподписанный вызов и два подписанных. Показатель подписанных равен двум. Если назвать все неподписанные обновлениями времени, второй вызов будет классифицирован ошибочно. Для определения его назначения изучите pallet и метод.

Подписанный пакет может включать несколько действий, а подписанный extrinsic может завершиться ошибкой выполнения. Для числа платежей в блоке учитывайте успешные события оплаты с их фазой исполнения.

Источники