Developer Document
Table of Contents
1. [Accessing the Injected Provider](#accessing-the-injected-provider) 2. [Connecting to WOW Wallet](#connecting-to-wow-wallet) 3. [Account Management](#account-management) - [Get Selected Account](#get-selected-account) - [Listen for Account Changes](#listen-for-account-changes) 4. [Chain Management](#chain-management) - [Get Current Chain ID](#get-current-chain-id) - [Listen for Chain ID Changes](#listen-for-chain-id-changes) - [Request Chain ID Change](#request-chain-id-change) 5. [Sending Transactions](#sending-transactions) 6. [Deep Linking](#deep-linking)
Accessing the Injected Provider
To interact with the WOW Wallet, you first need to access the injected provider. Use the following function to detect and retrieve the WOW Wallet provider:
javascript
function getWOWWalletFromWindow() {
const isWOWWallet = (ethereum) => {
return !!ethereum.isWOW;
};
const injectedProviderExist =
typeof window !== "undefined" && typeof window.ethereum !== "undefined";
if (!injectedProviderExist) {
return null;
}
if (isWOWWallet(window.ethereum)) {
return window.ethereum;
}
}
// Usage
const injectedProvider = getWOWWalletFromWindow();
Connecting to WOW Wallet
To establish a connection with the user's WOW Wallet, use the `eth_requestAccounts` method:
javascript
async function connectToWOWWallet() {
try {
const accounts = await injectedProvider.request({
method: "eth_requestAccounts",
});
console.log("Connected account:", accounts[0]);
return accounts[0];
} catch (error) {
if (error.code === 4001) {
console.error("User denied connection.");
} else {
console.error("An error occurred:", error);
}
return null;
}
}
Account Management Get Selected Account
To retrieve the currently selected account:
javascript
async function getSelectedAccount() {
const accounts = await injectedProvider.request({
method: "eth_accounts",
});
return accounts[0] || null;
}
Listen for Account Changes
To detect when the user changes accounts or disconnects:
javascript
function listenForAccountChanges(callback) {
injectedProvider.addListener("accountsChanged", (accounts) => {
if (accounts.length === 0) {
console.log("User disconnected.");
callback(null);
} else {
const newConnectedAccount = accounts[0];
console.log("New connected account:", newConnectedAccount);
callback(newConnectedAccount);
}
});
}
Chain Management Get Current Chain ID
async function getCurrentChainId() { const chainId = await injectedProvider.request({ method: "eth_chainId" }); return chainId; }
javascript
function listenForAccountChanges(callback) {
injectedProvider.addListener("accountsChanged", (accounts) => {
if (accounts.length === 0) {
console.log("User disconnected.");
callback(null);
} else {
const newConnectedAccount = accounts[0];
console.log("New connected account:", newConnectedAccount);
callback(newConnectedAccount);
}
});
}
Listen for Chain ID Changes
To detect when the user changes the network:
javascript
function listenForChainChanges(callback) {
injectedProvider.addListener("chainChanged", (chainId) => {
console.log("Chain changed to:", chainId);
callback(chainId);
});
}
Request Chain ID Change
To request a change to a specific network:
javascript
async function requestChainChange(chainId) {
try {
await injectedProvider.request({
method: "wallet_switchEthereumChain",
params: [{ chainId: chainId }],
});
console.log("Successfully switched to chain ID:", chainId);
} catch (error) {
if (error.code === 4902) {
console.log("Chain not added to wallet. Please add it first.");
} else if (error.code === 4001) {
console.log("User rejected the request.");
} else {
console.error("An error occurred:", error);
}
}
}
Sending Transactions
To send a transaction:
javascript
async function sendTransaction(transactionParameters) {
try {
const txHash = await injectedProvider.request({
method: "eth_sendTransaction",
params: [transactionParameters],
});
console.log("Transaction sent. Hash:", txHash);
return txHash;
} catch (error) {
console.error("Failed to send transaction:", error);
return null;
}
}
Usage example
javascript
const txParams = {
from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
gas: "0x76c0", // 30400
gasPrice: "0x9184e72a000", // 10000000000000
value: "0x9184e72a", // 2441406250
data: "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
};
sendTransaction(txParams);
Deep Linking
WOW Wallet supports deep linking for WalletConnect sessions. Use the following format:
ullawallet://wc?uri=YOUR_WALLETCONNECT_URI_HERE
Replace `YOUR_WALLETCONNECT_URI_HERE` with the actual WalletConnect URI, making sure to properly encode it.
This documentation should help developers integrate WOW Wallet into their applications. For further assistance or to report issues, please contact our support team.