⨎ Filecoin Wallet on Metamask

Jun 1, 2024 • 3 min read

Connect to Filecoin dapps using Metamask. Manage Filecoin accounts, send FIL to Native and FEVM accounts and enable FEVM transaction insights.

Filecoin Metamask Snap and related packages enable developers to add Filecoin integration to their dapps.

This Snap enables storage of native Filecoin private keys in Metamask’s local vault, to support native Filecoin addresses (e.g. f1 addresses or t1 testnet addresses).

For FEVM (Filecoin EVM) address support using Ethereum-style 0x addresses, you can also use regular Metamask directly without installing this Snap.

If you’re using FEVM, the Snap can also show your 0x address info and its equivalent Filecoin f410 address. (More info about 0x / f410 addresses can be found in the Filecoin Docs - Ethereum Address Manager.)

Resources

Packages

Examples

Usage

You can install and use filsnap using the Metamask provider.

import {
function getProvider(timeout?: number): Promise<EIP1193Provider>

Get the Metamask provider.

@paramtimeout - The timeout in milliseconds.

@returnsThe request provider.

getProvider
} from 'filsnap-adapter'
const
const provider: EIP1193Provider
provider
= await
function getProvider(timeout?: number): Promise<EIP1193Provider>

Get the Metamask provider.

@paramtimeout - The timeout in milliseconds.

@returnsThe request provider.

getProvider
()
// Install filsnap
try {
const
const result: any
result
= await
const provider: EIP1193Provider
provider
.
EIP1193Provider.request: <string, string | number | symbol>(args: any) => Promise<any>
request
({
method: string
method
: 'wallet_requestSnaps',
params: {
'npm:filsnap': {
version: string;
};
}
params
: {
'npm:filsnap': {
version: string
version
: '^0.4.0', // Optional, defaults to latest
},
},
})
var console: Console

The console module provides a simple debugging console that is similar to the JavaScript console mechanism provided by web browsers.

The module exports two specific components:

  • A Console class with methods such as console.log(), console.error() and console.warn() that can be used to write to any Node.js stream.
  • A global console instance configured to write to process.stdout and process.stderr. The global console can be used without importing the node:console module.

Warning: The global console object's methods are neither consistently synchronous like the browser APIs they resemble, nor are they consistently asynchronous like all other Node.js streams. See the note on process I/O for more information.

Example using the global console:

console.log('hello world');
// Prints: hello world, to stdout
console.log('hello %s', 'world');
// Prints: hello world, to stdout
console.error(new Error('Whoops, something bad happened'));
// Prints error message and stack trace to stderr:
// Error: Whoops, something bad happened
// at [eval]:5:15
// at Script.runInThisContext (node:vm:132:18)
// at Object.runInThisContext (node:vm:309:38)
// at node:internal/process/execution:77:19
// at [eval]-wrapper:6:22
// at evalScript (node:internal/process/execution:76:60)
// at node:internal/main/eval_string:23:3
const name = 'Will Robinson';
console.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to stderr

Example using the Console class:

const out = getStreamSomehow();
const err = getStreamSomehow();
const myConsole = new console.Console(out, err);
myConsole.log('hello world');
// Prints: hello world, to out
myConsole.log('hello %s', 'world');
// Prints: hello world, to out
myConsole.error(new Error('Whoops, something bad happened'));
// Prints: [Error: Whoops, something bad happened], to err
const name = 'Will Robinson';
myConsole.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to err

@seesource

console
.
Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)

Prints to stdout with newline. Multiple arguments can be passed, with the first used as the primary message and all additional used as substitution values similar to printf(3) (the arguments are all passed to util.format()).

const count = 5;
console.log('count: %d', count);
// Prints: count: 5, to stdout
console.log('count:', count);
// Prints: count: 5, to stdout

See util.format() for more information.

@sincev0.1.100

log
(
const result: any
result
)
/**
{
'npm:filsnap': {
version: '1.0.0',
id: 'npm:filsnap',
enabled: true,
blocked: false,
},
}
*/
// Get filsnap metadata
const
const snap: any

{ 'npm:filsnap': { version: '1.0.0', id: 'npm:filsnap', enabled: true, blocked: false, }, }

snap
= await
const provider: EIP1193Provider
provider
.
EIP1193Provider.request: <string, string | number | symbol>(args: any) => Promise<any>
request
({
method: string
method
: 'wallet_getSnaps' })
// Get balance
const
const balance: any
balance
= await
const provider: EIP1193Provider
provider
.
EIP1193Provider.request: <string, string | number | symbol>(args: any) => Promise<any>
request
({
method: string
method
: 'wallet_invokeSnap',
params: {
snapId: string;
method: string;
}
params
: {
snapId: string
snapId
: 'npm:filsnap',
method: string
method
: 'fil_getBalance' },
})
/**
{
result: '100699819802794525019',
error: null
}
*/
} catch (
var error: unknown
error
) {
var console: Console

The console module provides a simple debugging console that is similar to the JavaScript console mechanism provided by web browsers.

The module exports two specific components:

  • A Console class with methods such as console.log(), console.error() and console.warn() that can be used to write to any Node.js stream.
  • A global console instance configured to write to process.stdout and process.stderr. The global console can be used without importing the node:console module.

Warning: The global console object's methods are neither consistently synchronous like the browser APIs they resemble, nor are they consistently asynchronous like all other Node.js streams. See the note on process I/O for more information.

Example using the global console:

console.log('hello world');
// Prints: hello world, to stdout
console.log('hello %s', 'world');
// Prints: hello world, to stdout
console.error(new Error('Whoops, something bad happened'));
// Prints error message and stack trace to stderr:
// Error: Whoops, something bad happened
// at [eval]:5:15
// at Script.runInThisContext (node:vm:132:18)
// at Object.runInThisContext (node:vm:309:38)
// at node:internal/process/execution:77:19
// at [eval]-wrapper:6:22
// at evalScript (node:internal/process/execution:76:60)
// at node:internal/main/eval_string:23:3
const name = 'Will Robinson';
console.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to stderr

Example using the Console class:

const out = getStreamSomehow();
const err = getStreamSomehow();
const myConsole = new console.Console(out, err);
myConsole.log('hello world');
// Prints: hello world, to out
myConsole.log('hello %s', 'world');
// Prints: hello world, to out
myConsole.error(new Error('Whoops, something bad happened'));
// Prints: [Error: Whoops, something bad happened], to err
const name = 'Will Robinson';
myConsole.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to err

@seesource

console
.
Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)

Prints to stdout with newline. Multiple arguments can be passed, with the first used as the primary message and all additional used as substitution values similar to printf(3) (the arguments are all passed to util.format()).

const count = 5;
console.log('count: %d', count);
// Prints: count: 5, to stdout
console.log('count:', count);
// Prints: count: 5, to stdout

See util.format() for more information.

@sincev0.1.100

log
(
var error: unknown
error
)
}

We recommend using filsnap-adapter to interact with filsnap for a simpler interface. Check the full API documentation here.

Architecture

Security Audits

Filsnap v1.0.1 - The FilSnap v0.5.0 was audited by ConsenSys Diligence in August 2023 with a follow-up assessment of fixes conducted in October 2023, leading to the release of filsnap-v1.0.1. The complete audit report is available here in the audits/ directory as well as on the ConsenSys Diligence website.

Back to projects