top of page

If the video doesn’t play, please refresh the page.

What is a Web3 wallet?

Having a blockchain wallet on an exchange like Binance only allows you to trade and interact within the limits of that platform. While exchange wallets are convenient for quick buying, selling, and swapping of cryptocurrencies, you don’t actually have full control over your assets. The exchange holds custody of your private keys, meaning that ultimately, they control access to your funds — not you.

You take full control over your digital assets when you use a Web3 wallet, such as MetaMask, Trust Wallet, or Coinbase Wallet. With a Web3 wallet, you gain direct access to both your public wallet address and your private key (which you should NEVER share with anybody under any circumstances). This gives you complete ownership and control, allowing you to send, receive, and manage your crypto independently of any third party.

Furthermore, Web3 wallets enable you to interact seamlessly with decentralized applications (dApps), decentralized finance (DeFi) platforms, NFT marketplaces, and more — unlocking a broader range of blockchain utilities beyond simple trading. However, with great power comes great responsibility. It’s crucial to securely store your private keys and seed phrase, as losing them can result in irreversible loss of access to your funds. Owning a Web3 wallet truly puts you in charge of your financial sovereignty.

A Web3 wallet is a digital tool that lets you interact with blockchain networks, manage your crypto assets, and connect to decentralized apps (dApps). It gives you full control of your crypto, without relying on banks or centralized platforms.

🧩 Key Features of a Web3 Wallet:

Feature
Description
Self-custody
You own your private keys and assets — no third party can freeze your funds.
Wallet address
A unique blockchain address (like your “crypto username”) used to send/receive tokens.
Connect to dApps
Use your wallet to log into decentralized apps (like Uniswap, OpenSea, Lens Protocol).
Multi-token support
Store and manage many types of crypto tokens (ETH, USDT, NFTs, etc.).
Cross-chain
Some wallets support multiple blockchains (Ethereum, Solana, Polygon, etc.).

🔑 Private Key vs Public Key
• Public Key / Wallet Address: Share with others to receive crypto (e.g., 0x123...abc)
• Private Key / Seed Phrase: Never share this — it’s your master key to access and control your wallet.



🧱 Types of Web3 Wallets:

🧩 1. Browser Extensions
• E.g., MetaMask (Ethereum), Phantom (Solana)
• Connects easily to dApps
• Stores assets and lets you sign transactions

📱 2. Mobile Wallets
• E.g., Trust Wallet, Rainbow, Exodus
• Great for managing crypto on the go

🖥️ 3. Hardware Wallets
• E.g., Ledger, Trezor
• Stores your keys offline for maximum security (cold storage)

