Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/contractClients/acpContractClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
encodeFunctionData,
Hex,
SignTypedDataParameters,
TransactionRequest,
} from "viem";
import { AcpContractConfig, baseAcpConfig } from "../configs/acpConfigs";
import AcpError from "../acpError";
Expand Down Expand Up @@ -384,6 +385,12 @@ class AcpContractClient extends BaseAcpContractClient {
signTypedData(typedData: SignTypedDataParameters): Promise<Hex> {
return this.sessionKeyClient.signTypedData({ typedData });
}

async sendTransaction(request: TransactionRequest): Promise<Hex> {
return await this.sessionKeyClient.sendTransaction(request, {
paymasterAndData: "0x",
});
}
}

export default AcpContractClient;
39 changes: 9 additions & 30 deletions src/contractClients/acpContractClientV2.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { Address, LocalAccountSigner, SmartAccountSigner } from "@aa-sdk/core";
import { alchemy, defineAlchemyChain } from "@account-kit/infra";
import { alchemy } from "@account-kit/infra";
import {
createModularAccountV2,
createModularAccountV2Client,
ModularAccountV2Client,
} from "@account-kit/smart-contracts";
Expand All @@ -11,7 +10,7 @@ import {
Hex,
http,
SignTypedDataParameters,
zeroAddress,
TransactionRequest,
} from "viem";
import { AcpContractConfig, baseAcpConfigV2 } from "../configs/acpConfigs";
import AcpError from "../acpError";
Expand All @@ -33,10 +32,6 @@ import { base, baseSepolia } from "viem/chains";
import MEMO_MANAGER_ABI from "../abis/memoManagerAbi";

class AcpContractClientV2 extends BaseAcpContractClient {
private PRIORITY_FEE_MULTIPLIER = 2;
private MAX_FEE_PER_GAS = 20000000;
private MAX_PRIORITY_FEE_PER_GAS = 21000000;
private GAS_FEE_MULTIPLIER = 0.5;
private RETRY_CONFIG = {
intervalMs: 200,
multiplier: 1.1,
Expand Down Expand Up @@ -198,7 +193,7 @@ class AcpContractClientV2 extends BaseAcpContractClient {
return BigInt("0x" + hex);
}

get sessionKeyClient() {
private get sessionKeyClient() {
if (!this._sessionKeyClient) {
throw new AcpError("Session key client not initialized");
}
Expand All @@ -214,28 +209,6 @@ class AcpContractClientV2 extends BaseAcpContractClient {
return this._acpX402;
}

private async calculateGasFees(chainId?: number) {
if (chainId) {
const { maxFeePerGas } = await this.publicClients[
chainId
].estimateFeesPerGas();

const increasedMaxFeePerGas =
BigInt(maxFeePerGas) +
(BigInt(maxFeePerGas) * BigInt(this.GAS_FEE_MULTIPLIER * 100)) /
BigInt(100);

return increasedMaxFeePerGas;
}

const finalMaxFeePerGas =
BigInt(this.MAX_FEE_PER_GAS) +
BigInt(this.MAX_PRIORITY_FEE_PER_GAS) *
BigInt(Math.max(0, this.PRIORITY_FEE_MULTIPLIER - 1));

return finalMaxFeePerGas;
}

async handleOperation(
operations: OperationPayload[],
chainId?: number
Expand Down Expand Up @@ -409,6 +382,12 @@ class AcpContractClientV2 extends BaseAcpContractClient {
async signTypedData(typedData: SignTypedDataParameters): Promise<Hex> {
return await this.sessionKeyClient.signTypedData({ typedData });
}

async sendTransaction(request: TransactionRequest): Promise<Hex> {
return await this.sessionKeyClient.sendTransaction(request, {
paymasterAndData: "0x",
});
}
}

export default AcpContractClientV2;
3 changes: 3 additions & 0 deletions src/contractClients/baseAcpContractClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
zeroAddress,
SignTypedDataParameters,
Hex,
TransactionRequest,
} from "viem";
import { AcpContractConfig, baseAcpConfig } from "../configs/acpConfigs";
import ACP_V2_ABI from "../abis/acpAbiV2";
Expand Down Expand Up @@ -603,6 +604,8 @@ abstract class BaseAcpContractClient {
abstract getAcpVersion(): string;

abstract signTypedData(typedData: SignTypedDataParameters): Promise<Hex>;

abstract sendTransaction(request: TransactionRequest): Promise<Hex>;
}

export default BaseAcpContractClient;
Loading