-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathsetup.ts
More file actions
162 lines (142 loc) · 4.73 KB
/
Copy pathsetup.ts
File metadata and controls
162 lines (142 loc) · 4.73 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/**
* Default Facilitator Setup - Application-specific with side effects
*
* This module creates a default facilitator instance based on environment
* configuration. It has side effects and should only be imported by the
* CLI server, not by library consumers.
*
* Library consumers should use createFacilitator() from the main export instead.
*/
import "dotenv/config";
import { CdpClient } from "@coinbase/cdp-sdk";
import {
createFacilitator,
type FacilitatorConfig,
} from "@daydreamsai/facilitator";
import {
createCdpEvmSigner,
createPrivateKeyEvmSigner,
createPrivateKeySvmSigner,
type CdpNetwork,
} from "@daydreamsai/facilitator/signers";
import {
getNetworkSetups,
getStarknetNetworkSetups,
getSvmNetworkSetups,
getRpcUrl,
USE_CDP,
SVM_PRIVATE_KEY,
CDP_ACCOUNT_NAME,
} from "@daydreamsai/facilitator/config";
import {
buildStarknetConfigs,
type StarknetConfig,
} from "./starknet-config.js";
type EvmSignerConfig = FacilitatorConfig["evmSigners"] extends
| (infer T)[]
| undefined
? T
: never;
type SvmSignerConfig = FacilitatorConfig["svmSigners"] extends
| (infer T)[]
| undefined
? T
: never;
type NetworkId = EvmSignerConfig["networks"];
const UPTO_VERIFY_BALANCE_CHECK =
process.env.UPTO_VERIFY_BALANCE_CHECK === "true";
// ============================================================================
// Default Signers
// ============================================================================
async function createDefaultSigners(): Promise<{
evmSigners: EvmSignerConfig[];
svmSigners: SvmSignerConfig[];
starknetConfigs: StarknetConfig[];
}> {
const networkSetups = getNetworkSetups();
const starknetConfigs = buildStarknetConfigs(getStarknetNetworkSetups());
if (USE_CDP) {
// CDP Signer (preferred)
const cdp = new CdpClient();
const account = await cdp.evm.getOrCreateAccount({
name: CDP_ACCOUNT_NAME!,
});
console.info(`CDP Facilitator account: ${account.address}`);
const evmSigners: EvmSignerConfig[] = [];
// Create a signer for each configured network
for (const network of networkSetups) {
const signer = createCdpEvmSigner({
cdpClient: cdp,
account,
network: network.name as CdpNetwork,
rpcUrl: network.rpcUrl,
});
evmSigners.push({
signer,
networks: network.caip as NetworkId,
schemes: ["exact", "upto"],
upto: { verifyBalanceCheck: UPTO_VERIFY_BALANCE_CHECK },
deployERC4337WithEIP6492: true,
// Enable v1 for networks that support it
registerV1: network.supportsV1,
v1NetworkNames: network.supportsV1 ? network.name : undefined,
});
}
// CDP doesn't support SVM yet, use private key signer if available
const svmSigners: SvmSignerConfig[] = [];
if (SVM_PRIVATE_KEY) {
const svmSigner = await createPrivateKeySvmSigner();
// Register for each configured SVM network
const svmNetworkSetups = getSvmNetworkSetups();
for (const network of svmNetworkSetups) {
svmSigners.push({
signer: svmSigner,
networks: network.caip as NetworkId,
});
}
}
return { evmSigners, svmSigners, starknetConfigs };
} else {
// Private Key Signer (fallback)
const evmSigners: EvmSignerConfig[] = [];
// Create a signer for each configured network
for (const network of networkSetups) {
const rpcUrl = getRpcUrl(network.name);
if (!rpcUrl) {
console.warn(`⚠️ No RPC URL for ${network.name} - skipping`);
continue;
}
const signer = createPrivateKeyEvmSigner({
network: network.name,
rpcUrl,
});
evmSigners.push({
signer,
networks: network.caip as NetworkId,
schemes: ["exact", "upto"],
upto: { verifyBalanceCheck: UPTO_VERIFY_BALANCE_CHECK },
deployERC4337WithEIP6492: true,
// Enable v1 for networks that support it
registerV1: network.supportsV1,
v1NetworkNames: network.supportsV1 ? network.name : undefined,
});
}
const svmSigners: SvmSignerConfig[] = [];
if (SVM_PRIVATE_KEY) {
const svmSigner = await createPrivateKeySvmSigner();
// Register for each configured SVM network
const svmNetworkSetups = getSvmNetworkSetups();
for (const network of svmNetworkSetups) {
svmSigners.push({
signer: svmSigner,
networks: network.caip as NetworkId,
});
}
}
return { evmSigners, svmSigners, starknetConfigs };
}
}
// ============================================================================
// Default Instance
// ============================================================================
export const defaultSigners = await createDefaultSigners();