@uniswap/smart-wallet-sdk
Version:
⚒️ An SDK for building applications with smart wallets on Uniswap
118 lines • 5.02 kB
JavaScript
;
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