coinbase / coinbase-wallet-sdk

An open protocol that lets users connect their mobile wallets to your DApp
https://coinbase.github.io/coinbase-wallet-sdk/
MIT License
1.49k stars 572 forks source link
coinbase ethereum ethereum-wallet

Coinbase Wallet SDK

npm

Coinbase Wallet SDK allows dapps to connect to Coinbase Wallet

  1. Coinbase Smart Wallet
  2. Coinbase Wallet mobile for Android and iOS
    • Desktop: Users can connect to your dapp by scanning a QR code
    • Mobile: Users can connect to your mobile dapp through a deeplink to the dapp browser
  3. Coinbase Wallet extension for Chrome and Brave
    • Desktop: Users can connect by clicking the connect with extension option.

Installing Wallet SDK

  1. Check available versions:

     # yarn
     yarn info @coinbase/wallet-sdk versions
    
     # npm
     npm view @coinbase/wallet-sdk versions
  2. Install latest version:

    # yarn
    yarn add @coinbase/wallet-sdk
    
    # npm
    npm install @coinbase/wallet-sdk
  3. Check installed version:

    # yarn
    yarn list @coinbase/wallet-sdk
    
    # npm
    npm list @coinbase/wallet-sdk

Upgrading Wallet SDK

Migrating from v3 to v4? Please see our v4 migration guide for a full list of breaking changes.

  1. Compare installed version with latest:

    # yarn
    yarn outdated @coinbase/wallet-sdk
    
    # npm
    npm outdated @coinbase/wallet-sdk
  2. Update to latest:

    # yarn
    yarn upgrade @coinbase/wallet-sdk --latest
    
    # npm
    npm update @coinbase/wallet-sdk

Basic Usage

  1. Initialize SDK

    const sdk = new CoinbaseWalletSDK({
     appName: 'SDK Playground',
    });
  2. Make web3 Provider

    const provider = sdk.makeWeb3Provider();
  3. Request accounts to initialize connection to wallet

    const addresses = provider.request({
     method: 'eth_requestAccounts',
    });
  4. Make more requests

    provider.request('personal_sign', [
     `0x${Buffer.from('test message', 'utf8').toString('hex')}`,
     addresses[0],
    ]);
  5. Handle provider events

    provider.on('connect', (info) => {
     setConnect(info);
    });
    
    provider.on('disconnect', (error) => {
     setDisconnect({ code: error.code, message: error.message });
    });
    
    provider.on('accountsChanged', (accounts) => {
     setAccountsChanged(accounts);
    });
    
    provider.on('chainChanged', (chainId) => {
     setChainChanged(chainId);
    });
    
    provider.on('message', (message) => {
     setMessage(message);
    });

Developing locally and running the test dapp