Skip to content

Vue 2/3 wrapper for web3 built on top of react-web3@v6

Notifications You must be signed in to change notification settings

Instadapp/vue-web3

Repository files navigation

@instadapp/vue-web3

Vue 2/3 wrapper for web3 built on top of react-web3@v6.

🚀 Quick Start

Install:

# npm
npm i @instadapp/vue-web3

# yarn
yarn add @instadapp/vue-web3

Usage:

import { useWeb3, setWeb3LibraryCallback } from '@instadapp/vue-web3'
import { InjectedConnector } from '@web3-react/injected-connector'
import { WalletConnectConnector } from '@web3-react/walletconnect-connector'

import Web3 from 'web3'

const injected = new InjectedConnector({
  supportedChainIds: [1, 137],
})

const walletconnect = new WalletConnectConnector({
  rpc: { 1: 'https://mainnet.infura.io/v3/YOUR_API_KEY' },
  qrcode: true,
})

// web3.js v1
setWeb3LibraryCallback((provider) => new Web3(provider))

// ethers.js v5
setWeb3LibraryCallback((provider) => new Web3Provider(provider, "any"))

// viem
setWeb3LibraryCallback((provider, _connector, account) => ({
  public: createPublicClient({
      transport: custom(provider),
  }),
  wallet: createWalletClient({
      account,
      chain: null as unknown as Chain,
      transport: custom(provider),
  }),
}))

defineComponent({
  setup() {
    const { active, activate, account, library } = useWeb3()

    const connectUsingMetamask = async () => {
      await activate(injected)
    }

    const connectUsingWalletConnect = async () => {
      await activate(walletconnect)
    }

    return {
      active,
      connect,
      connectUsingMetamask,
      connectUsingWalletConnect,
    }
  },
})

Typescript:

using generic:

import Web3 from 'web3'

const { library } = useWeb3<Web3>()
import { Web3Provider } from "@ethersproject/providers";

const { library } = useWeb3<Web3Provider>()

using global types:

// global.d.ts
import type Web3 from 'web3'

declare module '@instadapp/vue-web3' {
  interface IVueWeb3Library extends Web3 {}
}

Nuxt 3

yarn add @instadapp/vue-web3-nuxt -D
// nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@instadapp/vue-web3-nuxt'],
  web3: {
    autoImport: false, // default `true`
  },
})

If you disabled @instadapp/vue-web3-nuxt auto import:

//composables/useWeb3.ts
import Web3 from 'web3'
// import { Web3Provider } from "@ethersproject/providers";
import { useWeb3 as useWeb3Generic } from '@instadapp/vue-web3'

const useWeb3 = () => useWeb3Generic<Web3>()
// const useWeb3 = () => useWeb3Generic<Web3Provider>();

export { useWeb3 }



Demo (Nuxt 2): https://github.com/KABBOUCHI/nuxt-vue-web3

Demo (Nuxt 3): https://github.com/KABBOUCHI/nuxt3-vue-web3