@swapkit/wallets 3.0.0-beta.0 → 3.0.0-beta.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/chunk-czhtd6cy.js +4 -0
- package/dist/chunk-czhtd6cy.js.map +10 -0
- package/dist/{chunk-5m175wfy.js → chunk-p1kdg37m.js} +2 -2
- package/dist/{chunk-5m175wfy.js.map → chunk-p1kdg37m.js.map} +1 -1
- package/dist/{chunk-f76hj57k.js → chunk-q81hzyra.js} +2 -2
- package/dist/{chunk-f76hj57k.js.map → chunk-q81hzyra.js.map} +1 -1
- package/dist/chunk-qadd75nn.js +3 -0
- package/dist/chunk-qadd75nn.js.map +10 -0
- package/dist/src/bitget/index.cjs +2 -2
- package/dist/src/bitget/index.cjs.map +5 -5
- package/dist/src/bitget/index.js +2 -2
- package/dist/src/bitget/index.js.map +5 -5
- package/dist/src/coinbase/index.cjs +2 -2
- package/dist/src/coinbase/index.cjs.map +4 -4
- package/dist/src/coinbase/index.js +2 -3
- package/dist/src/coinbase/index.js.map +4 -4
- package/dist/src/ctrl/index.cjs +2 -2
- package/dist/src/ctrl/index.cjs.map +5 -5
- package/dist/src/ctrl/index.js +2 -2
- package/dist/src/ctrl/index.js.map +5 -5
- package/dist/src/evm-extensions/index.cjs +2 -2
- package/dist/src/evm-extensions/index.cjs.map +3 -3
- package/dist/src/evm-extensions/index.js +2 -3
- package/dist/src/evm-extensions/index.js.map +3 -3
- package/dist/src/exodus/index.cjs +2 -2
- package/dist/src/exodus/index.cjs.map +3 -3
- package/dist/src/exodus/index.js +2 -3
- package/dist/src/exodus/index.js.map +3 -3
- package/dist/src/index.cjs +2 -2
- package/dist/src/index.cjs.map +3 -4
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +3 -4
- package/dist/src/keepkey/index.cjs +2 -2
- package/dist/src/keepkey/index.cjs.map +7 -7
- package/dist/src/keepkey/index.js +2 -3
- package/dist/src/keepkey/index.js.map +7 -7
- package/dist/src/keepkey-bex/index.cjs +2 -2
- package/dist/src/keepkey-bex/index.cjs.map +4 -4
- package/dist/src/keepkey-bex/index.js +2 -3
- package/dist/src/keepkey-bex/index.js.map +4 -4
- package/dist/src/keplr/index.cjs +2 -2
- package/dist/src/keplr/index.cjs.map +3 -3
- package/dist/src/keplr/index.js +2 -3
- package/dist/src/keplr/index.js.map +3 -3
- package/dist/src/keystore/index.cjs +2 -2
- package/dist/src/keystore/index.cjs.map +4 -4
- package/dist/src/keystore/index.js +2 -3
- package/dist/src/keystore/index.js.map +4 -4
- package/dist/src/ledger/index.cjs +3 -3
- package/dist/src/ledger/index.cjs.map +8 -8
- package/dist/src/ledger/index.js +3 -4
- package/dist/src/ledger/index.js.map +8 -8
- package/dist/src/okx/index.cjs +2 -2
- package/dist/src/okx/index.cjs.map +4 -4
- package/dist/src/okx/index.js +2 -3
- package/dist/src/okx/index.js.map +4 -4
- package/dist/src/onekey/index.cjs +3 -0
- package/dist/src/onekey/index.cjs.map +10 -0
- package/dist/src/onekey/index.js +3 -0
- package/dist/src/onekey/index.js.map +10 -0
- package/dist/src/phantom/index.cjs +2 -2
- package/dist/src/phantom/index.cjs.map +3 -3
- package/dist/src/phantom/index.js +2 -3
- package/dist/src/phantom/index.js.map +3 -3
- package/dist/src/polkadotjs/index.cjs +2 -2
- package/dist/src/polkadotjs/index.cjs.map +3 -3
- package/dist/src/polkadotjs/index.js +2 -3
- package/dist/src/polkadotjs/index.js.map +3 -3
- package/dist/src/radix/index.cjs +2 -2
- package/dist/src/radix/index.cjs.map +3 -3
- package/dist/src/radix/index.js +2 -3
- package/dist/src/radix/index.js.map +3 -3
- package/dist/src/talisman/index.cjs +2 -2
- package/dist/src/talisman/index.cjs.map +3 -3
- package/dist/src/talisman/index.js +2 -3
- package/dist/src/talisman/index.js.map +3 -3
- package/dist/src/trezor/index.cjs +2 -2
- package/dist/src/trezor/index.cjs.map +3 -3
- package/dist/src/trezor/index.js +2 -3
- package/dist/src/trezor/index.js.map +3 -3
- package/dist/src/walletconnect/index.cjs +2 -2
- package/dist/src/walletconnect/index.cjs.map +5 -5
- package/dist/src/walletconnect/index.js +2 -3
- package/dist/src/walletconnect/index.js.map +5 -5
- package/package.json +31 -26
- package/src/bitget/helpers.ts +33 -93
- package/src/bitget/index.ts +32 -54
- package/src/coinbase/index.ts +2 -2
- package/src/coinbase/signer.ts +46 -42
- package/src/ctrl/index.ts +157 -22
- package/src/ctrl/walletHelpers.ts +45 -94
- package/src/evm-extensions/index.ts +21 -40
- package/src/exodus/index.ts +18 -28
- package/src/index.ts +2 -37
- package/src/keepkey/chains/cosmos.ts +10 -7
- package/src/keepkey/chains/mayachain.ts +24 -24
- package/src/keepkey/chains/thorchain.ts +19 -13
- package/src/keepkey/chains/utxo.ts +36 -48
- package/src/keepkey/index.ts +9 -23
- package/src/keepkey-bex/index.ts +25 -23
- package/src/keepkey-bex/walletHelpers.ts +8 -36
- package/src/keplr/index.ts +6 -53
- package/src/keystore/helpers.ts +34 -55
- package/src/keystore/index.ts +15 -183
- package/src/ledger/clients/evm.ts +3 -7
- package/src/ledger/clients/thorchain/lib.ts +0 -19
- package/src/ledger/clients/utxo.ts +3 -2
- package/src/ledger/helpers/getLedgerClient.ts +2 -2
- package/src/ledger/index.ts +20 -21
- package/src/ledger/types.ts +1 -1
- package/src/okx/helpers.ts +23 -33
- package/src/okx/index.ts +4 -47
- package/src/onekey/evmSigner.ts +133 -0
- package/src/onekey/index.ts +213 -0
- package/src/phantom/index.ts +18 -42
- package/src/polkadotjs/index.ts +5 -7
- package/src/radix/index.ts +31 -47
- package/src/talisman/index.ts +15 -32
- package/src/trezor/index.ts +46 -45
- package/src/types.ts +199 -0
- package/src/utils.ts +54 -0
- package/src/walletconnect/constants.ts +1 -1
- package/src/walletconnect/helpers.ts +2 -2
- package/src/walletconnect/index.ts +36 -37
- package/dist/chunk-ha78se5g.js +0 -4
- package/dist/chunk-ha78se5g.js.map +0 -10
- package/dist/chunk-yvbvzc0q.js +0 -3
- package/dist/chunk-yvbvzc0q.js.map +0 -10
- package/src/bitget/bitgetWallet.ts +0 -32
- package/src/ctrl/ctrlWallet.ts +0 -175
- package/src/helpers.ts +0 -8
- package/src/ledger/ledgerLive.ts +0 -429
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Chain,
|
|
3
|
+
type NetworkParams,
|
|
4
|
+
SKConfig,
|
|
5
|
+
SwapKitError,
|
|
6
|
+
WalletOption,
|
|
7
|
+
addEVMWalletNetwork,
|
|
8
|
+
createWallet,
|
|
9
|
+
filterSupportedChains,
|
|
10
|
+
prepareNetworkSwitch,
|
|
11
|
+
} from "@swapkit/helpers";
|
|
12
|
+
import type {
|
|
13
|
+
BitcoinProvider,
|
|
14
|
+
GetAddressOptions,
|
|
15
|
+
GetAddressResponse,
|
|
16
|
+
SignTransactionOptions,
|
|
17
|
+
} from "sats-connect";
|
|
18
|
+
import { getWalletSupportedChains } from "../utils";
|
|
19
|
+
|
|
20
|
+
async function getWalletMethodsForExtension(chain: Chain) {
|
|
21
|
+
switch (chain) {
|
|
22
|
+
case Chain.Bitcoin: {
|
|
23
|
+
if (!window.$onekey?.btc) {
|
|
24
|
+
throw new SwapKitError({
|
|
25
|
+
errorKey: "wallet_onekey_not_found",
|
|
26
|
+
info: { chain },
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const { Psbt } = await import("bitcoinjs-lib");
|
|
31
|
+
const { getUtxoToolbox } = await import("@swapkit/toolboxes/utxo");
|
|
32
|
+
const {
|
|
33
|
+
signTransaction: satsSignTransaction,
|
|
34
|
+
getAddress,
|
|
35
|
+
AddressPurpose,
|
|
36
|
+
BitcoinNetworkType,
|
|
37
|
+
} = await import("sats-connect");
|
|
38
|
+
|
|
39
|
+
let address = "";
|
|
40
|
+
|
|
41
|
+
const getProvider: () => Promise<BitcoinProvider | undefined> = () =>
|
|
42
|
+
new Promise((res) => res(window.$onekey?.btc as BitcoinProvider));
|
|
43
|
+
|
|
44
|
+
const getAddressOptions: GetAddressOptions = {
|
|
45
|
+
getProvider,
|
|
46
|
+
payload: {
|
|
47
|
+
purposes: [AddressPurpose.Payment],
|
|
48
|
+
message: "Address for receiving and sending payments",
|
|
49
|
+
network: { type: BitcoinNetworkType.Mainnet },
|
|
50
|
+
},
|
|
51
|
+
onFinish: (response: GetAddressResponse) => {
|
|
52
|
+
if (response.addresses[0]?.address) {
|
|
53
|
+
address = response.addresses[0].address;
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
onCancel: () => {
|
|
57
|
+
throw new SwapKitError("wallet_connection_rejected_by_user");
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
await getAddress(getAddressOptions);
|
|
62
|
+
|
|
63
|
+
async function signTransaction(psbt: any) {
|
|
64
|
+
let signedPsbt: any;
|
|
65
|
+
const signPsbtOptions: SignTransactionOptions = {
|
|
66
|
+
getProvider,
|
|
67
|
+
payload: {
|
|
68
|
+
message: "Sign transaction",
|
|
69
|
+
network: {
|
|
70
|
+
type: BitcoinNetworkType.Mainnet,
|
|
71
|
+
},
|
|
72
|
+
psbtBase64: psbt.toBase64(),
|
|
73
|
+
broadcast: false,
|
|
74
|
+
inputsToSign: [
|
|
75
|
+
{
|
|
76
|
+
address,
|
|
77
|
+
signingIndexes: psbt.txInputs.map((_: any, index: number) => index),
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
onFinish: (response) => {
|
|
82
|
+
signedPsbt = Psbt.fromBase64(response.psbtBase64);
|
|
83
|
+
},
|
|
84
|
+
onCancel: () => {
|
|
85
|
+
throw new SwapKitError("wallet_connection_rejected_by_user");
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
await satsSignTransaction(signPsbtOptions);
|
|
90
|
+
if (!signedPsbt) throw new SwapKitError("wallet_onekey_sign_transaction_error");
|
|
91
|
+
return signedPsbt;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const signer = {
|
|
95
|
+
signTransaction,
|
|
96
|
+
getAddress: () => Promise.resolve(address),
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const toolbox = await getUtxoToolbox(chain, { signer });
|
|
100
|
+
|
|
101
|
+
return { ...toolbox, address };
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
case Chain.Solana: {
|
|
105
|
+
if (!window.$onekey?.sol) {
|
|
106
|
+
throw new SwapKitError({
|
|
107
|
+
errorKey: "wallet_onekey_not_found",
|
|
108
|
+
info: { chain },
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const { getSolanaToolbox } = await import("@swapkit/toolboxes/solana");
|
|
113
|
+
|
|
114
|
+
const signer = window.$onekey.sol;
|
|
115
|
+
const address = await signer.getAddress();
|
|
116
|
+
const toolbox = getSolanaToolbox({ signer });
|
|
117
|
+
|
|
118
|
+
return { ...toolbox, address };
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
case Chain.Arbitrum:
|
|
122
|
+
case Chain.Avalanche:
|
|
123
|
+
case Chain.Base:
|
|
124
|
+
case Chain.BinanceSmartChain:
|
|
125
|
+
case Chain.Ethereum:
|
|
126
|
+
case Chain.Optimism:
|
|
127
|
+
case Chain.Polygon: {
|
|
128
|
+
const { getProvider, getEvmToolbox } = await import("@swapkit/toolboxes/evm");
|
|
129
|
+
if (!window.$onekey?.ethereum) {
|
|
130
|
+
throw new SwapKitError({
|
|
131
|
+
errorKey: "wallet_onekey_not_found",
|
|
132
|
+
info: { chain },
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const { BrowserProvider } = await import("ethers");
|
|
137
|
+
const provider = new BrowserProvider(window.$onekey.ethereum, "any");
|
|
138
|
+
|
|
139
|
+
const rpcUrl = SKConfig.get("rpcUrls")[chain];
|
|
140
|
+
|
|
141
|
+
await provider.send("eth_requestAccounts", []);
|
|
142
|
+
const jsonRpcProvider = await getProvider(chain, rpcUrl);
|
|
143
|
+
const signer = await provider.getSigner();
|
|
144
|
+
const address = await signer.getAddress();
|
|
145
|
+
|
|
146
|
+
const toolbox = await getEvmToolbox(chain, { provider: jsonRpcProvider, signer });
|
|
147
|
+
try {
|
|
148
|
+
if (chain !== Chain.Ethereum) {
|
|
149
|
+
const networkParams = toolbox.getNetworkParams() as NetworkParams;
|
|
150
|
+
|
|
151
|
+
await addEVMWalletNetwork(provider, networkParams);
|
|
152
|
+
}
|
|
153
|
+
} catch (error) {
|
|
154
|
+
throw new SwapKitError({
|
|
155
|
+
errorKey: "wallet_failed_to_add_or_switch_network",
|
|
156
|
+
info: { chain, error },
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return {
|
|
161
|
+
address,
|
|
162
|
+
...prepareNetworkSwitch({ toolbox, chain, provider }),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
default:
|
|
167
|
+
throw new SwapKitError({
|
|
168
|
+
errorKey: "wallet_chain_not_supported",
|
|
169
|
+
info: { chain, wallet: WalletOption.ONEKEY },
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export const onekeyWallet = createWallet({
|
|
175
|
+
name: "connectOnekeyWallet",
|
|
176
|
+
walletType: WalletOption.ONEKEY,
|
|
177
|
+
supportedChains: [
|
|
178
|
+
Chain.Arbitrum,
|
|
179
|
+
Chain.Avalanche,
|
|
180
|
+
Chain.Base,
|
|
181
|
+
Chain.BinanceSmartChain,
|
|
182
|
+
Chain.Bitcoin,
|
|
183
|
+
Chain.Ethereum,
|
|
184
|
+
Chain.Optimism,
|
|
185
|
+
Chain.Polygon,
|
|
186
|
+
Chain.Solana,
|
|
187
|
+
],
|
|
188
|
+
connect: ({ addChain, walletType, supportedChains }) =>
|
|
189
|
+
async function connectOnekeyWallet(chains: Chain[]) {
|
|
190
|
+
if (!window.$onekey) {
|
|
191
|
+
throw new SwapKitError({
|
|
192
|
+
errorKey: "wallet_onekey_not_found",
|
|
193
|
+
info: { wallet: WalletOption.ONEKEY },
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });
|
|
198
|
+
|
|
199
|
+
await Promise.all(
|
|
200
|
+
filteredChains.map(async (chain) => {
|
|
201
|
+
const walletMethods = await getWalletMethodsForExtension(chain);
|
|
202
|
+
|
|
203
|
+
const address = (await walletMethods.getAddress()) || "F";
|
|
204
|
+
|
|
205
|
+
addChain({ ...walletMethods, chain, address, walletType });
|
|
206
|
+
}),
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
return true;
|
|
210
|
+
},
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
export const ONEKEY_WALLET_SUPPORTED_CHAINS = getWalletSupportedChains(onekeyWallet);
|
package/src/phantom/index.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type AssetValue,
|
|
3
3
|
Chain,
|
|
4
|
+
type GenericTransferParams,
|
|
4
5
|
SwapKitError,
|
|
5
6
|
WalletOption,
|
|
6
|
-
type WalletTxParams,
|
|
7
7
|
createWallet,
|
|
8
8
|
filterSupportedChains,
|
|
9
9
|
} from "@swapkit/helpers";
|
|
10
|
-
import
|
|
11
|
-
import { getWalletSupportedChains } from "../helpers";
|
|
10
|
+
import { getWalletSupportedChains } from "../utils";
|
|
12
11
|
|
|
13
12
|
export const phantomWallet = createWallet({
|
|
14
13
|
name: "connectPhantom",
|
|
@@ -23,7 +22,7 @@ export const phantomWallet = createWallet({
|
|
|
23
22
|
filteredChains.map(async (chain) => {
|
|
24
23
|
const { address, ...methods } = await getWalletMethods(chain);
|
|
25
24
|
|
|
26
|
-
addChain({ ...methods, chain, address, walletType
|
|
25
|
+
addChain({ ...methods, chain, address, walletType });
|
|
27
26
|
}),
|
|
28
27
|
);
|
|
29
28
|
|
|
@@ -39,14 +38,6 @@ export const phantomWallet = createWallet({
|
|
|
39
38
|
export const PHANTOM_SUPPORTED_CHAINS = getWalletSupportedChains(phantomWallet);
|
|
40
39
|
export type PhantomSupportedChain = (typeof PHANTOM_SUPPORTED_CHAINS)[number];
|
|
41
40
|
|
|
42
|
-
declare global {
|
|
43
|
-
interface Window {
|
|
44
|
-
phantom: {
|
|
45
|
-
solana: SolanaProvider;
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
41
|
async function getWalletMethods(chain: PhantomSupportedChain) {
|
|
51
42
|
const phantom: any = window?.phantom;
|
|
52
43
|
|
|
@@ -57,31 +48,28 @@ async function getWalletMethods(chain: PhantomSupportedChain) {
|
|
|
57
48
|
throw new SwapKitError("wallet_phantom_not_found");
|
|
58
49
|
}
|
|
59
50
|
|
|
60
|
-
const {
|
|
51
|
+
const { getUtxoToolbox } = await import("@swapkit/toolboxes/utxo");
|
|
61
52
|
const [{ address }] = await provider.requestAccounts();
|
|
62
|
-
|
|
63
|
-
const toolbox = getToolboxByChain(chain)();
|
|
53
|
+
const toolbox = await getUtxoToolbox(chain);
|
|
64
54
|
|
|
65
55
|
return { ...toolbox, address };
|
|
66
56
|
}
|
|
67
57
|
|
|
68
58
|
case Chain.Ethereum: {
|
|
69
|
-
const {
|
|
59
|
+
const { getEvmToolbox } = await import("@swapkit/toolboxes/evm");
|
|
70
60
|
const { BrowserProvider } = await import("ethers");
|
|
71
61
|
|
|
72
62
|
const provider = new BrowserProvider(phantom?.ethereum, "any");
|
|
73
63
|
const [address] = await provider.send("eth_requestAccounts", []);
|
|
74
64
|
|
|
75
65
|
const signer = await provider.getSigner();
|
|
76
|
-
const toolbox =
|
|
66
|
+
const toolbox = await getEvmToolbox(chain, { signer, provider });
|
|
77
67
|
|
|
78
68
|
return { ...toolbox, address };
|
|
79
69
|
}
|
|
80
70
|
|
|
81
71
|
case Chain.Solana: {
|
|
82
|
-
const {
|
|
83
|
-
"@swapkit/toolboxes/solana"
|
|
84
|
-
);
|
|
72
|
+
const { getSolanaToolbox } = await import("@swapkit/toolboxes/solana");
|
|
85
73
|
const provider = phantom?.solana;
|
|
86
74
|
if (!provider?.isPhantom) {
|
|
87
75
|
throw new SwapKitError("wallet_phantom_not_found");
|
|
@@ -89,41 +77,29 @@ async function getWalletMethods(chain: PhantomSupportedChain) {
|
|
|
89
77
|
|
|
90
78
|
const providerConnection = await provider.connect();
|
|
91
79
|
const address: string = providerConnection.publicKey.toString();
|
|
92
|
-
const toolbox =
|
|
80
|
+
const toolbox = await getSolanaToolbox();
|
|
93
81
|
|
|
94
82
|
const transfer = async ({
|
|
95
83
|
recipient,
|
|
96
84
|
assetValue,
|
|
97
85
|
isProgramDerivedAddress,
|
|
98
|
-
}:
|
|
99
|
-
const { PublicKey
|
|
86
|
+
}: GenericTransferParams & { assetValue: AssetValue; isProgramDerivedAddress?: boolean }) => {
|
|
87
|
+
const { PublicKey } = await import("@solana/web3.js");
|
|
100
88
|
const validateAddress = await toolbox.getAddressValidator();
|
|
89
|
+
|
|
101
90
|
if (!(isProgramDerivedAddress || validateAddress(recipient))) {
|
|
102
91
|
throw new SwapKitError("core_transaction_invalid_recipient_address");
|
|
103
92
|
}
|
|
104
93
|
|
|
105
94
|
const fromPubkey = new PublicKey(address);
|
|
106
|
-
const amount = assetValue.getBaseValue("number");
|
|
107
95
|
const connection = await toolbox.getConnection();
|
|
108
96
|
|
|
109
|
-
const transaction =
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}),
|
|
116
|
-
)
|
|
117
|
-
: assetValue.address
|
|
118
|
-
? await createSolanaTokenTransaction({
|
|
119
|
-
amount,
|
|
120
|
-
connection,
|
|
121
|
-
decimals: assetValue.decimal as number,
|
|
122
|
-
from: fromPubkey,
|
|
123
|
-
recipient,
|
|
124
|
-
tokenAddress: assetValue.address,
|
|
125
|
-
})
|
|
126
|
-
: undefined;
|
|
97
|
+
const transaction = await toolbox.createTransaction({
|
|
98
|
+
recipient,
|
|
99
|
+
assetValue,
|
|
100
|
+
sender: address,
|
|
101
|
+
isProgramDerivedAddress,
|
|
102
|
+
});
|
|
127
103
|
|
|
128
104
|
if (!transaction) {
|
|
129
105
|
throw new SwapKitError("core_transaction_invalid_sender_address");
|
package/src/polkadotjs/index.ts
CHANGED
|
@@ -5,8 +5,7 @@ import {
|
|
|
5
5
|
createWallet,
|
|
6
6
|
filterSupportedChains,
|
|
7
7
|
} from "@swapkit/helpers";
|
|
8
|
-
import
|
|
9
|
-
import { getWalletSupportedChains } from "../helpers";
|
|
8
|
+
import { getWalletSupportedChains } from "../utils";
|
|
10
9
|
|
|
11
10
|
export const polkadotWallet = createWallet({
|
|
12
11
|
name: "connectPolkadotJs",
|
|
@@ -20,7 +19,7 @@ export const polkadotWallet = createWallet({
|
|
|
20
19
|
filteredChains.map(async (chain) => {
|
|
21
20
|
const { address, ...walletMethods } = await getWalletMethods(chain);
|
|
22
21
|
|
|
23
|
-
addChain({ ...walletMethods, chain, address, walletType
|
|
22
|
+
addChain({ ...walletMethods, chain, address, walletType });
|
|
24
23
|
}),
|
|
25
24
|
);
|
|
26
25
|
|
|
@@ -33,16 +32,15 @@ export const POLKADOT_SUPPORTED_CHAINS = getWalletSupportedChains(polkadotWallet
|
|
|
33
32
|
async function getWalletMethods(chain: Chain) {
|
|
34
33
|
switch (chain) {
|
|
35
34
|
case Chain.Polkadot: {
|
|
36
|
-
const {
|
|
37
|
-
const
|
|
38
|
-
const injectedExtension = injectedWindow?.injectedWeb3?.["polkadot-js"];
|
|
35
|
+
const { getSubstrateToolbox } = await import("@swapkit/toolboxes/substrate");
|
|
36
|
+
const injectedExtension = window?.injectedWeb3?.["polkadot-js"];
|
|
39
37
|
|
|
40
38
|
const rawExtension = await injectedExtension?.enable?.("polkadot-js");
|
|
41
39
|
if (!rawExtension) {
|
|
42
40
|
throw new SwapKitError({ errorKey: "wallet_polkadot_not_found", info: { chain } });
|
|
43
41
|
}
|
|
44
42
|
|
|
45
|
-
const toolbox = await
|
|
43
|
+
const toolbox = await getSubstrateToolbox(chain, { signer: rawExtension.signer });
|
|
46
44
|
const [account] = await rawExtension.accounts.get();
|
|
47
45
|
|
|
48
46
|
if (!account?.address) {
|
package/src/radix/index.ts
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import type {
|
|
2
|
+
FungibleResourcesCollectionItem,
|
|
3
3
|
GatewayApiClient,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
StateEntityDetailsVaultResponseItem,
|
|
5
|
+
StateEntityFungiblesPageRequest,
|
|
6
|
+
StateEntityFungiblesPageResponse,
|
|
7
7
|
} from "@radixdlt/babylon-gateway-api-sdk";
|
|
8
|
-
import { DataRequestBuilder, RadixDappToolkit } from "@radixdlt/radix-dapp-toolkit";
|
|
9
8
|
import {
|
|
10
9
|
AssetValue,
|
|
11
10
|
Chain,
|
|
12
11
|
SKConfig,
|
|
13
|
-
type SKConfigIntegrations,
|
|
14
12
|
SwapKitError,
|
|
15
13
|
WalletOption,
|
|
16
14
|
createWallet,
|
|
17
15
|
filterSupportedChains,
|
|
18
16
|
} from "@swapkit/helpers";
|
|
19
|
-
import { getWalletSupportedChains } from "../
|
|
17
|
+
import { getWalletSupportedChains } from "../utils";
|
|
20
18
|
|
|
21
19
|
export const radixWallet = createWallet({
|
|
22
20
|
name: "connectRadixWallet",
|
|
@@ -33,9 +31,9 @@ export const radixWallet = createWallet({
|
|
|
33
31
|
|
|
34
32
|
await Promise.all(
|
|
35
33
|
filteredChains.map(async (chain) => {
|
|
36
|
-
const walletMethods = await getWalletMethods(
|
|
34
|
+
const walletMethods = await getWalletMethods();
|
|
37
35
|
|
|
38
|
-
addChain({ ...walletMethods, chain,
|
|
36
|
+
addChain({ ...walletMethods, chain, walletType });
|
|
39
37
|
}),
|
|
40
38
|
);
|
|
41
39
|
|
|
@@ -45,13 +43,15 @@ export const radixWallet = createWallet({
|
|
|
45
43
|
|
|
46
44
|
export const RADIX_SUPPORTED_CHAINS = getWalletSupportedChains(radixWallet);
|
|
47
45
|
|
|
48
|
-
async function fetchFungibleResources({
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
async function fetchFungibleResources(address: string): Promise<FungibleResourcesCollectionItem[]> {
|
|
47
|
+
const { GatewayApiClient } = await import("@radixdlt/babylon-gateway-api-sdk");
|
|
48
|
+
const { applicationName } = SKConfig.get("integrations").radix;
|
|
49
|
+
const networkApi = GatewayApiClient.initialize({ networkId: 1, applicationName });
|
|
50
|
+
|
|
52
51
|
let hasNextPage = true;
|
|
53
52
|
let nextCursor: string | undefined;
|
|
54
53
|
let fungibleResources: FungibleResourcesCollectionItem[] = [];
|
|
54
|
+
|
|
55
55
|
const stateVersion = await currentStateVersion(networkApi);
|
|
56
56
|
|
|
57
57
|
while (hasNextPage) {
|
|
@@ -82,25 +82,14 @@ async function currentStateVersion(networkApi: GatewayApiClient) {
|
|
|
82
82
|
return networkApi.status.getCurrent().then((status) => status.ledger_state.state_version);
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
return async function getBalance(address: string) {
|
|
87
|
-
const fungibleResources = await fetchFungibleResources({ address, networkApi });
|
|
88
|
-
const fungibleBalances = convertResourcesToBalances({
|
|
89
|
-
resources: fungibleResources,
|
|
90
|
-
networkApi,
|
|
91
|
-
});
|
|
92
|
-
return fungibleBalances;
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
|
|
85
|
+
// TODO - @Towan: is that still needed with SwapKitApi.getChainBalance()?
|
|
96
86
|
// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: Split into multiple functions
|
|
97
|
-
async function
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}): Promise<AssetValue[]> {
|
|
87
|
+
async function getBalance(address: string): Promise<AssetValue[]> {
|
|
88
|
+
const { GatewayApiClient } = await import("@radixdlt/babylon-gateway-api-sdk");
|
|
89
|
+
const resources = await fetchFungibleResources(address);
|
|
90
|
+
const { applicationName } = SKConfig.get("integrations").radix;
|
|
91
|
+
const networkApi = GatewayApiClient.initialize({ networkId: 1, applicationName });
|
|
92
|
+
|
|
104
93
|
const balances: AssetValue[] = [];
|
|
105
94
|
const BATCH_SIZE = 50;
|
|
106
95
|
|
|
@@ -124,10 +113,7 @@ async function convertResourcesToBalances({
|
|
|
124
113
|
metaDataSymbol?.value.typed.type === "String" ? metaDataSymbol.value.typed.value : "?";
|
|
125
114
|
|
|
126
115
|
if (result.details.type === "FungibleResource") {
|
|
127
|
-
divisibilities.set(result.address, {
|
|
128
|
-
decimals: result.details.divisibility,
|
|
129
|
-
symbol,
|
|
130
|
-
});
|
|
116
|
+
divisibilities.set(result.address, { decimals: result.details.divisibility, symbol });
|
|
131
117
|
}
|
|
132
118
|
}
|
|
133
119
|
}
|
|
@@ -147,18 +133,20 @@ async function convertResourcesToBalances({
|
|
|
147
133
|
}
|
|
148
134
|
}
|
|
149
135
|
}
|
|
150
|
-
|
|
136
|
+
|
|
151
137
|
return balances;
|
|
152
138
|
}
|
|
153
139
|
|
|
154
|
-
|
|
140
|
+
async function getWalletMethods() {
|
|
141
|
+
const { RadixDappToolkit } = await import("@radixdlt/radix-dapp-toolkit");
|
|
142
|
+
const dappConfig = SKConfig.get("integrations").radix;
|
|
155
143
|
const rdt = RadixDappToolkit({ ...dappConfig, networkId: dappConfig.network.networkId });
|
|
156
144
|
|
|
157
145
|
function delay(ms: number) {
|
|
158
146
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
159
147
|
}
|
|
160
148
|
|
|
161
|
-
// Wat is dat
|
|
149
|
+
// TODO: @Towan - Wat is dat?
|
|
162
150
|
await delay(400);
|
|
163
151
|
|
|
164
152
|
function getAddress() {
|
|
@@ -169,6 +157,7 @@ const getWalletMethods = async (dappConfig: SKConfigIntegrations["radix"]) => {
|
|
|
169
157
|
}
|
|
170
158
|
|
|
171
159
|
const getNewAddress = async () => {
|
|
160
|
+
const { DataRequestBuilder } = await import("@radixdlt/radix-dapp-toolkit");
|
|
172
161
|
rdt.walletApi.setRequestData(DataRequestBuilder.accounts().exactly(1));
|
|
173
162
|
const res = await rdt.walletApi.sendRequest();
|
|
174
163
|
|
|
@@ -187,15 +176,11 @@ const getWalletMethods = async (dappConfig: SKConfigIntegrations["radix"]) => {
|
|
|
187
176
|
|
|
188
177
|
const address = getAddress() || (await getNewAddress());
|
|
189
178
|
|
|
190
|
-
const networkApi = GatewayApiClient.initialize({
|
|
191
|
-
networkId: 1,
|
|
192
|
-
applicationName: dappConfig.applicationName,
|
|
193
|
-
});
|
|
194
|
-
|
|
195
179
|
return {
|
|
196
180
|
radixDappToolkit: rdt,
|
|
197
181
|
address,
|
|
198
|
-
|
|
182
|
+
getAddress,
|
|
183
|
+
getBalance: () => getBalance(address),
|
|
199
184
|
transfer: (_params: { assetValue: AssetValue; recipient: string; from: string }) => {
|
|
200
185
|
throw new Error("Not implemented");
|
|
201
186
|
},
|
|
@@ -213,6 +198,5 @@ const getWalletMethods = async (dappConfig: SKConfigIntegrations["radix"]) => {
|
|
|
213
198
|
|
|
214
199
|
return txResult;
|
|
215
200
|
},
|
|
216
|
-
getAddress: getAddress,
|
|
217
201
|
};
|
|
218
|
-
}
|
|
202
|
+
}
|
package/src/talisman/index.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Chain,
|
|
3
3
|
type EVMChain,
|
|
4
|
-
type EthereumWindowProvider,
|
|
5
4
|
SwapKitError,
|
|
6
5
|
WalletOption,
|
|
7
6
|
createWallet,
|
|
@@ -9,10 +8,8 @@ import {
|
|
|
9
8
|
prepareNetworkSwitch,
|
|
10
9
|
switchEVMWalletNetwork,
|
|
11
10
|
} from "@swapkit/helpers";
|
|
12
|
-
import type { NonETHToolbox } from "@swapkit/toolboxes/evm";
|
|
13
|
-
import { type InjectedWindow, Network } from "@swapkit/toolboxes/substrate";
|
|
14
11
|
import type { Eip1193Provider } from "ethers";
|
|
15
|
-
import { getWalletSupportedChains } from "../
|
|
12
|
+
import { getWalletSupportedChains } from "../utils";
|
|
16
13
|
|
|
17
14
|
export const talismanWallet = createWallet({
|
|
18
15
|
name: "connectTalisman",
|
|
@@ -34,9 +31,9 @@ export const talismanWallet = createWallet({
|
|
|
34
31
|
|
|
35
32
|
await Promise.all(
|
|
36
33
|
filteredChains.map(async (chain) => {
|
|
37
|
-
const
|
|
34
|
+
const walletMethods = await getWalletMethods(chain);
|
|
38
35
|
|
|
39
|
-
addChain({ ...walletMethods,
|
|
36
|
+
addChain({ ...walletMethods, chain, walletType });
|
|
40
37
|
}),
|
|
41
38
|
);
|
|
42
39
|
|
|
@@ -46,16 +43,11 @@ export const talismanWallet = createWallet({
|
|
|
46
43
|
|
|
47
44
|
export const TALISMAN_SUPPORTED_CHAINS = getWalletSupportedChains(talismanWallet);
|
|
48
45
|
|
|
49
|
-
declare const window: {
|
|
50
|
-
talismanEth: EthereumWindowProvider;
|
|
51
|
-
} & Window &
|
|
52
|
-
InjectedWindow;
|
|
53
|
-
|
|
54
46
|
async function getWeb3WalletMethods({
|
|
55
47
|
walletProvider,
|
|
56
48
|
chain,
|
|
57
49
|
}: { walletProvider: Eip1193Provider | undefined; chain: EVMChain }) {
|
|
58
|
-
const {
|
|
50
|
+
const { getEvmToolbox } = await import("@swapkit/toolboxes/evm");
|
|
59
51
|
const { BrowserProvider } = await import("ethers");
|
|
60
52
|
|
|
61
53
|
if (!walletProvider) {
|
|
@@ -67,13 +59,11 @@ async function getWeb3WalletMethods({
|
|
|
67
59
|
|
|
68
60
|
const provider = new BrowserProvider(walletProvider, "any");
|
|
69
61
|
const signer = await provider.getSigner();
|
|
70
|
-
|
|
71
|
-
const toolbox = getToolboxByChain(chain)({ provider, signer });
|
|
62
|
+
const toolbox = await getEvmToolbox(chain, { provider, signer });
|
|
72
63
|
|
|
73
64
|
try {
|
|
74
65
|
if (chain !== Chain.Ethereum) {
|
|
75
|
-
|
|
76
|
-
await switchEVMWalletNetwork(provider, chain, networkParams);
|
|
66
|
+
await switchEVMWalletNetwork(provider, chain, toolbox.getNetworkParams());
|
|
77
67
|
}
|
|
78
68
|
} catch (_error) {
|
|
79
69
|
throw new SwapKitError({
|
|
@@ -82,7 +72,7 @@ async function getWeb3WalletMethods({
|
|
|
82
72
|
});
|
|
83
73
|
}
|
|
84
74
|
|
|
85
|
-
return prepareNetworkSwitch
|
|
75
|
+
return prepareNetworkSwitch({ toolbox, chain, provider });
|
|
86
76
|
}
|
|
87
77
|
|
|
88
78
|
async function getWalletMethods(chain: Chain) {
|
|
@@ -97,30 +87,27 @@ async function getWalletMethods(chain: Chain) {
|
|
|
97
87
|
if (!(window.talismanEth && "send" in window.talismanEth)) {
|
|
98
88
|
throw new SwapKitError({ errorKey: "wallet_talisman_not_found", info: { chain } });
|
|
99
89
|
}
|
|
100
|
-
const { getProvider } = await import("@swapkit/toolboxes/evm");
|
|
101
90
|
|
|
102
91
|
const evmWallet = await getWeb3WalletMethods({ chain, walletProvider: window.talismanEth });
|
|
103
92
|
const address: string = (await window.talismanEth.send("eth_requestAccounts", []))[0];
|
|
104
93
|
|
|
105
|
-
|
|
106
|
-
evmWallet.getBalance(addressOverwrite || address, potentialScamFilter, getProvider(chain));
|
|
107
|
-
|
|
108
|
-
return { walletMethods: { ...evmWallet, getBalance }, address };
|
|
94
|
+
return { ...evmWallet, address };
|
|
109
95
|
}
|
|
110
96
|
|
|
111
97
|
case Chain.Polkadot:
|
|
112
98
|
case Chain.Chainflip: {
|
|
113
|
-
const {
|
|
99
|
+
const { getSubstrateToolbox, SubstrateNetwork } = await import(
|
|
100
|
+
"@swapkit/toolboxes/substrate"
|
|
101
|
+
);
|
|
114
102
|
|
|
115
|
-
const
|
|
116
|
-
const injectedExtension = injectedWindow?.injectedWeb3?.talisman;
|
|
103
|
+
const injectedExtension = window?.injectedWeb3?.talisman;
|
|
117
104
|
const rawExtension = await injectedExtension?.enable?.("talisman");
|
|
118
105
|
|
|
119
106
|
if (!rawExtension) {
|
|
120
107
|
throw new SwapKitError({ errorKey: "wallet_talisman_not_enabled", info: { chain } });
|
|
121
108
|
}
|
|
122
109
|
|
|
123
|
-
const toolbox = await
|
|
110
|
+
const toolbox = await getSubstrateToolbox(chain, { signer: rawExtension.signer });
|
|
124
111
|
const accounts = await rawExtension.accounts.get();
|
|
125
112
|
|
|
126
113
|
if (!accounts[0]?.address) {
|
|
@@ -129,13 +116,9 @@ async function getWalletMethods(chain: Chain) {
|
|
|
129
116
|
info: { wallet: WalletOption.TALISMAN, accounts, address: accounts[0]?.address },
|
|
130
117
|
});
|
|
131
118
|
}
|
|
132
|
-
const address = toolbox.convertAddress(accounts[0].address,
|
|
119
|
+
const address = toolbox.convertAddress(accounts[0].address, SubstrateNetwork[chain].prefix);
|
|
133
120
|
|
|
134
|
-
return {
|
|
135
|
-
...toolbox,
|
|
136
|
-
getAddress: () => address,
|
|
137
|
-
address,
|
|
138
|
-
};
|
|
121
|
+
return { ...toolbox, address };
|
|
139
122
|
}
|
|
140
123
|
|
|
141
124
|
default:
|