2.0.0 • Published 11 months ago

btcsnap-dev v2.0.0

Weekly downloads
-
License
ISC
Repository
github
Last release
11 months ago

BitcoinSnap

0.3.1

BitcoinSnap is the world's first application allowing users to directly manage Bitcoin within the MetaMask interface, without having to wrap tokens. Since Snaps is pre-release software, BitcoinSnap is currently live on Metamask Flask only, a canary distribution for developers that provides access to upcoming features.

*Note: MetaMask Flask is an experimental playground for developers and is not to be confused with the normal MetaMask wallet app.

MetaMask Snaps Introduction

Snaps is a system that allows developers to safely build and expand the capabilities of MetaMask. It is a program that is run in an isolated environment with a limited set of capabilities, that can customize and modify MetaMask's wallet experience for end users. For example, a snap can add new APIs to MetaMask thus adding support for different blockchains or modify existing functionalities using internal APIs.

Additional information can be found here.

Select Environment Before Local Development

Choose the desired environment before rebuilding the project locally. Use the following commands:

npm run setup-env // Default environment
npm run setup-env:mainnet // Mainnet environment
npm run setup-env:testnet // Testnet environment

Usage

  1. Enable BitcoinSnap in your dapp
const result: boolean = await ethereum.request({
  method: 'wallet_requestSnaps',
  params: {
    "npm:btcsnap": {},
  }
})
  1. Get an extended public key
const response = await ethereum.request({
  method: 'wallet_invokeSnap',
  params: {
    snapId: "npm:btcsnap",
    request: {
      method: 'btc_getPublicExtendedKey',
      params: {
        network: "test",
        scriptType: "P2WPKH"
      },
    }
  }
})
  1. Sign Psbt
const result: { txId:string, txHex:string } = await ethereum.request({
  method: 'wallet_invokeSnap',
  params: {
    snapId: "npm:btcsnap",
    request: {
      method: 'btc_signPsbt',
      params: {
        psbt: base64Psbt, // base64 string for the pbst,
        network: "Main", // for testnet use "Test",
        scriptType: "P2PKH" // "P2SH-P2WPKH" or "P2WPKH"
      },
    },
  }
})

Building

Build the snap and test it locally with the following command:

yarn rebuild

Testing

Use the following command to run tests:

yarn test

Testing Coverage

File% Stmts% Branch% Funcs% Lines
All files97.6791.4610097.61

Live Example

If you would like to integrate BitcoinSnap into your dapp, you can use the following codes here.