bottom of page
/** * Wix Custom Code — paste into Settings → Custom Code → Body end (All pages) * on https://www.idxsolana.io/ * * Requires a hidden Wix Subscribe form on the site (same page or any page * loaded by the docs iframe bridge). Pair with docs.idxsolana.io footer. */ (function () { var ALLOWED = [ "https://docs.idxsolana.io", "http://localhost:3000", "http://localhost:3010", ]; function isAllowedOrigin(origin) { if (!origin) return false; if (ALLOWED.indexOf(origin) !== -1) return true; if (/^https:\/\/docs\.idxsolana\.io$/.test(origin)) return true; if (/^http:\/\/localhost:\d+$/.test(origin)) return true; if (origin === window.location.origin) return true; return false; } function reply(event, payload) { if (!event.source) return; try { event.source.postMessage(payload, event.origin || "*"); } catch (e) {} } function findSubscribeForm() { var candidates = document.querySelectorAll("form"); for (var i = 0; i < candidates.length; i++) { var form = candidates[i]; if (form.querySelector('input[type="email"]')) return form; } return null; } function findSubmitControl(form) { return ( form.querySelector('[data-hook="submit-button"]') || form.querySelector('button[type="submit"]') || form.querySelector('input[type="submit"]') || form.querySelector("button") ); } function watchSubmitResult(form, event) { var root = form.closest('[data-hook="form-root"]') || form.parentElement || document.body; var settled = false; function finish(ok, message) { if (settled) return; settled = true; observer.disconnect(); clearTimeout(timer); reply(event, ok ? { type: "idx-footer-newsletter-ok" } : { type: "idx-footer-newsletter-error", message: message || "Could not subscribe. Try again." }); } var observer = new MutationObserver(function () { var success = root.querySelector('[data-hook="success-message"], [data-testid="successMessage"]'); if (success) finish(true); var error = root.querySelector('[data-hook="error-message"], [data-testid="errorMessage"]'); if (error && error.textContent && error.textContent.trim()) { finish(false, error.textContent.trim()); } }); observer.observe(root, { childList: true, subtree: true, characterData: true }); var timer = setTimeout(function () { finish(true); }, 4000); } function submitEmail(email, event) { var form = findSubscribeForm(); if (!form) { reply(event, { type: "idx-footer-newsletter-error", message: "Subscribe form not found. Add a hidden Wix Subscribe form to this site.", }); return; } var input = form.querySelector('input[type="email"]'); if (!input) { reply(event, { type: "idx-footer-newsletter-error", message: "Email field not found." }); return; } var submit = findSubmitControl(form); if (!submit) { reply(event, { type: "idx-footer-newsletter-error", message: "Submit button not found." }); return; } input.focus(); input.value = email; input.dispatchEvent(new Event("input", { bubbles: true })); input.dispatchEvent(new Event("change", { bubbles: true })); watchSubmitResult(form, event); try { if (typeof form.requestSubmit === "function") { form.requestSubmit(submit); } else { submit.click(); } } catch (e) { reply(event, { type: "idx-footer-newsletter-error", message: "Could not submit form." }); } } window.addEventListener("message", function (event) { if (!isAllowedOrigin(event.origin)) return; var data = event.data; if (!data || data.type !== "idx-footer-newsletter") return; var email = String(data.email || "").trim(); if (!email) { reply(event, { type: "idx-footer-newsletter-error", message: "Email is required." }); return; } submitEmail(email, event); }); })(); /** * Wix Velo — paste into Backend → http-functions.js on https://www.idxsolana.io/ * Publish the site after saving. * * Endpoint: POST https://www.idxsolana.io/_functions/newsletter_subscribe * * Only enable browser fetch after this is deployed AND working: * NEXT_PUBLIC_WIX_NEWSLETTER_USE_HTTP=true * * Until then, docs uses postMessage bridge (wix-footer-form-bridge.js) — no CORS. */ import { ok, badRequest, response } from "wix-http-functions"; import { contacts } from "wix-crm-backend"; const ALLOWED_ORIGINS = [ "https://docs.idxsolana.io", "http://localhost:3000", "http://localhost:3010", ]; function resolveOrigin(origin) { if (!origin) return null; if (ALLOWED_ORIGINS.indexOf(origin) !== -1) return origin; if (/^http:\/\/localhost:\d+$/.test(origin)) return origin; return null; } function corsHeaders(origin) { const headers = { "Access-Control-Allow-Methods": "POST, OPTIONS", "Access-Control-Allow-Headers": "Content-Type", "Content-Type": "application/json", }; if (origin) { headers["Access-Control-Allow-Origin"] = origin; } return headers; } export function options_newsletter_subscribe(request) { const origin = resolveOrigin(request.headers.origin); return response({ status: 204, headers: corsHeaders(origin), }); } export function post_newsletter_subscribe(request) { const origin = resolveOrigin(request.headers.origin); const headers = corsHeaders(origin); if (!origin) { return response({ status: 403, headers: { "Content-Type": "application/json" }, body: { error: "Forbidden" }, }); } return request.body .text() .then(function (text) { var body = {}; try { body = JSON.parse(text || "{}"); } catch (e) { return badRequest({ body: { error: "Invalid JSON body." }, headers: headers }); } var email = String(body.email || "").trim(); if (!email) { return badRequest({ body: { error: "Email is required." }, headers: headers }); } return contacts .findOrCreateLabel("Subscriber") .then(function (label) { return contacts.appendOrCreateContact({ emails: [{ email: email, tag: "MAIN", primary: true }], labelKeys: [label.key], }); }) .then(function () { return ok({ body: { success: true }, headers: headers }); }); }) .catch(function (error) { return badRequest({ body: { error: error.message || "Could not subscribe." }, headers: headers, }); }); } /** * Wix Custom Code — paste into Settings → Custom Code → Body end (All pages) * on https://www.idxsolana.io/ * * Requires a hidden Wix Subscribe form on the site (same page or any page * loaded by the docs iframe bridge). Pair with docs.idxsolana.io footer. */ (function () { var ALLOWED = [ "https://docs.idxsolana.io", "http://localhost:3000", "http://localhost:3010", ]; function isAllowedOrigin(origin) { if (!origin) return false; if (ALLOWED.indexOf(origin) !== -1) return true; if (/^https:\/\/docs\.idxsolana\.io$/.test(origin)) return true; if (/^https:\/\/[a-z0-9-]+\.idxsolana\.io$/.test(origin)) return true; if (/^http:\/\/localhost:\d+$/.test(origin)) return true; if (origin === window.location.origin) return true; return false; } function reply(event, payload) { if (!event.source) return; try { event.source.postMessage(payload, event.origin || "*"); } catch (e) {} } function findSubscribeForm() { var candidates = document.querySelectorAll("form"); for (var i = 0; i < candidates.length; i++) { var form = candidates[i]; if (form.querySelector('input[type="email"]')) return form; } return null; } function findSubmitControl(form) { return ( form.querySelector('[data-hook="submit-button"]') || form.querySelector('button[type="submit"]') || form.querySelector('input[type="submit"]') || form.querySelector("button") ); } function watchSubmitResult(form, event) { var root = form.closest('[data-hook="form-root"]') || form.parentElement || document.body; var settled = false; function finish(ok, message) { if (settled) return; settled = true; observer.disconnect(); clearTimeout(timer); reply(event, ok ? { type: "idx-footer-newsletter-ok" } : { type: "idx-footer-newsletter-error", message: message || "Could not subscribe. Try again." }); } var observer = new MutationObserver(function () { var success = root.querySelector('[data-hook="success-message"], [data-testid="successMessage"]'); if (success) finish(true); var error = root.querySelector('[data-hook="error-message"], [data-testid="errorMessage"]'); if (error && error.textContent && error.textContent.trim()) { finish(false, error.textContent.trim()); } }); observer.observe(root, { childList: true, subtree: true, characterData: true }); var timer = setTimeout(function () { finish(true); }, 4000); } function submitEmail(email, event) { var form = findSubscribeForm(); if (!form) { reply(event, { type: "idx-footer-newsletter-error", message: "Subscribe form not found. Add a hidden Wix Subscribe form to this site.", }); return; } var input = form.querySelector('input[type="email"]'); if (!input) { reply(event, { type: "idx-footer-newsletter-error", message: "Email field not found." }); return; } var submit = findSubmitControl(form); if (!submit) { reply(event, { type: "idx-footer-newsletter-error", message: "Submit button not found." }); return; } input.focus(); input.value = email; input.dispatchEvent(new Event("input", { bubbles: true })); input.dispatchEvent(new Event("change", { bubbles: true })); watchSubmitResult(form, event); try { if (typeof form.requestSubmit === "function") { form.requestSubmit(submit); } else { submit.click(); } } catch (e) { reply(event, { type: "idx-footer-newsletter-error", message: "Could not submit form." }); } } window.addEventListener("message", function (event) { if (!isAllowedOrigin(event.origin)) return; var data = event.data; if (!data || data.type !== "idx-footer-newsletter") return; var email = String(data.email || "").trim(); if (!email) { reply(event, { type: "idx-footer-newsletter-error", message: "Email is required." }); return; } submitEmail(email, event); }); })();