bandkit 0.0.1 → 0.1.0
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/.env.example +9 -0
- package/LICENSE +3 -3
- package/README.md +41 -12
- package/bin/bandkit.js +38 -0
- package/contracts/BandExecutor.sol +178 -0
- package/contracts/BandStrategy.sol +111 -0
- package/contracts/test/MockDexTarget.sol +29 -0
- package/contracts/test/MockErc20.sol +40 -0
- package/dist/BandContractPanel.d.ts +11 -0
- package/dist/BandContractPanel.d.ts.map +1 -0
- package/dist/BandContractPanel.js +95 -0
- package/dist/BandContractPanel.js.map +1 -0
- package/dist/BandPanel.d.ts +13 -0
- package/dist/BandPanel.d.ts.map +1 -0
- package/dist/BandPanel.js +142 -0
- package/dist/BandPanel.js.map +1 -0
- package/dist/bandExecutorAbi.d.ts +431 -0
- package/dist/bandExecutorAbi.d.ts.map +1 -0
- package/dist/bandExecutorAbi.js +558 -0
- package/dist/bandExecutorAbi.js.map +1 -0
- package/dist/bandExecutorBytecode.d.ts +2 -0
- package/dist/bandExecutorBytecode.d.ts.map +1 -0
- package/dist/bandExecutorBytecode.js +3 -0
- package/dist/bandExecutorBytecode.js.map +1 -0
- package/dist/bandStrategyAbi.d.ts +250 -0
- package/dist/bandStrategyAbi.d.ts.map +1 -0
- package/dist/bandStrategyAbi.js +323 -0
- package/dist/bandStrategyAbi.js.map +1 -0
- package/dist/bandStrategyBytecode.d.ts +2 -0
- package/dist/bandStrategyBytecode.d.ts.map +1 -0
- package/dist/bandStrategyBytecode.js +3 -0
- package/dist/bandStrategyBytecode.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/rainbowkit.d.ts +7 -0
- package/dist/rainbowkit.d.ts.map +1 -0
- package/dist/rainbowkit.js +33 -0
- package/dist/rainbowkit.js.map +1 -0
- package/dist/tradingExecutor.d.ts +38 -0
- package/dist/tradingExecutor.d.ts.map +1 -0
- package/dist/tradingExecutor.js +125 -0
- package/dist/tradingExecutor.js.map +1 -0
- package/dist/useBandDashboard.d.ts +27 -0
- package/dist/useBandDashboard.d.ts.map +1 -0
- package/dist/useBandDashboard.js +35 -0
- package/dist/useBandDashboard.js.map +1 -0
- package/dist/useEthPriceTicker.d.ts +32 -0
- package/dist/useEthPriceTicker.d.ts.map +1 -0
- package/dist/useEthPriceTicker.js +95 -0
- package/dist/useEthPriceTicker.js.map +1 -0
- package/dist/useStrategyContract.d.ts +42 -0
- package/dist/useStrategyContract.d.ts.map +1 -0
- package/dist/useStrategyContract.js +258 -0
- package/dist/useStrategyContract.js.map +1 -0
- package/dist/useStrategyContractDeployment.d.ts +31 -0
- package/dist/useStrategyContractDeployment.d.ts.map +1 -0
- package/dist/useStrategyContractDeployment.js +229 -0
- package/dist/useStrategyContractDeployment.js.map +1 -0
- package/dist/useWalletEthBalance.d.ts +17 -0
- package/dist/useWalletEthBalance.d.ts.map +1 -0
- package/dist/useWalletEthBalance.js +98 -0
- package/dist/useWalletEthBalance.js.map +1 -0
- package/engine/browser-provider.js +25 -0
- package/engine/executor-searcher.js +138 -0
- package/engine/provider.js +32 -0
- package/engine/uniswap-v2-roundtrip.js +215 -0
- package/hardhat.config.cjs +27 -0
- package/package.json +75 -14
- package/scripts/deploy.cjs +31 -0
- package/index.d.ts +0 -2
- package/index.js +0 -2
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
|
+
import { formatEther, parseEther } from "viem";
|
|
3
|
+
import { useAccount, useChainId, useReadContract, useSwitchChain, useWaitForTransactionReceipt, useWriteContract } from "wagmi";
|
|
4
|
+
import { mainnet } from "wagmi/chains";
|
|
5
|
+
import { BAND_STRATEGY_ABI } from "./bandStrategyAbi.js";
|
|
6
|
+
function toError(error) {
|
|
7
|
+
if (!error)
|
|
8
|
+
return undefined;
|
|
9
|
+
if (error instanceof Error)
|
|
10
|
+
return error;
|
|
11
|
+
return new Error(String(error));
|
|
12
|
+
}
|
|
13
|
+
function isUserRejection(error) {
|
|
14
|
+
const maybeError = error;
|
|
15
|
+
const message = `${maybeError.message ?? ""} ${maybeError.shortMessage ?? ""}`.toLowerCase();
|
|
16
|
+
return maybeError.code === 4001 || maybeError.cause?.code === 4001 || message.includes("user rejected") || message.includes("user denied");
|
|
17
|
+
}
|
|
18
|
+
function validateAmount(amountEth) {
|
|
19
|
+
const normalized = amountEth.trim();
|
|
20
|
+
if (!normalized)
|
|
21
|
+
throw new Error("Enter an ETH amount.");
|
|
22
|
+
const amount = parseEther(normalized);
|
|
23
|
+
if (amount <= 0n)
|
|
24
|
+
throw new Error("Amount must be greater than zero.");
|
|
25
|
+
return amount;
|
|
26
|
+
}
|
|
27
|
+
export function useStrategyContract(options) {
|
|
28
|
+
const requiredChainId = options.chainId ?? mainnet.id;
|
|
29
|
+
const confirmations = options.confirmations ?? 1;
|
|
30
|
+
const chainId = useChainId();
|
|
31
|
+
const { address, isConnected } = useAccount();
|
|
32
|
+
const { switchChainAsync } = useSwitchChain();
|
|
33
|
+
const [submittedHash, setSubmittedHash] = useState();
|
|
34
|
+
const [transactionAction, setTransactionAction] = useState();
|
|
35
|
+
const [transactionStatus, setTransactionStatus] = useState("idle");
|
|
36
|
+
const [transactionError, setTransactionError] = useState();
|
|
37
|
+
const { error: writeError, isPending: isWritePending, writeContractAsync } = useWriteContract();
|
|
38
|
+
const contractConfig = useMemo(() => ({
|
|
39
|
+
address: options.strategyContractAddress,
|
|
40
|
+
abi: BAND_STRATEGY_ABI,
|
|
41
|
+
chainId: requiredChainId
|
|
42
|
+
}), [options.strategyContractAddress, requiredChainId]);
|
|
43
|
+
const balanceRead = useReadContract({
|
|
44
|
+
...contractConfig,
|
|
45
|
+
functionName: "balances",
|
|
46
|
+
args: address ? [address] : undefined,
|
|
47
|
+
query: {
|
|
48
|
+
enabled: Boolean(options.strategyContractAddress && address)
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
const totalDepositsRead = useReadContract({
|
|
52
|
+
...contractConfig,
|
|
53
|
+
functionName: "totalDeposits",
|
|
54
|
+
query: {
|
|
55
|
+
enabled: Boolean(options.strategyContractAddress)
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
const strategyActiveRead = useReadContract({
|
|
59
|
+
...contractConfig,
|
|
60
|
+
functionName: "strategyActive",
|
|
61
|
+
args: address ? [address] : undefined,
|
|
62
|
+
query: {
|
|
63
|
+
enabled: Boolean(options.strategyContractAddress && address)
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
const allocatedToStrategyRead = useReadContract({
|
|
67
|
+
...contractConfig,
|
|
68
|
+
functionName: "allocatedToStrategy",
|
|
69
|
+
args: address ? [address] : undefined,
|
|
70
|
+
query: {
|
|
71
|
+
enabled: Boolean(options.strategyContractAddress && address)
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
const totalAllocatedToStrategyRead = useReadContract({
|
|
75
|
+
...contractConfig,
|
|
76
|
+
functionName: "totalAllocatedToStrategy",
|
|
77
|
+
query: {
|
|
78
|
+
enabled: Boolean(options.strategyContractAddress)
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
const strategyWalletRead = useReadContract({
|
|
82
|
+
...contractConfig,
|
|
83
|
+
functionName: "strategyWallet",
|
|
84
|
+
query: {
|
|
85
|
+
enabled: Boolean(options.strategyContractAddress)
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
const pausedRead = useReadContract({
|
|
89
|
+
...contractConfig,
|
|
90
|
+
functionName: "depositsPaused",
|
|
91
|
+
query: {
|
|
92
|
+
enabled: Boolean(options.strategyContractAddress)
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
const wait = useWaitForTransactionReceipt({
|
|
96
|
+
hash: submittedHash,
|
|
97
|
+
chainId: requiredChainId,
|
|
98
|
+
confirmations,
|
|
99
|
+
query: {
|
|
100
|
+
enabled: Boolean(submittedHash)
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
const refetch = useCallback(() => {
|
|
104
|
+
void balanceRead.refetch();
|
|
105
|
+
void strategyActiveRead.refetch();
|
|
106
|
+
void allocatedToStrategyRead.refetch();
|
|
107
|
+
void totalDepositsRead.refetch();
|
|
108
|
+
void totalAllocatedToStrategyRead.refetch();
|
|
109
|
+
void strategyWalletRead.refetch();
|
|
110
|
+
void pausedRead.refetch();
|
|
111
|
+
}, [allocatedToStrategyRead, balanceRead, pausedRead, strategyActiveRead, strategyWalletRead, totalAllocatedToStrategyRead, totalDepositsRead]);
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
if (!submittedHash)
|
|
114
|
+
return;
|
|
115
|
+
if (wait.isSuccess) {
|
|
116
|
+
setTransactionStatus("confirmed");
|
|
117
|
+
setTransactionError(undefined);
|
|
118
|
+
refetch();
|
|
119
|
+
}
|
|
120
|
+
if (wait.isError) {
|
|
121
|
+
setTransactionStatus("failed");
|
|
122
|
+
setTransactionError(toError(wait.error));
|
|
123
|
+
}
|
|
124
|
+
}, [refetch, submittedHash, wait.error, wait.isError, wait.isSuccess]);
|
|
125
|
+
const ensureReady = useCallback(async () => {
|
|
126
|
+
if (!options.strategyContractAddress)
|
|
127
|
+
throw new Error("Missing strategy contract address.");
|
|
128
|
+
if (!isConnected)
|
|
129
|
+
throw new Error("Connect a wallet before using the strategy contract.");
|
|
130
|
+
if (chainId !== requiredChainId)
|
|
131
|
+
await switchChainAsync({ chainId: requiredChainId });
|
|
132
|
+
}, [chainId, isConnected, options.strategyContractAddress, requiredChainId, switchChainAsync]);
|
|
133
|
+
const writeStrategyContractTransaction = useCallback(async (action, task) => {
|
|
134
|
+
setSubmittedHash(undefined);
|
|
135
|
+
setTransactionAction(action);
|
|
136
|
+
setTransactionStatus("walletPending");
|
|
137
|
+
setTransactionError(undefined);
|
|
138
|
+
try {
|
|
139
|
+
const hash = await task();
|
|
140
|
+
setSubmittedHash(hash);
|
|
141
|
+
setTransactionStatus("confirming");
|
|
142
|
+
return hash;
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
setTransactionStatus(isUserRejection(error) ? "cancelled" : "failed");
|
|
146
|
+
setTransactionError(toError(error));
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
}, []);
|
|
150
|
+
const depositEth = useCallback(async (amountEth) => {
|
|
151
|
+
await ensureReady();
|
|
152
|
+
const value = validateAmount(amountEth);
|
|
153
|
+
return writeStrategyContractTransaction("deposit", () => writeContractAsync({
|
|
154
|
+
address: options.strategyContractAddress,
|
|
155
|
+
abi: BAND_STRATEGY_ABI,
|
|
156
|
+
functionName: "deposit",
|
|
157
|
+
value,
|
|
158
|
+
chainId: requiredChainId
|
|
159
|
+
}));
|
|
160
|
+
}, [ensureReady, options.strategyContractAddress, requiredChainId, writeContractAsync, writeStrategyContractTransaction]);
|
|
161
|
+
const withdrawEth = useCallback(async (amountEth) => {
|
|
162
|
+
await ensureReady();
|
|
163
|
+
const amount = validateAmount(amountEth);
|
|
164
|
+
return writeStrategyContractTransaction("withdraw", () => writeContractAsync({
|
|
165
|
+
address: options.strategyContractAddress,
|
|
166
|
+
abi: BAND_STRATEGY_ABI,
|
|
167
|
+
functionName: "withdraw",
|
|
168
|
+
args: [amount],
|
|
169
|
+
chainId: requiredChainId
|
|
170
|
+
}));
|
|
171
|
+
}, [ensureReady, options.strategyContractAddress, requiredChainId, writeContractAsync, writeStrategyContractTransaction]);
|
|
172
|
+
const activateStrategyEngine = useCallback(async () => {
|
|
173
|
+
await ensureReady();
|
|
174
|
+
return writeStrategyContractTransaction("activateStrategyEngine", () => writeContractAsync({
|
|
175
|
+
address: options.strategyContractAddress,
|
|
176
|
+
abi: BAND_STRATEGY_ABI,
|
|
177
|
+
functionName: "activateStrategyEngine",
|
|
178
|
+
chainId: requiredChainId
|
|
179
|
+
}));
|
|
180
|
+
}, [ensureReady, options.strategyContractAddress, requiredChainId, writeContractAsync, writeStrategyContractTransaction]);
|
|
181
|
+
const deactivateStrategyEngine = useCallback(async () => {
|
|
182
|
+
await ensureReady();
|
|
183
|
+
return writeStrategyContractTransaction("deactivateStrategyEngine", () => writeContractAsync({
|
|
184
|
+
address: options.strategyContractAddress,
|
|
185
|
+
abi: BAND_STRATEGY_ABI,
|
|
186
|
+
functionName: "deactivateStrategyEngine",
|
|
187
|
+
chainId: requiredChainId
|
|
188
|
+
}));
|
|
189
|
+
}, [ensureReady, options.strategyContractAddress, requiredChainId, writeContractAsync, writeStrategyContractTransaction]);
|
|
190
|
+
const withdrawAll = useCallback(async () => {
|
|
191
|
+
await ensureReady();
|
|
192
|
+
return writeStrategyContractTransaction("withdrawAll", () => writeContractAsync({
|
|
193
|
+
address: options.strategyContractAddress,
|
|
194
|
+
abi: BAND_STRATEGY_ABI,
|
|
195
|
+
functionName: "withdrawAll",
|
|
196
|
+
chainId: requiredChainId
|
|
197
|
+
}));
|
|
198
|
+
}, [ensureReady, options.strategyContractAddress, requiredChainId, writeContractAsync, writeStrategyContractTransaction]);
|
|
199
|
+
const balanceWei = balanceRead.data ?? 0n;
|
|
200
|
+
const totalDepositsWei = totalDepositsRead.data ?? 0n;
|
|
201
|
+
const error = transactionError ??
|
|
202
|
+
toError(writeError) ??
|
|
203
|
+
toError(wait.error) ??
|
|
204
|
+
toError(balanceRead.error) ??
|
|
205
|
+
toError(strategyActiveRead.error) ??
|
|
206
|
+
toError(allocatedToStrategyRead.error) ??
|
|
207
|
+
toError(totalDepositsRead.error) ??
|
|
208
|
+
toError(totalAllocatedToStrategyRead.error) ??
|
|
209
|
+
toError(pausedRead.error);
|
|
210
|
+
const allocatedToStrategyWei = allocatedToStrategyRead.data ?? 0n;
|
|
211
|
+
const totalAllocatedToStrategyWei = totalAllocatedToStrategyRead.data ?? 0n;
|
|
212
|
+
const transactionStatusText = useMemo(() => {
|
|
213
|
+
if (transactionStatus === "walletPending" || isWritePending)
|
|
214
|
+
return "Confirm in wallet";
|
|
215
|
+
if (transactionStatus === "confirming")
|
|
216
|
+
return "Waiting for confirmation";
|
|
217
|
+
if (transactionStatus === "confirmed")
|
|
218
|
+
return "Transaction confirmed";
|
|
219
|
+
if (transactionStatus === "cancelled")
|
|
220
|
+
return "Transaction cancelled";
|
|
221
|
+
if (transactionStatus === "failed")
|
|
222
|
+
return "Transaction failed";
|
|
223
|
+
return "Ready";
|
|
224
|
+
}, [isWritePending, transactionStatus]);
|
|
225
|
+
return {
|
|
226
|
+
accountAddress: address,
|
|
227
|
+
chainId,
|
|
228
|
+
requiredChainId,
|
|
229
|
+
isConnected,
|
|
230
|
+
isCorrectChain: chainId === requiredChainId,
|
|
231
|
+
balanceWei,
|
|
232
|
+
balanceEth: formatEther(balanceWei),
|
|
233
|
+
strategyActive: strategyActiveRead.data ?? false,
|
|
234
|
+
allocatedToStrategyWei,
|
|
235
|
+
allocatedToStrategyEth: formatEther(allocatedToStrategyWei),
|
|
236
|
+
totalDepositsWei,
|
|
237
|
+
totalDepositsEth: formatEther(totalDepositsWei),
|
|
238
|
+
totalAllocatedToStrategyWei,
|
|
239
|
+
totalAllocatedToStrategyEth: formatEther(totalAllocatedToStrategyWei),
|
|
240
|
+
strategyWallet: strategyWalletRead.data,
|
|
241
|
+
depositsPaused: pausedRead.data ?? false,
|
|
242
|
+
pendingHash: submittedHash,
|
|
243
|
+
transactionAction,
|
|
244
|
+
transactionStatus,
|
|
245
|
+
transactionStatusText,
|
|
246
|
+
isWritePending: isWritePending || transactionStatus === "walletPending",
|
|
247
|
+
isConfirming: transactionStatus === "confirming",
|
|
248
|
+
isConfirmed: transactionStatus === "confirmed",
|
|
249
|
+
error,
|
|
250
|
+
depositEth,
|
|
251
|
+
activateStrategyEngine,
|
|
252
|
+
deactivateStrategyEngine,
|
|
253
|
+
withdrawEth,
|
|
254
|
+
withdrawAll,
|
|
255
|
+
refetch
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=useStrategyContract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStrategyContract.js","sourceRoot":"","sources":["../src/useStrategyContract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Address, Hash } from "viem";
|
|
2
|
+
export declare const DEFAULT_BAND_STRATEGY_STORAGE_KEY = "bandkit:strategy-contract-address";
|
|
3
|
+
export type UseStrategyContractDeploymentOptions = {
|
|
4
|
+
chainId?: number;
|
|
5
|
+
confirmations?: number;
|
|
6
|
+
strategyWalletAddress?: Address;
|
|
7
|
+
storageKey?: string;
|
|
8
|
+
deploymentTimeoutMs?: number;
|
|
9
|
+
};
|
|
10
|
+
export type DeploymentTransactionStatus = "idle" | "walletPending" | "confirming" | "deployed" | "failed" | "cancelled" | "timeout";
|
|
11
|
+
export type DeploymentContractStatus = "unknown" | "checking" | "deployed" | "missing";
|
|
12
|
+
export type UseStrategyContractDeploymentResult = {
|
|
13
|
+
strategyContractAddress?: Address;
|
|
14
|
+
deployHash?: Hash;
|
|
15
|
+
deployStatus: DeploymentTransactionStatus;
|
|
16
|
+
deployStatusText: string;
|
|
17
|
+
contractStatus: DeploymentContractStatus;
|
|
18
|
+
contractStatusText: string;
|
|
19
|
+
isConnected: boolean;
|
|
20
|
+
isCorrectChain: boolean;
|
|
21
|
+
isDeployPending: boolean;
|
|
22
|
+
isDeploying: boolean;
|
|
23
|
+
isDeployed: boolean;
|
|
24
|
+
error?: Error;
|
|
25
|
+
deployStrategyContract: () => Promise<Hash>;
|
|
26
|
+
refetchDeploymentStatus: () => Promise<void>;
|
|
27
|
+
setStrategyContractAddress: (address: Address) => void;
|
|
28
|
+
clearStrategyContractAddress: () => void;
|
|
29
|
+
};
|
|
30
|
+
export declare function useStrategyContractDeployment(options?: UseStrategyContractDeploymentOptions): UseStrategyContractDeploymentResult;
|
|
31
|
+
//# sourceMappingURL=useStrategyContractDeployment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStrategyContractDeployment.d.ts","sourceRoot":"","sources":["../src/useStrategyContractDeployment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAM1C,eAAO,MAAM,iCAAiC,sCAAsC,CAAC;AAErF,MAAM,MAAM,oCAAoC,GAAG;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG,eAAe,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;AACpI,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAEvF,MAAM,MAAM,mCAAmC,GAAG;IAChD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,YAAY,EAAE,2BAA2B,CAAC;IAC1C,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,wBAAwB,CAAC;IACzC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,sBAAsB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,uBAAuB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,0BAA0B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvD,4BAA4B,EAAE,MAAM,IAAI,CAAC;CAC1C,CAAC;AAuCF,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,oCAAyC,GACjD,mCAAmC,CAoNrC"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
|
+
import { useAccount, useChainId, useDeployContract, useSwitchChain } from "wagmi";
|
|
3
|
+
import { mainnet } from "wagmi/chains";
|
|
4
|
+
import { BAND_STRATEGY_ABI } from "./bandStrategyAbi.js";
|
|
5
|
+
import { BAND_STRATEGY_BYTECODE } from "./bandStrategyBytecode.js";
|
|
6
|
+
export const DEFAULT_BAND_STRATEGY_STORAGE_KEY = "bandkit:strategy-contract-address";
|
|
7
|
+
function isAddress(value) {
|
|
8
|
+
return /^0x[a-fA-F0-9]{40}$/.test(value);
|
|
9
|
+
}
|
|
10
|
+
function getStoredAddress(storageKey) {
|
|
11
|
+
if (typeof window === "undefined")
|
|
12
|
+
return undefined;
|
|
13
|
+
const value = window.localStorage.getItem(storageKey);
|
|
14
|
+
return value && isAddress(value) ? value : undefined;
|
|
15
|
+
}
|
|
16
|
+
function getChromeWalletProvider() {
|
|
17
|
+
if (typeof window === "undefined")
|
|
18
|
+
return undefined;
|
|
19
|
+
return window.ethereum;
|
|
20
|
+
}
|
|
21
|
+
function isUserRejection(error) {
|
|
22
|
+
const maybeError = error;
|
|
23
|
+
const message = maybeError.message?.toLowerCase() ?? "";
|
|
24
|
+
return maybeError.code === 4001 || maybeError.cause?.code === 4001 || message.includes("user rejected") || message.includes("user denied");
|
|
25
|
+
}
|
|
26
|
+
function toError(error) {
|
|
27
|
+
if (!error)
|
|
28
|
+
return undefined;
|
|
29
|
+
if (error instanceof Error)
|
|
30
|
+
return error;
|
|
31
|
+
return new Error(String(error));
|
|
32
|
+
}
|
|
33
|
+
export function useStrategyContractDeployment(options = {}) {
|
|
34
|
+
const requiredChainId = options.chainId ?? mainnet.id;
|
|
35
|
+
const deploymentTimeoutMs = options.deploymentTimeoutMs ?? 240_000;
|
|
36
|
+
const storageKey = options.storageKey ?? DEFAULT_BAND_STRATEGY_STORAGE_KEY;
|
|
37
|
+
const chainId = useChainId();
|
|
38
|
+
const account = useAccount();
|
|
39
|
+
const { switchChainAsync } = useSwitchChain();
|
|
40
|
+
const [strategyContractAddress, setStrategyContractAddressState] = useState();
|
|
41
|
+
const [submittedDeployHash, setSubmittedDeployHash] = useState();
|
|
42
|
+
const [deployStatus, setDeployStatus] = useState("idle");
|
|
43
|
+
const [deployStatusError, setDeployStatusError] = useState();
|
|
44
|
+
const [contractStatus, setContractStatus] = useState("unknown");
|
|
45
|
+
const { deployContractAsync, error: deployError, isPending: isDeployPending } = useDeployContract();
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
setStrategyContractAddressState(getStoredAddress(storageKey));
|
|
48
|
+
}, [storageKey]);
|
|
49
|
+
const setStrategyContractAddress = useCallback((address) => {
|
|
50
|
+
setStrategyContractAddressState(address);
|
|
51
|
+
setContractStatus("deployed");
|
|
52
|
+
if (typeof window !== "undefined") {
|
|
53
|
+
window.localStorage.setItem(storageKey, address);
|
|
54
|
+
}
|
|
55
|
+
}, [storageKey]);
|
|
56
|
+
const clearStrategyContractAddress = useCallback(() => {
|
|
57
|
+
setStrategyContractAddressState(undefined);
|
|
58
|
+
setContractStatus("unknown");
|
|
59
|
+
if (typeof window !== "undefined") {
|
|
60
|
+
window.localStorage.removeItem(storageKey);
|
|
61
|
+
}
|
|
62
|
+
}, [storageKey]);
|
|
63
|
+
const refetchDeploymentStatus = useCallback(async () => {
|
|
64
|
+
const provider = getChromeWalletProvider();
|
|
65
|
+
if (!provider || !strategyContractAddress) {
|
|
66
|
+
setContractStatus(strategyContractAddress ? "unknown" : "missing");
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
setContractStatus("checking");
|
|
70
|
+
try {
|
|
71
|
+
const code = await provider.request({
|
|
72
|
+
method: "eth_getCode",
|
|
73
|
+
params: [strategyContractAddress, "latest"]
|
|
74
|
+
});
|
|
75
|
+
setContractStatus(typeof code === "string" && code !== "0x" ? "deployed" : "missing");
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
setContractStatus("unknown");
|
|
79
|
+
setDeployStatusError(toError(error));
|
|
80
|
+
}
|
|
81
|
+
}, [strategyContractAddress]);
|
|
82
|
+
useEffect(() => {
|
|
83
|
+
void refetchDeploymentStatus();
|
|
84
|
+
}, [refetchDeploymentStatus]);
|
|
85
|
+
useEffect(() => {
|
|
86
|
+
if (!strategyContractAddress)
|
|
87
|
+
return;
|
|
88
|
+
const intervalId = window.setInterval(() => {
|
|
89
|
+
void refetchDeploymentStatus();
|
|
90
|
+
}, 15_000);
|
|
91
|
+
return () => {
|
|
92
|
+
window.clearInterval(intervalId);
|
|
93
|
+
};
|
|
94
|
+
}, [refetchDeploymentStatus, strategyContractAddress]);
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
if (!submittedDeployHash)
|
|
97
|
+
return;
|
|
98
|
+
const provider = getChromeWalletProvider();
|
|
99
|
+
if (!provider) {
|
|
100
|
+
setDeployStatus("failed");
|
|
101
|
+
setDeployStatusError(new Error("Chrome wallet provider is not available."));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const activeProvider = provider;
|
|
105
|
+
let cancelled = false;
|
|
106
|
+
const startedAt = Date.now();
|
|
107
|
+
async function pollReceipt() {
|
|
108
|
+
if (cancelled)
|
|
109
|
+
return;
|
|
110
|
+
try {
|
|
111
|
+
const receipt = (await activeProvider.request({
|
|
112
|
+
method: "eth_getTransactionReceipt",
|
|
113
|
+
params: [submittedDeployHash]
|
|
114
|
+
}));
|
|
115
|
+
if (!receipt) {
|
|
116
|
+
if (Date.now() - startedAt >= deploymentTimeoutMs) {
|
|
117
|
+
setDeployStatus("timeout");
|
|
118
|
+
setDeployStatusError(new Error("Deployment transaction was not confirmed. It may have been cancelled or replaced in the wallet."));
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
window.setTimeout(() => {
|
|
122
|
+
void pollReceipt();
|
|
123
|
+
}, 4_000);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (receipt.status === "0x0") {
|
|
127
|
+
setDeployStatus("failed");
|
|
128
|
+
setDeployStatusError(new Error("Deployment transaction failed on-chain."));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (receipt.contractAddress && isAddress(receipt.contractAddress)) {
|
|
132
|
+
const code = await activeProvider.request({
|
|
133
|
+
method: "eth_getCode",
|
|
134
|
+
params: [receipt.contractAddress, "latest"]
|
|
135
|
+
});
|
|
136
|
+
if (typeof code === "string" && code !== "0x") {
|
|
137
|
+
setStrategyContractAddress(receipt.contractAddress);
|
|
138
|
+
setDeployStatus("deployed");
|
|
139
|
+
setDeployStatusError(undefined);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
setDeployStatus("failed");
|
|
144
|
+
setDeployStatusError(new Error("Deployment transaction confirmed, but no contract code was found."));
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
setDeployStatus("failed");
|
|
148
|
+
setDeployStatusError(toError(error));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
setDeployStatus("confirming");
|
|
152
|
+
void pollReceipt();
|
|
153
|
+
return () => {
|
|
154
|
+
cancelled = true;
|
|
155
|
+
};
|
|
156
|
+
}, [deploymentTimeoutMs, setStrategyContractAddress, submittedDeployHash]);
|
|
157
|
+
const deployStrategyContract = useCallback(async () => {
|
|
158
|
+
if (!account.isConnected)
|
|
159
|
+
throw new Error("Connect a wallet before deploying the strategy contract.");
|
|
160
|
+
if (chainId !== requiredChainId)
|
|
161
|
+
await switchChainAsync({ chainId: requiredChainId });
|
|
162
|
+
setDeployStatus("walletPending");
|
|
163
|
+
setDeployStatusError(undefined);
|
|
164
|
+
try {
|
|
165
|
+
const hash = await deployContractAsync({
|
|
166
|
+
abi: BAND_STRATEGY_ABI,
|
|
167
|
+
bytecode: BAND_STRATEGY_BYTECODE,
|
|
168
|
+
args: [options.strategyWalletAddress ?? account.address],
|
|
169
|
+
chainId: requiredChainId
|
|
170
|
+
});
|
|
171
|
+
setSubmittedDeployHash(hash);
|
|
172
|
+
setDeployStatus("confirming");
|
|
173
|
+
return hash;
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
setDeployStatus(isUserRejection(error) ? "cancelled" : "failed");
|
|
177
|
+
setDeployStatusError(toError(error));
|
|
178
|
+
throw error;
|
|
179
|
+
}
|
|
180
|
+
}, [account.address, account.isConnected, chainId, deployContractAsync, options.strategyWalletAddress, requiredChainId, switchChainAsync]);
|
|
181
|
+
const error = useMemo(() => deployStatusError ?? toError(deployError), [deployError, deployStatusError]);
|
|
182
|
+
const deployStatusText = useMemo(() => {
|
|
183
|
+
if (isDeployPending)
|
|
184
|
+
return "Confirm in wallet";
|
|
185
|
+
if (deployStatus === "walletPending")
|
|
186
|
+
return "Confirm in wallet";
|
|
187
|
+
if (deployStatus === "confirming")
|
|
188
|
+
return "Confirming deployment";
|
|
189
|
+
if (deployStatus === "deployed")
|
|
190
|
+
return "Strategy contract deployed";
|
|
191
|
+
if (deployStatus === "cancelled")
|
|
192
|
+
return "Deployment cancelled";
|
|
193
|
+
if (deployStatus === "failed")
|
|
194
|
+
return "Deployment failed";
|
|
195
|
+
if (deployStatus === "timeout")
|
|
196
|
+
return "Deployment not confirmed";
|
|
197
|
+
return strategyContractAddress ? "Strategy contract address loaded" : "Not deployed";
|
|
198
|
+
}, [deployStatus, isDeployPending, strategyContractAddress]);
|
|
199
|
+
const contractStatusText = useMemo(() => {
|
|
200
|
+
if (!strategyContractAddress)
|
|
201
|
+
return "No strategy contract address";
|
|
202
|
+
if (contractStatus === "checking")
|
|
203
|
+
return "Checking contract";
|
|
204
|
+
if (contractStatus === "deployed")
|
|
205
|
+
return "Contract live";
|
|
206
|
+
if (contractStatus === "missing")
|
|
207
|
+
return "No contract found at stored address";
|
|
208
|
+
return "Contract status unknown";
|
|
209
|
+
}, [contractStatus, strategyContractAddress]);
|
|
210
|
+
return {
|
|
211
|
+
strategyContractAddress,
|
|
212
|
+
deployHash: submittedDeployHash,
|
|
213
|
+
deployStatus,
|
|
214
|
+
deployStatusText,
|
|
215
|
+
contractStatus,
|
|
216
|
+
contractStatusText,
|
|
217
|
+
isConnected: account.isConnected,
|
|
218
|
+
isCorrectChain: chainId === requiredChainId,
|
|
219
|
+
isDeployPending,
|
|
220
|
+
isDeploying: deployStatus === "walletPending" || deployStatus === "confirming",
|
|
221
|
+
isDeployed: contractStatus === "deployed" && Boolean(strategyContractAddress),
|
|
222
|
+
error,
|
|
223
|
+
deployStrategyContract,
|
|
224
|
+
refetchDeploymentStatus,
|
|
225
|
+
setStrategyContractAddress,
|
|
226
|
+
clearStrategyContractAddress
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=useStrategyContractDeployment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStrategyContractDeployment.js","sourceRoot":"","sources":["../src/useStrategyContractDeployment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Address } from "viem";
|
|
2
|
+
export type UseWalletEthBalanceOptions = {
|
|
3
|
+
address?: Address;
|
|
4
|
+
chainId?: number;
|
|
5
|
+
};
|
|
6
|
+
export type UseWalletEthBalanceResult = {
|
|
7
|
+
address?: Address;
|
|
8
|
+
balanceWei: bigint;
|
|
9
|
+
balanceEth: string;
|
|
10
|
+
formatted: string;
|
|
11
|
+
symbol: string;
|
|
12
|
+
isLoading: boolean;
|
|
13
|
+
error?: Error;
|
|
14
|
+
refetch: () => void;
|
|
15
|
+
};
|
|
16
|
+
export declare function useWalletEthBalance(options?: UseWalletEthBalanceOptions): UseWalletEthBalanceResult;
|
|
17
|
+
//# sourceMappingURL=useWalletEthBalance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWalletEthBalance.d.ts","sourceRoot":"","sources":["../src/useWalletEthBalance.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAIjD,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAqBF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,0BAA+B,GAAG,yBAAyB,CA2FvG"}
|