@layerswap/wallet-starknet 1.1.1 → 1.1.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/README.md
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# @layerswap/wallet-starknet
|
|
2
|
+
|
|
3
|
+
Starknet wallet provider for the Layerswap Widget. Enables Starknet wallet connections and transactions.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @layerswap/wallet-starknet
|
|
9
|
+
# or
|
|
10
|
+
yarn add @layerswap/wallet-starknet
|
|
11
|
+
# or
|
|
12
|
+
pnpm add @layerswap/wallet-starknet
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import { LayerswapProvider, Swap } from "@layerswap/widget";
|
|
19
|
+
import { createStarknetProvider } from "@layerswap/wallet-starknet";
|
|
20
|
+
|
|
21
|
+
export default function Page() {
|
|
22
|
+
const starknetProvider = createStarknetProvider({
|
|
23
|
+
walletConnectConfigs: {
|
|
24
|
+
projectId: "your-project-id",
|
|
25
|
+
name: "Your App",
|
|
26
|
+
description: "Your app description",
|
|
27
|
+
url: "https://your-app.com",
|
|
28
|
+
icons: ["https://your-app.com/icon.png"]
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<LayerswapProvider walletProviders={[starknetProvider]}>
|
|
34
|
+
<Swap />
|
|
35
|
+
</LayerswapProvider>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Usage
|
|
41
|
+
|
|
42
|
+
Use `createStarknetProvider()` to create a Starknet wallet provider:
|
|
43
|
+
|
|
44
|
+
```tsx
|
|
45
|
+
import { createStarknetProvider } from "@layerswap/wallet-starknet";
|
|
46
|
+
|
|
47
|
+
const starknetProvider = createStarknetProvider({
|
|
48
|
+
walletConnectConfigs: {
|
|
49
|
+
projectId: "your-project-id",
|
|
50
|
+
name: "Your App",
|
|
51
|
+
description: "Your app description",
|
|
52
|
+
url: "https://your-app.com",
|
|
53
|
+
icons: ["https://your-app.com/icon.png"]
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Documentation
|
|
59
|
+
|
|
60
|
+
For detailed setup instructions, configuration options, and usage examples, see the [Starknet Wallet Provider documentation](https://docs.layerswap.io/integration/UI/Widget/WalletManagement/StarknetProvider).
|
|
61
|
+
|
|
62
|
+
## Features
|
|
63
|
+
|
|
64
|
+
- Starknet wallet connection via StarknetKit
|
|
65
|
+
- Balance checking
|
|
66
|
+
- Gas estimation
|
|
67
|
+
- NFT provider support
|
|
68
|
+
- Address validation and utilities
|
|
69
|
+
- Starknet transaction support
|
|
70
|
+
|
|
71
|
+
## Supported Wallets
|
|
72
|
+
|
|
73
|
+
- Ready Wallet
|
|
74
|
+
- Ready
|
|
75
|
+
- Web wallet
|
|
76
|
+
- Braavos
|
|
77
|
+
- Keplr
|
|
78
|
+
- Xverse
|
|
79
|
+
- Cartridge Controller
|
|
80
|
+
|
|
81
|
+
## TypeScript
|
|
82
|
+
|
|
83
|
+
This package includes TypeScript definitions. All types are exported from the main entry point.
|
|
84
|
+
|
|
85
|
+
## License
|
|
86
|
+
|
|
87
|
+
MIT
|
|
88
|
+
|
|
89
|
+
## Repository
|
|
90
|
+
|
|
91
|
+
[GitHub](https://github.com/layerswap/layerswapapp/tree/main/packages/wallets/starknet)
|
|
92
|
+
|
|
@@ -28,20 +28,38 @@ export default function useStarknetConnection({ networks }) {
|
|
|
28
28
|
const connectWallet = async ({ connector }) => {
|
|
29
29
|
try {
|
|
30
30
|
const starknetConnector = connectors.find(c => c.id === connector.id);
|
|
31
|
-
|
|
31
|
+
let result = await starknetConnector?.connect({});
|
|
32
32
|
const walletChain = `0x${result?.chainId?.toString(16)}`;
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
33
|
+
const isWalletOnMainnet = walletChain === '0x534e5f4d41494e';
|
|
34
|
+
const wrongChain = isWalletOnMainnet !== isMainnet;
|
|
35
|
+
const starknetNetwork = networks.find(n => n.name === KnownInternalNames.Networks.StarkNetMainnet || n.name === KnownInternalNames.Networks.StarkNetSepolia);
|
|
36
|
+
if (result?.account && wrongChain) {
|
|
37
|
+
const wallet = starknetConnector?._wallet || starknetConnector?.wallet;
|
|
38
|
+
if (wallet?.request) {
|
|
39
|
+
const targetChainId = isMainnet ? 'SN_MAIN' : 'SN_SEPOLIA';
|
|
40
|
+
try {
|
|
41
|
+
await wallet.request({
|
|
42
|
+
type: "wallet_switchStarknetChain",
|
|
43
|
+
params: { chainId: targetChainId }
|
|
44
|
+
});
|
|
45
|
+
result = await starknetConnector?.connect({});
|
|
46
|
+
}
|
|
47
|
+
catch (switchError) {
|
|
48
|
+
console.log('Chain switch failed:', switchError);
|
|
49
|
+
disconnectWallets(connector?.name, result?.account);
|
|
50
|
+
throw new Error(`Failed to switch network. Please switch manually to ${isMainnet ? 'Mainnet' : 'Sepolia'} in your wallet.`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
disconnectWallets(connector?.name, result?.account);
|
|
55
|
+
throw new Error(`Please switch the network in your wallet to ${isMainnet ? 'Mainnet' : 'Sepolia'} and connect again.`);
|
|
56
|
+
}
|
|
39
57
|
}
|
|
40
58
|
if (result?.account && starknetConnector) {
|
|
41
|
-
const
|
|
59
|
+
const resolvedWallet = await resolveStarknetWallet({
|
|
42
60
|
name,
|
|
43
61
|
connector: starknetConnector,
|
|
44
|
-
network:
|
|
62
|
+
network: starknetNetwork,
|
|
45
63
|
disconnectWallets: () => disconnectWallets(starknetConnector.id, result?.account),
|
|
46
64
|
address: result?.account,
|
|
47
65
|
withdrawalSupportedNetworks,
|
|
@@ -49,15 +67,15 @@ export default function useStarknetConnection({ networks }) {
|
|
|
49
67
|
asSourceSupportedNetworks: commonSupportedNetworks,
|
|
50
68
|
});
|
|
51
69
|
addAccount(starknetConnector.id, result.account);
|
|
52
|
-
if (
|
|
53
|
-
addWallet(
|
|
54
|
-
setActiveWallet(
|
|
55
|
-
return
|
|
70
|
+
if (resolvedWallet) {
|
|
71
|
+
addWallet(resolvedWallet);
|
|
72
|
+
setActiveWallet(resolvedWallet.address);
|
|
73
|
+
return resolvedWallet;
|
|
56
74
|
}
|
|
57
75
|
}
|
|
58
76
|
}
|
|
59
77
|
catch (e) {
|
|
60
|
-
throw
|
|
78
|
+
throw e;
|
|
61
79
|
}
|
|
62
80
|
};
|
|
63
81
|
const disconnectWallets = async (connectorName, address) => {
|