diff --git a/src/chains/definitions/abstractTestnet.ts b/src/chains/definitions/abstractTestnet.ts index 6ae1562901..0b560d4d78 100644 --- a/src/chains/definitions/abstractTestnet.ts +++ b/src/chains/definitions/abstractTestnet.ts @@ -1,5 +1,51 @@ +import { transactionToMessage } from '../..//zksync/utils/getEip712Domain.js' import { defineChain } from '../../utils/chain/defineChain.js' import { chainConfig } from '../../zksync/chainConfig.js' +import type { EIP712DomainFn } from '../../zksync/types/eip712.js' +import type { + ZksyncEIP712TransactionSignable, + ZksyncTransactionSerializable, + ZksyncTransactionSerializableEIP712, +} from '../../zksync/types/transaction.js' +import { assertEip712Transaction } from '../../zksync/utils/assertEip712Transaction.js' + +export const getAbstractEip712Domain: EIP712DomainFn< + ZksyncTransactionSerializable, + ZksyncEIP712TransactionSignable +> = (transaction) => { + assertEip712Transaction(transaction) + + const message = transactionToMessage( + transaction as ZksyncTransactionSerializableEIP712, + ) + + return { + domain: { + name: 'Abstract', // Use 'Abstract' rather than 'zkSync' + version: '2', + chainId: transaction.chainId, + }, + types: { + Transaction: [ + { name: 'txType', type: 'uint256' }, + { name: 'from', type: 'uint256' }, + { name: 'to', type: 'uint256' }, + { name: 'gasLimit', type: 'uint256' }, + { name: 'gasPerPubdataByteLimit', type: 'uint256' }, + { name: 'maxFeePerGas', type: 'uint256' }, + { name: 'maxPriorityFeePerGas', type: 'uint256' }, + { name: 'paymaster', type: 'uint256' }, + { name: 'nonce', type: 'uint256' }, + { name: 'value', type: 'uint256' }, + { name: 'data', type: 'bytes' }, + { name: 'factoryDeps', type: 'bytes32[]' }, + { name: 'paymasterInput', type: 'bytes' }, + ], + }, + primaryType: 'Transaction', + message: message, + } +} export const abstractTestnet = /*#__PURE__*/ defineChain({ ...chainConfig, @@ -20,4 +66,7 @@ export const abstractTestnet = /*#__PURE__*/ defineChain({ }, }, testnet: true, + custom: { + getEip712Domain: getAbstractEip712Domain, // Use Abstract's specific EIP712 domain + }, }) diff --git a/src/zksync/utils/getEip712Domain.ts b/src/zksync/utils/getEip712Domain.ts index 77e7d53d3a..04c716504b 100644 --- a/src/zksync/utils/getEip712Domain.ts +++ b/src/zksync/utils/getEip712Domain.ts @@ -50,7 +50,7 @@ export const getEip712Domain: EIP712DomainFn< ////////////////////////////////////////////////////////////////////////////// // Utilities -function transactionToMessage( +export function transactionToMessage( transaction: ZksyncTransactionSerializableEIP712, ): ZksyncEIP712TransactionSignable { const {