From a2ef137bfa1a2cd15de9f0988bfd1149857e38a5 Mon Sep 17 00:00:00 2001 From: Greg Nazario Date: Mon, 12 Feb 2024 19:02:22 -0800 Subject: [PATCH] fix typing on ABI argument types Now the ABI is properly handled, where it doesn't have to be forced --- src/internal/transactionSubmission.ts | 4 +- .../transactionBuilder/transactionBuilder.ts | 17 +++---- src/transactions/types.ts | 10 ++++ .../transaction/transactionBuilder.test.ts | 50 ++++++++----------- 4 files changed, 40 insertions(+), 41 deletions(-) diff --git a/src/internal/transactionSubmission.ts b/src/internal/transactionSubmission.ts index 07b818559..007e40f94 100644 --- a/src/internal/transactionSubmission.ts +++ b/src/internal/transactionSubmission.ts @@ -112,7 +112,7 @@ export async function buildTransactionPayload( payload = await generateTransactionPayload(data); } else if ("multisigAddress" in data) { if (data.abi) { - payload = generateTransactionPayloadWithABI(data); + payload = generateTransactionPayloadWithABI({ abi: data.abi, ...data }); } else { generateTransactionPayloadData = { aptosConfig, @@ -124,7 +124,7 @@ export async function buildTransactionPayload( payload = await generateTransactionPayload(generateTransactionPayloadData); } } else if (data.abi) { - payload = generateTransactionPayloadWithABI(data); + payload = generateTransactionPayloadWithABI({ abi: data.abi, ...data }); } else { generateTransactionPayloadData = { aptosConfig, diff --git a/src/transactions/transactionBuilder/transactionBuilder.ts b/src/transactions/transactionBuilder/transactionBuilder.ts index 459f4ba54..0a4ff48b0 100644 --- a/src/transactions/transactionBuilder/transactionBuilder.ts +++ b/src/transactions/transactionBuilder/transactionBuilder.ts @@ -63,13 +63,13 @@ import { MultiAgentTransaction, InputScriptData, InputSimulateTransactionData, - InputGenerateTransactionPayloadData, - InputEntryFunctionData, - InputMultiSigData, InputMultiSigDataWithRemoteABI, InputEntryFunctionDataWithRemoteABI, InputGenerateTransactionPayloadDataWithRemoteABI, InputSubmitTransactionData, + InputGenerateTransactionPayloadDataWithABI, + InputEntryFunctionDataWithABI, + InputMultiSigDataWithABI, } from "../types"; import { convertArgument, fetchEntryFunctionAbi, standardizeTypeTags } from "./remoteAbi"; import { memoizeAsync } from "../../utils/memoize"; @@ -120,15 +120,12 @@ export async function generateTransactionPayload( return generateTransactionPayloadWithABI({ abi: functionAbi, ...args }); } -export function generateTransactionPayloadWithABI(args: InputEntryFunctionData): TransactionPayloadEntryFunction; -export function generateTransactionPayloadWithABI(args: InputMultiSigData): TransactionPayloadMultiSig; +export function generateTransactionPayloadWithABI(args: InputEntryFunctionDataWithABI): TransactionPayloadEntryFunction; +export function generateTransactionPayloadWithABI(args: InputMultiSigDataWithABI): TransactionPayloadMultiSig; export function generateTransactionPayloadWithABI( - args: InputGenerateTransactionPayloadData, + args: InputGenerateTransactionPayloadDataWithABI, ): AnyTransactionPayloadInstance { - if (isScriptDataInput(args)) { - return generateTransactionPayloadScript(args); - } - const functionAbi = args.abi!; + const functionAbi = args.abi; const { moduleAddress, moduleName, functionName } = getFunctionParts(args.function); // Ensure that all type arguments are typed properly diff --git a/src/transactions/types.ts b/src/transactions/types.ts index 1859ac93e..5bb4bd659 100644 --- a/src/transactions/types.ts +++ b/src/transactions/types.ts @@ -112,6 +112,16 @@ export type InputEntryFunctionData = { abi?: EntryFunctionABI; }; +export type InputGenerateTransactionPayloadDataWithABI = InputEntryFunctionDataWithABI | InputMultiSigDataWithABI; + +export type InputEntryFunctionDataWithABI = Omit & { + abi: EntryFunctionABI; +}; + +export type InputMultiSigDataWithABI = { + multisigAddress: AccountAddressInput; +} & InputEntryFunctionDataWithABI; + export type InputEntryFunctionDataWithRemoteABI = InputEntryFunctionData & { aptosConfig: AptosConfig }; /** * The data needed to generate a Multi Sig payload diff --git a/tests/e2e/transaction/transactionBuilder.test.ts b/tests/e2e/transaction/transactionBuilder.test.ts index 1470dd8c1..1adf115c5 100644 --- a/tests/e2e/transaction/transactionBuilder.test.ts +++ b/tests/e2e/transaction/transactionBuilder.test.ts @@ -103,42 +103,34 @@ describe("transaction builder", () => { }; test("it generates a multi sig transaction payload", async () => { - const payload = generateTransactionPayloadWithABI( - { - multisigAddress: Account.generate().accountAddress, - function: `${contractPublisherAccount.accountAddress}::transfer::transfer`, - functionArguments: ["0x1", "0x1"], - }, - functionAbi, - ); + const payload = generateTransactionPayloadWithABI({ + multisigAddress: Account.generate().accountAddress, + function: `${contractPublisherAccount.accountAddress}::transfer::transfer`, + functionArguments: ["0x1", "0x1"], + abi: functionAbi, + }); expect(payload instanceof TransactionPayloadMultiSig).toBeTruthy(); }); test("it generates an entry function transaction payload", async () => { - const payload = generateTransactionPayloadWithABI( - { - function: `${contractPublisherAccount.accountAddress}::transfer::transfer`, - functionArguments: ["0x1", "0x1"], - }, - functionAbi, - ); + const payload = generateTransactionPayloadWithABI({ + function: `${contractPublisherAccount.accountAddress}::transfer::transfer`, + functionArguments: ["0x1", "0x1"], + abi: functionAbi, + }); expect(payload instanceof TransactionPayloadEntryFunction).toBeTruthy(); }); test("it generates an entry function transaction payload with mixed arguments", async () => { - const payload = generateTransactionPayloadWithABI( - { - function: `${contractPublisherAccount.accountAddress}::transfer::transfer`, - functionArguments: [AccountAddress.ONE, "0x1"], - }, - functionAbi, - ); + const payload = generateTransactionPayloadWithABI({ + function: `${contractPublisherAccount.accountAddress}::transfer::transfer`, + functionArguments: [AccountAddress.ONE, "0x1"], + abi: functionAbi, + }); expect(payload instanceof TransactionPayloadEntryFunction).toBeTruthy(); - const payload2 = generateTransactionPayloadWithABI( - { - function: `${contractPublisherAccount.accountAddress}::transfer::transfer`, - functionArguments: ["0x1", AccountAddress.ONE], - }, - functionAbi, - ); + const payload2 = generateTransactionPayloadWithABI({ + function: `${contractPublisherAccount.accountAddress}::transfer::transfer`, + functionArguments: ["0x1", AccountAddress.ONE], + abi: functionAbi, + }); expect(payload2 instanceof TransactionPayloadEntryFunction).toBeTruthy(); }); });