@orderly.network/hooks 1.5.16 → 1.5.17
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/esm/orderly/useDeposit.d.ts.map +1 -1
- package/esm/orderly/useDeposit.js +27 -14
- package/esm/orderly/useDeposit.js.map +1 -1
- package/esm/version.d.ts +1 -1
- package/esm/version.js +2 -2
- package/esm/version.js.map +1 -1
- package/lib/orderly/useDeposit.d.ts.map +1 -1
- package/lib/orderly/useDeposit.js +27 -14
- package/lib/orderly/useDeposit.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +2 -2
- package/lib/version.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDeposit.d.ts","sourceRoot":"","sources":["../../src/orderly/useDeposit.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,GAAG,EAKH,SAAS,EAEV,MAAM,wBAAwB,CAAC;AAMhC,MAAM,MAAM,iBAAiB,GAAG;IAE9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,UAAU,aAAc,iBAAiB;
|
|
1
|
+
{"version":3,"file":"useDeposit.d.ts","sourceRoot":"","sources":["../../src/orderly/useDeposit.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,GAAG,EAKH,SAAS,EAEV,MAAM,wBAAwB,CAAC;AAMhC,MAAM,MAAM,iBAAiB,GAAG;IAE9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,UAAU,aAAc,iBAAiB;IAgVlD,gCAAgC;;;;;;;;;;;;;IAOhC,oBAAoB;;IAEpB,qCAAqC;;IAErC,2CAA2C;;uBAnI3B,MAAM;;4BAjHyB,IAAI,SAAS,EAAE;4BAvC9C,MAAM,aAAa,MAAM;IAiSzC,yBAAyB;;CAG5B,CAAC"}
|
|
@@ -150,39 +150,52 @@ export const useDeposit = (options)=>{
|
|
|
150
150
|
dst.chainId,
|
|
151
151
|
dst.symbol
|
|
152
152
|
]);
|
|
153
|
+
const updateAllowanceWhenTxSuccess = useCallback((txHash)=>{
|
|
154
|
+
return account.walletClient?.pollTransactionReceiptWithBackoff(txHash).then((receipt)=>{
|
|
155
|
+
if (receipt.status === 1) {
|
|
156
|
+
account.assetsManager.getAllowance(options?.address).then((allowance)=>{
|
|
157
|
+
setAllowance(()=>allowance);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}, [
|
|
162
|
+
account,
|
|
163
|
+
options?.address
|
|
164
|
+
]);
|
|
153
165
|
const approve = useCallback(async (amount)=>{
|
|
154
166
|
if (!options?.address) {
|
|
155
167
|
throw new Error("address is required");
|
|
156
168
|
}
|
|
157
169
|
return account.assetsManager.approve(options.address, amount).then((result)=>{
|
|
158
|
-
return
|
|
159
|
-
if (receipt.status === 1) {
|
|
160
|
-
account.assetsManager.getAllowance(options.address).then((allowance)=>{
|
|
161
|
-
setAllowance(()=>allowance);
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
});
|
|
170
|
+
return updateAllowanceWhenTxSuccess(result.hash);
|
|
165
171
|
});
|
|
166
172
|
}, [
|
|
167
173
|
account,
|
|
168
174
|
getAllowance,
|
|
169
|
-
options,
|
|
175
|
+
options?.address,
|
|
170
176
|
dst
|
|
171
177
|
]);
|
|
172
178
|
const deposit = useCallback(async ()=>{
|
|
179
|
+
if (!options?.address) {
|
|
180
|
+
throw new Error("address is required");
|
|
181
|
+
}
|
|
182
|
+
const _allowance = await account.assetsManager.getAllowance(options?.address);
|
|
183
|
+
setAllowance(()=>_allowance);
|
|
184
|
+
if (new Decimal(quantity).greaterThan(_allowance)) {
|
|
185
|
+
throw new Error("Insufficient allowance");
|
|
186
|
+
}
|
|
173
187
|
// only support orderly deposit
|
|
174
|
-
return account.assetsManager.deposit(quantity, depositFee).then((
|
|
175
|
-
|
|
176
|
-
setAllowance(()=>allowance);
|
|
177
|
-
});
|
|
188
|
+
return account.assetsManager.deposit(quantity, depositFee).then((result)=>{
|
|
189
|
+
updateAllowanceWhenTxSuccess(result.hash);
|
|
178
190
|
setBalance((value)=>new Decimal(value).sub(quantity).toString());
|
|
179
|
-
return
|
|
191
|
+
return result;
|
|
180
192
|
});
|
|
181
193
|
}, [
|
|
182
194
|
account,
|
|
183
195
|
fetchBalance,
|
|
184
196
|
quantity,
|
|
185
|
-
depositFee
|
|
197
|
+
depositFee,
|
|
198
|
+
options?.address
|
|
186
199
|
]);
|
|
187
200
|
const loopGetBalance = async ()=>{
|
|
188
201
|
getBalanceListener.current && clearTimeout(getBalanceListener.current);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/orderly/useDeposit.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useAccount } from \"../useAccount\";\nimport {\n API,\n ARBITRUM_MAINNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n AccountStatusEnum,\n DEPOSIT_FEE_RATE,\n NetworkId,\n isNativeTokenChecker,\n} from \"@orderly.network/types\";\nimport { Decimal, isTestnet } from \"@orderly.network/utils\";\nimport { useChains } from \"./useChains\";\nimport { useConfig } from \"../useConfig\";\nimport { useDebouncedCallback } from \"use-debounce\";\n\nexport type useDepositOptions = {\n // from address\n address?: string;\n decimals?: number;\n networkId?: NetworkId;\n srcChainId?: number;\n srcToken?: string;\n quantity?: string;\n};\n\nexport const useDeposit = (options?: useDepositOptions) => {\n const networkId = useConfig(\"networkId\");\n const [balanceRevalidating, setBalanceRevalidating] = useState(false);\n const [allowanceRevalidating, setAllowanceRevalidating] = useState(false);\n\n const [_, { findByChainId }] = useChains(undefined);\n\n const [quantity, setQuantity] = useState<string>(\"\");\n const [depositFee, setDepositFee] = useState<bigint>(0n);\n const [depositFeeRevalidating, setDepositFeeRevalidating] = useState(false);\n\n const [balance, setBalance] = useState(\"0\");\n const [allowance, setAllowance] = useState(\"0\");\n\n const { account, state } = useAccount();\n\n const prevAddress = useRef<string | undefined>();\n const getBalanceListener = useRef<ReturnType<typeof setTimeout>>();\n\n const targetChain = useMemo(() => {\n let chain: API.Chain | undefined;\n\n // Orderly testnet supported chain\n if (networkId === \"testnet\") {\n chain = findByChainId(\n isTestnet(options?.srcChainId!)\n ? options?.srcChainId!\n : ARBITRUM_TESTNET_CHAINID\n ) as API.Chain;\n } else {\n chain = findByChainId(options?.srcChainId!) as API.Chain;\n // if is orderly un-supported chain\n if (!chain?.network_infos?.bridgeless) {\n // Orderly mainnet supported chain\n chain = findByChainId(ARBITRUM_MAINNET_CHAINID) as API.Chain;\n }\n }\n return chain;\n }, [networkId, findByChainId, options?.srcChainId]);\n\n const dst = useMemo(() => {\n if (!targetChain) {\n throw new Error(\"dst chain not found\");\n }\n\n const USDC = targetChain?.token_infos.find(\n (token: API.TokenInfo) => token.symbol === \"USDC\"\n );\n\n return {\n symbol: \"USDC\",\n address: USDC?.address,\n decimals: USDC?.decimals,\n chainId: targetChain.network_infos.chain_id,\n network: targetChain.network_infos.shortName,\n };\n }, [targetChain]);\n\n const isNativeToken = useMemo(\n () => isNativeTokenChecker(options?.address || \"\"),\n [options?.address]\n );\n\n const fetchBalanceHandler = useCallback(\n async (address: string, decimals?: number) => {\n let balance: string;\n\n if (!!address && isNativeTokenChecker(address)) {\n balance = await account.assetsManager.getNativeBalance({\n decimals,\n });\n } else {\n balance = await account.assetsManager.getBalance(address, { decimals });\n }\n\n return balance;\n },\n []\n );\n\n const fetchBalance = useCallback(\n async (\n // token contract address\n address?: string,\n // format decimals\n decimals?: number\n ) => {\n if (!address) return;\n\n try {\n // if (balanceRevalidating) return;\n const balance = await fetchBalanceHandler(address, decimals);\n\n setBalance(() => balance);\n } catch (e) {\n console.warn(\"----- refresh balance error -----\", e);\n\n setBalance(() => \"0\");\n }\n },\n [state]\n );\n\n const fetchBalances = useCallback(async (tokens: API.TokenInfo[]) => {\n const tasks = [];\n\n for (const token of tokens) {\n // native token skip\n if (isNativeTokenChecker(token.address)) {\n continue;\n }\n tasks.push(account.assetsManager.getBalanceByAddress(token.address));\n }\n\n const balances = await Promise.all(tasks);\n\n // const balances = await account.assetsManager.getBalances(tokens);\n // setBalance(() => balances);\n }, []);\n\n const getAllowance = async (address?: string, vaultAddress?: string) => {\n // if (!address || !vaultAddress) return;\n const key = `${address}-${vaultAddress}`;\n\n if (prevAddress.current === key) return;\n\n if (!address || !vaultAddress) return;\n if (address && isNativeTokenChecker(address)) return;\n // if (allowanceRevalidating) return;\n // setAllowanceRevalidating(true);\n\n prevAddress.current = key;\n\n const allowance = await account.assetsManager.getAllowance(\n address,\n vaultAddress\n );\n\n setAllowance(() => allowance);\n // setAllowanceRevalidating(false);\n return allowance;\n };\n\n const getAllowanceByDefaultAddress = async (address?: string) => {\n if (prevAddress.current === address) return;\n\n if (!address || isNativeTokenChecker(address)) return;\n\n prevAddress.current = address;\n\n const allowance = await account.assetsManager.getAllowance(address);\n setAllowance(() => allowance);\n };\n\n const queryBalance = useDebouncedCallback(\n (tokenAddress?: string, decimals?: number) => {\n fetchBalance(options?.address, options?.decimals).finally(() => {\n setBalanceRevalidating(false);\n });\n },\n 100\n );\n\n const queryAllowance = useDebouncedCallback(\n (tokenAddress?: string, vaultAddress?: string) => {\n getAllowance(tokenAddress, vaultAddress);\n },\n 100\n );\n\n useEffect(() => {\n if (state.status < AccountStatusEnum.Connected) return;\n setBalanceRevalidating(true);\n // fetchBalance(options?.address, options?.decimals).finally(() => {\n // setBalanceRevalidating(false);\n // });\n\n queryBalance(options?.address, options?.decimals);\n\n if (dst.chainId !== options?.srcChainId) {\n queryAllowance(options?.address);\n } else {\n if (dst.symbol !== options?.srcToken) {\n queryAllowance(options?.address);\n } else {\n getAllowanceByDefaultAddress(options?.address);\n }\n }\n }, [\n state.status,\n options?.address,\n options?.srcChainId,\n options?.srcToken,\n account.address,\n dst.chainId,\n dst.symbol,\n ]);\n\n const approve = useCallback(\n async (amount?: string) => {\n if (!options?.address) {\n throw new Error(\"address is required\");\n }\n return account.assetsManager\n .approve(options.address, amount)\n .then((result: any) => {\n return account.walletClient\n ?.pollTransactionReceiptWithBackoff(result.hash)\n .then((receipt) => {\n if (receipt.status === 1) {\n account.assetsManager\n .getAllowance(options.address)\n .then((allowance) => {\n setAllowance(() => allowance);\n });\n }\n });\n });\n },\n [account, getAllowance, options, dst]\n );\n\n const deposit = useCallback(async () => {\n // only support orderly deposit\n return account.assetsManager\n .deposit(quantity, depositFee)\n .then((res: any) => {\n account.assetsManager\n .getAllowance(options?.address)\n .then((allowance) => {\n setAllowance(() => allowance);\n });\n setBalance((value) => new Decimal(value).sub(quantity).toString());\n return res;\n });\n }, [account, fetchBalance, quantity, depositFee]);\n\n const loopGetBalance = async () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\n getBalanceListener.current = setTimeout(async () => {\n try {\n const balance = await fetchBalanceHandler(\n options?.address!,\n options?.decimals\n );\n\n setBalance(balance);\n loopGetBalance();\n } catch (err) {\n console.log(\"fetchBalanceHandler error\", err);\n }\n }, 3000);\n };\n\n const getDepositFee = useCallback(\n async (quantity: string) => {\n return account.assetsManager.getDepositFee(\n quantity,\n targetChain?.network_infos\n );\n },\n [account, targetChain]\n );\n\n const enquiryDepositFee = useCallback(() => {\n if (isNaN(Number(quantity)) || !quantity) {\n setDepositFee(0n);\n setDepositFeeRevalidating(false);\n return;\n }\n\n setDepositFeeRevalidating(true);\n\n getDepositFee(quantity)\n .then((res: bigint = 0n) => {\n const fee = BigInt(\n new Decimal(res.toString())\n .mul(DEPOSIT_FEE_RATE)\n .toFixed(0, Decimal.ROUND_UP)\n .toString()\n );\n\n setDepositFee(fee);\n console.log(\"getDepositFee\", fee);\n })\n .catch((error) => {\n console.error(\"getDepositFee\", error);\n })\n .finally(() => {\n setDepositFeeRevalidating(false);\n });\n }, [quantity]);\n\n useEffect(() => {\n enquiryDepositFee();\n }, [quantity]);\n\n useEffect(() => {\n if (!options?.address) {\n return;\n }\n\n loopGetBalance();\n\n return () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\n };\n\n // account.walletClient.on(\n // // {\n // // address: options?.address,\n // // },\n // \"block\",\n // (log: any, event: any) => {\n // console.log(\"account.walletClient.on\", log, event);\n // }\n // );\n }, [options?.address, options?.decimals]);\n\n return {\n /** orderly support chain dst */\n dst,\n balance,\n allowance,\n isNativeToken,\n balanceRevalidating,\n allowanceRevalidating,\n /** input quantiy */\n quantity,\n /** orderly deposit fee, unit: wei */\n depositFee,\n /** enquiring depositFee status on chain */\n depositFeeRevalidating,\n approve,\n deposit,\n fetchBalances,\n fetchBalance: fetchBalanceHandler,\n /** set input quantity */\n setQuantity,\n };\n};\n"],"names":["useCallback","useEffect","useMemo","useRef","useState","useAccount","ARBITRUM_MAINNET_CHAINID","ARBITRUM_TESTNET_CHAINID","AccountStatusEnum","DEPOSIT_FEE_RATE","isNativeTokenChecker","Decimal","isTestnet","useChains","useConfig","useDebouncedCallback","useDeposit","options","networkId","balanceRevalidating","setBalanceRevalidating","allowanceRevalidating","setAllowanceRevalidating","_","findByChainId","undefined","quantity","setQuantity","depositFee","setDepositFee","depositFeeRevalidating","setDepositFeeRevalidating","balance","setBalance","allowance","setAllowance","account","state","prevAddress","getBalanceListener","targetChain","chain","srcChainId","network_infos","bridgeless","dst","Error","USDC","token_infos","find","token","symbol","address","decimals","chainId","chain_id","network","shortName","isNativeToken","fetchBalanceHandler","assetsManager","getNativeBalance","getBalance","fetchBalance","e","fetchBalances","tokens","tasks","push","getBalanceByAddress","balances","Promise","all","getAllowance","vaultAddress","key","current","getAllowanceByDefaultAddress","queryBalance","tokenAddress","finally","queryAllowance","status","Connected","srcToken","approve","amount","then","result","walletClient","pollTransactionReceiptWithBackoff","hash","receipt","deposit","res","value","sub","toString","loopGetBalance","clearTimeout","setTimeout","err","getDepositFee","enquiryDepositFee","isNaN","Number","fee","BigInt","mul","toFixed","ROUND_UP","catch","error","console"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/orderly/useDeposit.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useAccount } from \"../useAccount\";\nimport {\n API,\n ARBITRUM_MAINNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n AccountStatusEnum,\n DEPOSIT_FEE_RATE,\n NetworkId,\n isNativeTokenChecker,\n} from \"@orderly.network/types\";\nimport { Decimal, isTestnet } from \"@orderly.network/utils\";\nimport { useChains } from \"./useChains\";\nimport { useConfig } from \"../useConfig\";\nimport { useDebouncedCallback } from \"use-debounce\";\n\nexport type useDepositOptions = {\n // from address\n address?: string;\n decimals?: number;\n networkId?: NetworkId;\n srcChainId?: number;\n srcToken?: string;\n quantity?: string;\n};\n\nexport const useDeposit = (options?: useDepositOptions) => {\n const networkId = useConfig(\"networkId\");\n const [balanceRevalidating, setBalanceRevalidating] = useState(false);\n const [allowanceRevalidating, setAllowanceRevalidating] = useState(false);\n\n const [_, { findByChainId }] = useChains(undefined);\n\n const [quantity, setQuantity] = useState<string>(\"\");\n const [depositFee, setDepositFee] = useState<bigint>(0n);\n const [depositFeeRevalidating, setDepositFeeRevalidating] = useState(false);\n\n const [balance, setBalance] = useState(\"0\");\n const [allowance, setAllowance] = useState(\"0\");\n\n const { account, state } = useAccount();\n\n const prevAddress = useRef<string | undefined>();\n const getBalanceListener = useRef<ReturnType<typeof setTimeout>>();\n\n const targetChain = useMemo(() => {\n let chain: API.Chain | undefined;\n\n // Orderly testnet supported chain\n if (networkId === \"testnet\") {\n chain = findByChainId(\n isTestnet(options?.srcChainId!)\n ? options?.srcChainId!\n : ARBITRUM_TESTNET_CHAINID\n ) as API.Chain;\n } else {\n chain = findByChainId(options?.srcChainId!) as API.Chain;\n // if is orderly un-supported chain\n if (!chain?.network_infos?.bridgeless) {\n // Orderly mainnet supported chain\n chain = findByChainId(ARBITRUM_MAINNET_CHAINID) as API.Chain;\n }\n }\n return chain;\n }, [networkId, findByChainId, options?.srcChainId]);\n\n const dst = useMemo(() => {\n if (!targetChain) {\n throw new Error(\"dst chain not found\");\n }\n\n const USDC = targetChain?.token_infos.find(\n (token: API.TokenInfo) => token.symbol === \"USDC\"\n );\n\n return {\n symbol: \"USDC\",\n address: USDC?.address,\n decimals: USDC?.decimals,\n chainId: targetChain.network_infos.chain_id,\n network: targetChain.network_infos.shortName,\n };\n }, [targetChain]);\n\n const isNativeToken = useMemo(\n () => isNativeTokenChecker(options?.address || \"\"),\n [options?.address]\n );\n\n const fetchBalanceHandler = useCallback(\n async (address: string, decimals?: number) => {\n let balance: string;\n\n if (!!address && isNativeTokenChecker(address)) {\n balance = await account.assetsManager.getNativeBalance({\n decimals,\n });\n } else {\n balance = await account.assetsManager.getBalance(address, { decimals });\n }\n\n return balance;\n },\n []\n );\n\n const fetchBalance = useCallback(\n async (\n // token contract address\n address?: string,\n // format decimals\n decimals?: number\n ) => {\n if (!address) return;\n\n try {\n // if (balanceRevalidating) return;\n const balance = await fetchBalanceHandler(address, decimals);\n\n setBalance(() => balance);\n } catch (e) {\n console.warn(\"----- refresh balance error -----\", e);\n\n setBalance(() => \"0\");\n }\n },\n [state]\n );\n\n const fetchBalances = useCallback(async (tokens: API.TokenInfo[]) => {\n const tasks = [];\n\n for (const token of tokens) {\n // native token skip\n if (isNativeTokenChecker(token.address)) {\n continue;\n }\n tasks.push(account.assetsManager.getBalanceByAddress(token.address));\n }\n\n const balances = await Promise.all(tasks);\n\n // const balances = await account.assetsManager.getBalances(tokens);\n // setBalance(() => balances);\n }, []);\n\n const getAllowance = async (address?: string, vaultAddress?: string) => {\n // if (!address || !vaultAddress) return;\n const key = `${address}-${vaultAddress}`;\n\n if (prevAddress.current === key) return;\n\n if (!address || !vaultAddress) return;\n if (address && isNativeTokenChecker(address)) return;\n // if (allowanceRevalidating) return;\n // setAllowanceRevalidating(true);\n\n prevAddress.current = key;\n\n const allowance = await account.assetsManager.getAllowance(\n address,\n vaultAddress\n );\n\n setAllowance(() => allowance);\n // setAllowanceRevalidating(false);\n return allowance;\n };\n\n const getAllowanceByDefaultAddress = async (address?: string) => {\n if (prevAddress.current === address) return;\n\n if (!address || isNativeTokenChecker(address)) return;\n\n prevAddress.current = address;\n\n const allowance = await account.assetsManager.getAllowance(address);\n setAllowance(() => allowance);\n };\n\n const queryBalance = useDebouncedCallback(\n (tokenAddress?: string, decimals?: number) => {\n fetchBalance(options?.address, options?.decimals).finally(() => {\n setBalanceRevalidating(false);\n });\n },\n 100\n );\n\n const queryAllowance = useDebouncedCallback(\n (tokenAddress?: string, vaultAddress?: string) => {\n getAllowance(tokenAddress, vaultAddress);\n },\n 100\n );\n\n useEffect(() => {\n if (state.status < AccountStatusEnum.Connected) return;\n setBalanceRevalidating(true);\n // fetchBalance(options?.address, options?.decimals).finally(() => {\n // setBalanceRevalidating(false);\n // });\n\n queryBalance(options?.address, options?.decimals);\n\n if (dst.chainId !== options?.srcChainId) {\n queryAllowance(options?.address);\n } else {\n if (dst.symbol !== options?.srcToken) {\n queryAllowance(options?.address);\n } else {\n getAllowanceByDefaultAddress(options?.address);\n }\n }\n }, [\n state.status,\n options?.address,\n options?.srcChainId,\n options?.srcToken,\n account.address,\n dst.chainId,\n dst.symbol,\n ]);\n\n const updateAllowanceWhenTxSuccess = useCallback(\n (txHash: string) => {\n return account.walletClient\n ?.pollTransactionReceiptWithBackoff(txHash)\n .then((receipt) => {\n if (receipt.status === 1) {\n account.assetsManager\n .getAllowance(options?.address)\n .then((allowance) => {\n setAllowance(() => allowance);\n });\n }\n });\n },\n [account, options?.address]\n );\n\n const approve = useCallback(\n async (amount?: string) => {\n if (!options?.address) {\n throw new Error(\"address is required\");\n }\n return account.assetsManager\n .approve(options.address, amount)\n .then((result: any) => {\n return updateAllowanceWhenTxSuccess(result.hash);\n });\n },\n [account, getAllowance, options?.address, dst]\n );\n\n const deposit = useCallback(async () => {\n if (!options?.address) {\n throw new Error(\"address is required\");\n }\n const _allowance = await account.assetsManager.getAllowance(\n options?.address\n );\n\n setAllowance(() => _allowance);\n\n if (new Decimal(quantity).greaterThan(_allowance)) {\n throw new Error(\"Insufficient allowance\");\n }\n\n // only support orderly deposit\n return account.assetsManager\n .deposit(quantity, depositFee)\n .then((result: any) => {\n updateAllowanceWhenTxSuccess(result.hash);\n setBalance((value) => new Decimal(value).sub(quantity).toString());\n return result;\n });\n }, [account, fetchBalance, quantity, depositFee, options?.address]);\n\n const loopGetBalance = async () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\n getBalanceListener.current = setTimeout(async () => {\n try {\n const balance = await fetchBalanceHandler(\n options?.address!,\n options?.decimals\n );\n\n setBalance(balance);\n loopGetBalance();\n } catch (err) {\n console.log(\"fetchBalanceHandler error\", err);\n }\n }, 3000);\n };\n\n const getDepositFee = useCallback(\n async (quantity: string) => {\n return account.assetsManager.getDepositFee(\n quantity,\n targetChain?.network_infos\n );\n },\n [account, targetChain]\n );\n\n const enquiryDepositFee = useCallback(() => {\n if (isNaN(Number(quantity)) || !quantity) {\n setDepositFee(0n);\n setDepositFeeRevalidating(false);\n return;\n }\n\n setDepositFeeRevalidating(true);\n\n getDepositFee(quantity)\n .then((res: bigint = 0n) => {\n const fee = BigInt(\n new Decimal(res.toString())\n .mul(DEPOSIT_FEE_RATE)\n .toFixed(0, Decimal.ROUND_UP)\n .toString()\n );\n\n setDepositFee(fee);\n console.log(\"getDepositFee\", fee);\n })\n .catch((error) => {\n console.error(\"getDepositFee\", error);\n })\n .finally(() => {\n setDepositFeeRevalidating(false);\n });\n }, [quantity]);\n\n useEffect(() => {\n enquiryDepositFee();\n }, [quantity]);\n\n useEffect(() => {\n if (!options?.address) {\n return;\n }\n\n loopGetBalance();\n\n return () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\n };\n\n // account.walletClient.on(\n // // {\n // // address: options?.address,\n // // },\n // \"block\",\n // (log: any, event: any) => {\n // console.log(\"account.walletClient.on\", log, event);\n // }\n // );\n }, [options?.address, options?.decimals]);\n\n return {\n /** orderly support chain dst */\n dst,\n balance,\n allowance,\n isNativeToken,\n balanceRevalidating,\n allowanceRevalidating,\n /** input quantiy */\n quantity,\n /** orderly deposit fee, unit: wei */\n depositFee,\n /** enquiring depositFee status on chain */\n depositFeeRevalidating,\n approve,\n deposit,\n fetchBalances,\n fetchBalance: fetchBalanceHandler,\n /** set input quantity */\n setQuantity,\n };\n};\n"],"names":["useCallback","useEffect","useMemo","useRef","useState","useAccount","ARBITRUM_MAINNET_CHAINID","ARBITRUM_TESTNET_CHAINID","AccountStatusEnum","DEPOSIT_FEE_RATE","isNativeTokenChecker","Decimal","isTestnet","useChains","useConfig","useDebouncedCallback","useDeposit","options","networkId","balanceRevalidating","setBalanceRevalidating","allowanceRevalidating","setAllowanceRevalidating","_","findByChainId","undefined","quantity","setQuantity","depositFee","setDepositFee","depositFeeRevalidating","setDepositFeeRevalidating","balance","setBalance","allowance","setAllowance","account","state","prevAddress","getBalanceListener","targetChain","chain","srcChainId","network_infos","bridgeless","dst","Error","USDC","token_infos","find","token","symbol","address","decimals","chainId","chain_id","network","shortName","isNativeToken","fetchBalanceHandler","assetsManager","getNativeBalance","getBalance","fetchBalance","e","fetchBalances","tokens","tasks","push","getBalanceByAddress","balances","Promise","all","getAllowance","vaultAddress","key","current","getAllowanceByDefaultAddress","queryBalance","tokenAddress","finally","queryAllowance","status","Connected","srcToken","updateAllowanceWhenTxSuccess","txHash","walletClient","pollTransactionReceiptWithBackoff","then","receipt","approve","amount","result","hash","deposit","_allowance","greaterThan","value","sub","toString","loopGetBalance","clearTimeout","setTimeout","err","getDepositFee","enquiryDepositFee","isNaN","Number","res","fee","BigInt","mul","toFixed","ROUND_UP","catch","error","console"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/esm/version.d.ts
CHANGED
package/esm/version.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
if (typeof window !== 'undefined') {
|
|
2
2
|
window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};
|
|
3
|
-
window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.5.
|
|
3
|
+
window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.5.17";
|
|
4
4
|
}
|
|
5
|
-
export default "1.5.
|
|
5
|
+
export default "1.5.17";
|
|
6
6
|
|
|
7
7
|
//# sourceMappingURL=version.js.map
|
package/esm/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.5.
|
|
1
|
+
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.5.17\";\n};\n\nexport default \"1.5.17\";\n"],"names":["window","__ORDERLY_VERSION__"],"rangeMappings":";;;;","mappings":"AAQA,IAAG,OAAOA,WAAW,aAAa;IAC9BA,OAAOC,mBAAmB,GAAGD,OAAOC,mBAAmB,IAAI,CAAC;IAC5DD,OAAOC,mBAAmB,CAAC,yBAAyB,GAAG;AAC3D;AAEA,eAAe,SAAS"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDeposit.d.ts","sourceRoot":"","sources":["../../src/orderly/useDeposit.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,GAAG,EAKH,SAAS,EAEV,MAAM,wBAAwB,CAAC;AAMhC,MAAM,MAAM,iBAAiB,GAAG;IAE9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,UAAU,aAAc,iBAAiB;
|
|
1
|
+
{"version":3,"file":"useDeposit.d.ts","sourceRoot":"","sources":["../../src/orderly/useDeposit.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,GAAG,EAKH,SAAS,EAEV,MAAM,wBAAwB,CAAC;AAMhC,MAAM,MAAM,iBAAiB,GAAG;IAE9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,UAAU,aAAc,iBAAiB;IAgVlD,gCAAgC;;;;;;;;;;;;;IAOhC,oBAAoB;;IAEpB,qCAAqC;;IAErC,2CAA2C;;uBAnI3B,MAAM;;4BAjHyB,IAAI,SAAS,EAAE;4BAvC9C,MAAM,aAAa,MAAM;IAiSzC,yBAAyB;;CAG5B,CAAC"}
|
|
@@ -160,39 +160,52 @@ const useDeposit = (options)=>{
|
|
|
160
160
|
dst.chainId,
|
|
161
161
|
dst.symbol
|
|
162
162
|
]);
|
|
163
|
+
const updateAllowanceWhenTxSuccess = (0, _react.useCallback)((txHash)=>{
|
|
164
|
+
return account.walletClient?.pollTransactionReceiptWithBackoff(txHash).then((receipt)=>{
|
|
165
|
+
if (receipt.status === 1) {
|
|
166
|
+
account.assetsManager.getAllowance(options?.address).then((allowance)=>{
|
|
167
|
+
setAllowance(()=>allowance);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}, [
|
|
172
|
+
account,
|
|
173
|
+
options?.address
|
|
174
|
+
]);
|
|
163
175
|
const approve = (0, _react.useCallback)(async (amount)=>{
|
|
164
176
|
if (!options?.address) {
|
|
165
177
|
throw new Error("address is required");
|
|
166
178
|
}
|
|
167
179
|
return account.assetsManager.approve(options.address, amount).then((result)=>{
|
|
168
|
-
return
|
|
169
|
-
if (receipt.status === 1) {
|
|
170
|
-
account.assetsManager.getAllowance(options.address).then((allowance)=>{
|
|
171
|
-
setAllowance(()=>allowance);
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
});
|
|
180
|
+
return updateAllowanceWhenTxSuccess(result.hash);
|
|
175
181
|
});
|
|
176
182
|
}, [
|
|
177
183
|
account,
|
|
178
184
|
getAllowance,
|
|
179
|
-
options,
|
|
185
|
+
options?.address,
|
|
180
186
|
dst
|
|
181
187
|
]);
|
|
182
188
|
const deposit = (0, _react.useCallback)(async ()=>{
|
|
189
|
+
if (!options?.address) {
|
|
190
|
+
throw new Error("address is required");
|
|
191
|
+
}
|
|
192
|
+
const _allowance = await account.assetsManager.getAllowance(options?.address);
|
|
193
|
+
setAllowance(()=>_allowance);
|
|
194
|
+
if (new _utils.Decimal(quantity).greaterThan(_allowance)) {
|
|
195
|
+
throw new Error("Insufficient allowance");
|
|
196
|
+
}
|
|
183
197
|
// only support orderly deposit
|
|
184
|
-
return account.assetsManager.deposit(quantity, depositFee).then((
|
|
185
|
-
|
|
186
|
-
setAllowance(()=>allowance);
|
|
187
|
-
});
|
|
198
|
+
return account.assetsManager.deposit(quantity, depositFee).then((result)=>{
|
|
199
|
+
updateAllowanceWhenTxSuccess(result.hash);
|
|
188
200
|
setBalance((value)=>new _utils.Decimal(value).sub(quantity).toString());
|
|
189
|
-
return
|
|
201
|
+
return result;
|
|
190
202
|
});
|
|
191
203
|
}, [
|
|
192
204
|
account,
|
|
193
205
|
fetchBalance,
|
|
194
206
|
quantity,
|
|
195
|
-
depositFee
|
|
207
|
+
depositFee,
|
|
208
|
+
options?.address
|
|
196
209
|
]);
|
|
197
210
|
const loopGetBalance = async ()=>{
|
|
198
211
|
getBalanceListener.current && clearTimeout(getBalanceListener.current);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/orderly/useDeposit.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useAccount } from \"../useAccount\";\nimport {\n API,\n ARBITRUM_MAINNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n AccountStatusEnum,\n DEPOSIT_FEE_RATE,\n NetworkId,\n isNativeTokenChecker,\n} from \"@orderly.network/types\";\nimport { Decimal, isTestnet } from \"@orderly.network/utils\";\nimport { useChains } from \"./useChains\";\nimport { useConfig } from \"../useConfig\";\nimport { useDebouncedCallback } from \"use-debounce\";\n\nexport type useDepositOptions = {\n // from address\n address?: string;\n decimals?: number;\n networkId?: NetworkId;\n srcChainId?: number;\n srcToken?: string;\n quantity?: string;\n};\n\nexport const useDeposit = (options?: useDepositOptions) => {\n const networkId = useConfig(\"networkId\");\n const [balanceRevalidating, setBalanceRevalidating] = useState(false);\n const [allowanceRevalidating, setAllowanceRevalidating] = useState(false);\n\n const [_, { findByChainId }] = useChains(undefined);\n\n const [quantity, setQuantity] = useState<string>(\"\");\n const [depositFee, setDepositFee] = useState<bigint>(0n);\n const [depositFeeRevalidating, setDepositFeeRevalidating] = useState(false);\n\n const [balance, setBalance] = useState(\"0\");\n const [allowance, setAllowance] = useState(\"0\");\n\n const { account, state } = useAccount();\n\n const prevAddress = useRef<string | undefined>();\n const getBalanceListener = useRef<ReturnType<typeof setTimeout>>();\n\n const targetChain = useMemo(() => {\n let chain: API.Chain | undefined;\n\n // Orderly testnet supported chain\n if (networkId === \"testnet\") {\n chain = findByChainId(\n isTestnet(options?.srcChainId!)\n ? options?.srcChainId!\n : ARBITRUM_TESTNET_CHAINID\n ) as API.Chain;\n } else {\n chain = findByChainId(options?.srcChainId!) as API.Chain;\n // if is orderly un-supported chain\n if (!chain?.network_infos?.bridgeless) {\n // Orderly mainnet supported chain\n chain = findByChainId(ARBITRUM_MAINNET_CHAINID) as API.Chain;\n }\n }\n return chain;\n }, [networkId, findByChainId, options?.srcChainId]);\n\n const dst = useMemo(() => {\n if (!targetChain) {\n throw new Error(\"dst chain not found\");\n }\n\n const USDC = targetChain?.token_infos.find(\n (token: API.TokenInfo) => token.symbol === \"USDC\"\n );\n\n return {\n symbol: \"USDC\",\n address: USDC?.address,\n decimals: USDC?.decimals,\n chainId: targetChain.network_infos.chain_id,\n network: targetChain.network_infos.shortName,\n };\n }, [targetChain]);\n\n const isNativeToken = useMemo(\n () => isNativeTokenChecker(options?.address || \"\"),\n [options?.address]\n );\n\n const fetchBalanceHandler = useCallback(\n async (address: string, decimals?: number) => {\n let balance: string;\n\n if (!!address && isNativeTokenChecker(address)) {\n balance = await account.assetsManager.getNativeBalance({\n decimals,\n });\n } else {\n balance = await account.assetsManager.getBalance(address, { decimals });\n }\n\n return balance;\n },\n []\n );\n\n const fetchBalance = useCallback(\n async (\n // token contract address\n address?: string,\n // format decimals\n decimals?: number\n ) => {\n if (!address) return;\n\n try {\n // if (balanceRevalidating) return;\n const balance = await fetchBalanceHandler(address, decimals);\n\n setBalance(() => balance);\n } catch (e) {\n console.warn(\"----- refresh balance error -----\", e);\n\n setBalance(() => \"0\");\n }\n },\n [state]\n );\n\n const fetchBalances = useCallback(async (tokens: API.TokenInfo[]) => {\n const tasks = [];\n\n for (const token of tokens) {\n // native token skip\n if (isNativeTokenChecker(token.address)) {\n continue;\n }\n tasks.push(account.assetsManager.getBalanceByAddress(token.address));\n }\n\n const balances = await Promise.all(tasks);\n\n // const balances = await account.assetsManager.getBalances(tokens);\n // setBalance(() => balances);\n }, []);\n\n const getAllowance = async (address?: string, vaultAddress?: string) => {\n // if (!address || !vaultAddress) return;\n const key = `${address}-${vaultAddress}`;\n\n if (prevAddress.current === key) return;\n\n if (!address || !vaultAddress) return;\n if (address && isNativeTokenChecker(address)) return;\n // if (allowanceRevalidating) return;\n // setAllowanceRevalidating(true);\n\n prevAddress.current = key;\n\n const allowance = await account.assetsManager.getAllowance(\n address,\n vaultAddress\n );\n\n setAllowance(() => allowance);\n // setAllowanceRevalidating(false);\n return allowance;\n };\n\n const getAllowanceByDefaultAddress = async (address?: string) => {\n if (prevAddress.current === address) return;\n\n if (!address || isNativeTokenChecker(address)) return;\n\n prevAddress.current = address;\n\n const allowance = await account.assetsManager.getAllowance(address);\n setAllowance(() => allowance);\n };\n\n const queryBalance = useDebouncedCallback(\n (tokenAddress?: string, decimals?: number) => {\n fetchBalance(options?.address, options?.decimals).finally(() => {\n setBalanceRevalidating(false);\n });\n },\n 100\n );\n\n const queryAllowance = useDebouncedCallback(\n (tokenAddress?: string, vaultAddress?: string) => {\n getAllowance(tokenAddress, vaultAddress);\n },\n 100\n );\n\n useEffect(() => {\n if (state.status < AccountStatusEnum.Connected) return;\n setBalanceRevalidating(true);\n // fetchBalance(options?.address, options?.decimals).finally(() => {\n // setBalanceRevalidating(false);\n // });\n\n queryBalance(options?.address, options?.decimals);\n\n if (dst.chainId !== options?.srcChainId) {\n queryAllowance(options?.address);\n } else {\n if (dst.symbol !== options?.srcToken) {\n queryAllowance(options?.address);\n } else {\n getAllowanceByDefaultAddress(options?.address);\n }\n }\n }, [\n state.status,\n options?.address,\n options?.srcChainId,\n options?.srcToken,\n account.address,\n dst.chainId,\n dst.symbol,\n ]);\n\n const approve = useCallback(\n async (amount?: string) => {\n if (!options?.address) {\n throw new Error(\"address is required\");\n }\n return account.assetsManager\n .approve(options.address, amount)\n .then((result: any) => {\n return account.walletClient\n ?.pollTransactionReceiptWithBackoff(result.hash)\n .then((receipt) => {\n if (receipt.status === 1) {\n account.assetsManager\n .getAllowance(options.address)\n .then((allowance) => {\n setAllowance(() => allowance);\n });\n }\n });\n });\n },\n [account, getAllowance, options, dst]\n );\n\n const deposit = useCallback(async () => {\n // only support orderly deposit\n return account.assetsManager\n .deposit(quantity, depositFee)\n .then((res: any) => {\n account.assetsManager\n .getAllowance(options?.address)\n .then((allowance) => {\n setAllowance(() => allowance);\n });\n setBalance((value) => new Decimal(value).sub(quantity).toString());\n return res;\n });\n }, [account, fetchBalance, quantity, depositFee]);\n\n const loopGetBalance = async () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\n getBalanceListener.current = setTimeout(async () => {\n try {\n const balance = await fetchBalanceHandler(\n options?.address!,\n options?.decimals\n );\n\n setBalance(balance);\n loopGetBalance();\n } catch (err) {\n console.log(\"fetchBalanceHandler error\", err);\n }\n }, 3000);\n };\n\n const getDepositFee = useCallback(\n async (quantity: string) => {\n return account.assetsManager.getDepositFee(\n quantity,\n targetChain?.network_infos\n );\n },\n [account, targetChain]\n );\n\n const enquiryDepositFee = useCallback(() => {\n if (isNaN(Number(quantity)) || !quantity) {\n setDepositFee(0n);\n setDepositFeeRevalidating(false);\n return;\n }\n\n setDepositFeeRevalidating(true);\n\n getDepositFee(quantity)\n .then((res: bigint = 0n) => {\n const fee = BigInt(\n new Decimal(res.toString())\n .mul(DEPOSIT_FEE_RATE)\n .toFixed(0, Decimal.ROUND_UP)\n .toString()\n );\n\n setDepositFee(fee);\n console.log(\"getDepositFee\", fee);\n })\n .catch((error) => {\n console.error(\"getDepositFee\", error);\n })\n .finally(() => {\n setDepositFeeRevalidating(false);\n });\n }, [quantity]);\n\n useEffect(() => {\n enquiryDepositFee();\n }, [quantity]);\n\n useEffect(() => {\n if (!options?.address) {\n return;\n }\n\n loopGetBalance();\n\n return () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\n };\n\n // account.walletClient.on(\n // // {\n // // address: options?.address,\n // // },\n // \"block\",\n // (log: any, event: any) => {\n // console.log(\"account.walletClient.on\", log, event);\n // }\n // );\n }, [options?.address, options?.decimals]);\n\n return {\n /** orderly support chain dst */\n dst,\n balance,\n allowance,\n isNativeToken,\n balanceRevalidating,\n allowanceRevalidating,\n /** input quantiy */\n quantity,\n /** orderly deposit fee, unit: wei */\n depositFee,\n /** enquiring depositFee status on chain */\n depositFeeRevalidating,\n approve,\n deposit,\n fetchBalances,\n fetchBalance: fetchBalanceHandler,\n /** set input quantity */\n setQuantity,\n };\n};\n"],"names":["useDeposit","options","networkId","useConfig","balanceRevalidating","setBalanceRevalidating","useState","allowanceRevalidating","setAllowanceRevalidating","_","findByChainId","useChains","undefined","quantity","setQuantity","depositFee","setDepositFee","depositFeeRevalidating","setDepositFeeRevalidating","balance","setBalance","allowance","setAllowance","account","state","useAccount","prevAddress","useRef","getBalanceListener","targetChain","useMemo","chain","isTestnet","srcChainId","ARBITRUM_TESTNET_CHAINID","network_infos","bridgeless","ARBITRUM_MAINNET_CHAINID","dst","Error","USDC","token_infos","find","token","symbol","address","decimals","chainId","chain_id","network","shortName","isNativeToken","isNativeTokenChecker","fetchBalanceHandler","useCallback","assetsManager","getNativeBalance","getBalance","fetchBalance","e","fetchBalances","tokens","tasks","push","getBalanceByAddress","balances","Promise","all","getAllowance","vaultAddress","key","current","getAllowanceByDefaultAddress","queryBalance","useDebouncedCallback","tokenAddress","finally","queryAllowance","useEffect","status","AccountStatusEnum","Connected","srcToken","approve","amount","then","result","walletClient","pollTransactionReceiptWithBackoff","hash","receipt","deposit","res","value","Decimal","sub","toString","loopGetBalance","clearTimeout","setTimeout","err","getDepositFee","enquiryDepositFee","isNaN","Number","fee","BigInt","mul","DEPOSIT_FEE_RATE","toFixed","ROUND_UP","catch","error","console"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/orderly/useDeposit.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useAccount } from \"../useAccount\";\nimport {\n API,\n ARBITRUM_MAINNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n AccountStatusEnum,\n DEPOSIT_FEE_RATE,\n NetworkId,\n isNativeTokenChecker,\n} from \"@orderly.network/types\";\nimport { Decimal, isTestnet } from \"@orderly.network/utils\";\nimport { useChains } from \"./useChains\";\nimport { useConfig } from \"../useConfig\";\nimport { useDebouncedCallback } from \"use-debounce\";\n\nexport type useDepositOptions = {\n // from address\n address?: string;\n decimals?: number;\n networkId?: NetworkId;\n srcChainId?: number;\n srcToken?: string;\n quantity?: string;\n};\n\nexport const useDeposit = (options?: useDepositOptions) => {\n const networkId = useConfig(\"networkId\");\n const [balanceRevalidating, setBalanceRevalidating] = useState(false);\n const [allowanceRevalidating, setAllowanceRevalidating] = useState(false);\n\n const [_, { findByChainId }] = useChains(undefined);\n\n const [quantity, setQuantity] = useState<string>(\"\");\n const [depositFee, setDepositFee] = useState<bigint>(0n);\n const [depositFeeRevalidating, setDepositFeeRevalidating] = useState(false);\n\n const [balance, setBalance] = useState(\"0\");\n const [allowance, setAllowance] = useState(\"0\");\n\n const { account, state } = useAccount();\n\n const prevAddress = useRef<string | undefined>();\n const getBalanceListener = useRef<ReturnType<typeof setTimeout>>();\n\n const targetChain = useMemo(() => {\n let chain: API.Chain | undefined;\n\n // Orderly testnet supported chain\n if (networkId === \"testnet\") {\n chain = findByChainId(\n isTestnet(options?.srcChainId!)\n ? options?.srcChainId!\n : ARBITRUM_TESTNET_CHAINID\n ) as API.Chain;\n } else {\n chain = findByChainId(options?.srcChainId!) as API.Chain;\n // if is orderly un-supported chain\n if (!chain?.network_infos?.bridgeless) {\n // Orderly mainnet supported chain\n chain = findByChainId(ARBITRUM_MAINNET_CHAINID) as API.Chain;\n }\n }\n return chain;\n }, [networkId, findByChainId, options?.srcChainId]);\n\n const dst = useMemo(() => {\n if (!targetChain) {\n throw new Error(\"dst chain not found\");\n }\n\n const USDC = targetChain?.token_infos.find(\n (token: API.TokenInfo) => token.symbol === \"USDC\"\n );\n\n return {\n symbol: \"USDC\",\n address: USDC?.address,\n decimals: USDC?.decimals,\n chainId: targetChain.network_infos.chain_id,\n network: targetChain.network_infos.shortName,\n };\n }, [targetChain]);\n\n const isNativeToken = useMemo(\n () => isNativeTokenChecker(options?.address || \"\"),\n [options?.address]\n );\n\n const fetchBalanceHandler = useCallback(\n async (address: string, decimals?: number) => {\n let balance: string;\n\n if (!!address && isNativeTokenChecker(address)) {\n balance = await account.assetsManager.getNativeBalance({\n decimals,\n });\n } else {\n balance = await account.assetsManager.getBalance(address, { decimals });\n }\n\n return balance;\n },\n []\n );\n\n const fetchBalance = useCallback(\n async (\n // token contract address\n address?: string,\n // format decimals\n decimals?: number\n ) => {\n if (!address) return;\n\n try {\n // if (balanceRevalidating) return;\n const balance = await fetchBalanceHandler(address, decimals);\n\n setBalance(() => balance);\n } catch (e) {\n console.warn(\"----- refresh balance error -----\", e);\n\n setBalance(() => \"0\");\n }\n },\n [state]\n );\n\n const fetchBalances = useCallback(async (tokens: API.TokenInfo[]) => {\n const tasks = [];\n\n for (const token of tokens) {\n // native token skip\n if (isNativeTokenChecker(token.address)) {\n continue;\n }\n tasks.push(account.assetsManager.getBalanceByAddress(token.address));\n }\n\n const balances = await Promise.all(tasks);\n\n // const balances = await account.assetsManager.getBalances(tokens);\n // setBalance(() => balances);\n }, []);\n\n const getAllowance = async (address?: string, vaultAddress?: string) => {\n // if (!address || !vaultAddress) return;\n const key = `${address}-${vaultAddress}`;\n\n if (prevAddress.current === key) return;\n\n if (!address || !vaultAddress) return;\n if (address && isNativeTokenChecker(address)) return;\n // if (allowanceRevalidating) return;\n // setAllowanceRevalidating(true);\n\n prevAddress.current = key;\n\n const allowance = await account.assetsManager.getAllowance(\n address,\n vaultAddress\n );\n\n setAllowance(() => allowance);\n // setAllowanceRevalidating(false);\n return allowance;\n };\n\n const getAllowanceByDefaultAddress = async (address?: string) => {\n if (prevAddress.current === address) return;\n\n if (!address || isNativeTokenChecker(address)) return;\n\n prevAddress.current = address;\n\n const allowance = await account.assetsManager.getAllowance(address);\n setAllowance(() => allowance);\n };\n\n const queryBalance = useDebouncedCallback(\n (tokenAddress?: string, decimals?: number) => {\n fetchBalance(options?.address, options?.decimals).finally(() => {\n setBalanceRevalidating(false);\n });\n },\n 100\n );\n\n const queryAllowance = useDebouncedCallback(\n (tokenAddress?: string, vaultAddress?: string) => {\n getAllowance(tokenAddress, vaultAddress);\n },\n 100\n );\n\n useEffect(() => {\n if (state.status < AccountStatusEnum.Connected) return;\n setBalanceRevalidating(true);\n // fetchBalance(options?.address, options?.decimals).finally(() => {\n // setBalanceRevalidating(false);\n // });\n\n queryBalance(options?.address, options?.decimals);\n\n if (dst.chainId !== options?.srcChainId) {\n queryAllowance(options?.address);\n } else {\n if (dst.symbol !== options?.srcToken) {\n queryAllowance(options?.address);\n } else {\n getAllowanceByDefaultAddress(options?.address);\n }\n }\n }, [\n state.status,\n options?.address,\n options?.srcChainId,\n options?.srcToken,\n account.address,\n dst.chainId,\n dst.symbol,\n ]);\n\n const updateAllowanceWhenTxSuccess = useCallback(\n (txHash: string) => {\n return account.walletClient\n ?.pollTransactionReceiptWithBackoff(txHash)\n .then((receipt) => {\n if (receipt.status === 1) {\n account.assetsManager\n .getAllowance(options?.address)\n .then((allowance) => {\n setAllowance(() => allowance);\n });\n }\n });\n },\n [account, options?.address]\n );\n\n const approve = useCallback(\n async (amount?: string) => {\n if (!options?.address) {\n throw new Error(\"address is required\");\n }\n return account.assetsManager\n .approve(options.address, amount)\n .then((result: any) => {\n return updateAllowanceWhenTxSuccess(result.hash);\n });\n },\n [account, getAllowance, options?.address, dst]\n );\n\n const deposit = useCallback(async () => {\n if (!options?.address) {\n throw new Error(\"address is required\");\n }\n const _allowance = await account.assetsManager.getAllowance(\n options?.address\n );\n\n setAllowance(() => _allowance);\n\n if (new Decimal(quantity).greaterThan(_allowance)) {\n throw new Error(\"Insufficient allowance\");\n }\n\n // only support orderly deposit\n return account.assetsManager\n .deposit(quantity, depositFee)\n .then((result: any) => {\n updateAllowanceWhenTxSuccess(result.hash);\n setBalance((value) => new Decimal(value).sub(quantity).toString());\n return result;\n });\n }, [account, fetchBalance, quantity, depositFee, options?.address]);\n\n const loopGetBalance = async () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\n getBalanceListener.current = setTimeout(async () => {\n try {\n const balance = await fetchBalanceHandler(\n options?.address!,\n options?.decimals\n );\n\n setBalance(balance);\n loopGetBalance();\n } catch (err) {\n console.log(\"fetchBalanceHandler error\", err);\n }\n }, 3000);\n };\n\n const getDepositFee = useCallback(\n async (quantity: string) => {\n return account.assetsManager.getDepositFee(\n quantity,\n targetChain?.network_infos\n );\n },\n [account, targetChain]\n );\n\n const enquiryDepositFee = useCallback(() => {\n if (isNaN(Number(quantity)) || !quantity) {\n setDepositFee(0n);\n setDepositFeeRevalidating(false);\n return;\n }\n\n setDepositFeeRevalidating(true);\n\n getDepositFee(quantity)\n .then((res: bigint = 0n) => {\n const fee = BigInt(\n new Decimal(res.toString())\n .mul(DEPOSIT_FEE_RATE)\n .toFixed(0, Decimal.ROUND_UP)\n .toString()\n );\n\n setDepositFee(fee);\n console.log(\"getDepositFee\", fee);\n })\n .catch((error) => {\n console.error(\"getDepositFee\", error);\n })\n .finally(() => {\n setDepositFeeRevalidating(false);\n });\n }, [quantity]);\n\n useEffect(() => {\n enquiryDepositFee();\n }, [quantity]);\n\n useEffect(() => {\n if (!options?.address) {\n return;\n }\n\n loopGetBalance();\n\n return () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\n };\n\n // account.walletClient.on(\n // // {\n // // address: options?.address,\n // // },\n // \"block\",\n // (log: any, event: any) => {\n // console.log(\"account.walletClient.on\", log, event);\n // }\n // );\n }, [options?.address, options?.decimals]);\n\n return {\n /** orderly support chain dst */\n dst,\n balance,\n allowance,\n isNativeToken,\n balanceRevalidating,\n allowanceRevalidating,\n /** input quantiy */\n quantity,\n /** orderly deposit fee, unit: wei */\n depositFee,\n /** enquiring depositFee status on chain */\n depositFeeRevalidating,\n approve,\n deposit,\n fetchBalances,\n fetchBalance: fetchBalanceHandler,\n /** set input quantity */\n setQuantity,\n };\n};\n"],"names":["useDeposit","options","networkId","useConfig","balanceRevalidating","setBalanceRevalidating","useState","allowanceRevalidating","setAllowanceRevalidating","_","findByChainId","useChains","undefined","quantity","setQuantity","depositFee","setDepositFee","depositFeeRevalidating","setDepositFeeRevalidating","balance","setBalance","allowance","setAllowance","account","state","useAccount","prevAddress","useRef","getBalanceListener","targetChain","useMemo","chain","isTestnet","srcChainId","ARBITRUM_TESTNET_CHAINID","network_infos","bridgeless","ARBITRUM_MAINNET_CHAINID","dst","Error","USDC","token_infos","find","token","symbol","address","decimals","chainId","chain_id","network","shortName","isNativeToken","isNativeTokenChecker","fetchBalanceHandler","useCallback","assetsManager","getNativeBalance","getBalance","fetchBalance","e","fetchBalances","tokens","tasks","push","getBalanceByAddress","balances","Promise","all","getAllowance","vaultAddress","key","current","getAllowanceByDefaultAddress","queryBalance","useDebouncedCallback","tokenAddress","finally","queryAllowance","useEffect","status","AccountStatusEnum","Connected","srcToken","updateAllowanceWhenTxSuccess","txHash","walletClient","pollTransactionReceiptWithBackoff","then","receipt","approve","amount","result","hash","deposit","_allowance","Decimal","greaterThan","value","sub","toString","loopGetBalance","clearTimeout","setTimeout","err","getDepositFee","enquiryDepositFee","isNaN","Number","res","fee","BigInt","mul","DEPOSIT_FEE_RATE","toFixed","ROUND_UP","catch","error","console"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/lib/version.d.ts
CHANGED
package/lib/version.js
CHANGED
|
@@ -10,8 +10,8 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
if (typeof window !== 'undefined') {
|
|
12
12
|
window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};
|
|
13
|
-
window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.5.
|
|
13
|
+
window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.5.17";
|
|
14
14
|
}
|
|
15
|
-
const _default = "1.5.
|
|
15
|
+
const _default = "1.5.17";
|
|
16
16
|
|
|
17
17
|
//# sourceMappingURL=version.js.map
|
package/lib/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.5.
|
|
1
|
+
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif(typeof window !== 'undefined') {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"1.5.17\";\n};\n\nexport default \"1.5.17\";\n"],"names":["window","__ORDERLY_VERSION__"],"rangeMappings":";;;;;;;;;;;;;;","mappings":";;;;+BAaA;;;eAAA;;;AALA,IAAG,OAAOA,WAAW,aAAa;IAC9BA,OAAOC,mBAAmB,GAAGD,OAAOC,mBAAmB,IAAI,CAAC;IAC5DD,OAAOC,mBAAmB,CAAC,yBAAyB,GAAG;AAC3D;MAEA,WAAe"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orderly.network/hooks",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.17",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"tsup": "^7.1.0",
|
|
34
34
|
"typedoc": "^0.26.5",
|
|
35
35
|
"typescript": "^5.1.6",
|
|
36
|
-
"tsconfig": "0.3.
|
|
36
|
+
"tsconfig": "0.3.17"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@akamfoad/qr": "^0.4.0",
|
|
@@ -41,11 +41,11 @@
|
|
|
41
41
|
"swr": "2.2.4",
|
|
42
42
|
"use-constant": "^1.1.1",
|
|
43
43
|
"use-debounce": "^9.0.4",
|
|
44
|
-
"@orderly.network/perp": "3.3.
|
|
45
|
-
"@orderly.network/
|
|
46
|
-
"@orderly.network/
|
|
47
|
-
"@orderly.network/
|
|
48
|
-
"@orderly.network/
|
|
44
|
+
"@orderly.network/perp": "3.3.17",
|
|
45
|
+
"@orderly.network/net": "1.5.17",
|
|
46
|
+
"@orderly.network/utils": "1.5.17",
|
|
47
|
+
"@orderly.network/core": "1.5.17",
|
|
48
|
+
"@orderly.network/types": "1.5.17"
|
|
49
49
|
},
|
|
50
50
|
"publishConfig": {
|
|
51
51
|
"access": "public"
|