Skip to content

Commit

Permalink
feat: added messages to contract response
Browse files Browse the repository at this point in the history
  • Loading branch information
bangjelkoski committed Oct 30, 2023
1 parent d08fce4 commit 59f5f5a
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 8 deletions.
53 changes: 53 additions & 0 deletions packages/sdk-ts/src/client/indexer/rest/IndexerRestExplorerApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,59 @@ export class IndexerRestExplorerApi extends BaseRestConsumer {
}
}

async fetchContractTransactionsWithMessages({
contractAddress,
params,
}: {
contractAddress: string
params?: {
fromNumber?: number
limit?: number
toNumber?: number
skip?: number
}
}): Promise<{ paging: Paging; transactions: ContractTransaction[] }> {
const endpoint = `/contractTxs/${contractAddress}`

try {
const { fromNumber, limit, skip, toNumber } = params || { limit: 12 }

const response = await this.retry<
ExplorerApiResponseWithPagination<
ContractTransactionExplorerApiResponse[]
>
>(() =>
this.get(endpoint, {
skip,
limit,
to_number: toNumber,
from_number: fromNumber,
}),
)

const { paging, data } = response.data

return {
paging,
transactions: data
? data.map(
IndexerRestExplorerTransformer.contractTransactionToExplorerContractTransaction,
)
: [],
}
} catch (e: unknown) {
if (e instanceof HttpRequestException) {
throw e
}

throw new HttpRequestException(new Error((e as any).message), {
code: UnspecifiedErrorCode,
context: `${this.endpoint}/${endpoint}`,
contextModule: IndexerModule.Explorer,
})
}
}

async fetchWasmCode(codeId: number): Promise<WasmCode> {
const endpoint = `/wasm/codes/${codeId}`

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import { BigNumberInBase, BigNumberInWei } from '@injectivelabs/utils'
import { Block, ExplorerValidator } from '../types/explorer'
import {
Block,
ContractTransactionWithMessages,
ExplorerValidator,
} from '../types/explorer'
import { TokenType } from '@injectivelabs/token-metadata'
import {
BaseTransaction,
Expand Down Expand Up @@ -38,11 +42,13 @@ const getContractTransactionAmount = (
return ZERO_IN_BASE
}

if (!msg.transfer) {
const msgObj = typeof msg === 'string' ? JSON.parse(msg) : msg

if (!msgObj.transfer) {
return ZERO_IN_BASE
}

return new BigNumberInWei(msg.transfer.amount).toBase()
return new BigNumberInWei(msgObj.transfer.amount).toBase()
}

const parseCW20Message = (jsonObject: string): CW20Message | undefined => {
Expand Down Expand Up @@ -220,6 +226,34 @@ export class IndexerRestExplorerTransformer {
}
}

static contractTransactionToExplorerContractTransactionWithMessages(
transaction: ContractTransactionExplorerApiResponse,
): ContractTransactionWithMessages {
return {
txHash: transaction.hash,
code: transaction.code,
height: transaction.block_number,
time: transaction.block_unix_timestamp,
type: transaction.messages[0].type,
fee: transaction.gas_fee.amount
? new BigNumberInWei(transaction.gas_fee.amount[0].amount).toBase()
: ZERO_IN_BASE,
amount: getContractTransactionAmount(transaction),
messages: (transaction.messages || []).map((message) => {
return {
type: message.type,
value: {
...message.value,
msg:
typeof message.value.msg === 'string'
? (JSON.parse(message.value.msg) as Record<string, any>)
: message.value.msg,
},
}
}),
}
}

static wasmCodeToExplorerWasmCode(
wasmCode: WasmCodeExplorerApiResponse,
): WasmCode {
Expand Down
9 changes: 4 additions & 5 deletions packages/sdk-ts/src/client/indexer/types/explorer-rest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -195,11 +195,10 @@ export interface ContractTransactionExplorerApiResponse {
{
type: string
value: {
msg: {
transfer: {
amount: number
}
}
sender: string
contract: string
msg: Record<string, any>
funds: string
}
},
]
Expand Down
12 changes: 12 additions & 0 deletions packages/sdk-ts/src/client/indexer/types/explorer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,18 @@ export interface ContractTransaction {
time: number
}

export interface ContractTransactionWithMessages extends ContractTransaction {
messages: Array<{
type: string
value: {
sender: string
contract: string
msg: Record<string, any>
funds: string
}
}>
}

export interface WasmCode {
id: number
txHash: string
Expand Down

0 comments on commit 59f5f5a

Please sign in to comment.