Resolve test

This commit is contained in:
julian merlo 2024-01-06 20:35:07 -03:00
parent 153273ea2f
commit 19d1796d26
10 changed files with 29 additions and 22 deletions

View File

@ -111,7 +111,7 @@ Example:
{
"action": "HandleSolanaTransactions",
"target": "sns",
"mapper": "solanaTransferRedeemedMapper",
"mapper": "solanaTransactionFoundMapper",
"config": {
"programId": "wormDTUJ6AWPNvk59vGQbDvGJmqbDTdgWgAqcLBCgUb"
}

View File

@ -281,7 +281,7 @@ export enum MethodID {
// Method id for Portico contract
MethodIDReceiveMessageAndSwap = "0x3d528f35",
// CCTP
MethodCCTP = "",
MethodCCTP = "", // TODO: find input matchers
}
const ethBase = new Map<string, Protocol>([

View File

@ -21,8 +21,8 @@ export const methodNameByInstructionMapper = (
return {
id: methodId,
name: selectedMethod.name,
method: selectedMethod.method.toString(),
name: selectedMethod?.name,
method: selectedMethod?.method?.toString(),
};
};

View File

@ -18,7 +18,7 @@ const TRANSACTION_STATUS_FAILED = "failed";
const connection = new Connection(configuration.chains.solana.rpcs[0]);
export const solanaTransferRedeemedMapper = async (
export const solanaTransactionFoundMapper = async (
tx: solana.Transaction,
{ programId, commitment }: { programId: string; commitment?: Commitment }
): Promise<TransactionFoundEvent<SolanaTransactionFound>[]> => {
@ -48,7 +48,7 @@ export const solanaTransferRedeemedMapper = async (
const accountAddress = accountKeys[instruction.accountKeyIndexes[2]];
const { message } = await getPostedMessage(connection, accountAddress, commitment);
const { sequence, emitterAddress, emitterChain } = message || {}; // TODO: This values
const { sequence, emitterAddress, emitterChain } = message || {}; // TODO: Validate this values
const methods = methodNameByInstructionMapper(instruction, programIdIndex);
results.push({

View File

@ -19,7 +19,7 @@ import { FileMetadataRepository, SnsEventRepository } from "./index";
import { HandleSolanaTransactions } from "../../domain/actions/solana/HandleSolanaTransactions";
import {
solanaLogMessagePublishedMapper,
solanaTransferRedeemedMapper,
solanaTransactionFoundMapper,
evmLogMessagePublishedMapper,
evmTransactionFoundMapper,
} from "../mappers";
@ -125,7 +125,7 @@ export class StaticJobRepository implements JobRepository {
this.mappers.set("evmLogMessagePublishedMapper", evmLogMessagePublishedMapper);
this.mappers.set("evmTransactionFoundMapper", evmTransactionFoundMapper);
this.mappers.set("solanaLogMessagePublishedMapper", solanaLogMessagePublishedMapper);
this.mappers.set("solanaTransferRedeemedMapper", solanaTransferRedeemedMapper);
this.mappers.set("solanaTransactionFoundMapper", solanaTransactionFoundMapper);
// Targets
const snsTarget = () => this.snsRepo.asTarget();

View File

@ -1,6 +1,6 @@
import { evmLogMessagePublishedMapper } from "../../../../src/infrastructure/mappers/evm/evmLogMessagePublishedMapper";
import { describe, it, expect } from "@jest/globals";
import { evmLogMessagePublishedMapper } from "../../../src/infrastructure/mappers/evmLogMessagePublishedMapper";
import { HandleEvmLogs } from "../../../src/domain/actions";
import { HandleEvmLogs } from "../../../../src/domain/actions";
const address = "0x98f3c9e6e3face36baad05fe09d375ef1464288b";
const topic = "0x6eb224fb001ed210e379b335e35efe88672a8ce935d981a6896b27ffdf52a3b2";

View File

@ -1,6 +1,6 @@
import { describe, it, expect } from "@jest/globals";
import { evmTransactionFoundMapper } from "../../../src/infrastructure/mappers/evmTransactionFoundMapper";
import { HandleEvmTransactions } from "../../../src/domain/actions";
import { evmTransactionFoundMapper } from "../../../../src/infrastructure/mappers/evm/evmTransactionFoundMapper";
import { HandleEvmTransactions } from "../../../../src/domain/actions";
const address = "0xf890982f9310df57d00f659cf4fd87e65aded8d7";
const topic = "0xbccc00b713f54173962e7de6098f643d8ebf53d488d71f4b2a5171496d038f9e";

View File

@ -1,4 +1,5 @@
import { methodNameByAddressMapper } from "../../../../../src/domain/actions/evm/mappers/methodNameByAddressMapper";
import { methodNameByAddressMapper } from "../../../../src/infrastructure/mappers/evm/methodNameByAddressMapper";
import { describe, it, expect } from "@jest/globals";
describe("methodNameByAddressMapper", () => {

View File

@ -1,7 +1,7 @@
import { solanaLogMessagePublishedMapper } from "../../../../src/infrastructure/mappers/solana/solanaLogMessagePublishedMapper";
import { expect, describe, it, jest } from "@jest/globals";
import { solana } from "../../../src/domain/entities";
import { solanaLogMessagePublishedMapper } from "../../../src/infrastructure/mappers/solanaLogMessagePublishedMapper";
import { getPostedMessage } from "@certusone/wormhole-sdk/lib/cjs/solana/wormhole";
import { solana } from "../../../../src/domain/entities";
jest.mock("@certusone/wormhole-sdk/lib/cjs/solana/wormhole");

View File

@ -1,11 +1,11 @@
import { expect, describe, it, jest } from "@jest/globals";
import { solana } from "../../../src/domain/entities";
import { solanaTransferRedeemedMapper } from "../../../src/infrastructure/mappers";
import { solana } from "../../../../src/domain/entities";
import { solanaTransactionFoundMapper } from "../../../../src/infrastructure/mappers";
import { getPostedMessage } from "@certusone/wormhole-sdk/lib/cjs/solana/wormhole";
jest.mock("@certusone/wormhole-sdk/lib/cjs/solana/wormhole");
describe("solanaTransferRedeemedMapper", () => {
describe("solanaTransactionFoundMapper", () => {
it("should map a token bridge tx to a transfer-redeemed event", async () => {
const mockGetPostedMessage = getPostedMessage as jest.MockedFunction<typeof getPostedMessage>;
mockGetPostedMessage.mockResolvedValueOnce({
@ -136,15 +136,18 @@ describe("solanaTransferRedeemedMapper", () => {
version: "legacy",
} as any as solana.Transaction;
const events = await solanaTransferRedeemedMapper(tx, { programId });
const events = await solanaTransactionFoundMapper(tx, { programId });
expect(events).toHaveLength(1);
expect(events[0].name).toBe("transfer-redeemed");
expect(events[0].name).toBe("solana-transaction-found");
expect(events[0].address).toBe(programId);
expect(events[0].chainId).toBe(1);
expect(events[0].txHash).toBe(tx.transaction.signatures[0]);
expect(events[0].blockHeight).toBe(BigInt(tx.slot));
expect(events[0].blockTime).toBe(tx.blockTime);
expect(events[0].attributes.name).toBe("transfer-redeemed");
expect(events[0].attributes.method).toBe("0");
expect(events[0].attributes.status).toBe("completed");
});
it("should map a tx involving token bridge relayer (aka connect) to a transfer-redeemed event", async () => {
@ -343,14 +346,17 @@ describe("solanaTransferRedeemedMapper", () => {
version: "legacy",
} as any as solana.Transaction;
const events = await solanaTransferRedeemedMapper(tx, { programId });
const events = await solanaTransactionFoundMapper(tx, { programId });
expect(events).toHaveLength(1);
expect(events[0].name).toBe("transfer-redeemed");
expect(events[0].name).toBe("solana-transaction-found");
expect(events[0].address).toBe(programId);
expect(events[0].chainId).toBe(1);
expect(events[0].txHash).toBe(tx.transaction.signatures[0]);
expect(events[0].blockHeight).toBe(BigInt(tx.slot));
expect(events[0].blockTime).toBe(tx.blockTime);
expect(events[0].attributes.name).toBe(undefined);
expect(events[0].attributes.method).toBe(undefined);
expect(events[0].attributes.status).toBe("completed");
});
});