generated from latticexyz/mud-template-react
-
Notifications
You must be signed in to change notification settings - Fork 44
Expand file tree
/
Copy pathaccount.ts
More file actions
49 lines (44 loc) · 1.4 KB
/
account.ts
File metadata and controls
49 lines (44 loc) · 1.4 KB
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
import { networkConfig } from "./networkConfig";
import { ContractWrite, createBurnerAccount, transportObserver } from "@latticexyz/common";
import { transactionQueue, writeObserver } from "@latticexyz/common/actions";
import { Subject } from "rxjs";
import {
Account,
Address,
ClientConfig,
createPublicClient,
createWalletClient,
fallback,
Hex,
http,
Transport,
webSocket,
} from "viem";
const clientOptions = {
chain: networkConfig.chain,
transport: transportObserver(fallback([webSocket(), http()])),
pollingInterval: 1000,
} as const satisfies ClientConfig;
/*
* Create a viem public (read only) client
* (https://viem.sh/docs/clients/public.html)
*/
export const publicClient = createPublicClient(clientOptions);
/*
* Create an observable for contract writes that we can
* pass into MUD dev tools for transaction observability.
*/
export const write$ = new Subject<ContractWrite>();
export function createEmojimonWalletClient(account: Account | Address, transport?: Transport) {
return createWalletClient({
...clientOptions,
transport: transport ?? clientOptions.transport,
account,
})
.extend(transactionQueue())
.extend(writeObserver({ onWrite: (write) => write$.next(write) }));
}
export function createBurnerWalletClient() {
const burnerAccount = createBurnerAccount(networkConfig.burnerPrivateKey as Hex);
return createEmojimonWalletClient(burnerAccount);
}