@0xsquid/react-hooks 4.0.2-beta.5 → 4.0.2
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/dist/core/constants.d.ts +0 -20
- package/dist/core/constants.js +0 -37
- package/dist/core/constants.js.map +1 -1
- package/dist/core/externalLinks.d.ts +1 -1
- package/dist/core/externalLinks.js +1 -1
- package/dist/core/externalLinks.js.map +1 -1
- package/dist/core/index.d.ts +0 -1
- package/dist/core/index.js +0 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/queries/queries-keys.d.ts +1 -1
- package/dist/core/queries/queries-keys.js +1 -3
- package/dist/core/queries/queries-keys.js.map +1 -1
- package/dist/core/types/swap.d.ts +0 -1
- package/dist/core/types/transaction.d.ts +0 -2
- package/dist/core/types/transaction.js +0 -1
- package/dist/core/types/transaction.js.map +1 -1
- package/dist/core/types/wallet.d.ts +2 -11
- package/dist/core/types/wallet.js +0 -3
- package/dist/core/types/wallet.js.map +1 -1
- package/dist/core/wallets.js +1 -50
- package/dist/core/wallets.js.map +1 -1
- package/dist/hooks/cosmos/useCosmos.js +1 -2
- package/dist/hooks/cosmos/useCosmos.js.map +1 -1
- package/dist/hooks/cosmos/useCosmosForChain.js +2 -1
- package/dist/hooks/cosmos/useCosmosForChain.js.map +1 -1
- package/dist/hooks/index.d.ts +0 -2
- package/dist/hooks/index.js +0 -2
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/store/useHistoryStore.d.ts +1 -2
- package/dist/hooks/store/useHistoryStore.js.map +1 -1
- package/dist/hooks/store/useWalletStore.js +0 -1
- package/dist/hooks/store/useWalletStore.js.map +1 -1
- package/dist/hooks/swap/useSwap.d.ts +1 -1
- package/dist/hooks/swap/useSwap.js +23 -9
- package/dist/hooks/swap/useSwap.js.map +1 -1
- package/dist/hooks/tokens/useAllConnectedWalletBalances.js +1 -26
- package/dist/hooks/tokens/useAllConnectedWalletBalances.js.map +1 -1
- package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js +5 -16
- package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js.map +1 -1
- package/dist/hooks/tokens/useBalance.d.ts +1 -122
- package/dist/hooks/tokens/useBalance.js +0 -25
- package/dist/hooks/tokens/useBalance.js.map +1 -1
- package/dist/hooks/tokens/useMultiChainBalance.js +7 -24
- package/dist/hooks/tokens/useMultiChainBalance.js.map +1 -1
- package/dist/hooks/tokens/useNativeBalance.d.ts +1 -11
- package/dist/hooks/tokens/useNativeBalance.js +11 -81
- package/dist/hooks/tokens/useNativeBalance.js.map +1 -1
- package/dist/hooks/tokens/useSquidTokens.d.ts +1 -3
- package/dist/hooks/tokens/useSquidTokens.js +2 -10
- package/dist/hooks/tokens/useSquidTokens.js.map +1 -1
- package/dist/hooks/transaction/useAllTransactionsStatus.js +4 -12
- package/dist/hooks/transaction/useAllTransactionsStatus.js.map +1 -1
- package/dist/hooks/transaction/useEstimate.d.ts +2 -2
- package/dist/hooks/transaction/useExecuteTransaction.d.ts +2 -2
- package/dist/hooks/transaction/useExecuteTransaction.js +20 -186
- package/dist/hooks/transaction/useExecuteTransaction.js.map +1 -1
- package/dist/hooks/transaction/useGetRoute.d.ts +9 -13
- package/dist/hooks/transaction/useGetRoute.js +9 -27
- package/dist/hooks/transaction/useGetRoute.js.map +1 -1
- package/dist/hooks/transaction/useSingleTransaction.d.ts +1 -1
- package/dist/hooks/transaction/useSingleTransaction.js.map +1 -1
- package/dist/hooks/user/useHistory.js +3 -4
- package/dist/hooks/user/useHistory.js.map +1 -1
- package/dist/hooks/wallet/useMultiChainWallet.js +11 -34
- package/dist/hooks/wallet/useMultiChainWallet.js.map +1 -1
- package/dist/hooks/wallet/useSigner.d.ts +0 -4
- package/dist/hooks/wallet/useSigner.js +0 -22
- package/dist/hooks/wallet/useSigner.js.map +1 -1
- package/dist/hooks/wallet/useWallet.js +12 -44
- package/dist/hooks/wallet/useWallet.js.map +1 -1
- package/dist/provider/index.js +1 -3
- package/dist/provider/index.js.map +1 -1
- package/dist/services/external/rpcService.d.ts +1 -9
- package/dist/services/external/rpcService.js +1 -119
- package/dist/services/external/rpcService.js.map +1 -1
- package/dist/services/index.d.ts +0 -3
- package/dist/services/index.js +0 -3
- package/dist/services/index.js.map +1 -1
- package/dist/services/internal/assetsService.d.ts +12 -7
- package/dist/services/internal/assetsService.js +11 -14
- package/dist/services/internal/assetsService.js.map +1 -1
- package/dist/services/internal/estimateService.d.ts +2 -2
- package/dist/services/internal/estimateService.js +1 -1
- package/dist/services/internal/transactionService.d.ts +5 -7
- package/dist/services/internal/transactionService.js +7 -20
- package/dist/services/internal/transactionService.js.map +1 -1
- package/dist/services/internal/walletService.d.ts +55 -3
- package/dist/services/internal/walletService.js +151 -19
- package/dist/services/internal/walletService.js.map +1 -1
- package/dist/tests/estimateService.test.js.map +1 -1
- package/dist/tests/swapConfig.test.js +18 -55
- package/dist/tests/swapConfig.test.js.map +1 -1
- package/dist/tests/walletService.test.js +1 -0
- package/dist/tests/walletService.test.js.map +1 -1
- package/package.json +9 -13
- package/dist/core/connectors/bitcoin/helpers.d.ts +0 -5
- package/dist/core/connectors/bitcoin/helpers.js +0 -86
- package/dist/core/connectors/bitcoin/helpers.js.map +0 -1
- package/dist/core/connectors/bitcoin/index.d.ts +0 -6
- package/dist/core/connectors/bitcoin/index.js +0 -2
- package/dist/core/connectors/bitcoin/index.js.map +0 -1
- package/dist/core/connectors/bitcoin/wallets/index.d.ts +0 -2
- package/dist/core/connectors/bitcoin/wallets/index.js +0 -3
- package/dist/core/connectors/bitcoin/wallets/index.js.map +0 -1
- package/dist/core/connectors/bitcoin/wallets/phantom.d.ts +0 -19
- package/dist/core/connectors/bitcoin/wallets/phantom.js +0 -54
- package/dist/core/connectors/bitcoin/wallets/phantom.js.map +0 -1
- package/dist/core/connectors/bitcoin/wallets/unisat.d.ts +0 -11
- package/dist/core/connectors/bitcoin/wallets/unisat.js +0 -16
- package/dist/core/connectors/bitcoin/wallets/unisat.js.map +0 -1
- package/dist/core/providers/SolanaProvider.d.ts +0 -28
- package/dist/core/providers/SolanaProvider.js +0 -15
- package/dist/core/providers/SolanaProvider.js.map +0 -1
- package/dist/hooks/solana/useSolana.d.ts +0 -27
- package/dist/hooks/solana/useSolana.js +0 -86
- package/dist/hooks/solana/useSolana.js.map +0 -1
- package/dist/hooks/swap/useDepositAddress.d.ts +0 -19
- package/dist/hooks/swap/useDepositAddress.js +0 -86
- package/dist/hooks/swap/useDepositAddress.js.map +0 -1
- package/dist/hooks/tokens/useNativeTokenForChain.d.ts +0 -4
- package/dist/hooks/tokens/useNativeTokenForChain.js +0 -26
- package/dist/hooks/tokens/useNativeTokenForChain.js.map +0 -1
- package/dist/services/internal/bitcoinService.d.ts +0 -14
- package/dist/services/internal/bitcoinService.js +0 -68
- package/dist/services/internal/bitcoinService.js.map +0 -1
- package/dist/services/internal/cosmosService.d.ts +0 -37
- package/dist/services/internal/cosmosService.js +0 -97
- package/dist/services/internal/cosmosService.js.map +0 -1
- package/dist/services/internal/evmService.d.ts +0 -16
- package/dist/services/internal/evmService.js +0 -40
- package/dist/services/internal/evmService.js.map +0 -1
- package/dist/services/internal/solanaService.d.ts +0 -41
- package/dist/services/internal/solanaService.js +0 -82
- package/dist/services/internal/solanaService.js.map +0 -1
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import * as ecc from "@bitcoinerlab/secp256k1";
|
|
2
|
-
import axios from "axios";
|
|
3
|
-
import * as bitcoin from "bitcoinjs-lib";
|
|
4
|
-
bitcoin.initEccLib(ecc);
|
|
5
|
-
const network = bitcoin.networks.bitcoin;
|
|
6
|
-
export const fromHexString = (hexString) => {
|
|
7
|
-
const matches = hexString.match(/.{1,2}/g);
|
|
8
|
-
if (!matches) {
|
|
9
|
-
throw new Error("Invalid hex string");
|
|
10
|
-
}
|
|
11
|
-
return Uint8Array.from(matches.map((byte) => parseInt(byte, 16)));
|
|
12
|
-
};
|
|
13
|
-
export async function createSendBtcPsbt(senderAddress, recipientAddress, amount) {
|
|
14
|
-
const feeRate = await getFeeRate();
|
|
15
|
-
const utxos = await getAddressUtxos(senderAddress);
|
|
16
|
-
if (!utxos) {
|
|
17
|
-
throw new Error("No UTXOs found");
|
|
18
|
-
}
|
|
19
|
-
// Sort UTXOs by value in descending order
|
|
20
|
-
// This ensures that we select the UTXOs with the highest value first
|
|
21
|
-
// to optimize the transaction size
|
|
22
|
-
const sortedUtxos = utxos.sort((a, b) => b.value - a.value);
|
|
23
|
-
// Sum up the values of the UTXOs up to the desired amount
|
|
24
|
-
let inputAmount = 0;
|
|
25
|
-
const inputs = [];
|
|
26
|
-
for (const utxo of sortedUtxos) {
|
|
27
|
-
inputAmount += utxo.value;
|
|
28
|
-
inputs.push(utxo);
|
|
29
|
-
if (inputAmount >= amount)
|
|
30
|
-
break;
|
|
31
|
-
}
|
|
32
|
-
if (inputAmount < amount)
|
|
33
|
-
throw new Error("Insufficient balance");
|
|
34
|
-
const outputsCount = 2; // Only two outputs, recipient and change outputs
|
|
35
|
-
// Calculate fee based on the byte size of the total inputs and outputs
|
|
36
|
-
// Approximate transaction size = (inputs * 150 bytes + outputs * 34 bytes + 10 bytes overhead)
|
|
37
|
-
const transactionSize = inputs.length * 150 + outputsCount * 34 + 10;
|
|
38
|
-
const fee = feeRate * transactionSize;
|
|
39
|
-
const satsNeeded = fee + amount;
|
|
40
|
-
const psbt = new bitcoin.Psbt({ network });
|
|
41
|
-
let amountGathered = 0;
|
|
42
|
-
for (const utxo of sortedUtxos) {
|
|
43
|
-
const { txid, vout, value } = utxo;
|
|
44
|
-
const script = bitcoin.address.toOutputScript(senderAddress, network);
|
|
45
|
-
psbt.addInput({
|
|
46
|
-
hash: txid,
|
|
47
|
-
index: vout,
|
|
48
|
-
witnessUtxo: {
|
|
49
|
-
script,
|
|
50
|
-
value: BigInt(value),
|
|
51
|
-
},
|
|
52
|
-
});
|
|
53
|
-
amountGathered += value;
|
|
54
|
-
if (amountGathered >= satsNeeded) {
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
psbt.addOutput({
|
|
59
|
-
address: recipientAddress,
|
|
60
|
-
value: BigInt(amount),
|
|
61
|
-
});
|
|
62
|
-
if (amountGathered > satsNeeded) {
|
|
63
|
-
psbt.addOutput({
|
|
64
|
-
address: senderAddress,
|
|
65
|
-
value: BigInt(amountGathered - satsNeeded),
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
return {
|
|
69
|
-
psbtHex: psbt.toHex(),
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
export async function broadcastTx(txHex) {
|
|
73
|
-
return axios
|
|
74
|
-
.post(`https://mempool.space/api/tx`, txHex)
|
|
75
|
-
.then((res) => res.data);
|
|
76
|
-
}
|
|
77
|
-
async function getAddressUtxos(address) {
|
|
78
|
-
return axios
|
|
79
|
-
.get(`https://mempool.space/api/address/${address}/utxo`)
|
|
80
|
-
.then((response) => response.data);
|
|
81
|
-
}
|
|
82
|
-
async function getFeeRate() {
|
|
83
|
-
const response = await axios.get("https://mempool.space/api/v1/fees/recommended");
|
|
84
|
-
return response.data.halfHourFee;
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/core/connectors/bitcoin/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/connectors/bitcoin/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/connectors/bitcoin/wallets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { BitcoinConnector } from "..";
|
|
2
|
-
export interface PhantomBitcoinAccount {
|
|
3
|
-
address: string;
|
|
4
|
-
publicKey: string;
|
|
5
|
-
addressType: "p2tr" | "p2wpkh" | "p2sh" | "p2pkh";
|
|
6
|
-
purpose: "payment" | "ordinals";
|
|
7
|
-
}
|
|
8
|
-
export declare class PhantomConnector implements BitcoinConnector {
|
|
9
|
-
get getProvider(): any | undefined;
|
|
10
|
-
getAccounts(): Promise<{
|
|
11
|
-
paymentAddress: string;
|
|
12
|
-
}>;
|
|
13
|
-
sendBTC(to: string, amount: number): Promise<{
|
|
14
|
-
txHash: string;
|
|
15
|
-
}>;
|
|
16
|
-
signPsbt(psbtHex: string): Promise<{
|
|
17
|
-
txId: string | undefined;
|
|
18
|
-
}>;
|
|
19
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import * as bitcoin from "bitcoinjs-lib";
|
|
2
|
-
import { broadcastTx, createSendBtcPsbt, fromHexString } from "../helpers";
|
|
3
|
-
const MAINNET = bitcoin.networks.bitcoin;
|
|
4
|
-
export class PhantomConnector {
|
|
5
|
-
get getProvider() {
|
|
6
|
-
const provider = window?.phantom?.bitcoin;
|
|
7
|
-
if (!provider) {
|
|
8
|
-
throw new Error("Phantom wallet not found");
|
|
9
|
-
}
|
|
10
|
-
return provider;
|
|
11
|
-
}
|
|
12
|
-
async getAccounts() {
|
|
13
|
-
const phantomAccounts = await this.getProvider.requestAccounts();
|
|
14
|
-
if (!phantomAccounts)
|
|
15
|
-
throw new Error("No accounts found");
|
|
16
|
-
const payment = phantomAccounts.find((account) => account.purpose === "payment");
|
|
17
|
-
if (!payment)
|
|
18
|
-
throw new Error("No payment account found");
|
|
19
|
-
return {
|
|
20
|
-
paymentAddress: payment.address,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
async sendBTC(to, amount) {
|
|
24
|
-
const { paymentAddress } = await this.getAccounts();
|
|
25
|
-
const { psbtHex } = await createSendBtcPsbt(paymentAddress, to, amount);
|
|
26
|
-
const { txId } = await this.signPsbt(psbtHex);
|
|
27
|
-
if (!txId)
|
|
28
|
-
throw new Error("Error sending BTC");
|
|
29
|
-
return { txHash: txId };
|
|
30
|
-
}
|
|
31
|
-
async signPsbt(psbtHex) {
|
|
32
|
-
const { paymentAddress } = await this.getAccounts();
|
|
33
|
-
const toSignPsbt = bitcoin.Psbt.fromHex(String(psbtHex), {
|
|
34
|
-
network: MAINNET,
|
|
35
|
-
});
|
|
36
|
-
const inputs = toSignPsbt.data.inputs;
|
|
37
|
-
const inputsToSign = [
|
|
38
|
-
{
|
|
39
|
-
// Need to sign each input with the payment address
|
|
40
|
-
address: paymentAddress,
|
|
41
|
-
signingIndexes: inputs.map((_, index) => index),
|
|
42
|
-
},
|
|
43
|
-
];
|
|
44
|
-
const signedPsbtBytes = await this.getProvider.signPSBT(fromHexString(psbtHex), {
|
|
45
|
-
inputsToSign,
|
|
46
|
-
});
|
|
47
|
-
const signedPsbt = bitcoin.Psbt.fromBuffer(signedPsbtBytes);
|
|
48
|
-
signedPsbt.finalizeAllInputs();
|
|
49
|
-
const tx = signedPsbt.extractTransaction();
|
|
50
|
-
const txId = await broadcastTx(tx.toHex());
|
|
51
|
-
return { txId };
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=phantom.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"phantom.js","sourceRoot":"","sources":["../../../../../src/core/connectors/bitcoin/wallets/phantom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;AASzC,MAAM,OAAO,gBAAgB;IAC3B,IAAW,WAAW;QACpB,MAAM,QAAQ,GAAI,MAAc,EAAE,OAAO,EAAE,OAAO,CAAC;QAEnD,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAC7C;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,WAAW;QAGf,MAAM,eAAe,GACnB,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;QAE3C,IAAI,CAAC,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAE3D,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAClC,CAAC,OAA4B,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAChE,CAAC;QAEF,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAE1D,OAAO;YACL,cAAc,EAAE,OAAO,CAAC,OAAO;SAChC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,MAAc;QACtC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,CAAC,cAAc,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QACxE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAEhD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAG5B,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;YACvD,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QACtC,MAAM,YAAY,GAAG;YACnB;gBACE,mDAAmD;gBACnD,OAAO,EAAE,cAAc;gBACvB,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;aAChD;SACF,CAAC;QAEF,MAAM,eAAe,GAAe,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CACjE,aAAa,CAAC,OAAO,CAAC,EACtB;YACE,YAAY;SACb,CACF,CAAC;QAEF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QAE5D,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAE/B,MAAM,EAAE,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;QAE3C,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QAE3C,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { BitcoinConnector } from "..";
|
|
2
|
-
interface UnisatProvider {
|
|
3
|
-
sendBitcoin: (to: string, amount: number) => Promise<string>;
|
|
4
|
-
}
|
|
5
|
-
export declare class UnisatConnector implements BitcoinConnector {
|
|
6
|
-
get getProvider(): UnisatProvider;
|
|
7
|
-
sendBTC(to: string, amount: number): Promise<{
|
|
8
|
-
txHash: string;
|
|
9
|
-
}>;
|
|
10
|
-
}
|
|
11
|
-
export {};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export class UnisatConnector {
|
|
2
|
-
get getProvider() {
|
|
3
|
-
const provider = window?.unisat;
|
|
4
|
-
if (!provider) {
|
|
5
|
-
throw new Error("Unisat wallet not found");
|
|
6
|
-
}
|
|
7
|
-
return provider;
|
|
8
|
-
}
|
|
9
|
-
async sendBTC(to, amount) {
|
|
10
|
-
const txHash = await this.getProvider.sendBitcoin(to, amount);
|
|
11
|
-
if (!txHash)
|
|
12
|
-
throw new Error("Transaction failed");
|
|
13
|
-
return { txHash };
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=unisat.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unisat.js","sourceRoot":"","sources":["../../../../../src/core/connectors/bitcoin/wallets/unisat.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,eAAe;IAC1B,IAAW,WAAW;QACpB,MAAM,QAAQ,GAAI,MAAc,EAAE,MAAM,CAAC;QAEzC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,MAAc;QACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAE9D,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAEnD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { ChainData } from "@0xsquid/squid-types";
|
|
2
|
-
import { Connection } from "@solana/web3.js";
|
|
3
|
-
import { UseMutationResult } from "@tanstack/react-query";
|
|
4
|
-
import React, { ReactNode } from "react";
|
|
5
|
-
import { SolanaWalletAdapter } from "../../hooks/solana/useSolana";
|
|
6
|
-
import { SolanaWallet } from "../types/wallet";
|
|
7
|
-
export interface ConnectSolanaParams {
|
|
8
|
-
chain: ChainData;
|
|
9
|
-
wallet: SolanaWallet;
|
|
10
|
-
}
|
|
11
|
-
export interface ISolanaContextData {
|
|
12
|
-
wallet?: SolanaWallet;
|
|
13
|
-
connectSolana: UseMutationResult<string | undefined, unknown, {
|
|
14
|
-
chain: ChainData;
|
|
15
|
-
wallet?: SolanaWallet;
|
|
16
|
-
}>;
|
|
17
|
-
isConnected: boolean;
|
|
18
|
-
clearData: () => void;
|
|
19
|
-
solanaWalletObject?: SolanaWalletAdapter;
|
|
20
|
-
solanaAddress?: string;
|
|
21
|
-
signer?: SolanaWalletAdapter;
|
|
22
|
-
connection: Connection;
|
|
23
|
-
}
|
|
24
|
-
export declare const SolanaContext: React.Context<ISolanaContextData | undefined>;
|
|
25
|
-
export declare const SolanaProvider: React.FC<{
|
|
26
|
-
children: ReactNode;
|
|
27
|
-
}>;
|
|
28
|
-
export declare const useSolanaContext: () => ISolanaContextData;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import React, { createContext, useContext } from "react";
|
|
2
|
-
import { useSolana } from "../../hooks/solana/useSolana";
|
|
3
|
-
export const SolanaContext = createContext(undefined);
|
|
4
|
-
export const SolanaProvider = ({ children, }) => {
|
|
5
|
-
const solanaHook = useSolana();
|
|
6
|
-
return (React.createElement(SolanaContext.Provider, { value: solanaHook }, children));
|
|
7
|
-
};
|
|
8
|
-
export const useSolanaContext = () => {
|
|
9
|
-
const context = useContext(SolanaContext);
|
|
10
|
-
if (!context) {
|
|
11
|
-
throw new Error("useSolanaContext must be used within a SolanaProvider");
|
|
12
|
-
}
|
|
13
|
-
return context;
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=SolanaProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SolanaProvider.js","sourceRoot":"","sources":["../../../src/core/providers/SolanaProvider.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAa,UAAU,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EAAuB,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAuB9E,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CACxC,SAAS,CACV,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAsC,CAAC,EAChE,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,SAAS,EAAE,CAAC;IAE/B,OAAO,CACL,oBAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,UAAU,IACtC,QAAQ,CACc,CAC1B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAuB,EAAE;IACvD,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;KAC1E;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { WalletName } from "@solana/wallet-adapter-base";
|
|
2
|
-
import { PublicKey, VersionedTransaction } from "@solana/web3.js";
|
|
3
|
-
import { ISolanaContextData } from "../../core/providers/SolanaProvider";
|
|
4
|
-
export interface SolanaWalletEvents {
|
|
5
|
-
connect(publicKey: PublicKey): void;
|
|
6
|
-
disconnect(): void;
|
|
7
|
-
accountChanged(publicKey: PublicKey | null): void;
|
|
8
|
-
}
|
|
9
|
-
export interface SolanaWalletAdapter {
|
|
10
|
-
publicKey: PublicKey | null;
|
|
11
|
-
connecting: boolean;
|
|
12
|
-
connected: boolean;
|
|
13
|
-
name: WalletName;
|
|
14
|
-
connect(): Promise<{
|
|
15
|
-
publicKey: PublicKey;
|
|
16
|
-
}>;
|
|
17
|
-
disconnect(): Promise<void>;
|
|
18
|
-
signAndSendTransaction(transaction: VersionedTransaction): Promise<{
|
|
19
|
-
signature: string;
|
|
20
|
-
}>;
|
|
21
|
-
signTransaction(transaction: VersionedTransaction): Promise<VersionedTransaction>;
|
|
22
|
-
signAllTransactions(transactions: VersionedTransaction[]): Promise<VersionedTransaction[]>;
|
|
23
|
-
signMessage(message: Uint8Array): Promise<Uint8Array>;
|
|
24
|
-
on<E extends keyof SolanaWalletEvents>(event: E, listener: SolanaWalletEvents[E]): void;
|
|
25
|
-
off<E extends keyof SolanaWalletEvents>(event: E, listener: SolanaWalletEvents[E]): void;
|
|
26
|
-
}
|
|
27
|
-
export declare const useSolana: () => ISolanaContextData;
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { ChainType } from "@0xsquid/squid-types";
|
|
2
|
-
import { Connection } from "@solana/web3.js";
|
|
3
|
-
import { useMutation } from "@tanstack/react-query";
|
|
4
|
-
import { useCallback, useEffect, useMemo, useRef } from "react";
|
|
5
|
-
import { SOLANA_RPC_URL } from "../../core/constants";
|
|
6
|
-
import { getDescendantProp } from "../../services/internal/walletService";
|
|
7
|
-
import { useClient } from "../client/useClient";
|
|
8
|
-
import { useWalletStore } from "../store/useWalletStore";
|
|
9
|
-
export const useSolana = () => {
|
|
10
|
-
// Get current Solana wallet state from global store
|
|
11
|
-
const solanaWalletState = useWalletStore((state) => state.connectedWalletsByChainType[ChainType.SOLANA]);
|
|
12
|
-
const solanaAddress = solanaWalletState.address;
|
|
13
|
-
const isConnected = !!solanaAddress;
|
|
14
|
-
const solanaConnectedWallet = solanaWalletState.wallet;
|
|
15
|
-
const { clientWindow, isClient } = useClient();
|
|
16
|
-
const window = clientWindow;
|
|
17
|
-
const { setConnectedWallet, disconnectWallet } = useWalletStore();
|
|
18
|
-
// Safely access wallet provider from window object
|
|
19
|
-
const solanaWalletObject = useMemo(() => {
|
|
20
|
-
if (isClient && solanaConnectedWallet?.windowFlag) {
|
|
21
|
-
return getDescendantProp(window, solanaConnectedWallet.windowFlag);
|
|
22
|
-
}
|
|
23
|
-
return undefined;
|
|
24
|
-
}, [solanaConnectedWallet, isClient, window]);
|
|
25
|
-
const connectSolana = useMutation(async ({ chain, wallet, }) => {
|
|
26
|
-
const selectedWallet = wallet ?? solanaConnectedWallet;
|
|
27
|
-
if (!selectedWallet || !chain) {
|
|
28
|
-
return undefined;
|
|
29
|
-
}
|
|
30
|
-
const walletObject = getDescendantProp(window, selectedWallet.windowFlag);
|
|
31
|
-
if (!walletObject) {
|
|
32
|
-
return undefined;
|
|
33
|
-
}
|
|
34
|
-
try {
|
|
35
|
-
const response = await walletObject.connect();
|
|
36
|
-
const address = response.publicKey.toString();
|
|
37
|
-
if (address) {
|
|
38
|
-
setConnectedWallet(selectedWallet, address);
|
|
39
|
-
return address;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
console.error(error);
|
|
44
|
-
}
|
|
45
|
-
return undefined;
|
|
46
|
-
});
|
|
47
|
-
// Clear wallet connection data
|
|
48
|
-
const clearData = useCallback(() => {
|
|
49
|
-
disconnectWallet(ChainType.SOLANA);
|
|
50
|
-
}, [disconnectWallet]);
|
|
51
|
-
// Handle wallet account changes (e.g., user switches accounts)
|
|
52
|
-
const handleAccountChange = useCallback((publicKey) => {
|
|
53
|
-
if (publicKey && solanaConnectedWallet) {
|
|
54
|
-
setConnectedWallet(solanaConnectedWallet, publicKey.toString());
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
clearData();
|
|
58
|
-
}
|
|
59
|
-
}, [clearData, setConnectedWallet, solanaConnectedWallet]);
|
|
60
|
-
// Set up event listeners for wallet account changes
|
|
61
|
-
useEffect(() => {
|
|
62
|
-
if (solanaWalletObject) {
|
|
63
|
-
solanaWalletObject.on("accountChanged", handleAccountChange);
|
|
64
|
-
return () => {
|
|
65
|
-
solanaWalletObject.off("accountChanged", handleAccountChange);
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
}, [solanaWalletObject, handleAccountChange]);
|
|
69
|
-
const getSigner = useCallback(() => {
|
|
70
|
-
if (!solanaWalletObject || !solanaAddress)
|
|
71
|
-
return undefined;
|
|
72
|
-
return solanaWalletObject;
|
|
73
|
-
}, [solanaWalletObject, solanaAddress]);
|
|
74
|
-
const connectionRef = useRef(new Connection(SOLANA_RPC_URL));
|
|
75
|
-
return {
|
|
76
|
-
connectSolana,
|
|
77
|
-
isConnected,
|
|
78
|
-
clearData,
|
|
79
|
-
solanaWalletObject,
|
|
80
|
-
solanaAddress,
|
|
81
|
-
signer: getSigner(),
|
|
82
|
-
wallet: solanaConnectedWallet,
|
|
83
|
-
connection: connectionRef.current,
|
|
84
|
-
};
|
|
85
|
-
};
|
|
86
|
-
//# sourceMappingURL=useSolana.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useSolana.js","sourceRoot":"","sources":["../../../src/hooks/solana/useSolana.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { RouteResponse } from "@0xsquid/squid-types";
|
|
2
|
-
export declare function useDepositAddress(): {
|
|
3
|
-
isEnabled: boolean;
|
|
4
|
-
isAvailableAsPaymentMethod: boolean;
|
|
5
|
-
swapWillGenerateDepositAddress: boolean;
|
|
6
|
-
enable: () => void;
|
|
7
|
-
disable: () => void;
|
|
8
|
-
openDepositChannel: () => Promise<void>;
|
|
9
|
-
closeDepositChannel: () => Promise<void>;
|
|
10
|
-
shouldOpenDepositChannel: boolean;
|
|
11
|
-
getRouteWithDeposit: import("@tanstack/react-query").UseMutationResult<{
|
|
12
|
-
estimate: import("@0xsquid/squid-types").Estimate;
|
|
13
|
-
transactionRequest?: import("@0xsquid/squid-types").SquidData | undefined;
|
|
14
|
-
params: import("@0xsquid/squid-types").RouteRequest;
|
|
15
|
-
} | undefined, unknown, {
|
|
16
|
-
squidRoute: RouteResponse["route"];
|
|
17
|
-
fromPrice: string;
|
|
18
|
-
}, unknown>;
|
|
19
|
-
};
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { useMutation } from "@tanstack/react-query";
|
|
2
|
-
import { useCallback, useMemo } from "react";
|
|
3
|
-
import { create } from "zustand";
|
|
4
|
-
import { CHAIN_IDS } from "../../core";
|
|
5
|
-
import { useSquidChains } from "../chains/useSquidChains";
|
|
6
|
-
import { useSquidTokens } from "../tokens/useSquidTokens";
|
|
7
|
-
import { useGetRoute } from "../transaction/useGetRoute";
|
|
8
|
-
import { useSwap } from "./useSwap";
|
|
9
|
-
const useDepositAddressStore = create(() => ({
|
|
10
|
-
isEnabled: false,
|
|
11
|
-
shouldOpenDepositChannel: false,
|
|
12
|
-
}));
|
|
13
|
-
export function useDepositAddress() {
|
|
14
|
-
const isEnabled = useDepositAddressStore((state) => state.isEnabled);
|
|
15
|
-
const { findToken } = useSquidTokens();
|
|
16
|
-
const { findChain } = useSquidChains();
|
|
17
|
-
const shouldOpenDepositChannel = useDepositAddressStore((state) => state.shouldOpenDepositChannel);
|
|
18
|
-
const getRouteMutation = useGetRoute();
|
|
19
|
-
const { fromChain, toChain } = useSwap();
|
|
20
|
-
const isAvailableAsPaymentMethod = useMemo(() => {
|
|
21
|
-
if (!fromChain?.chainId)
|
|
22
|
-
return false;
|
|
23
|
-
const chainsSupportingDepositAddress = [
|
|
24
|
-
CHAIN_IDS.BITCOIN.mainnet,
|
|
25
|
-
CHAIN_IDS.SOLANA.mainnet,
|
|
26
|
-
];
|
|
27
|
-
return chainsSupportingDepositAddress.includes(fromChain.chainId);
|
|
28
|
-
}, [fromChain?.chainId]);
|
|
29
|
-
const swapWillGenerateDepositAddress = useMemo(() => {
|
|
30
|
-
if (!fromChain?.chainId || !toChain?.chainId)
|
|
31
|
-
return false;
|
|
32
|
-
const chainsSupportingDepositAddress = [
|
|
33
|
-
CHAIN_IDS.BITCOIN.mainnet,
|
|
34
|
-
CHAIN_IDS.SOLANA.mainnet,
|
|
35
|
-
];
|
|
36
|
-
return (chainsSupportingDepositAddress.includes(fromChain.chainId) &&
|
|
37
|
-
fromChain.chainId !== toChain.chainId);
|
|
38
|
-
}, [fromChain?.chainId, toChain?.chainId]);
|
|
39
|
-
const enable = useCallback(() => {
|
|
40
|
-
useDepositAddressStore.setState({ isEnabled: true });
|
|
41
|
-
}, []);
|
|
42
|
-
const disable = useCallback(() => {
|
|
43
|
-
useDepositAddressStore.setState({ isEnabled: false });
|
|
44
|
-
}, []);
|
|
45
|
-
const openDepositChannel = useCallback(async () => {
|
|
46
|
-
useDepositAddressStore.setState({
|
|
47
|
-
shouldOpenDepositChannel: true,
|
|
48
|
-
});
|
|
49
|
-
}, []);
|
|
50
|
-
const closeDepositChannel = useCallback(async () => {
|
|
51
|
-
useDepositAddressStore.setState({
|
|
52
|
-
shouldOpenDepositChannel: false,
|
|
53
|
-
});
|
|
54
|
-
}, []);
|
|
55
|
-
const getRouteWithDeposit = useMutation(async ({ squidRoute, fromPrice, // We need the non-formatted fromPrice because the mutation will format using token decimals
|
|
56
|
-
}) => {
|
|
57
|
-
const fromToken = findToken(squidRoute.params.fromToken, fromChain?.chainId);
|
|
58
|
-
const toToken = findToken(squidRoute.params.toToken, toChain?.chainId);
|
|
59
|
-
const squidRouteFromChain = findChain(squidRoute.params.fromChain);
|
|
60
|
-
const route = await getRouteMutation.mutateAsync({
|
|
61
|
-
fromChain: squidRoute.params.fromChain,
|
|
62
|
-
toChain: squidRoute.params.toChain,
|
|
63
|
-
fromToken,
|
|
64
|
-
toToken,
|
|
65
|
-
sourceUserAddress: squidRoute.params.fromAddress,
|
|
66
|
-
destinationAddress: squidRoute.params.toAddress,
|
|
67
|
-
fromPrice,
|
|
68
|
-
bypassGuardrails: squidRoute.params.bypassGuardrails,
|
|
69
|
-
quoteOnly: false,
|
|
70
|
-
fromChainType: squidRouteFromChain?.chainType,
|
|
71
|
-
});
|
|
72
|
-
return route;
|
|
73
|
-
});
|
|
74
|
-
return {
|
|
75
|
-
isEnabled,
|
|
76
|
-
isAvailableAsPaymentMethod,
|
|
77
|
-
swapWillGenerateDepositAddress,
|
|
78
|
-
enable,
|
|
79
|
-
disable,
|
|
80
|
-
openDepositChannel,
|
|
81
|
-
closeDepositChannel,
|
|
82
|
-
shouldOpenDepositChannel,
|
|
83
|
-
getRouteWithDeposit,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=useDepositAddress.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useDepositAddress.js","sourceRoot":"","sources":["../../../src/hooks/swap/useDepositAddress.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,MAAM,sBAAsB,GAAG,MAAM,CAAsB,GAAG,EAAE,CAAC,CAAC;IAChE,SAAS,EAAE,KAAK;IAChB,wBAAwB,EAAE,KAAK;CAChC,CAAC,CAAC,CAAC;AAEJ,MAAM,UAAU,iBAAiB;IAC/B,MAAM,SAAS,GAAG,sBAAsB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACrE,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,CAAC;IACvC,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,CAAC;IACvC,MAAM,wBAAwB,GAAG,sBAAsB,CACrD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,wBAAwB,CAC1C,CAAC;IAEF,MAAM,gBAAgB,GAAG,WAAW,EAAE,CAAC;IAEvC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IAEzC,MAAM,0BAA0B,GAAG,OAAO,CAAC,GAAG,EAAE;QAC9C,IAAI,CAAC,SAAS,EAAE,OAAO;YAAE,OAAO,KAAK,CAAC;QAEtC,MAAM,8BAA8B,GAAG;YACrC,SAAS,CAAC,OAAO,CAAC,OAAO;YACzB,SAAS,CAAC,MAAM,CAAC,OAAO;SACzB,CAAC;QAEF,OAAO,8BAA8B,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzB,MAAM,8BAA8B,GAAG,OAAO,CAAC,GAAG,EAAE;QAClD,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO;YAAE,OAAO,KAAK,CAAC;QAE3D,MAAM,8BAA8B,GAAG;YACrC,SAAS,CAAC,OAAO,CAAC,OAAO;YACzB,SAAS,CAAC,MAAM,CAAC,OAAO;SACzB,CAAC;QAEF,OAAO,CACL,8BAA8B,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;YAC1D,SAAS,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CACtC,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,sBAAsB,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,sBAAsB,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,kBAAkB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAChD,sBAAsB,CAAC,QAAQ,CAAC;YAC9B,wBAAwB,EAAE,IAAI;SAC/B,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,mBAAmB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACjD,sBAAsB,CAAC,QAAQ,CAAC;YAC9B,wBAAwB,EAAE,KAAK;SAChC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,mBAAmB,GAAG,WAAW,CACrC,KAAK,EAAE,EACL,UAAU,EACV,SAAS,EAAE,4FAA4F;MAIxG,EAAE,EAAE;QACH,MAAM,SAAS,GAAG,SAAS,CACzB,UAAU,CAAC,MAAM,CAAC,SAAS,EAC3B,SAAS,EAAE,OAAO,CACnB,CAAC;QACF,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACvE,MAAM,mBAAmB,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEnE,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC;YAC/C,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS;YACtC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO;YAClC,SAAS;YACT,OAAO;YACP,iBAAiB,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW;YAChD,kBAAkB,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS;YAC/C,SAAS;YACT,gBAAgB,EAAE,UAAU,CAAC,MAAM,CAAC,gBAAgB;YACpD,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,mBAAmB,EAAE,SAAS;SAC9C,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC,CACF,CAAC;IAEF,OAAO;QACL,SAAS;QACT,0BAA0B;QAC1B,8BAA8B;QAC9B,MAAM;QACN,OAAO;QACP,kBAAkB;QAClB,mBAAmB;QACnB,wBAAwB;QACxB,mBAAmB;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { ChainType } from "@0xsquid/squid-types";
|
|
2
|
-
import { useMemo } from "react";
|
|
3
|
-
import { findNativeToken } from "../../services";
|
|
4
|
-
import { useSquidTokens } from "./useSquidTokens";
|
|
5
|
-
export function useNativeTokenForChain(chain) {
|
|
6
|
-
const { evmTokens, cosmosTokens, solanaTokens, bitcoinTokens } = useSquidTokens();
|
|
7
|
-
const getTokensForChainType = () => {
|
|
8
|
-
switch (chain?.chainType) {
|
|
9
|
-
case ChainType.EVM:
|
|
10
|
-
return evmTokens;
|
|
11
|
-
case ChainType.COSMOS:
|
|
12
|
-
return cosmosTokens;
|
|
13
|
-
case ChainType.SOLANA:
|
|
14
|
-
return solanaTokens;
|
|
15
|
-
case ChainType.BTC:
|
|
16
|
-
return bitcoinTokens;
|
|
17
|
-
default:
|
|
18
|
-
return [];
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
const nativeTokenForChainType = useMemo(() => {
|
|
22
|
-
return findNativeToken(getTokensForChainType(), chain);
|
|
23
|
-
}, [chain]);
|
|
24
|
-
return { nativeToken: nativeTokenForChainType };
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=useNativeTokenForChain.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useNativeTokenForChain.js","sourceRoot":"","sources":["../../../src/hooks/tokens/useNativeTokenForChain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,UAAU,sBAAsB,CAAC,KAAiB;IACtD,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,GAC5D,cAAc,EAAE,CAAC;IAEnB,MAAM,qBAAqB,GAAG,GAAG,EAAE;QACjC,QAAQ,KAAK,EAAE,SAAS,EAAE;YACxB,KAAK,SAAS,CAAC,GAAG;gBAChB,OAAO,SAAS,CAAC;YACnB,KAAK,SAAS,CAAC,MAAM;gBACnB,OAAO,YAAY,CAAC;YACtB,KAAK,SAAS,CAAC,MAAM;gBACnB,OAAO,YAAY,CAAC;YACtB,KAAK,SAAS,CAAC,GAAG;gBAChB,OAAO,aAAa,CAAC;YACvB;gBACE,OAAO,EAAE,CAAC;SACb;IACH,CAAC,CAAC;IAEF,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3C,OAAO,eAAe,CAAC,qBAAqB,EAAE,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC;AAClD,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { BitcoinWallet } from "../../core/types/wallet";
|
|
2
|
-
export declare const connectPhantomBitcoinWallet: (wallet: BitcoinWallet) => Promise<{
|
|
3
|
-
wallet: BitcoinWallet;
|
|
4
|
-
address: string;
|
|
5
|
-
} | null>;
|
|
6
|
-
export declare const connectUnisatBitcoinWallet: (wallet: BitcoinWallet) => Promise<{
|
|
7
|
-
wallet: BitcoinWallet;
|
|
8
|
-
address: string;
|
|
9
|
-
} | null>;
|
|
10
|
-
export declare const connectBitcoinWallet: (wallet: BitcoinWallet) => Promise<{
|
|
11
|
-
wallet: BitcoinWallet;
|
|
12
|
-
address: string;
|
|
13
|
-
} | null>;
|
|
14
|
-
export declare const isBitcoinAddressValid: (address: string) => boolean;
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { address as btcAddressLib } from "bitcoinjs-lib";
|
|
2
|
-
export const connectPhantomBitcoinWallet = async (wallet) => {
|
|
3
|
-
const provider = window?.phantom?.bitcoin;
|
|
4
|
-
if (!provider) {
|
|
5
|
-
throw new Error("Phantom wallet not found");
|
|
6
|
-
}
|
|
7
|
-
try {
|
|
8
|
-
const response = await provider.requestAccounts();
|
|
9
|
-
const paymentAccount = response.find((account) => account.purpose === "payment");
|
|
10
|
-
if (!paymentAccount) {
|
|
11
|
-
throw new Error("No Phantom BTC payment account found");
|
|
12
|
-
}
|
|
13
|
-
return {
|
|
14
|
-
wallet,
|
|
15
|
-
address: paymentAccount.address,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
catch (error) {
|
|
19
|
-
console.error("Failed to connect Phantom wallet:", error);
|
|
20
|
-
return null;
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
export const connectUnisatBitcoinWallet = async (wallet) => {
|
|
24
|
-
const provider = window?.unisat;
|
|
25
|
-
if (!provider) {
|
|
26
|
-
throw new Error("Unisat wallet not found");
|
|
27
|
-
}
|
|
28
|
-
try {
|
|
29
|
-
const accounts = await provider.requestAccounts();
|
|
30
|
-
return {
|
|
31
|
-
wallet,
|
|
32
|
-
address: accounts[0],
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
console.error("Failed to connect Unisat wallet:", error);
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
export const connectBitcoinWallet = async (wallet) => {
|
|
41
|
-
switch (wallet.connectorId) {
|
|
42
|
-
case "phantomBTC":
|
|
43
|
-
return connectPhantomBitcoinWallet(wallet);
|
|
44
|
-
case "unisat":
|
|
45
|
-
return connectUnisatBitcoinWallet(wallet);
|
|
46
|
-
default:
|
|
47
|
-
throw new Error("Invalid Bitcoin wallet");
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
// Validation taken from Squid API repo
|
|
51
|
-
export const isBitcoinAddressValid = (address) => {
|
|
52
|
-
try {
|
|
53
|
-
if (address.startsWith("bc1p")) {
|
|
54
|
-
// this is a bitcoin taproot address type, it has different encoding than other 3 address types
|
|
55
|
-
// and requires different validation logic
|
|
56
|
-
const decoded = btcAddressLib.fromBech32(address);
|
|
57
|
-
return decoded.prefix === "bc" && decoded.version === 1;
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
btcAddressLib.toOutputScript(address);
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
catch (e) {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
//# sourceMappingURL=bitcoinService.js.map
|