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.
Usage
- Enable
btcsnap
in your dapp
const result: boolean = await ethereum.request({
method: 'wallet_requestSnaps',
params: {
'npm:@gobob/btcsnap': {},
},
});
- Get an extended public key
const response = await ethereum.request({
method: 'wallet_invokeSnap',
params: {
snapId: 'npm:@gobob/btcsnap',
request: {
method: 'btc_getPublicExtendedKey',
params: {
network: 'test',
scriptType: 'P2WPKH',
},
},
},
});
- Sign Psbt
const result: {txId: string; txHex: string} = await ethereum.request({
method: 'wallet_invokeSnap',
params: {
snapId: 'npm:@gobob/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