UNPKG

@uniswap/smart-wallet-sdk

Version:

⚒️ An SDK for building applications with smart wallets on Uniswap

118 lines 5.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const sdk_core_1 = require("@uniswap/sdk-core"); const viem_1 = require("viem"); const MinimalDelegationEntry_json_1 = tslib_1.__importDefault(require("../abis/MinimalDelegationEntry.json")); const constants_1 = require("./constants"); const smartWallet_1 = require("./smartWallet"); const EXECUTE_SELECTOR = "0xe9ae5c53"; describe('SmartWallet', () => { describe('encodeBatchedCall', () => { it('encodes batched call correctly', () => { const calls = [ { to: '0x1111111111111111111111111111111111111111', data: '0x1234', value: 0n, chainId: sdk_core_1.ChainId.SEPOLIA }, { to: '0x2222222222222222222222222222222222222222', data: '0x5678', value: 1n, chainId: sdk_core_1.ChainId.SEPOLIA } ]; const result = smartWallet_1.SmartWallet.encodeBatchedCall(calls, { revertOnFailure: false }); // decode the calldata const decoded = (0, viem_1.decodeFunctionData)({ abi: MinimalDelegationEntry_json_1.default, data: result.calldata }); expect(decoded).toBeDefined(); expect(decoded.functionName).toBe('execute'); expect(decoded.args).toBeDefined(); if (decoded.args) { expect(decoded.args.length).toBe(1); expect(decoded.args[0]).toBeDefined(); expect(decoded.args[0].calls).toBeDefined(); expect(decoded.args[0].calls.length).toBe(2); expect(decoded.args[0].revertOnFailure).toBe(false); } }); }); describe('encodeERC7821BatchedCall', () => { it('encodes batch calls correctly', () => { const calls = [ { to: '0x1111111111111111111111111111111111111111', data: '0x1234', value: 0n }, { to: '0x2222222222222222222222222222222222222222', data: '0x5678', value: 1n } ]; const result = smartWallet_1.SmartWallet.encodeERC7821BatchedCall(calls); expect(result).toBeDefined(); expect(result.calldata).toBeDefined(); expect(result.value).toBeDefined(); }); it('encodes batch calls with revertOnFailure option', () => { const calls = [ { to: '0x1111111111111111111111111111111111111111', data: '0x1234', value: 0n } ]; const result = smartWallet_1.SmartWallet.encodeERC7821BatchedCall(calls, { revertOnFailure: true }); expect(result).toBeDefined(); expect(result.calldata).toBeDefined(); expect(result.value).toBeDefined(); }); it('throws an error if the mode is not supported', () => { // mock getModeFromOptions jest.spyOn(smartWallet_1.SmartWallet, 'getModeFromOptions').mockReturnValue('invalid'); const calls = [ { to: '0x1111111111111111111111111111111111111111', data: '0x1234', value: 0n } ]; expect(() => smartWallet_1.SmartWallet.encodeERC7821BatchedCall(calls)).toThrow(); jest.restoreAllMocks(); }); }); describe('createExecute', () => { it('creates an execute call for specific chain', () => { const methodParams = { calldata: EXECUTE_SELECTOR, value: 0n }; const call = smartWallet_1.SmartWallet.createExecute(methodParams, sdk_core_1.ChainId.SEPOLIA); // Verify the result expect(call).toBeDefined(); expect(call.to).toBe(constants_1.SMART_WALLET_ADDRESSES[sdk_core_1.ChainId.SEPOLIA]); expect(call.data).toBe(EXECUTE_SELECTOR); expect(call.value).toBe(0n); }); }); describe('getModeFromOptions', () => { for (const revertOnFailure of [true, false]) { it(`returns the correct mode type for revertOnFailure: ${revertOnFailure}`, () => { if (revertOnFailure) { expect(smartWallet_1.SmartWallet.getModeFromOptions({ revertOnFailure })).toBe(constants_1.ModeType.BATCHED_CALL); } else { expect(smartWallet_1.SmartWallet.getModeFromOptions({ revertOnFailure })).toBe(constants_1.ModeType.BATCHED_CALL_CAN_REVERT); } }); } }); }); //# sourceMappingURL=smartWallet.test.js.map