@aastar/sdk 0.16.22 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/utils/userOp.d.ts +11 -0
- package/dist/utils/userOp.js +43 -2
- package/package.json +11 -10
- package/dist/clients/ExperimentClient.test.d.ts +0 -1
- package/dist/clients/ExperimentClient.test.js +0 -53
- package/dist/clients/admin.test.d.ts +0 -1
- package/dist/clients/admin.test.js +0 -79
- package/dist/clients/clients.test.d.ts +0 -1
- package/dist/clients/clients.test.js +0 -91
- package/dist/clients/community.test.d.ts +0 -1
- package/dist/clients/community.test.js +0 -99
- package/dist/clients/endUser.test.d.ts +0 -1
- package/dist/clients/endUser.test.js +0 -188
- package/dist/clients/operator.test.d.ts +0 -1
- package/dist/clients/operator.test.js +0 -139
- package/dist/core/src/abis/BLSAggregator.json +0 -686
- package/dist/core/src/abis/BLSValidator.json +0 -42
- package/dist/core/src/abis/DVTValidator.json +0 -368
- package/dist/core/src/abis/EntryPoint.json +0 -1382
- package/dist/core/src/abis/GToken.json +0 -513
- package/dist/core/src/abis/GTokenStaking.json +0 -949
- package/dist/core/src/abis/MySBT.json +0 -1518
- package/dist/core/src/abis/Paymaster.json +0 -1143
- package/dist/core/src/abis/PaymasterFactory.json +0 -640
- package/dist/core/src/abis/Registry.json +0 -1942
- package/dist/core/src/abis/ReputationSystem.json +0 -699
- package/dist/core/src/abis/SimpleAccount.json +0 -560
- package/dist/core/src/abis/SimpleAccountFactory.json +0 -111
- package/dist/core/src/abis/SuperPaymaster.json +0 -1781
- package/dist/core/src/abis/xPNTsFactory.json +0 -718
- package/dist/core/src/abis/xPNTsToken.json +0 -1280
- package/dist/errors/AAStarError.d.ts +0 -26
- package/dist/errors/AAStarError.js +0 -32
- package/dist/errors/AAStarError.test.d.ts +0 -1
- package/dist/errors/AAStarError.test.js +0 -74
- package/dist/errors/decoder.test.d.ts +0 -1
- package/dist/errors/decoder.test.js +0 -90
- package/dist/node/index.d.ts +0 -7
- package/dist/node/index.js +0 -7
- package/dist/types/result.d.ts +0 -15
- package/dist/types/result.js +0 -23
- package/dist/utils/errorHandler.test.d.ts +0 -1
- package/dist/utils/errorHandler.test.js +0 -89
- package/dist/utils/eventDecoder.d.ts +0 -7
- package/dist/utils/eventDecoder.js +0 -54
- package/dist/utils/eventDecoder.test.d.ts +0 -1
- package/dist/utils/eventDecoder.test.js +0 -48
- package/dist/utils/funding.test.d.ts +0 -1
- package/dist/utils/funding.test.js +0 -105
- package/dist/utils/keys.test.d.ts +0 -1
- package/dist/utils/keys.test.js +0 -81
- package/dist/utils/roleData.test.d.ts +0 -1
- package/dist/utils/roleData.test.js +0 -74
- package/dist/utils/testScenarios.test.d.ts +0 -1
- package/dist/utils/testScenarios.test.js +0 -68
- package/dist/utils/userOp.test.d.ts +0 -1
- package/dist/utils/userOp.test.js +0 -152
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
import { createEndUserClient } from './endUser.js';
|
|
3
|
-
import { mainnet } from 'viem/chains';
|
|
4
|
-
import { http, parseEther } from 'viem';
|
|
5
|
-
vi.mock('@aastar/core', async () => {
|
|
6
|
-
const actual = await vi.importActual('@aastar/core');
|
|
7
|
-
return {
|
|
8
|
-
...actual,
|
|
9
|
-
registryActions: vi.fn(() => vi.fn(() => ({
|
|
10
|
-
registryRegisterRoleSelf: vi.fn().mockResolvedValue('0xhash')
|
|
11
|
-
}))),
|
|
12
|
-
sbtActions: vi.fn(() => vi.fn(() => ({
|
|
13
|
-
sbtGetUserSBT: vi.fn().mockResolvedValue(123n)
|
|
14
|
-
}))),
|
|
15
|
-
superPaymasterActions: vi.fn(() => vi.fn(() => ({
|
|
16
|
-
superPaymasterGetAvailableCredit: vi.fn().mockResolvedValue(100n)
|
|
17
|
-
}))),
|
|
18
|
-
paymasterV4Actions: vi.fn(() => vi.fn(() => ({
|
|
19
|
-
// pmv4
|
|
20
|
-
}))),
|
|
21
|
-
};
|
|
22
|
-
});
|
|
23
|
-
describe('EndUserClient', () => {
|
|
24
|
-
const MOCK_ADDR = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
|
|
25
|
-
const MOCK_COMMUNITY = '0x1111111111111111111111111111111111111111';
|
|
26
|
-
it('should create end user client', () => {
|
|
27
|
-
const client = createEndUserClient({ chain: mainnet, transport: http() });
|
|
28
|
-
expect(client.joinAndActivate).toBeDefined();
|
|
29
|
-
});
|
|
30
|
-
describe('joinAndActivate', () => {
|
|
31
|
-
it('should join community and fetch SBT', async () => {
|
|
32
|
-
const client = createEndUserClient({
|
|
33
|
-
chain: mainnet,
|
|
34
|
-
transport: http(),
|
|
35
|
-
account: { address: MOCK_ADDR }
|
|
36
|
-
});
|
|
37
|
-
client.readContract = vi.fn().mockResolvedValue('0x0000000000000000000000000000000000000000');
|
|
38
|
-
client.writeContract = vi.fn().mockResolvedValue('0xhash');
|
|
39
|
-
client.waitForTransactionReceipt = vi.fn().mockResolvedValue({ logs: [] });
|
|
40
|
-
const result = await client.joinAndActivate({ community: MOCK_COMMUNITY, roleId: '0x1' });
|
|
41
|
-
expect(result.sbtId).toBe(123n);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
describe('executeGasless', () => {
|
|
45
|
-
it('should execute gasless transaction', async () => {
|
|
46
|
-
const client = createEndUserClient({
|
|
47
|
-
chain: mainnet,
|
|
48
|
-
transport: http(),
|
|
49
|
-
account: { address: MOCK_ADDR, signMessage: vi.fn().mockResolvedValue('0xsignature') }
|
|
50
|
-
});
|
|
51
|
-
client.createSmartAccount = vi.fn().mockResolvedValue({ accountAddress: '0xaa', isDeployed: true });
|
|
52
|
-
client.readContract = vi.fn().mockResolvedValue(0n); // nonce or userOpHash
|
|
53
|
-
client.getBytecode = vi.fn().mockResolvedValue('0x123');
|
|
54
|
-
client.writeContract = vi.fn().mockResolvedValue('0xhash');
|
|
55
|
-
client.waitForTransactionReceipt = vi.fn().mockResolvedValue({ logs: [] });
|
|
56
|
-
const result = await client.executeGasless({
|
|
57
|
-
target: MOCK_COMMUNITY,
|
|
58
|
-
data: '0x',
|
|
59
|
-
operator: MOCK_COMMUNITY
|
|
60
|
-
});
|
|
61
|
-
expect(result.hash).toBe('0xhash');
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe('executeGaslessBatch', () => {
|
|
65
|
-
it('should execute gasless batch', async () => {
|
|
66
|
-
const client = createEndUserClient({
|
|
67
|
-
chain: mainnet,
|
|
68
|
-
transport: http(),
|
|
69
|
-
account: { address: MOCK_ADDR, signMessage: vi.fn().mockResolvedValue('0xsignature') }
|
|
70
|
-
});
|
|
71
|
-
client.createSmartAccount = vi.fn().mockResolvedValue({ accountAddress: '0xaa', isDeployed: true });
|
|
72
|
-
client.readContract = vi.fn().mockResolvedValue(0n);
|
|
73
|
-
client.getBytecode = vi.fn().mockResolvedValue('0x123');
|
|
74
|
-
client.writeContract = vi.fn().mockResolvedValue('0xhash');
|
|
75
|
-
client.waitForTransactionReceipt = vi.fn().mockResolvedValue({ logs: [] });
|
|
76
|
-
const result = await client.executeGaslessBatch({
|
|
77
|
-
targets: [MOCK_COMMUNITY],
|
|
78
|
-
datas: ['0x'],
|
|
79
|
-
operator: MOCK_COMMUNITY
|
|
80
|
-
});
|
|
81
|
-
expect(result.hash).toBe('0xhash');
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
describe('Requirements and Credits', () => {
|
|
85
|
-
it('should call onboard (alias for joinAndActivate)', async () => {
|
|
86
|
-
const client = createEndUserClient({
|
|
87
|
-
chain: mainnet,
|
|
88
|
-
transport: http(),
|
|
89
|
-
account: { address: MOCK_ADDR }
|
|
90
|
-
});
|
|
91
|
-
client.joinAndActivate = vi.fn().mockResolvedValue({ hash: '0xhash', events: [], sbtId: 1n });
|
|
92
|
-
const result = await client.onboard({ community: MOCK_COMMUNITY, roleId: '0x1', roleData: '0x' });
|
|
93
|
-
expect(result.sbtId).toBe(1n);
|
|
94
|
-
});
|
|
95
|
-
it('should check join requirements', async () => {
|
|
96
|
-
const client = createEndUserClient({ chain: mainnet, transport: http() });
|
|
97
|
-
// Mock balance return for GToken balance check >= 0.44 GT
|
|
98
|
-
client.readContract = vi.fn().mockResolvedValue(1000000000000000000n);
|
|
99
|
-
const result = await client.checkJoinRequirements(MOCK_ADDR);
|
|
100
|
-
expect(result.hasEnoughGToken).toBe(true);
|
|
101
|
-
});
|
|
102
|
-
it('should get available credit', async () => {
|
|
103
|
-
const client = createEndUserClient({ chain: mainnet, transport: http() });
|
|
104
|
-
// getAvailableCredit is part of SuperPaymasterActions which is extended in client
|
|
105
|
-
const credit = await client.superPaymasterGetAvailableCredit({ operator: MOCK_COMMUNITY, user: MOCK_ADDR });
|
|
106
|
-
expect(credit).toBe(100n);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
describe('Smart Account Management', () => {
|
|
110
|
-
it('should create smart account with prediction', async () => {
|
|
111
|
-
const client = createEndUserClient({ chain: mainnet, transport: http() });
|
|
112
|
-
client.readContract = vi.fn().mockResolvedValue('0xAccountAddress');
|
|
113
|
-
client.getBytecode = vi.fn().mockResolvedValue(undefined);
|
|
114
|
-
const result = await client.createSmartAccount({ owner: MOCK_ADDR, salt: 123n });
|
|
115
|
-
expect(result.accountAddress).toBe('0xAccountAddress');
|
|
116
|
-
expect(result.isDeployed).toBe(false);
|
|
117
|
-
expect(result.initCode).toBeDefined();
|
|
118
|
-
});
|
|
119
|
-
it('should detect already deployed smart account', async () => {
|
|
120
|
-
const client = createEndUserClient({ chain: mainnet, transport: http() });
|
|
121
|
-
client.readContract = vi.fn().mockResolvedValue('0xDeployedAccount');
|
|
122
|
-
client.getBytecode = vi.fn().mockResolvedValue('0x123456');
|
|
123
|
-
const result = await client.createSmartAccount({ owner: MOCK_ADDR });
|
|
124
|
-
expect(result.isDeployed).toBe(true);
|
|
125
|
-
});
|
|
126
|
-
it('should throw error if factory not configured', async () => {
|
|
127
|
-
const client = createEndUserClient({ chain: mainnet, transport: http(), addresses: { simpleAccountFactory: '0x0000000000000000000000000000000000000000' } });
|
|
128
|
-
await expect(client.createSmartAccount({ owner: MOCK_ADDR }))
|
|
129
|
-
.rejects.toThrow('SimpleAccountFactory not found');
|
|
130
|
-
});
|
|
131
|
-
it('should deploy new smart account', async () => {
|
|
132
|
-
const client = createEndUserClient({
|
|
133
|
-
chain: mainnet,
|
|
134
|
-
transport: http(),
|
|
135
|
-
account: { address: MOCK_ADDR }
|
|
136
|
-
});
|
|
137
|
-
client.createSmartAccount = vi.fn().mockResolvedValue({ accountAddress: '0xNewAccount', isDeployed: false });
|
|
138
|
-
client.writeContract = vi.fn().mockResolvedValue('0xdeployhash');
|
|
139
|
-
client.waitForTransactionReceipt = vi.fn().mockResolvedValue({ logs: [] });
|
|
140
|
-
client.getBalance = vi.fn().mockResolvedValue(0n);
|
|
141
|
-
client.sendTransaction = vi.fn().mockResolvedValue('0xfundhash');
|
|
142
|
-
const result = await client.deploySmartAccount({ owner: MOCK_ADDR, fundWithETH: parseEther('0.1') });
|
|
143
|
-
expect(result.accountAddress).toBe('0xNewAccount');
|
|
144
|
-
expect(result.deployTxHash).toBe('0xdeployhash');
|
|
145
|
-
});
|
|
146
|
-
it('should skip deploy if already deployed', async () => {
|
|
147
|
-
const client = createEndUserClient({
|
|
148
|
-
chain: mainnet,
|
|
149
|
-
transport: http(),
|
|
150
|
-
account: { address: MOCK_ADDR }
|
|
151
|
-
});
|
|
152
|
-
client.createSmartAccount = vi.fn().mockResolvedValue({ accountAddress: '0xExisting', isDeployed: true });
|
|
153
|
-
client.getBalance = vi.fn().mockResolvedValue(parseEther('1'));
|
|
154
|
-
const result = await client.deploySmartAccount({ owner: MOCK_ADDR });
|
|
155
|
-
expect(result.accountAddress).toBe('0xExisting');
|
|
156
|
-
expect(result.deployTxHash).toBe('0x0');
|
|
157
|
-
});
|
|
158
|
-
it('should handle logic when smart account not deployed during batch', async () => {
|
|
159
|
-
const mockAccount = { address: MOCK_ADDR, signMessage: vi.fn().mockResolvedValue('0xsig') };
|
|
160
|
-
const client = createEndUserClient({ chain: mainnet, transport: http(), account: mockAccount });
|
|
161
|
-
// Mock getBytecode to return undefined/0x
|
|
162
|
-
client.getBytecode = vi.fn().mockResolvedValue('0x'); // Not deployed
|
|
163
|
-
client.createSmartAccount = vi.fn().mockResolvedValue({ initCode: '0x123' });
|
|
164
|
-
client.readContract = vi.fn().mockResolvedValue('0xhash');
|
|
165
|
-
client.writeContract = vi.fn().mockResolvedValue('0xhash');
|
|
166
|
-
client.waitForTransactionReceipt = vi.fn().mockResolvedValue({ logs: [] });
|
|
167
|
-
const results = await client.executeGaslessBatch({
|
|
168
|
-
targets: [MOCK_ADDR],
|
|
169
|
-
datas: ['0x'],
|
|
170
|
-
operator: MOCK_ADDR
|
|
171
|
-
});
|
|
172
|
-
expect(client.createSmartAccount).toHaveBeenCalled();
|
|
173
|
-
expect(results.hash).toBe('0xhash');
|
|
174
|
-
});
|
|
175
|
-
it('should handle execution errors in gasless batch', async () => {
|
|
176
|
-
const mockAccount = { address: MOCK_ADDR, signMessage: vi.fn().mockResolvedValue('0xsig') };
|
|
177
|
-
const client = createEndUserClient({ chain: mainnet, transport: http(), account: mockAccount });
|
|
178
|
-
client.getBytecode = vi.fn().mockResolvedValue('0xcode'); // deployed
|
|
179
|
-
client.readContract = vi.fn().mockResolvedValue('0xhash');
|
|
180
|
-
client.writeContract = vi.fn().mockRejectedValue(new Error('Contract Reverted'));
|
|
181
|
-
await expect(client.executeGaslessBatch({
|
|
182
|
-
targets: [MOCK_ADDR],
|
|
183
|
-
datas: ['0x'],
|
|
184
|
-
operator: MOCK_ADDR
|
|
185
|
-
})).rejects.toThrow('Contract Reverted');
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
import { createOperatorClient } from './operator.js';
|
|
3
|
-
import { mainnet } from 'viem/chains';
|
|
4
|
-
import { http, keccak256, stringToBytes } from 'viem';
|
|
5
|
-
vi.mock('@aastar/core', async () => {
|
|
6
|
-
const actual = await vi.importActual('@aastar/core');
|
|
7
|
-
return {
|
|
8
|
-
...actual,
|
|
9
|
-
registryActions: vi.fn(() => vi.fn(() => ({
|
|
10
|
-
registryHasRole: vi.fn().mockResolvedValue(false),
|
|
11
|
-
registryRegisterRoleSelf: vi.fn().mockResolvedValue('0xhash')
|
|
12
|
-
}))),
|
|
13
|
-
stakingActions: vi.fn(() => vi.fn(() => ({
|
|
14
|
-
// any staking methods if needed
|
|
15
|
-
}))),
|
|
16
|
-
superPaymasterActions: vi.fn(() => vi.fn(() => ({
|
|
17
|
-
superPaymasterDepositFor: vi.fn().mockResolvedValue('0xhash'),
|
|
18
|
-
superPaymasterOperators: vi.fn().mockResolvedValue([1000n, 1000n, true, false]),
|
|
19
|
-
superPaymasterGetDeposit: vi.fn().mockResolvedValue(555n)
|
|
20
|
-
}))),
|
|
21
|
-
paymasterV4Actions: vi.fn(() => vi.fn(() => ({
|
|
22
|
-
// pmv4 methods
|
|
23
|
-
}))),
|
|
24
|
-
tokenActions: vi.fn(() => vi.fn(() => ({
|
|
25
|
-
tokenApprove: vi.fn().mockResolvedValue('0xhash')
|
|
26
|
-
}))),
|
|
27
|
-
};
|
|
28
|
-
});
|
|
29
|
-
describe('OperatorClient', () => {
|
|
30
|
-
const MOCK_ADDR = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
|
|
31
|
-
it('should create operator client', () => {
|
|
32
|
-
const client = createOperatorClient({ chain: mainnet, transport: http() });
|
|
33
|
-
expect(client.setup).toBeDefined();
|
|
34
|
-
});
|
|
35
|
-
describe('onboardFully', () => {
|
|
36
|
-
it('should complete onboarding flow', async () => {
|
|
37
|
-
const client = createOperatorClient({
|
|
38
|
-
chain: mainnet,
|
|
39
|
-
transport: http(),
|
|
40
|
-
account: { address: MOCK_ADDR }
|
|
41
|
-
});
|
|
42
|
-
// Mock base client methods
|
|
43
|
-
client.readContract = vi.fn().mockResolvedValue([0n, 0n, 0n]);
|
|
44
|
-
client.waitForTransactionReceipt = vi.fn().mockResolvedValue({ logs: [] });
|
|
45
|
-
const results = await client.onboardFully({
|
|
46
|
-
stakeAmount: 100n,
|
|
47
|
-
depositAmount: 200n,
|
|
48
|
-
roleId: keccak256(stringToBytes('PAYMASTER_SUPER'))
|
|
49
|
-
});
|
|
50
|
-
expect(results).toHaveLength(3);
|
|
51
|
-
expect(client.tokenApprove).toHaveBeenCalled();
|
|
52
|
-
expect(client.registryRegisterRoleSelf).toHaveBeenCalled();
|
|
53
|
-
expect(client.superPaymasterDepositFor).toHaveBeenCalled();
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
describe('Advanced Setup', () => {
|
|
57
|
-
it('should call configureOperator', async () => {
|
|
58
|
-
const client = createOperatorClient({ chain: mainnet, transport: http() });
|
|
59
|
-
client.configureOperator = vi.fn().mockResolvedValue('0xhash');
|
|
60
|
-
const hash = await client.configureOperator({
|
|
61
|
-
xPNTsToken: MOCK_ADDR,
|
|
62
|
-
treasury: MOCK_ADDR,
|
|
63
|
-
exchangeRate: 100n
|
|
64
|
-
});
|
|
65
|
-
expect(hash).toBe('0xhash');
|
|
66
|
-
});
|
|
67
|
-
it('should onboard to Super Paymaster', async () => {
|
|
68
|
-
const client = createOperatorClient({
|
|
69
|
-
chain: mainnet,
|
|
70
|
-
transport: http(),
|
|
71
|
-
account: { address: MOCK_ADDR }
|
|
72
|
-
});
|
|
73
|
-
client.onboardFully = vi.fn().mockResolvedValue([]);
|
|
74
|
-
// onboardToSuperPaymaster is an internal action alias in OperatorClient
|
|
75
|
-
await client.onboardToSuperPaymaster({ stakeAmount: 100n, depositAmount: 200n, roleId: '0x1' });
|
|
76
|
-
expect(client.onboardFully).toHaveBeenCalled();
|
|
77
|
-
});
|
|
78
|
-
it('should deploy PaymasterV4', async () => {
|
|
79
|
-
const client = createOperatorClient({ chain: mainnet, transport: http(), account: { address: MOCK_ADDR } });
|
|
80
|
-
client.writeContract = vi.fn().mockResolvedValue('0xdeployhash');
|
|
81
|
-
client.waitForTransactionReceipt = vi.fn().mockResolvedValue({});
|
|
82
|
-
const hash = await client.deployPaymasterV4({ version: 'v4.2' });
|
|
83
|
-
expect(hash).toBe('0xdeployhash');
|
|
84
|
-
});
|
|
85
|
-
it('should validate inputs in configureOperator', async () => {
|
|
86
|
-
const opClient = createOperatorClient({
|
|
87
|
-
account: { address: MOCK_ADDR },
|
|
88
|
-
chain: mainnet,
|
|
89
|
-
transport: http()
|
|
90
|
-
});
|
|
91
|
-
// No need to mock internal configureOperator for validation testing
|
|
92
|
-
// as validation happens before internal call.
|
|
93
|
-
await expect(opClient.configureOperator({
|
|
94
|
-
xPNTsToken: '0xInvalid',
|
|
95
|
-
treasury: '0x123',
|
|
96
|
-
exchangeRate: 100n
|
|
97
|
-
})).rejects.toThrow('xPNTs Token must be a valid Ethereum address');
|
|
98
|
-
await expect(opClient.configureOperator({
|
|
99
|
-
xPNTsToken: MOCK_ADDR,
|
|
100
|
-
treasury: '0xInvalid',
|
|
101
|
-
exchangeRate: 100n
|
|
102
|
-
})).rejects.toThrow('Treasury must be a valid Ethereum address');
|
|
103
|
-
});
|
|
104
|
-
it('should check readiness', async () => {
|
|
105
|
-
const opClient = createOperatorClient({
|
|
106
|
-
account: { address: MOCK_ADDR },
|
|
107
|
-
chain: mainnet,
|
|
108
|
-
transport: http()
|
|
109
|
-
});
|
|
110
|
-
// Global mock for registryActions.hasRole returns false
|
|
111
|
-
// Global mock for superPaymasterActions.operators returns [1000n, 1000n, true, false]
|
|
112
|
-
const status = await opClient.checkReadiness();
|
|
113
|
-
expect(status.isRegistered).toBe(false); // mocked val
|
|
114
|
-
expect(status.isConfigured).toBe(true); // mocked val (index 2)
|
|
115
|
-
expect(status.collateralBalance).toBe(1000n); // mocked val (index 0)
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
describe('Operator Status and Queries', () => {
|
|
119
|
-
it('should get operator status', async () => {
|
|
120
|
-
const client = createOperatorClient({ chain: mainnet, transport: http() });
|
|
121
|
-
client.readContract = vi.fn()
|
|
122
|
-
.mockResolvedValueOnce(true) // hasRole
|
|
123
|
-
.mockResolvedValueOnce([1000n, 100n, true, false, 0n, 0n, MOCK_ADDR]); // operator data
|
|
124
|
-
const status = await client.getOperatorStatus(MOCK_ADDR);
|
|
125
|
-
expect(status.type).toBe('super');
|
|
126
|
-
expect(status.superPaymaster?.isConfigured).toBe(true);
|
|
127
|
-
});
|
|
128
|
-
it('should check if address is operator', async () => {
|
|
129
|
-
const client = createOperatorClient({ chain: mainnet, transport: http() });
|
|
130
|
-
const result = await client.isOperator(MOCK_ADDR);
|
|
131
|
-
expect(result).toBe(true); // from mocked operators
|
|
132
|
-
});
|
|
133
|
-
it('should get deposit details', async () => {
|
|
134
|
-
const client = createOperatorClient({ chain: mainnet, transport: http() });
|
|
135
|
-
const details = await client.getDepositDetails();
|
|
136
|
-
expect(details.deposit).toBe(555n); // from mocked getDeposit
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
});
|