Skip to content

Commit

Permalink
refactor: extract asset id from burn or mint receipts (#1194)
Browse files Browse the repository at this point in the history
  • Loading branch information
Torres-ssf committed Aug 17, 2023
1 parent 0dc052a commit e45d7cc
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 22 deletions.
2 changes: 2 additions & 0 deletions .changeset/serious-planes-hang.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
---
---
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
isTypeCreate,
isTypeScript,
} from './operations';
import { extractAssetIdFromBurnOrMintReceipts } from './receipt';
import { extractBurnedAssetsFromReceipts, extractMintedAssetsFromReceipts } from './receipt';
import { processGraphqlStatus } from './status';
import type { AbiParam, GraphqlTransactionStatus, TransactionSummary } from './types';

Expand Down Expand Up @@ -68,7 +68,8 @@ export function assembleTransactionSummary<TTransactionType = void>(
const { isStatusFailure, isStatusPending, isStatusSuccess, blockId, status, time } =
processGraphqlStatus(gqlTransactionStatus);

const { mintedAssets, burnedAssets } = extractAssetIdFromBurnOrMintReceipts(receipts);
const mintedAssets = extractMintedAssetsFromReceipts(receipts);
const burnedAssets = extractBurnedAssetsFromReceipts(receipts);

const transactionSummary: TransactionSummary<TTransactionType> = {
id,
Expand Down
17 changes: 10 additions & 7 deletions packages/providers/src/transaction-summary/receipt.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import type {
TransactionResultReceipt,
} from '../transaction-response';

import { extractAssetIdFromBurnOrMintReceipts } from './receipt';
import type { BurnedOrMintedAsset } from './types';
import { extractBurnedAssetsFromReceipts, extractMintedAssetsFromReceipts } from './receipt';
import type { MintedAsset, BurnedAsset } from './types';

describe('extractAssetIdFromBurnOrMintReceipts', () => {
describe('extractMintedAssetsFromReceipts and extractBurnedAssetsFromReceipts', () => {
it('should extracts minted and burned assets just fine', () => {
// Sample input
const receipts: Array<TransactionResultMintReceipt | TransactionResultBurnReceipt> = [
Expand All @@ -35,15 +35,16 @@ describe('extractAssetIdFromBurnOrMintReceipts', () => {
];

// Expected output
const expectedMintedAssets: BurnedOrMintedAsset[] = [
const expectedMintedAssets: MintedAsset[] = [
{
subId: receipts[0].subId,
contractId: receipts[0].contractId,
assetId: receipts[0].assetId,
amount: receipts[0].val,
},
];
const expectedBurnedAssets: BurnedOrMintedAsset[] = [

const expectedBurnedAssets: BurnedAsset[] = [
{
subId: receipts[1].subId,
contractId: receipts[1].contractId,
Expand All @@ -53,7 +54,8 @@ describe('extractAssetIdFromBurnOrMintReceipts', () => {
];

// Call the function and verify the output
const { mintedAssets, burnedAssets } = extractAssetIdFromBurnOrMintReceipts(receipts);
const mintedAssets = extractMintedAssetsFromReceipts(receipts);
const burnedAssets = extractBurnedAssetsFromReceipts(receipts);

expect(mintedAssets).toEqual(expectedMintedAssets);
expect(burnedAssets).toEqual(expectedBurnedAssets);
Expand All @@ -62,7 +64,8 @@ describe('extractAssetIdFromBurnOrMintReceipts', () => {
it('should returns empty arrays if there are no mint or burn receipts', () => {
const receipts: Array<TransactionResultReceipt> = [];

const { mintedAssets, burnedAssets } = extractAssetIdFromBurnOrMintReceipts(receipts);
const mintedAssets = extractMintedAssetsFromReceipts(receipts);
const burnedAssets = extractBurnedAssetsFromReceipts(receipts);

expect(mintedAssets).toEqual([]);
expect(burnedAssets).toEqual([]);
Expand Down
28 changes: 18 additions & 10 deletions packages/providers/src/transaction-summary/receipt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type { GqlReceiptFragmentFragment } from '../__generated__/operations';
import type { TransactionResultReceipt } from '../transaction-response';
import { assembleReceiptByType } from '../utils';

import type { BurnedOrMintedAsset } from './types';
import type { BurnedAsset, MintedAsset } from './types';

export const processGqlReceipt = (
gqlReceipt: GqlReceiptFragmentFragment
Expand All @@ -29,14 +29,10 @@ export const processGqlReceipt = (
}
};

export const extractAssetIdFromBurnOrMintReceipts = (
export const extractMintedAssetsFromReceipts = (
receipts: Array<TransactionResultReceipt>
): {
mintedAssets: BurnedOrMintedAsset[];
burnedAssets: BurnedOrMintedAsset[];
} => {
const mintedAssets: BurnedOrMintedAsset[] = [];
const burnedAssets: BurnedOrMintedAsset[] = [];
): MintedAsset[] => {
const mintedAssets: MintedAsset[] = [];

receipts.forEach((receipt) => {
if (receipt.type === ReceiptType.Mint) {
Expand All @@ -46,7 +42,19 @@ export const extractAssetIdFromBurnOrMintReceipts = (
assetId: receipt.assetId,
amount: receipt.val,
});
} else if (receipt.type === ReceiptType.Burn) {
}
});

return mintedAssets;
};

export const extractBurnedAssetsFromReceipts = (
receipts: Array<TransactionResultReceipt>
): BurnedAsset[] => {
const burnedAssets: BurnedAsset[] = [];

receipts.forEach((receipt) => {
if (receipt.type === ReceiptType.Burn) {
burnedAssets.push({
subId: receipt.subId,
contractId: receipt.contractId,
Expand All @@ -56,5 +64,5 @@ export const extractAssetIdFromBurnOrMintReceipts = (
}
});

return { mintedAssets, burnedAssets };
return burnedAssets;
};
8 changes: 5 additions & 3 deletions packages/providers/src/transaction-summary/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,13 +150,15 @@ export type GetOperationParams = {
AbiParam &
RawPayloadParam;

export interface BurnedOrMintedAsset {
export interface MintedAsset {
subId: B256Address;
contractId: B256Address;
assetId: B256Address;
amount: BN;
}

export type BurnedAsset = MintedAsset;

export type TransactionSummary<TTransactionType = void> = {
id?: string;
time?: string;
Expand All @@ -172,8 +174,8 @@ export type TransactionSummary<TTransactionType = void> = {
isStatusPending: boolean;
isStatusSuccess: boolean;
isStatusFailure: boolean;
mintedAssets?: BurnedOrMintedAsset[];
burnedAssets?: BurnedOrMintedAsset[];
mintedAssets: MintedAsset[];
burnedAssets: BurnedAsset[];
receipts: TransactionResultReceipt[];
transaction: Transaction<TTransactionType>;
};

0 comments on commit e45d7cc

Please sign in to comment.