@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.
@@ -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;IAgUlD,gCAAgC;;;;;;;;;;;;;IAOhC,oBAAoB;;IAEpB,qCAAqC;;IAErC,2CAA2C;;uBApI3B,MAAM;;4BAhGyB,IAAI,SAAS,EAAE;4BAvC9C,MAAM,aAAa,MAAM;IAiRzC,yBAAyB;;CAG5B,CAAC"}
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 account.walletClient?.pollTransactionReceiptWithBackoff(result.hash).then((receipt)=>{
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((res)=>{
175
- account.assetsManager.getAllowance(options?.address).then((allowance)=>{
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 res;
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":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAC1E,SAASC,UAAU,QAAQ,gBAAgB;AAC3C,SAEEC,wBAAwB,EACxBC,wBAAwB,EACxBC,iBAAiB,EACjBC,gBAAgB,EAEhBC,oBAAoB,QACf,yBAAyB;AAChC,SAASC,OAAO,EAAEC,SAAS,QAAQ,yBAAyB;AAC5D,SAASC,SAAS,QAAQ,cAAc;AACxC,SAASC,SAAS,QAAQ,eAAe;AACzC,SAASC,oBAAoB,QAAQ,eAAe;AAYpD,OAAO,MAAMC,aAAa,CAACC;IACzB,MAAMC,YAAYJ,UAAU;IAC5B,MAAM,CAACK,qBAAqBC,uBAAuB,GAAGhB,SAAS;IAC/D,MAAM,CAACiB,uBAAuBC,yBAAyB,GAAGlB,SAAS;IAEnE,MAAM,CAACmB,GAAG,EAAEC,aAAa,EAAE,CAAC,GAAGX,UAAUY;IAEzC,MAAM,CAACC,UAAUC,YAAY,GAAGvB,SAAiB;IACjD,MAAM,CAACwB,YAAYC,cAAc,GAAGzB,SAAiB,EAAE;IACvD,MAAM,CAAC0B,wBAAwBC,0BAA0B,GAAG3B,SAAS;IAErE,MAAM,CAAC4B,SAASC,WAAW,GAAG7B,SAAS;IACvC,MAAM,CAAC8B,WAAWC,aAAa,GAAG/B,SAAS;IAE3C,MAAM,EAAEgC,OAAO,EAAEC,KAAK,EAAE,GAAGhC;IAE3B,MAAMiC,cAAcnC;IACpB,MAAMoC,qBAAqBpC;IAE3B,MAAMqC,cAActC,QAAQ;QAC1B,IAAIuC;QAEJ,kCAAkC;QAClC,IAAIvB,cAAc,WAAW;YAC3BuB,QAAQjB,cACNZ,UAAUK,SAASyB,cACfzB,SAASyB,aACTnC;QAER,OAAO;YACLkC,QAAQjB,cAAcP,SAASyB;YAC/B,mCAAmC;YACnC,IAAI,CAACD,OAAOE,eAAeC,YAAY;gBACrC,kCAAkC;gBAClCH,QAAQjB,cAAclB;YACxB;QACF;QACA,OAAOmC;IACT,GAAG;QAACvB;QAAWM;QAAeP,SAASyB;KAAW;IAElD,MAAMG,MAAM3C,QAAQ;QAClB,IAAI,CAACsC,aAAa;YAChB,MAAM,IAAIM,MAAM;QAClB;QAEA,MAAMC,OAAOP,aAAaQ,YAAYC,KACpC,CAACC,QAAyBA,MAAMC,MAAM,KAAK;QAG7C,OAAO;YACLA,QAAQ;YACRC,SAASL,MAAMK;YACfC,UAAUN,MAAMM;YAChBC,SAASd,YAAYG,aAAa,CAACY,QAAQ;YAC3CC,SAAShB,YAAYG,aAAa,CAACc,SAAS;QAC9C;IACF,GAAG;QAACjB;KAAY;IAEhB,MAAMkB,gBAAgBxD,QACpB,IAAMQ,qBAAqBO,SAASmC,WAAW,KAC/C;QAACnC,SAASmC;KAAQ;IAGpB,MAAMO,sBAAsB3D,YAC1B,OAAOoD,SAAiBC;QACtB,IAAIrB;QAEJ,IAAI,CAAC,CAACoB,WAAW1C,qBAAqB0C,UAAU;YAC9CpB,UAAU,MAAMI,QAAQwB,aAAa,CAACC,gBAAgB,CAAC;gBACrDR;YACF;QACF,OAAO;YACLrB,UAAU,MAAMI,QAAQwB,aAAa,CAACE,UAAU,CAACV,SAAS;gBAAEC;YAAS;QACvE;QAEA,OAAOrB;IACT,GACA,EAAE;IAGJ,MAAM+B,eAAe/D,YACnB,OACE,yBAAyB;IACzBoD,SACA,kBAAkB;IAClBC;QAEA,IAAI,CAACD,SAAS;QAEd,IAAI;YACF,mCAAmC;YACnC,MAAMpB,UAAU,MAAM2B,oBAAoBP,SAASC;YAEnDpB,WAAW,IAAMD;QACnB,EAAE,OAAOgC,GAAG;;YAGV/B,WAAW,IAAM;QACnB;IACF,GACA;QAACI;KAAM;IAGT,MAAM4B,gBAAgBjE,YAAY,OAAOkE;QACvC,MAAMC,QAAQ,EAAE;QAEhB,KAAK,MAAMjB,SAASgB,OAAQ;YAC1B,oBAAoB;YACpB,IAAIxD,qBAAqBwC,MAAME,OAAO,GAAG;gBACvC;YACF;YACAe,MAAMC,IAAI,CAAChC,QAAQwB,aAAa,CAACS,mBAAmB,CAACnB,MAAME,OAAO;QACpE;QAEA,MAAMkB,WAAW,MAAMC,QAAQC,GAAG,CAACL;IAEnC,oEAAoE;IACpE,8BAA8B;IAChC,GAAG,EAAE;IAEL,MAAMM,eAAe,OAAOrB,SAAkBsB;QAC5C,yCAAyC;QACzC,MAAMC,MAAM,CAAC,EAAEvB,QAAQ,CAAC,EAAEsB,aAAa,CAAC;QAExC,IAAIpC,YAAYsC,OAAO,KAAKD,KAAK;QAEjC,IAAI,CAACvB,WAAW,CAACsB,cAAc;QAC/B,IAAItB,WAAW1C,qBAAqB0C,UAAU;QAC9C,qCAAqC;QACrC,kCAAkC;QAElCd,YAAYsC,OAAO,GAAGD;QAEtB,MAAMzC,YAAY,MAAME,QAAQwB,aAAa,CAACa,YAAY,CACxDrB,SACAsB;QAGFvC,aAAa,IAAMD;QACnB,mCAAmC;QACnC,OAAOA;IACT;IAEA,MAAM2C,+BAA+B,OAAOzB;QAC1C,IAAId,YAAYsC,OAAO,KAAKxB,SAAS;QAErC,IAAI,CAACA,WAAW1C,qBAAqB0C,UAAU;QAE/Cd,YAAYsC,OAAO,GAAGxB;QAEtB,MAAMlB,YAAY,MAAME,QAAQwB,aAAa,CAACa,YAAY,CAACrB;QAC3DjB,aAAa,IAAMD;IACrB;IAEA,MAAM4C,eAAe/D,qBACnB,CAACgE,cAAuB1B;QACtBU,aAAa9C,SAASmC,SAASnC,SAASoC,UAAU2B,OAAO,CAAC;YACxD5D,uBAAuB;QACzB;IACF,GACA;IAGF,MAAM6D,iBAAiBlE,qBACrB,CAACgE,cAAuBL;QACtBD,aAAaM,cAAcL;IAC7B,GACA;IAGFzE,UAAU;QACR,IAAIoC,MAAM6C,MAAM,GAAG1E,kBAAkB2E,SAAS,EAAE;QAChD/D,uBAAuB;QACvB,oEAAoE;QACpE,mCAAmC;QACnC,MAAM;QAEN0D,aAAa7D,SAASmC,SAASnC,SAASoC;QAExC,IAAIR,IAAIS,OAAO,KAAKrC,SAASyB,YAAY;YACvCuC,eAAehE,SAASmC;QAC1B,OAAO;YACL,IAAIP,IAAIM,MAAM,KAAKlC,SAASmE,UAAU;gBACpCH,eAAehE,SAASmC;YAC1B,OAAO;gBACLyB,6BAA6B5D,SAASmC;YACxC;QACF;IACF,GAAG;QACDf,MAAM6C,MAAM;QACZjE,SAASmC;QACTnC,SAASyB;QACTzB,SAASmE;QACThD,QAAQgB,OAAO;QACfP,IAAIS,OAAO;QACXT,IAAIM,MAAM;KACX;IAED,MAAMkC,UAAUrF,YACd,OAAOsF;QACL,IAAI,CAACrE,SAASmC,SAAS;YACrB,MAAM,IAAIN,MAAM;QAClB;QACA,OAAOV,QAAQwB,aAAa,CACzByB,OAAO,CAACpE,QAAQmC,OAAO,EAAEkC,QACzBC,IAAI,CAAC,CAACC;YACL,OAAOpD,QAAQqD,YAAY,EACvBC,kCAAkCF,OAAOG,IAAI,EAC9CJ,KAAK,CAACK;gBACL,IAAIA,QAAQV,MAAM,KAAK,GAAG;oBACxB9C,QAAQwB,aAAa,CAClBa,YAAY,CAACxD,QAAQmC,OAAO,EAC5BmC,IAAI,CAAC,CAACrD;wBACLC,aAAa,IAAMD;oBACrB;gBACJ;YACF;QACJ;IACJ,GACA;QAACE;QAASqC;QAAcxD;QAAS4B;KAAI;IAGvC,MAAMgD,UAAU7F,YAAY;QAC1B,+BAA+B;QAC/B,OAAOoC,QAAQwB,aAAa,CACzBiC,OAAO,CAACnE,UAAUE,YAClB2D,IAAI,CAAC,CAACO;YACL1D,QAAQwB,aAAa,CAClBa,YAAY,CAACxD,SAASmC,SACtBmC,IAAI,CAAC,CAACrD;gBACLC,aAAa,IAAMD;YACrB;YACFD,WAAW,CAAC8D,QAAU,IAAIpF,QAAQoF,OAAOC,GAAG,CAACtE,UAAUuE,QAAQ;YAC/D,OAAOH;QACT;IACJ,GAAG;QAAC1D;QAAS2B;QAAcrC;QAAUE;KAAW;IAEhD,MAAMsE,iBAAiB;QACrB3D,mBAAmBqC,OAAO,IAAIuB,aAAa5D,mBAAmBqC,OAAO;QACrErC,mBAAmBqC,OAAO,GAAGwB,WAAW;YACtC,IAAI;gBACF,MAAMpE,UAAU,MAAM2B,oBACpB1C,SAASmC,SACTnC,SAASoC;gBAGXpB,WAAWD;gBACXkE;YACF,EAAE,OAAOG,KAAK;;YAEd;QACF,GAAG;IACL;IAEA,MAAMC,gBAAgBtG,YACpB,OAAO0B;QACL,OAAOU,QAAQwB,aAAa,CAAC0C,aAAa,CACxC5E,UACAc,aAAaG;IAEjB,GACA;QAACP;QAASI;KAAY;IAGxB,MAAM+D,oBAAoBvG,YAAY;QACpC,IAAIwG,MAAMC,OAAO/E,cAAc,CAACA,UAAU;YACxCG,cAAc,EAAE;YAChBE,0BAA0B;YAC1B;QACF;QAEAA,0BAA0B;QAE1BuE,cAAc5E,UACX6D,IAAI,CAAC,CAACO,MAAc,EAAE;YACrB,MAAMY,MAAMC,OACV,IAAIhG,QAAQmF,IAAIG,QAAQ,IACrBW,GAAG,CAACnG,kBACJoG,OAAO,CAAC,GAAGlG,QAAQmG,QAAQ,EAC3Bb,QAAQ;YAGbpE,cAAc6E;;QAEhB,GACCK,KAAK,CAAC,CAACC;YACNC,QAAQD,KAAK,CAAC,iBAAiBA;QACjC,GACChC,OAAO,CAAC;YACPjD,0BAA0B;QAC5B;IACJ,GAAG;QAACL;KAAS;IAEbzB,UAAU;QACRsG;IACF,GAAG;QAAC7E;KAAS;IAEbzB,UAAU;QACR,IAAI,CAACgB,SAASmC,SAAS;YACrB;QACF;QAEA8C;QAEA,OAAO;YACL3D,mBAAmBqC,OAAO,IAAIuB,aAAa5D,mBAAmBqC,OAAO;QACvE;IAEA,2BAA2B;IAC3B,SAAS;IACT,oCAAoC;IACpC,UAAU;IACV,aAAa;IACb,gCAAgC;IAChC,0DAA0D;IAC1D,MAAM;IACN,KAAK;IACP,GAAG;QAAC3D,SAASmC;QAASnC,SAASoC;KAAS;IAExC,OAAO;QACL,8BAA8B,GAC9BR;QACAb;QACAE;QACAwB;QACAvC;QACAE;QACA,kBAAkB,GAClBK;QACA,mCAAmC,GACnCE;QACA,yCAAyC,GACzCE;QACAuD;QACAQ;QACA5B;QACAF,cAAcJ;QACd,uBAAuB,GACvBhC;IACF;AACF,EAAE"}
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
@@ -5,6 +5,6 @@ declare global {
5
5
  };
6
6
  }
7
7
  }
8
- declare const _default: "1.5.16";
8
+ declare const _default: "1.5.17";
9
9
  export default _default;
10
10
  //# sourceMappingURL=version.d.ts.map
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.16";
3
+ window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.5.17";
4
4
  }
5
- export default "1.5.16";
5
+ export default "1.5.17";
6
6
 
7
7
  //# sourceMappingURL=version.js.map
@@ -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.16\";\n};\n\nexport default \"1.5.16\";\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
+ {"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;IAgUlD,gCAAgC;;;;;;;;;;;;;IAOhC,oBAAoB;;IAEpB,qCAAqC;;IAErC,2CAA2C;;uBApI3B,MAAM;;4BAhGyB,IAAI,SAAS,EAAE;4BAvC9C,MAAM,aAAa,MAAM;IAiRzC,yBAAyB;;CAG5B,CAAC"}
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 account.walletClient?.pollTransactionReceiptWithBackoff(result.hash).then((receipt)=>{
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((res)=>{
185
- account.assetsManager.getAllowance(options?.address).then((allowance)=>{
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 res;
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":";;;;+BA0BaA;;;eAAAA;;;uBA1BqD;4BACvC;uBASpB;uBAC4B;2BACT;2BACA;6BACW;AAY9B,MAAMA,aAAa,CAACC;IACzB,MAAMC,YAAYC,IAAAA,oBAAS,EAAC;IAC5B,MAAM,CAACC,qBAAqBC,uBAAuB,GAAGC,IAAAA,eAAQ,EAAC;IAC/D,MAAM,CAACC,uBAAuBC,yBAAyB,GAAGF,IAAAA,eAAQ,EAAC;IAEnE,MAAM,CAACG,GAAG,EAAEC,aAAa,EAAE,CAAC,GAAGC,IAAAA,oBAAS,EAACC;IAEzC,MAAM,CAACC,UAAUC,YAAY,GAAGR,IAAAA,eAAQ,EAAS;IACjD,MAAM,CAACS,YAAYC,cAAc,GAAGV,IAAAA,eAAQ,EAAS,EAAE;IACvD,MAAM,CAACW,wBAAwBC,0BAA0B,GAAGZ,IAAAA,eAAQ,EAAC;IAErE,MAAM,CAACa,SAASC,WAAW,GAAGd,IAAAA,eAAQ,EAAC;IACvC,MAAM,CAACe,WAAWC,aAAa,GAAGhB,IAAAA,eAAQ,EAAC;IAE3C,MAAM,EAAEiB,OAAO,EAAEC,KAAK,EAAE,GAAGC,IAAAA,sBAAU;IAErC,MAAMC,cAAcC,IAAAA,aAAM;IAC1B,MAAMC,qBAAqBD,IAAAA,aAAM;IAEjC,MAAME,cAAcC,IAAAA,cAAO,EAAC;QAC1B,IAAIC;QAEJ,kCAAkC;QAClC,IAAI7B,cAAc,WAAW;YAC3B6B,QAAQrB,cACNsB,IAAAA,gBAAS,EAAC/B,SAASgC,cACfhC,SAASgC,aACTC,+BAAwB;QAEhC,OAAO;YACLH,QAAQrB,cAAcT,SAASgC;YAC/B,mCAAmC;YACnC,IAAI,CAACF,OAAOI,eAAeC,YAAY;gBACrC,kCAAkC;gBAClCL,QAAQrB,cAAc2B,+BAAwB;YAChD;QACF;QACA,OAAON;IACT,GAAG;QAAC7B;QAAWQ;QAAeT,SAASgC;KAAW;IAElD,MAAMK,MAAMR,IAAAA,cAAO,EAAC;QAClB,IAAI,CAACD,aAAa;YAChB,MAAM,IAAIU,MAAM;QAClB;QAEA,MAAMC,OAAOX,aAAaY,YAAYC,KACpC,CAACC,QAAyBA,MAAMC,MAAM,KAAK;QAG7C,OAAO;YACLA,QAAQ;YACRC,SAASL,MAAMK;YACfC,UAAUN,MAAMM;YAChBC,SAASlB,YAAYM,aAAa,CAACa,QAAQ;YAC3CC,SAASpB,YAAYM,aAAa,CAACe,SAAS;QAC9C;IACF,GAAG;QAACrB;KAAY;IAEhB,MAAMsB,gBAAgBrB,IAAAA,cAAO,EAC3B,IAAMsB,IAAAA,2BAAoB,EAACnD,SAAS4C,WAAW,KAC/C;QAAC5C,SAAS4C;KAAQ;IAGpB,MAAMQ,sBAAsBC,IAAAA,kBAAW,EACrC,OAAOT,SAAiBC;QACtB,IAAI3B;QAEJ,IAAI,CAAC,CAAC0B,WAAWO,IAAAA,2BAAoB,EAACP,UAAU;YAC9C1B,UAAU,MAAMI,QAAQgC,aAAa,CAACC,gBAAgB,CAAC;gBACrDV;YACF;QACF,OAAO;YACL3B,UAAU,MAAMI,QAAQgC,aAAa,CAACE,UAAU,CAACZ,SAAS;gBAAEC;YAAS;QACvE;QAEA,OAAO3B;IACT,GACA,EAAE;IAGJ,MAAMuC,eAAeJ,IAAAA,kBAAW,EAC9B,OACE,yBAAyB;IACzBT,SACA,kBAAkB;IAClBC;QAEA,IAAI,CAACD,SAAS;QAEd,IAAI;YACF,mCAAmC;YACnC,MAAM1B,UAAU,MAAMkC,oBAAoBR,SAASC;YAEnD1B,WAAW,IAAMD;QACnB,EAAE,OAAOwC,GAAG;;YAGVvC,WAAW,IAAM;QACnB;IACF,GACA;QAACI;KAAM;IAGT,MAAMoC,gBAAgBN,IAAAA,kBAAW,EAAC,OAAOO;QACvC,MAAMC,QAAQ,EAAE;QAEhB,KAAK,MAAMnB,SAASkB,OAAQ;YAC1B,oBAAoB;YACpB,IAAIT,IAAAA,2BAAoB,EAACT,MAAME,OAAO,GAAG;gBACvC;YACF;YACAiB,MAAMC,IAAI,CAACxC,QAAQgC,aAAa,CAACS,mBAAmB,CAACrB,MAAME,OAAO;QACpE;QAEA,MAAMoB,WAAW,MAAMC,QAAQC,GAAG,CAACL;IAEnC,oEAAoE;IACpE,8BAA8B;IAChC,GAAG,EAAE;IAEL,MAAMM,eAAe,OAAOvB,SAAkBwB;QAC5C,yCAAyC;QACzC,MAAMC,MAAM,CAAC,EAAEzB,QAAQ,CAAC,EAAEwB,aAAa,CAAC;QAExC,IAAI3C,YAAY6C,OAAO,KAAKD,KAAK;QAEjC,IAAI,CAACzB,WAAW,CAACwB,cAAc;QAC/B,IAAIxB,WAAWO,IAAAA,2BAAoB,EAACP,UAAU;QAC9C,qCAAqC;QACrC,kCAAkC;QAElCnB,YAAY6C,OAAO,GAAGD;QAEtB,MAAMjD,YAAY,MAAME,QAAQgC,aAAa,CAACa,YAAY,CACxDvB,SACAwB;QAGF/C,aAAa,IAAMD;QACnB,mCAAmC;QACnC,OAAOA;IACT;IAEA,MAAMmD,+BAA+B,OAAO3B;QAC1C,IAAInB,YAAY6C,OAAO,KAAK1B,SAAS;QAErC,IAAI,CAACA,WAAWO,IAAAA,2BAAoB,EAACP,UAAU;QAE/CnB,YAAY6C,OAAO,GAAG1B;QAEtB,MAAMxB,YAAY,MAAME,QAAQgC,aAAa,CAACa,YAAY,CAACvB;QAC3DvB,aAAa,IAAMD;IACrB;IAEA,MAAMoD,eAAeC,IAAAA,iCAAoB,EACvC,CAACC,cAAuB7B;QACtBY,aAAazD,SAAS4C,SAAS5C,SAAS6C,UAAU8B,OAAO,CAAC;YACxDvE,uBAAuB;QACzB;IACF,GACA;IAGF,MAAMwE,iBAAiBH,IAAAA,iCAAoB,EACzC,CAACC,cAAuBN;QACtBD,aAAaO,cAAcN;IAC7B,GACA;IAGFS,IAAAA,gBAAS,EAAC;QACR,IAAItD,MAAMuD,MAAM,GAAGC,wBAAiB,CAACC,SAAS,EAAE;QAChD5E,uBAAuB;QACvB,oEAAoE;QACpE,mCAAmC;QACnC,MAAM;QAENoE,aAAaxE,SAAS4C,SAAS5C,SAAS6C;QAExC,IAAIR,IAAIS,OAAO,KAAK9C,SAASgC,YAAY;YACvC4C,eAAe5E,SAAS4C;QAC1B,OAAO;YACL,IAAIP,IAAIM,MAAM,KAAK3C,SAASiF,UAAU;gBACpCL,eAAe5E,SAAS4C;YAC1B,OAAO;gBACL2B,6BAA6BvE,SAAS4C;YACxC;QACF;IACF,GAAG;QACDrB,MAAMuD,MAAM;QACZ9E,SAAS4C;QACT5C,SAASgC;QACThC,SAASiF;QACT3D,QAAQsB,OAAO;QACfP,IAAIS,OAAO;QACXT,IAAIM,MAAM;KACX;IAED,MAAMuC,+BAA+B7B,IAAAA,kBAAW,EAC9C,CAAC8B;QACC,OAAO7D,QAAQ8D,YAAY,EACvBC,kCAAkCF,QACnCG,KAAK,CAACC;YACL,IAAIA,QAAQT,MAAM,KAAK,GAAG;gBACxBxD,QAAQgC,aAAa,CAClBa,YAAY,CAACnE,SAAS4C,SACtB0C,IAAI,CAAC,CAAClE;oBACLC,aAAa,IAAMD;gBACrB;YACJ;QACF;IACJ,GACA;QAACE;QAAStB,SAAS4C;KAAQ;IAG7B,MAAM4C,UAAUnC,IAAAA,kBAAW,EACzB,OAAOoC;QACL,IAAI,CAACzF,SAAS4C,SAAS;YACrB,MAAM,IAAIN,MAAM;QAClB;QACA,OAAOhB,QAAQgC,aAAa,CACzBkC,OAAO,CAACxF,QAAQ4C,OAAO,EAAE6C,QACzBH,IAAI,CAAC,CAACI;YACL,OAAOR,6BAA6BQ,OAAOC,IAAI;QACjD;IACJ,GACA;QAACrE;QAAS6C;QAAcnE,SAAS4C;QAASP;KAAI;IAGhD,MAAMuD,UAAUvC,IAAAA,kBAAW,EAAC;QAC1B,IAAI,CAACrD,SAAS4C,SAAS;YACrB,MAAM,IAAIN,MAAM;QAClB;QACA,MAAMuD,aAAa,MAAMvE,QAAQgC,aAAa,CAACa,YAAY,CACzDnE,SAAS4C;QAGXvB,aAAa,IAAMwE;QAEnB,IAAI,IAAIC,cAAO,CAAClF,UAAUmF,WAAW,CAACF,aAAa;YACjD,MAAM,IAAIvD,MAAM;QAClB;QAEA,+BAA+B;QAC/B,OAAOhB,QAAQgC,aAAa,CACzBsC,OAAO,CAAChF,UAAUE,YAClBwE,IAAI,CAAC,CAACI;YACLR,6BAA6BQ,OAAOC,IAAI;YACxCxE,WAAW,CAAC6E,QAAU,IAAIF,cAAO,CAACE,OAAOC,GAAG,CAACrF,UAAUsF,QAAQ;YAC/D,OAAOR;QACT;IACJ,GAAG;QAACpE;QAASmC;QAAc7C;QAAUE;QAAYd,SAAS4C;KAAQ;IAElE,MAAMuD,iBAAiB;QACrBxE,mBAAmB2C,OAAO,IAAI8B,aAAazE,mBAAmB2C,OAAO;QACrE3C,mBAAmB2C,OAAO,GAAG+B,WAAW;YACtC,IAAI;gBACF,MAAMnF,UAAU,MAAMkC,oBACpBpD,SAAS4C,SACT5C,SAAS6C;gBAGX1B,WAAWD;gBACXiF;YACF,EAAE,OAAOG,KAAK;;YAEd;QACF,GAAG;IACL;IAEA,MAAMC,gBAAgBlD,IAAAA,kBAAW,EAC/B,OAAOzC;QACL,OAAOU,QAAQgC,aAAa,CAACiD,aAAa,CACxC3F,UACAgB,aAAaM;IAEjB,GACA;QAACZ;QAASM;KAAY;IAGxB,MAAM4E,oBAAoBnD,IAAAA,kBAAW,EAAC;QACpC,IAAIoD,MAAMC,OAAO9F,cAAc,CAACA,UAAU;YACxCG,cAAc,EAAE;YAChBE,0BAA0B;YAC1B;QACF;QAEAA,0BAA0B;QAE1BsF,cAAc3F,UACX0E,IAAI,CAAC,CAACqB,MAAc,EAAE;YACrB,MAAMC,MAAMC,OACV,IAAIf,cAAO,CAACa,IAAIT,QAAQ,IACrBY,GAAG,CAACC,uBAAgB,EACpBC,OAAO,CAAC,GAAGlB,cAAO,CAACmB,QAAQ,EAC3Bf,QAAQ;YAGbnF,cAAc6F;;QAEhB,GACCM,KAAK,CAAC,CAACC;YACNC,QAAQD,KAAK,CAAC,iBAAiBA;QACjC,GACCxC,OAAO,CAAC;YACP1D,0BAA0B;QAC5B;IACJ,GAAG;QAACL;KAAS;IAEbiE,IAAAA,gBAAS,EAAC;QACR2B;IACF,GAAG;QAAC5F;KAAS;IAEbiE,IAAAA,gBAAS,EAAC;QACR,IAAI,CAAC7E,SAAS4C,SAAS;YACrB;QACF;QAEAuD;QAEA,OAAO;YACLxE,mBAAmB2C,OAAO,IAAI8B,aAAazE,mBAAmB2C,OAAO;QACvE;IAEA,2BAA2B;IAC3B,SAAS;IACT,oCAAoC;IACpC,UAAU;IACV,aAAa;IACb,gCAAgC;IAChC,0DAA0D;IAC1D,MAAM;IACN,KAAK;IACP,GAAG;QAACtE,SAAS4C;QAAS5C,SAAS6C;KAAS;IAExC,OAAO;QACL,8BAA8B,GAC9BR;QACAnB;QACAE;QACA8B;QACA/C;QACAG;QACA,kBAAkB,GAClBM;QACA,mCAAmC,GACnCE;QACA,yCAAyC,GACzCE;QACAwE;QACAI;QACAjC;QACAF,cAAcL;QACd,uBAAuB,GACvBvC;IACF;AACF"}
package/lib/version.d.ts CHANGED
@@ -5,6 +5,6 @@ declare global {
5
5
  };
6
6
  }
7
7
  }
8
- declare const _default: "1.5.16";
8
+ declare const _default: "1.5.17";
9
9
  export default _default;
10
10
  //# sourceMappingURL=version.d.ts.map
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.16";
13
+ window.__ORDERLY_VERSION__["@orderly.network/hooks"] = "1.5.17";
14
14
  }
15
- const _default = "1.5.16";
15
+ const _default = "1.5.17";
16
16
 
17
17
  //# sourceMappingURL=version.js.map
@@ -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.16\";\n};\n\nexport default \"1.5.16\";\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"}
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.16",
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.16"
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.16",
45
- "@orderly.network/core": "1.5.16",
46
- "@orderly.network/net": "1.5.16",
47
- "@orderly.network/types": "1.5.16",
48
- "@orderly.network/utils": "1.5.16"
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"