@aastar/core 0.16.7
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/LICENSE +21 -0
- package/dist/abis/BLSAggregator.json +686 -0
- package/dist/abis/BLSValidator.json +42 -0
- package/dist/abis/DVTValidator.json +368 -0
- package/dist/abis/Eip7702Support.json +24 -0
- package/dist/abis/EntryPoint.json +1382 -0
- package/dist/abis/GToken.json +513 -0
- package/dist/abis/GTokenStaking.json +949 -0
- package/dist/abis/LegacyAccount.json +625 -0
- package/dist/abis/MySBT.json +1518 -0
- package/dist/abis/Paymaster.json +1143 -0
- package/dist/abis/PaymasterFactory.json +640 -0
- package/dist/abis/Registry.json +1942 -0
- package/dist/abis/ReputationSystem.json +699 -0
- package/dist/abis/SenderCreator.json +99 -0
- package/dist/abis/Simple7702Account.json +395 -0
- package/dist/abis/SimpleAccount.json +560 -0
- package/dist/abis/SimpleAccountFactory.json +111 -0
- package/dist/abis/SimpleAccountFactoryV08.json +87 -0
- package/dist/abis/SimpleAccountV08.json +557 -0
- package/dist/abis/SuperPaymaster.json +1781 -0
- package/dist/abis/UserOperationLib.json +57 -0
- package/dist/abis/abi.config.json +24 -0
- package/dist/abis/index.d.ts +1126 -0
- package/dist/abis/index.js +91 -0
- package/dist/abis/xPNTsFactory.json +718 -0
- package/dist/abis/xPNTsToken.json +1280 -0
- package/dist/actions/StateValidator.d.ts +68 -0
- package/dist/actions/StateValidator.js +187 -0
- package/dist/actions/StateValidator.test.d.ts +1 -0
- package/dist/actions/StateValidator.test.js +144 -0
- package/dist/actions/account.d.ts +55 -0
- package/dist/actions/account.js +133 -0
- package/dist/actions/account.test.d.ts +1 -0
- package/dist/actions/account.test.js +118 -0
- package/dist/actions/aggregator.d.ts +17 -0
- package/dist/actions/aggregator.js +31 -0
- package/dist/actions/aggregator.test.d.ts +1 -0
- package/dist/actions/aggregator.test.js +67 -0
- package/dist/actions/dvt.d.ts +30 -0
- package/dist/actions/dvt.js +41 -0
- package/dist/actions/dvt.test.d.ts +1 -0
- package/dist/actions/dvt.test.js +98 -0
- package/dist/actions/entryPoint.d.ts +90 -0
- package/dist/actions/entryPoint.js +211 -0
- package/dist/actions/entryPoint.test.d.ts +1 -0
- package/dist/actions/entryPoint.test.js +139 -0
- package/dist/actions/factory.d.ts +215 -0
- package/dist/actions/factory.js +442 -0
- package/dist/actions/factory.test.d.ts +1 -0
- package/dist/actions/factory.test.js +197 -0
- package/dist/actions/faucet.d.ts +48 -0
- package/dist/actions/faucet.js +337 -0
- package/dist/actions/faucet.test.d.ts +1 -0
- package/dist/actions/faucet.test.js +120 -0
- package/dist/actions/gtokenExtended.d.ts +39 -0
- package/dist/actions/gtokenExtended.js +115 -0
- package/dist/actions/gtokenExtended.test.d.ts +1 -0
- package/dist/actions/gtokenExtended.test.js +118 -0
- package/dist/actions/index.d.ts +15 -0
- package/dist/actions/index.js +17 -0
- package/dist/actions/paymasterV4.d.ts +170 -0
- package/dist/actions/paymasterV4.js +334 -0
- package/dist/actions/paymasterV4.test.d.ts +1 -0
- package/dist/actions/paymasterV4.test.js +159 -0
- package/dist/actions/registry.d.ts +246 -0
- package/dist/actions/registry.js +667 -0
- package/dist/actions/registry.test.d.ts +1 -0
- package/dist/actions/registry.test.js +360 -0
- package/dist/actions/reputation.d.ts +129 -0
- package/dist/actions/reputation.js +281 -0
- package/dist/actions/reputation.test.d.ts +1 -0
- package/dist/actions/reputation.test.js +169 -0
- package/dist/actions/sbt.d.ts +191 -0
- package/dist/actions/sbt.js +533 -0
- package/dist/actions/sbt.test.d.ts +1 -0
- package/dist/actions/sbt.test.js +256 -0
- package/dist/actions/staking.d.ts +132 -0
- package/dist/actions/staking.js +330 -0
- package/dist/actions/staking.test.d.ts +1 -0
- package/dist/actions/staking.test.js +223 -0
- package/dist/actions/superPaymaster.d.ts +237 -0
- package/dist/actions/superPaymaster.js +644 -0
- package/dist/actions/superPaymaster.test.d.ts +1 -0
- package/dist/actions/superPaymaster.test.js +287 -0
- package/dist/actions/tokens.d.ts +229 -0
- package/dist/actions/tokens.js +415 -0
- package/dist/actions/tokens.test.d.ts +1 -0
- package/dist/actions/tokens.test.js +53 -0
- package/dist/actions/validators.d.ts +194 -0
- package/dist/actions/validators.js +433 -0
- package/dist/actions/validators.test.d.ts +1 -0
- package/dist/actions/validators.test.js +215 -0
- package/dist/branding.d.ts +30 -0
- package/dist/branding.js +30 -0
- package/dist/clients/BaseClient.d.ts +25 -0
- package/dist/clients/BaseClient.js +66 -0
- package/dist/clients/types.d.ts +60 -0
- package/dist/clients/types.js +1 -0
- package/dist/clients.d.ts +5 -0
- package/dist/clients.js +11 -0
- package/dist/communities.d.ts +52 -0
- package/dist/communities.js +73 -0
- package/dist/config/ContractConfigManager.d.ts +20 -0
- package/dist/config/ContractConfigManager.js +48 -0
- package/dist/constants.d.ts +88 -0
- package/dist/constants.js +125 -0
- package/dist/contract-addresses.d.ts +110 -0
- package/dist/contract-addresses.js +99 -0
- package/dist/contracts.d.ts +424 -0
- package/dist/contracts.js +343 -0
- package/dist/contracts.test.d.ts +1 -0
- package/dist/contracts.test.js +40 -0
- package/dist/crypto/blsSigner.d.ts +64 -0
- package/dist/crypto/blsSigner.js +98 -0
- package/dist/crypto/index.d.ts +1 -0
- package/dist/crypto/index.js +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +21 -0
- package/dist/networks.d.ts +127 -0
- package/dist/networks.js +118 -0
- package/dist/requirementChecker.d.ts +38 -0
- package/dist/requirementChecker.js +139 -0
- package/dist/requirementChecker.test.d.ts +1 -0
- package/dist/requirementChecker.test.js +60 -0
- package/dist/roles.d.ts +204 -0
- package/dist/roles.js +211 -0
- package/dist/roles.test.d.ts +1 -0
- package/dist/roles.test.js +23 -0
- package/dist/utils/validation.d.ts +24 -0
- package/dist/utils/validation.js +56 -0
- package/dist/utils/validation.test.d.ts +1 -0
- package/dist/utils/validation.test.js +40 -0
- package/dist/utils.d.ts +12 -0
- package/dist/utils.js +14 -0
- package/package.json +33 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { sbtActions } from './sbt.js';
|
|
3
|
+
describe('SBT Actions', () => {
|
|
4
|
+
const mockSBTAddress = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb';
|
|
5
|
+
const MOCK_USER = '0x1234567890123456789012345678901234567890';
|
|
6
|
+
const MOCK_COMMUNITY = '0x3333333333333333333333333333333333333333';
|
|
7
|
+
let mockPublicClient;
|
|
8
|
+
let mockWalletClient;
|
|
9
|
+
let mockAccount;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
mockAccount = {
|
|
12
|
+
address: MOCK_USER,
|
|
13
|
+
type: 'json-rpc'
|
|
14
|
+
};
|
|
15
|
+
mockPublicClient = {
|
|
16
|
+
readContract: vi.fn(),
|
|
17
|
+
};
|
|
18
|
+
mockWalletClient = {
|
|
19
|
+
writeContract: vi.fn(),
|
|
20
|
+
readContract: vi.fn(),
|
|
21
|
+
account: mockAccount,
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
describe('getUserSBT', () => {
|
|
25
|
+
it('should get user SBT token ID', async () => {
|
|
26
|
+
const expectedTokenId = 123n;
|
|
27
|
+
mockPublicClient.readContract.mockResolvedValue(expectedTokenId);
|
|
28
|
+
const user = '0x1234567890123456789012345678901234567890';
|
|
29
|
+
const actions = sbtActions(mockSBTAddress)(mockPublicClient);
|
|
30
|
+
const tokenId = await actions.sbtUserToSBT({ user });
|
|
31
|
+
expect(tokenId).toBe(expectedTokenId);
|
|
32
|
+
expect(mockPublicClient.readContract).toHaveBeenCalledWith(expect.objectContaining({
|
|
33
|
+
functionName: 'userToSBT',
|
|
34
|
+
args: [user],
|
|
35
|
+
}));
|
|
36
|
+
});
|
|
37
|
+
it('should return 0 for user without SBT', async () => {
|
|
38
|
+
mockPublicClient.readContract.mockResolvedValue(0n);
|
|
39
|
+
const user = '0xabcd1234567890123456789012345678901234ab';
|
|
40
|
+
const actions = sbtActions(mockSBTAddress)(mockPublicClient);
|
|
41
|
+
const tokenId = await actions.sbtUserToSBT({ user });
|
|
42
|
+
expect(tokenId).toBe(0n);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('getMemberships', () => {
|
|
46
|
+
it('should get user memberships', async () => {
|
|
47
|
+
const mockMemberships = [
|
|
48
|
+
{ community: '0x1111...', isActive: true },
|
|
49
|
+
{ community: '0x2222...', isActive: true },
|
|
50
|
+
];
|
|
51
|
+
mockPublicClient.readContract.mockResolvedValue(mockMemberships);
|
|
52
|
+
const user = '0x3333333333333333333333333333333333333333';
|
|
53
|
+
const actions = sbtActions(mockSBTAddress)(mockPublicClient);
|
|
54
|
+
const memberships = await actions.sbtGetMemberships({ user });
|
|
55
|
+
expect(memberships).toHaveLength(2);
|
|
56
|
+
expect(mockPublicClient.readContract).toHaveBeenCalledWith(expect.objectContaining({
|
|
57
|
+
functionName: 'getMemberships',
|
|
58
|
+
}));
|
|
59
|
+
});
|
|
60
|
+
it('should handle empty memberships', async () => {
|
|
61
|
+
mockPublicClient.readContract.mockResolvedValue([]);
|
|
62
|
+
const user = '0x4444444444444444444444444444444444444444';
|
|
63
|
+
const actions = sbtActions(mockSBTAddress)(mockPublicClient);
|
|
64
|
+
const memberships = await actions.sbtGetMemberships({ user });
|
|
65
|
+
expect(memberships).toHaveLength(0);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('getActiveMemberships', () => {
|
|
69
|
+
it('should get only active memberships', async () => {
|
|
70
|
+
const mockActiveCommunities = [
|
|
71
|
+
'0x5555555555555555555555555555555555555555',
|
|
72
|
+
'0x6666666666666666666666666666666666666666',
|
|
73
|
+
];
|
|
74
|
+
mockPublicClient.readContract.mockResolvedValue(mockActiveCommunities);
|
|
75
|
+
const user = '0x7777777777777777777777777777777777777777';
|
|
76
|
+
const actions = sbtActions(mockSBTAddress)(mockPublicClient);
|
|
77
|
+
const activeMemberships = await actions.sbtGetActiveMemberships({ user });
|
|
78
|
+
expect(activeMemberships).toHaveLength(2);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('verifyCommunityMembership', () => {
|
|
82
|
+
it('should verify active membership', async () => {
|
|
83
|
+
mockPublicClient.readContract.mockResolvedValue(true);
|
|
84
|
+
const user = '0x8888888888888888888888888888888888888888';
|
|
85
|
+
const community = '0x9999999999999999999999999999999999999999';
|
|
86
|
+
const actions = sbtActions(mockSBTAddress)(mockPublicClient);
|
|
87
|
+
const isMember = await actions.sbtVerifyCommunityMembership({ user, community });
|
|
88
|
+
expect(isMember).toBe(true);
|
|
89
|
+
expect(mockPublicClient.readContract).toHaveBeenCalledWith(expect.objectContaining({
|
|
90
|
+
functionName: 'verifyCommunityMembership',
|
|
91
|
+
args: [user, community],
|
|
92
|
+
}));
|
|
93
|
+
});
|
|
94
|
+
it('should return false for non-member', async () => {
|
|
95
|
+
mockPublicClient.readContract.mockResolvedValue(false);
|
|
96
|
+
const user = '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
|
|
97
|
+
const community = '0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb';
|
|
98
|
+
const actions = sbtActions(mockSBTAddress)(mockPublicClient);
|
|
99
|
+
const isMember = await actions.sbtVerifyCommunityMembership({ user, community });
|
|
100
|
+
expect(isMember).toBe(false);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe('Minting & Admin', () => {
|
|
104
|
+
it('should perform various minting operations', async () => {
|
|
105
|
+
const txHash = '0xhash';
|
|
106
|
+
mockWalletClient.writeContract.mockResolvedValue(txHash);
|
|
107
|
+
const actions = sbtActions(mockSBTAddress)(mockWalletClient);
|
|
108
|
+
const results = await Promise.all([
|
|
109
|
+
actions.sbtSafeMintForRole({ roleId: '0xROLE', to: MOCK_USER, tokenURI: 'uri', account: mockAccount }),
|
|
110
|
+
actions.sbtAirdropMint({ roleId: '0xROLE', to: MOCK_USER, tokenURI: 'uri', account: mockAccount }),
|
|
111
|
+
actions.sbtMintForRole({ roleId: '0xROLE', to: MOCK_USER, account: mockAccount }),
|
|
112
|
+
actions.sbtMint({ to: MOCK_USER, tokenURI: 'uri', account: mockAccount })
|
|
113
|
+
]);
|
|
114
|
+
results.forEach(res => expect(res).toBe(txHash));
|
|
115
|
+
});
|
|
116
|
+
it('should burn SBT', async () => {
|
|
117
|
+
const txHash = '0xhash';
|
|
118
|
+
mockWalletClient.writeContract.mockResolvedValue(txHash);
|
|
119
|
+
const actions = sbtActions(mockSBTAddress)(mockWalletClient);
|
|
120
|
+
const res1 = await actions.sbtBurn({ tokenId: 1n, account: mockAccount });
|
|
121
|
+
const res2 = await actions.sbtBurnSBT({ tokenId: 1n, account: mockAccount });
|
|
122
|
+
expect(res1).toBe(txHash);
|
|
123
|
+
expect(res2).toBe(txHash);
|
|
124
|
+
});
|
|
125
|
+
it('should leave community and deactivate membership', async () => {
|
|
126
|
+
const txHash = '0xhash';
|
|
127
|
+
mockWalletClient.writeContract.mockResolvedValue(txHash);
|
|
128
|
+
const actions = sbtActions(mockSBTAddress)(mockWalletClient);
|
|
129
|
+
const res1 = await actions.sbtLeaveCommunity({ community: MOCK_COMMUNITY, account: mockAccount });
|
|
130
|
+
const res2 = await actions.sbtDeactivateMembership({ tokenId: 1n, account: mockAccount });
|
|
131
|
+
expect(res1).toBe(txHash);
|
|
132
|
+
expect(res2).toBe(txHash);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe('Activity & Reputation', () => {
|
|
136
|
+
it('should record activity and check times', async () => {
|
|
137
|
+
const txHash = '0xhash';
|
|
138
|
+
mockWalletClient.writeContract.mockResolvedValue(txHash);
|
|
139
|
+
mockWalletClient.readContract.mockResolvedValue(12345678n);
|
|
140
|
+
const actions = sbtActions(mockSBTAddress)(mockWalletClient);
|
|
141
|
+
const tx = await actions.sbtRecordActivity({ user: MOCK_USER, account: mockAccount });
|
|
142
|
+
const lastTime = await actions.sbtLastActivityTime({ user: MOCK_USER });
|
|
143
|
+
const weekly = await actions.sbtWeeklyActivity({ user: MOCK_USER });
|
|
144
|
+
expect(tx).toBe(txHash);
|
|
145
|
+
expect(lastTime).toBe(12345678n);
|
|
146
|
+
expect(weekly).toBe(12345678n);
|
|
147
|
+
});
|
|
148
|
+
it('should manage reputation calculator', async () => {
|
|
149
|
+
const txHash = '0xhash';
|
|
150
|
+
mockWalletClient.writeContract.mockResolvedValue(txHash);
|
|
151
|
+
mockWalletClient.readContract.mockResolvedValue(MOCK_USER);
|
|
152
|
+
const actions = sbtActions(mockSBTAddress)(mockWalletClient);
|
|
153
|
+
const tx = await actions.sbtSetReputationCalculator({ calculator: MOCK_USER, account: mockAccount });
|
|
154
|
+
const calculator = await actions.sbtReputationCalculator();
|
|
155
|
+
expect(tx).toBe(txHash);
|
|
156
|
+
expect(calculator).toBe(MOCK_USER);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
describe('Config & Constants', () => {
|
|
160
|
+
it('should manage fees and lock amounts', async () => {
|
|
161
|
+
const txHash = '0xhash';
|
|
162
|
+
mockWalletClient.writeContract.mockResolvedValue(txHash);
|
|
163
|
+
mockWalletClient.readContract.mockResolvedValue(100n);
|
|
164
|
+
const actions = sbtActions(mockSBTAddress)(mockWalletClient);
|
|
165
|
+
const tx1 = await actions.sbtSetMintFee({ fee: 100n, account: mockAccount });
|
|
166
|
+
const tx2 = await actions.sbtSetMinLockAmount({ amount: 100n, account: mockAccount });
|
|
167
|
+
const fee = await actions.sbtMintFee();
|
|
168
|
+
const lock = await actions.sbtMinLockAmount();
|
|
169
|
+
expect(tx1).toBe(txHash);
|
|
170
|
+
expect(tx2).toBe(txHash);
|
|
171
|
+
expect(fee).toBe(100n);
|
|
172
|
+
expect(lock).toBe(100n);
|
|
173
|
+
});
|
|
174
|
+
it('should query all constants', async () => {
|
|
175
|
+
mockPublicClient.readContract.mockResolvedValue(MOCK_USER);
|
|
176
|
+
const actions = sbtActions(mockSBTAddress)(mockPublicClient);
|
|
177
|
+
const results = await Promise.all([
|
|
178
|
+
actions.sbtREGISTRY(),
|
|
179
|
+
actions.sbtGTOKEN_STAKING(),
|
|
180
|
+
actions.sbtGTOKEN(),
|
|
181
|
+
actions.sbtSUPER_PAYMASTER(),
|
|
182
|
+
actions.sbtOwner()
|
|
183
|
+
]);
|
|
184
|
+
results.forEach(res => expect(res).toBe(MOCK_USER));
|
|
185
|
+
});
|
|
186
|
+
it('should get version and pause status', async () => {
|
|
187
|
+
mockPublicClient.readContract.mockResolvedValueOnce('v1').mockResolvedValueOnce(true);
|
|
188
|
+
const actions = sbtActions(mockSBTAddress)(mockPublicClient);
|
|
189
|
+
const v = await actions.sbtVersion();
|
|
190
|
+
const p = await actions.sbtPaused();
|
|
191
|
+
expect(v).toBe('v1');
|
|
192
|
+
expect(p).toBe(true);
|
|
193
|
+
});
|
|
194
|
+
describe('ERC721 Operations', () => {
|
|
195
|
+
it('should perform transfers and approvals', async () => {
|
|
196
|
+
const txHash = '0xhash';
|
|
197
|
+
mockWalletClient.writeContract.mockResolvedValue(txHash);
|
|
198
|
+
const actions = sbtActions(mockSBTAddress)(mockWalletClient);
|
|
199
|
+
const tx1 = await actions.sbtSafeTransferFrom({ from: MOCK_USER, to: MOCK_COMMUNITY, tokenId: 1n, account: mockAccount });
|
|
200
|
+
const tx2 = await actions.sbtApprove({ to: MOCK_COMMUNITY, tokenId: 1n, account: mockAccount });
|
|
201
|
+
const tx3 = await actions.sbtSetApprovalForAll({ operator: MOCK_COMMUNITY, approved: true, account: mockAccount });
|
|
202
|
+
expect(tx1).toBe(txHash);
|
|
203
|
+
expect(tx2).toBe(txHash);
|
|
204
|
+
expect(tx3).toBe(txHash);
|
|
205
|
+
});
|
|
206
|
+
it('should query transfer permissions', async () => {
|
|
207
|
+
mockPublicClient.readContract
|
|
208
|
+
.mockResolvedValueOnce(MOCK_USER)
|
|
209
|
+
.mockResolvedValueOnce(true);
|
|
210
|
+
const actions = sbtActions(mockSBTAddress)(mockPublicClient);
|
|
211
|
+
const approved = await actions.sbtGetApproved({ tokenId: 1n });
|
|
212
|
+
const isAllApproved = await actions.sbtIsApprovedForAll({ owner: MOCK_USER, operator: MOCK_COMMUNITY });
|
|
213
|
+
expect(approved).toBe(MOCK_USER);
|
|
214
|
+
expect(isAllApproved).toBe(true);
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
describe('Metadata & Enumeration', () => {
|
|
218
|
+
it('should query token metadata and indices', async () => {
|
|
219
|
+
mockPublicClient.readContract
|
|
220
|
+
.mockResolvedValueOnce('ipfs://uri') // tokenURI
|
|
221
|
+
.mockResolvedValueOnce(1n) // tokenByIndex
|
|
222
|
+
.mockResolvedValueOnce(2n) // tokenOfOwnerByIndex
|
|
223
|
+
.mockResolvedValueOnce(10n); // nextTokenId
|
|
224
|
+
const actions = sbtActions(mockSBTAddress)(mockPublicClient);
|
|
225
|
+
const uri = await actions.sbtTokenURI({ tokenId: 1n });
|
|
226
|
+
const indexToken = await actions.sbtTokenByIndex({ index: 0n });
|
|
227
|
+
const ownerToken = await actions.sbtTokenOfOwnerByIndex({ owner: MOCK_USER, index: 0n });
|
|
228
|
+
const nextId = await actions.sbtNextTokenId();
|
|
229
|
+
expect(uri).toBe('ipfs://uri');
|
|
230
|
+
expect(indexToken).toBe(1n);
|
|
231
|
+
expect(ownerToken).toBe(2n);
|
|
232
|
+
expect(nextId).toBe(10n);
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
describe('System Configuration', () => {
|
|
236
|
+
it('should set all system proxies', async () => {
|
|
237
|
+
const txHash = '0xhash';
|
|
238
|
+
mockWalletClient.writeContract.mockResolvedValue(txHash);
|
|
239
|
+
const actions = sbtActions(mockSBTAddress)(mockWalletClient);
|
|
240
|
+
const results = await Promise.all([
|
|
241
|
+
actions.sbtSetRegistry({ registry: MOCK_COMMUNITY, account: mockAccount }),
|
|
242
|
+
actions.sbtSetSuperPaymaster({ paymaster: MOCK_COMMUNITY, account: mockAccount }),
|
|
243
|
+
actions.sbtSetDAOMultisig({ multisig: MOCK_COMMUNITY, account: mockAccount }),
|
|
244
|
+
actions.sbtSetBaseURI({ baseURI: 'https://...', account: mockAccount })
|
|
245
|
+
]);
|
|
246
|
+
results.forEach(res => expect(res).toBe(txHash));
|
|
247
|
+
});
|
|
248
|
+
it('should query system config', async () => {
|
|
249
|
+
mockPublicClient.readContract.mockResolvedValue(MOCK_COMMUNITY);
|
|
250
|
+
const actions = sbtActions(mockSBTAddress)(mockPublicClient);
|
|
251
|
+
const multisig = await actions.sbtDaoMultisig();
|
|
252
|
+
expect(multisig).toBe(MOCK_COMMUNITY);
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
});
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { type Address, type PublicClient, type WalletClient, type Hex, type Hash, type Account } from 'viem';
|
|
2
|
+
export type StakingActions = {
|
|
3
|
+
lockStake: (args: {
|
|
4
|
+
user: Address;
|
|
5
|
+
roleId: Hex;
|
|
6
|
+
stakeAmount: bigint;
|
|
7
|
+
entryBurn: bigint;
|
|
8
|
+
payer: Address;
|
|
9
|
+
account?: Account | Address;
|
|
10
|
+
}) => Promise<Hash>;
|
|
11
|
+
unlockStake: (args: {
|
|
12
|
+
user: Address;
|
|
13
|
+
roleId: Hex;
|
|
14
|
+
account?: Account | Address;
|
|
15
|
+
}) => Promise<Hash>;
|
|
16
|
+
unlockAndTransfer: (args: {
|
|
17
|
+
user: Address;
|
|
18
|
+
roleId: Hex;
|
|
19
|
+
account?: Account | Address;
|
|
20
|
+
}) => Promise<Hash>;
|
|
21
|
+
stake: (args: {
|
|
22
|
+
amount: bigint;
|
|
23
|
+
account?: Account | Address;
|
|
24
|
+
}) => Promise<Hash>;
|
|
25
|
+
topUpStake: (args: {
|
|
26
|
+
amount: bigint;
|
|
27
|
+
account?: Account | Address;
|
|
28
|
+
}) => Promise<Hash>;
|
|
29
|
+
unstake: (args: {
|
|
30
|
+
amount: bigint;
|
|
31
|
+
account?: Account | Address;
|
|
32
|
+
}) => Promise<Hash>;
|
|
33
|
+
slash: (args: {
|
|
34
|
+
user: Address;
|
|
35
|
+
roleId: Hex;
|
|
36
|
+
amount: bigint;
|
|
37
|
+
reason: string;
|
|
38
|
+
account?: Account | Address;
|
|
39
|
+
}) => Promise<Hash>;
|
|
40
|
+
slashByDVT: (args: {
|
|
41
|
+
user: Address;
|
|
42
|
+
roleId: Hex;
|
|
43
|
+
amount: bigint;
|
|
44
|
+
reason: string;
|
|
45
|
+
account?: Account | Address;
|
|
46
|
+
}) => Promise<Hash>;
|
|
47
|
+
setAuthorizedSlasher: (args: {
|
|
48
|
+
slasher: Address;
|
|
49
|
+
authorized: boolean;
|
|
50
|
+
account?: Account | Address;
|
|
51
|
+
}) => Promise<Hash>;
|
|
52
|
+
getStakeInfo: (args: {
|
|
53
|
+
operator: Address;
|
|
54
|
+
roleId: Hex;
|
|
55
|
+
}) => Promise<any>;
|
|
56
|
+
getStakingBalance: (args: {
|
|
57
|
+
user: Address;
|
|
58
|
+
}) => Promise<bigint>;
|
|
59
|
+
getLockedStake: (args: {
|
|
60
|
+
user: Address;
|
|
61
|
+
roleId: Hex;
|
|
62
|
+
}) => Promise<bigint>;
|
|
63
|
+
getUserRoleLocks: (args: {
|
|
64
|
+
user: Address;
|
|
65
|
+
}) => Promise<any[]>;
|
|
66
|
+
hasRoleLock: (args: {
|
|
67
|
+
user: Address;
|
|
68
|
+
roleId: Hex;
|
|
69
|
+
}) => Promise<boolean>;
|
|
70
|
+
availableBalance: (args: {
|
|
71
|
+
user: Address;
|
|
72
|
+
}) => Promise<bigint>;
|
|
73
|
+
previewExitFee: (args: {
|
|
74
|
+
user: Address;
|
|
75
|
+
roleId: Hex;
|
|
76
|
+
}) => Promise<bigint>;
|
|
77
|
+
setRegistry: (args: {
|
|
78
|
+
registry: Address;
|
|
79
|
+
account?: Account | Address;
|
|
80
|
+
}) => Promise<Hash>;
|
|
81
|
+
transferOwnership: (args: {
|
|
82
|
+
newOwner: Address;
|
|
83
|
+
account?: Account | Address;
|
|
84
|
+
}) => Promise<Hash>;
|
|
85
|
+
setRoleExitFee: (args: {
|
|
86
|
+
roleId: Hex;
|
|
87
|
+
feePercent: bigint;
|
|
88
|
+
account?: Account | Address;
|
|
89
|
+
}) => Promise<Hash>;
|
|
90
|
+
setTreasury: (args: {
|
|
91
|
+
treasury: Address;
|
|
92
|
+
account?: Account | Address;
|
|
93
|
+
}) => Promise<Hash>;
|
|
94
|
+
stakes: (args: {
|
|
95
|
+
user: Address;
|
|
96
|
+
}) => Promise<any>;
|
|
97
|
+
roleLocks: (args: {
|
|
98
|
+
user: Address;
|
|
99
|
+
roleId: Hex;
|
|
100
|
+
}) => Promise<any>;
|
|
101
|
+
roleExitConfigs: (args: {
|
|
102
|
+
roleId: Hex;
|
|
103
|
+
}) => Promise<any>;
|
|
104
|
+
userActiveRoles: (args: {
|
|
105
|
+
user: Address;
|
|
106
|
+
index: bigint;
|
|
107
|
+
}) => Promise<Hex>;
|
|
108
|
+
authorizedSlashers: (args: {
|
|
109
|
+
slasher: Address;
|
|
110
|
+
}) => Promise<boolean>;
|
|
111
|
+
getStake: (args: {
|
|
112
|
+
account: Address;
|
|
113
|
+
}) => Promise<bigint>;
|
|
114
|
+
balanceOf: (args: {
|
|
115
|
+
account: Address;
|
|
116
|
+
}) => Promise<bigint>;
|
|
117
|
+
totalStaked: () => Promise<bigint>;
|
|
118
|
+
getTotalStaked: () => Promise<bigint>;
|
|
119
|
+
treasury: () => Promise<Address>;
|
|
120
|
+
owner: () => Promise<Address>;
|
|
121
|
+
transferStakingOwnership: (args: {
|
|
122
|
+
newOwner: Address;
|
|
123
|
+
account?: Account | Address;
|
|
124
|
+
}) => Promise<Hash>;
|
|
125
|
+
renounceOwnership: (args: {
|
|
126
|
+
account?: Account | Address;
|
|
127
|
+
}) => Promise<Hash>;
|
|
128
|
+
version: () => Promise<string>;
|
|
129
|
+
REGISTRY: () => Promise<Address>;
|
|
130
|
+
GTOKEN: () => Promise<Address>;
|
|
131
|
+
};
|
|
132
|
+
export declare const stakingActions: (address: Address) => (client: PublicClient | WalletClient) => StakingActions;
|