forked from etherspot/etherspot-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path02-state-storage.ts
64 lines (51 loc) · 1.39 KB
/
02-state-storage.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { Wallet } from 'ethers';
import { Sdk, StateStorage } from '../../src';
import { logger } from './common';
async function main(): Promise<void> {
const wallet = Wallet.createRandom();
logger.log('wallet', wallet.address);
const storageMock: Partial<Storage> = {
data: new Map<string, string>(),
setItem(key: string, value: string) {
this.data.set(key, value);
},
getItem(key: string): string {
return this.data.get(key);
},
};
const stateStorage: StateStorage = {
getState: async (walletAddress, networkName) => {
let result: any = null;
if (walletAddress && networkName) {
const plain = storageMock.getItem(`${walletAddress}:${networkName}`);
if (plain) {
result = JSON.parse(plain);
}
}
return result;
},
setState: async (walletAddress, networkName, state) => {
if (walletAddress && networkName) {
storageMock.setItem(`${walletAddress}:${networkName}`, JSON.stringify(state));
}
},
};
// set sdk state
{
const sdk = new Sdk(wallet, {
stateStorage,
});
await sdk.syncAccount();
await sdk.computeContractAccount({
sync: true,
});
}
// restore sdk state
{
const sdk = new Sdk(wallet, {
stateStorage,
});
sdk.state$.subscribe((state) => logger.log('sdk state', state));
}
}
main().catch(logger.error);