From 6a2e747d8a533e043fedac4babeeb8c6feb08999 Mon Sep 17 00:00:00 2001 From: Marc-Aurele Besner <82244926+marc-aurele-besner@users.noreply.github.com> Date: Fri, 28 Feb 2025 06:43:38 -0700 Subject: [PATCH 1/6] improve auto-consensus info fn --- packages/auto-consensus/src/info.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/auto-consensus/src/info.ts b/packages/auto-consensus/src/info.ts index ae31d1ad..5fade04b 100644 --- a/packages/auto-consensus/src/info.ts +++ b/packages/auto-consensus/src/info.ts @@ -12,7 +12,8 @@ export const rpc = async (api: Api, methodPath: string, params: any[] = []): export const query = async (api: Api, methodPath: string, params: any[] = []): Promise => await queryMethodPath(api, `query.${methodPath}`, params) -export const block = async (api: Api) => await rpc(api, 'chain.getBlock', []) +export const block = async (api: Api, blockHash?: string) => + await rpc(api, 'chain.getBlock', [blockHash]) export const header = async (api: Api) => await rpc(api, 'chain.getHeader', []) @@ -23,11 +24,14 @@ export const blockNumber = async (api: Api): Promise => { return _block.block.header.number.toNumber() } -export const blockHash = async (api: Api) => { - const _blockHash = await rpc(api, 'chain.getBlockHash', []) +export const blockHash = async (api: Api, blockNumber?: number) => { + const _blockHash = await rpc(api, 'chain.getBlockHash', [blockNumber]) return _blockHash.toString() } +export const finalizedHead = async (api: Api) => + await rpc(api, 'chain.getFinalizedHead', []) + export const networkTimestamp = async (api: Api) => await query(api, 'timestamp.now', []) export const solutionRanges = async (api: Api) => { From e79af042f2e1b6af7819d8fa1aee1bead0d45cc3 Mon Sep 17 00:00:00 2001 From: Marc-Aurele Besner <82244926+marc-aurele-besner@users.noreply.github.com> Date: Fri, 28 Feb 2025 07:15:09 -0700 Subject: [PATCH 2/6] add extrinsic type --- packages/auto-consensus/src/types/extrinsic.ts | 10 ++++++++++ packages/auto-consensus/src/types/index.ts | 3 +++ 2 files changed, 13 insertions(+) create mode 100644 packages/auto-consensus/src/types/extrinsic.ts diff --git a/packages/auto-consensus/src/types/extrinsic.ts b/packages/auto-consensus/src/types/extrinsic.ts new file mode 100644 index 00000000..f316df92 --- /dev/null +++ b/packages/auto-consensus/src/types/extrinsic.ts @@ -0,0 +1,10 @@ +export type Extrinsic = { + hash: string + isSigned: boolean + section: string + method: string + signer: string + signature: any + callIndex: number + args: any +} diff --git a/packages/auto-consensus/src/types/index.ts b/packages/auto-consensus/src/types/index.ts index 85fdf3a6..6da7f50a 100644 --- a/packages/auto-consensus/src/types/index.ts +++ b/packages/auto-consensus/src/types/index.ts @@ -1,6 +1,9 @@ // file: src/types/index.ts +export * from './account' export * from './balance' +export * from './block' export * from './domain' export * from './events' +export * from './extrinsic' export * from './staking' From a85819bbf9c32b4464070936874317e53bf57fed Mon Sep 17 00:00:00 2001 From: Marc-Aurele Besner <82244926+marc-aurele-besner@users.noreply.github.com> Date: Fri, 28 Feb 2025 07:15:23 -0700 Subject: [PATCH 3/6] add utils to parse extrinsic --- packages/auto-consensus/src/utils/parse.ts | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/packages/auto-consensus/src/utils/parse.ts b/packages/auto-consensus/src/utils/parse.ts index 00057c6e..36e43abd 100644 --- a/packages/auto-consensus/src/utils/parse.ts +++ b/packages/auto-consensus/src/utils/parse.ts @@ -1,6 +1,8 @@ import type { AnyTuple, BN, Codec, StorageKey } from '@autonomys/auto-utils' import type { BalanceData, RawBalanceData } from '../types/balance' +import { RawBlock } from '../types/block' import { DomainRegistry } from '../types/domain' +import type { Extrinsic } from '../types/extrinsic' import { Deposit, Operator, @@ -32,6 +34,33 @@ export const parseBalance = (data: RawBalanceData): BalanceData => { } } +export const parseExtrinsic = (extrinsic: Codec): Extrinsic => { + const hash = extrinsic.hash.toHex() + const { + isSigned, + method: { section, method }, + } = extrinsic.toHuman() as any + const { + signature: { signer, signature }, + method: { callIndex, args }, + } = extrinsic.toPrimitive() as any + return { + hash, + isSigned, + section, + method, + signer, + signature, + callIndex, + args, + } +} + +export const parseBlockExtrinsics = (block: RawBlock): Extrinsic[] => { + if (!block.block.extrinsics || block.block.extrinsics.length === 0) return [] + return block.block.extrinsics.map(parseExtrinsic) +} + export const parseDomain = (domain: [StorageKey, Codec]): DomainRegistry => { const header = domain[0].toHuman() as [string] return { From 4b2d2302feb399cc7956935e3e0da07775d32009 Mon Sep 17 00:00:00 2001 From: Marc-Aurele Besner <82244926+marc-aurele-besner@users.noreply.github.com> Date: Fri, 28 Feb 2025 07:15:34 -0700 Subject: [PATCH 4/6] improve block type --- packages/auto-consensus/src/types/block.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/auto-consensus/src/types/block.ts b/packages/auto-consensus/src/types/block.ts index 8a340622..d49eb220 100644 --- a/packages/auto-consensus/src/types/block.ts +++ b/packages/auto-consensus/src/types/block.ts @@ -1,4 +1,4 @@ -import type { BN } from '@autonomys/auto-utils' +import type { BN, Codec } from '@autonomys/auto-utils' export type RawBlock = { block: { @@ -11,6 +11,7 @@ export type RawBlock = { logs: string[] } } + extrinsics: Codec[] } } From 24e63e83d5b565bc7c35b48de38531ee1e0b781f Mon Sep 17 00:00:00 2001 From: Marc-Aurele Besner <82244926+marc-aurele-besner@users.noreply.github.com> Date: Fri, 28 Feb 2025 07:15:52 -0700 Subject: [PATCH 5/6] add blockExtrinsics fn --- packages/auto-consensus/src/info.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/auto-consensus/src/info.ts b/packages/auto-consensus/src/info.ts index 5fade04b..06510604 100644 --- a/packages/auto-consensus/src/info.ts +++ b/packages/auto-consensus/src/info.ts @@ -2,6 +2,7 @@ import type { AnyTuple, Api, ApiPromise, Codec, StorageKey } from '@autonomys/auto-utils' import type { RawBlock, RawBlockHeader } from './types/block' +import { parseBlockExtrinsics } from './utils/parse' import { queryMethodPath } from './utils/query' const PIECE_SIZE = BigInt(1048576) @@ -15,6 +16,9 @@ export const query = async (api: Api, methodPath: string, params: any[] = []) export const block = async (api: Api, blockHash?: string) => await rpc(api, 'chain.getBlock', [blockHash]) +export const blockExtrinsics = async (api: Api, blockHash?: string) => + await block(api, blockHash).then((block) => parseBlockExtrinsics(block)) + export const header = async (api: Api) => await rpc(api, 'chain.getHeader', []) export const blockNumber = async (api: Api): Promise => { From 83fe5f8b0d3d811a614244b3bcbd8722b8398697 Mon Sep 17 00:00:00 2001 From: Marc-Aurele Besner <82244926+marc-aurele-besner@users.noreply.github.com> Date: Fri, 28 Feb 2025 07:19:41 -0700 Subject: [PATCH 6/6] add transfers filters --- packages/auto-consensus/src/info.ts | 9 +++++---- packages/auto-consensus/src/utils/parse.ts | 8 ++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/auto-consensus/src/info.ts b/packages/auto-consensus/src/info.ts index 06510604..0ee61c9a 100644 --- a/packages/auto-consensus/src/info.ts +++ b/packages/auto-consensus/src/info.ts @@ -2,7 +2,7 @@ import type { AnyTuple, Api, ApiPromise, Codec, StorageKey } from '@autonomys/auto-utils' import type { RawBlock, RawBlockHeader } from './types/block' -import { parseBlockExtrinsics } from './utils/parse' +import { parseBlockExtrinsics, parseBlockTransfers } from './utils/parse' import { queryMethodPath } from './utils/query' const PIECE_SIZE = BigInt(1048576) @@ -13,18 +13,19 @@ export const rpc = async (api: Api, methodPath: string, params: any[] = []): export const query = async (api: Api, methodPath: string, params: any[] = []): Promise => await queryMethodPath(api, `query.${methodPath}`, params) +export const header = async (api: Api) => await rpc(api, 'chain.getHeader', []) + export const block = async (api: Api, blockHash?: string) => await rpc(api, 'chain.getBlock', [blockHash]) export const blockExtrinsics = async (api: Api, blockHash?: string) => await block(api, blockHash).then((block) => parseBlockExtrinsics(block)) -export const header = async (api: Api) => await rpc(api, 'chain.getHeader', []) +export const blockTransfers = async (api: Api, blockHash?: string) => + await block(api, blockHash).then((block) => parseBlockTransfers(block)) export const blockNumber = async (api: Api): Promise => { - // Get the block const _block = await block(api) - return _block.block.header.number.toNumber() } diff --git a/packages/auto-consensus/src/utils/parse.ts b/packages/auto-consensus/src/utils/parse.ts index 36e43abd..0918b7c3 100644 --- a/packages/auto-consensus/src/utils/parse.ts +++ b/packages/auto-consensus/src/utils/parse.ts @@ -61,6 +61,14 @@ export const parseBlockExtrinsics = (block: RawBlock): Extrinsic[] => { return block.block.extrinsics.map(parseExtrinsic) } +export const parseBlockTransfers = (block: RawBlock): Extrinsic[] => { + return parseBlockExtrinsics(block).filter( + (e) => + (e.section === 'balances' && e.method === 'transfer') || + (e.section === 'transporter' && e.method === 'transfer'), + ) +} + export const parseDomain = (domain: [StorageKey, Codec]): DomainRegistry => { const header = domain[0].toHuman() as [string] return {