Skip to content

Commit 9d8d389

Browse files
committed
refactor(contract-manager): improve type handling for wallet clients
1 parent bac5bb2 commit 9d8d389

File tree

1 file changed

+39
-36
lines changed

1 file changed

+39
-36
lines changed

packages/networks/src/networks/vNaga/shared/managers/contract-manager/createContractsManager.ts

Lines changed: 39 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,21 @@
1-
import { GetWalletClientReturnType } from '@wagmi/core';
1+
import type { Account, Chain, WalletClient, Client } from 'viem';
22
import {
3-
Account,
4-
Chain,
53
createPublicClient,
64
createWalletClient,
75
getContract,
86
http,
9-
WalletClient,
107
} from 'viem';
118
import { privateKeyToAccount } from 'viem/accounts';
129
import { INetworkConfig } from '../../interfaces/NetworkContext';
1310
import { DEV_PRIVATE_KEY } from '@lit-protocol/constants';
11+
import type { LocalAccount } from 'viem/accounts';
1412

1513
// ❗️ NOTE: This could be any network's signatures assuming they all have the same ABI signatures
1614
// import { signatures } from '../../envs/naga-local/generated/naga-develop';
1715
import { nagaDevSignatures } from '@lit-protocol/contracts';
1816
type Signatures = typeof nagaDevSignatures;
1917

20-
export type ExpectedAccountOrWalletClient =
21-
| Account
22-
| WalletClient
23-
| GetWalletClientReturnType
24-
| any;
18+
export type ExpectedAccountOrWalletClient = Account | WalletClient;
2519

2620
function _resolveAccount({
2721
accountOrWalletClient,
@@ -31,24 +25,19 @@ function _resolveAccount({
3125
accountOrWalletClient: ExpectedAccountOrWalletClient;
3226
chainConfig: Chain;
3327
rpcUrl: string;
34-
}) {
35-
// Check if accountOrWalletClient is null or undefined
36-
if (!accountOrWalletClient) {
37-
throw new Error('accountOrWalletClient is required but was not provided');
38-
}
39-
40-
// If a wallet client is already provided, use it directly
28+
}): WalletClient {
29+
if (!accountOrWalletClient)
30+
throw new Error('accountOrWalletClient is required');
4131
if (accountOrWalletClient.type === 'local') {
42-
// If an account is provided, create a wallet client with it
43-
const walletClient = createWalletClient({
44-
account: accountOrWalletClient as Account,
32+
const account = accountOrWalletClient as LocalAccount;
33+
const client = createWalletClient({
34+
account,
4535
chain: chainConfig,
4636
transport: http(rpcUrl),
4737
});
48-
return walletClient;
49-
} else {
50-
return accountOrWalletClient as WalletClient;
38+
return client;
5139
}
40+
return accountOrWalletClient as WalletClient;
5241
}
5342

5443
export const createReadOnlyContractsManager = <T, M>(
@@ -66,12 +55,10 @@ export const createContractsManager = <T, M>(
6655
accountOrWalletClient: ExpectedAccountOrWalletClient
6756
): any => {
6857
// 2. Decide which publicClient to use
69-
const publicClient =
70-
// opts?.publicClient ??
71-
createPublicClient({
72-
chain: networkConfig.chainConfig,
73-
transport: http(networkConfig.rpcUrl),
74-
});
58+
const publicClient = createPublicClient({
59+
chain: networkConfig.chainConfig,
60+
transport: http(networkConfig.rpcUrl),
61+
});
7562

7663
// 3. Decide which walletClient to use
7764
const walletClient = _resolveAccount({
@@ -80,6 +67,10 @@ export const createContractsManager = <T, M>(
8067
rpcUrl: networkConfig.rpcUrl,
8168
});
8269

70+
// Normalise to base Client type for contract typing
71+
const publicClientForContract: Client = publicClient as unknown as Client;
72+
const walletClientForContract: Client = walletClient as unknown as Client;
73+
8374
// 4. Get the contract data (casting a default type to ensure type safety)
8475
const contractData = networkConfig.abiSignatures as Signatures;
8576

@@ -100,7 +91,10 @@ export const createContractsManager = <T, M>(
10091
contractData.PKPNFT.methods.safeTransferFrom,
10192
...contractData.PKPNFT.events,
10293
],
103-
client: { public: publicClientForContract, wallet: walletClientForContract },
94+
client: {
95+
public: publicClientForContract,
96+
wallet: walletClientForContract,
97+
},
10498
});
10599

106100
const pkpHelperContract = getContract({
@@ -110,7 +104,7 @@ export const createContractsManager = <T, M>(
110104
contractData.PKPHelper.methods.mintNextAndAddAuthMethods,
111105
...contractData.PKPHelper.events,
112106
],
113-
client: { public: publicClient, wallet: walletClient },
107+
client: { wallet: walletClientForContract },
114108
});
115109

116110
const stakingContract = getContract({
@@ -119,7 +113,7 @@ export const createContractsManager = <T, M>(
119113
contractData.Staking.methods.getActiveUnkickedValidatorStructsAndCounts,
120114
...contractData.Staking.events,
121115
],
122-
client: { public: publicClient, wallet: walletClient },
116+
client: { public: publicClientForContract },
123117
});
124118

125119
const priceFeed = getContract({
@@ -128,7 +122,7 @@ export const createContractsManager = <T, M>(
128122
contractData.PriceFeed.methods.getNodesForRequest,
129123
...contractData.PriceFeed.events,
130124
],
131-
client: { public: publicClient, wallet: walletClient },
125+
client: { public: publicClientForContract },
132126
});
133127

134128
const pkpPermissionsContract = getContract({
@@ -151,7 +145,10 @@ export const createContractsManager = <T, M>(
151145
contractData.PKPPermissions.methods.getTokenIdsForAuthMethod,
152146
...contractData.PKPPermissions.events,
153147
],
154-
client: { public: publicClientForContract, wallet: walletClientForContract },
148+
client: {
149+
public: publicClientForContract,
150+
wallet: walletClientForContract,
151+
},
155152
});
156153

157154
const pubkeyRouterContract = getContract({
@@ -163,7 +160,7 @@ export const createContractsManager = <T, M>(
163160
contractData.PubkeyRouter.methods.getPubkey,
164161
...contractData.PubkeyRouter.events,
165162
],
166-
client: { public: publicClient, wallet: walletClient },
163+
client: { public: publicClientForContract },
167164
});
168165

169166
const ledgerContract = getContract({
@@ -179,7 +176,10 @@ export const createContractsManager = <T, M>(
179176
contractData.Ledger.methods.withdraw,
180177
...contractData.Ledger.events,
181178
],
182-
client: { public: publicClientForContract, wallet: walletClientForContract },
179+
client: {
180+
public: publicClientForContract,
181+
wallet: walletClientForContract,
182+
},
183183
});
184184

185185
const paymentDelegationContract = getContract({
@@ -196,7 +196,10 @@ export const createContractsManager = <T, M>(
196196
contractData.PaymentDelegation.methods.undelegatePaymentsBatch,
197197
...contractData.PaymentDelegation.events,
198198
],
199-
client: { public: publicClientForContract, wallet: walletClientForContract },
199+
client: {
200+
public: publicClientForContract,
201+
wallet: walletClientForContract,
202+
},
200203
});
201204

202205
// ---------- End of all your contracts ----------

0 commit comments

Comments
 (0)