Usage
Installation
To get started with integrating the StarknetKit SDK in your dApp, you will need to install the StarknetKit package and its peer dependencies:
npm install starknetkitImports
After installation, we get access to different methods, such as connect, disconnect, etc which we should import for use in our application:
import { connect, disconnect } from "starknetkit"Establishing a connection
To establish a wallet connection, we need to call the connect method which was imported earlier like this:
const { wallet, connector, connectorData } = await connect()The default order of connectors is as follows:
- Argent X
- Braavos
- Argent Mobile
- Argent Web Wallet
The order of connectors can be changed by passing connectors argument to the connect method.
import { connect } from "starknetkit"
import { WebWalletConnector } from "starknetkit/webwallet"
import { InjectedConnector } from "starknetkit/injected"
const { wallet, connectorData } = await connect({
connectors: [
new WebWalletConnector(),
new InjectedConnector({ options: { id: "argentX" } }),
],
})Connect function parameters types are: ConnectOptions or ConnectOptionsWithConnectors.
ConnectOptionsis used to connect with the default connectorsConnectOptionsWithConnectorsis used to connect with specific connectors (or define a custom order).
export interface ConnectOptions extends GetWalletOptions {
dappName?: string
modalMode?: "alwaysAsk" | "canAsk" | "neverAsk"
modalTheme?: "light" | "dark" | "system"
storeVersion?: StoreVersion | null
resultType?: "connector" | "wallet"
webWalletUrl?: string
argentMobileOptions: ArgentMobileConnectorOptions
}
export interface ConnectOptionsWithConnectors
extends Omit<ConnectOptions, "webWalletUrl" | "argentMobileOptions"> {
connectors?: StarknetkitConnector[]
}Below is an example function that establishes a connection, then sets the connection and address states:
const connectWallet = async () => {
const { wallet, connectorData } = await connect()
if (wallet && connectorData) {
setConnection(wallet)
setAddress(connectorData.account)
}
}To reconnect to a previously connected wallet on load:
const { wallet, connectorData } = await connect({ modalMode: "neverAsk" })Example:
useEffect(() => {
const connectToStarknet = async () => {
const { wallet, connectorData } = await connect({ modalMode: "neverAsk" })
if (wallet && wallet.isConnected) {
setConnection(wallet)
setAddress(wallet.selectedAddress)
}
}
connectToStarknet()
}, [])Connect with connection options example
const { wallet, connectorData } = await connect({
modalMode: "alwaysAsk",
modalTheme: "light",
webWalletUrl: "https://web.argent.xyz",
argentMobileOptions: {
dappName: "Dapp name",
projectId: "YOUR_PROJECT_ID", // wallet connect project id
chainId: "SN_MAIN",
url: window.location.hostname,
icons: ["https://your-icon-url.com"],
rpcUrl: "YOUR_RPC_URL",
},
})Connection parameters
interface ConnectOptions {
argentMobileOptions?: ArgentMobileConnectorOptions
dappName?: string
connectors?: StarknetkitConnector[] // can be used to define a custom order for the connectors
modalMode?: "alwaysAsk" | "canAsk" | "neverAsk"
modalTheme?: "light" | "dark" | "system"
storeVersion?: StoreVersion | null
webWalletUrl?: string
resultType?: "connector" | "wallet"
sort?: Sort
include?: FilterList
exclude?: FilterList
}
interface ArgentMobileConnectorOptions {
dappName?: string
projectId?: string // wallet connect project id
chainId?: constants.NetworkName
description?: string
url?: string
icons?: string[]
rpcUrl?: string
}Disconnecting wallet
To disconnect an existing connection, simply call the disconnect method from our imports, then set previously defined states to undefined:
await disconnect()Example:
const disconnectWallet = async () => {
await disconnect()
setConnection(undefined)
setAddress("")
}Disconnection Params
await disconnect({ clearLastWallet: true })Available methods and data
Wallet
wallet is a StarknetWindowObject and supports JSON-RPC Integration.
Requests to wallet can be done using the .request method. The following methods are available:
- wallet_getPermissions
- wallet_requestAccounts
- wallet_watchAsset
- wallet_addStarknetChain
- wallet_switchStarknetChain
- wallet_requestChainId
- wallet_deploymentData
- wallet_addInvokeTransaction
- wallet_addDeclareTransaction
- wallet_signTypedData
- wallet_supportedSpecs
- wallet_supportedWalletApi
Examples:
await wallet.request({ type: "wallet_requestAccounts" }) // replaces .enable()
await wallet.request({ type: "wallet_requestChainId" })
await wallet.request({
type: "wallet_addInvokeTransaction",
params: {
calls: [call],
},
})
await wallet.request({
type: "wallet_signTypedData",
params: typedData,
})wallet can also listen to events using the .on method:
const accountChangeHandler: AccountChangeEventHandler = (
accounts?: string[],
) => {}
const networkChangeHandler: NetworkChangeEventHandler = async (
chainId?: ChainId,
accounts?: string[],
) => {}
wallet?.on("accountsChanged", accountChangeHandler)
wallet?.on("networkChanged", networkChangeHandler)
// Remove event listener
wallet?.off("accountsChanged", accountChangeHandler)
wallet?.off("networkChanged", networkChangeHandler)Connector data
connectorData is an object containing the account and chainId of the connected wallet:
type ConnectorData = {
account?: string
chainId?: bigint
}Connector
connector is an object containing data and methods related to the connected wallet. It is useful for StarknetKit and starknet-react combo, see here.