Package Exports
- @depay/web3-wallets
- @depay/web3-wallets/dist/esm/index.js
- @depay/web3-wallets/dist/umd/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@depay/web3-wallets) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Quickstart
yarn add @depay/web3-wallets
or
npm install --save @depay/web3-wallets
import { getWallet } from '@depay/web3-wallets'
let wallet = getWallet()
wallet.name // MetaMask
Demo
https://depayfi.github.io/@depay/web3-wallets/dev.html
Support
This library supports the following blockchains:
This library supports the following wallets:
via WalletConnect:
Functionalities
Get wallet
Wallet
: Returns an instance of the automatically detected Wallet or undefined (if no wallet could be automatically detected)
let wallet = getWallet();
// <Wallet name='MetaMask'>
let wallet = getWallet();
// undefined
Returns undefined
if no wallet has been detected. Make sure you check that before you continue using the wallet:
let wallet getWallet();
if(wallet) {
// continue with selected wallet
} else {
// make something else
}
Get wallet name
name:string
: Returns the name of the wallet.
let wallet = getWallet();
wallet.name // 'MetaMask'
Get wallet logo
logo:string
: Returns the logo of the wallet as PNG base64-encoded.
let wallet = getWallet();
wallet.logo // 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAclBMVEVHcEyBTif0snbypF3nhijulD7cq4Hv1b/wrW3dvqSieVvWyL2PXjvJuazndgD5hQB3PQ/PYQDkdADCrp3YwrPsegAVFRZyOg7ZawDzgQD/iQAeMklxNQMMDQ+3XwiLRw2hVAyCdmxPQz7dqoAyKiSgkoj9gMFYAAAADnRSTlMA8X2g78dnGzZPp57O1Hi2/psAAApFSURBVHja7Z2LVqM6FIZ7pUUrtbQRqEyLHX3/Vzy5soHcICSd41r5z3EcFUL+7m/vXKDOIioqKioqKioqKioqKioqKioqKioqKurXKnlJd4t/rB3uxGKuXur7Zr1f/EPt15t7/TK3ld2yKN5vaLv6R2HZrbbo9l4Uy7nXT+t33EyTZ5ttsls8Wbtku8nypihwH9LZZL1jFfcS5fmTEcNI5XlW3gvSg/plNlnvRASvDDf7NMQwUuR6GCvegeVuNllYDC+UkbafgNguwS6wEMWKqU49kPUu8MqwleCIUaRyEo7TndmYz5YgC/DCYogF8kKRYj4ygZUHtjhZPbywQiEmkBJYvfeunvohi+N1QhkXQSxdeFTKkBpg5YUtQZaMl3fEMFLUwRArP2wBWTJePhEDpDL6gUqOlS+2OFlqvLwhJpASVgArX2wJsmS8qAMviAFSGTXRxcobW5wsWQKvIWIzqpT4rMSqHRN9kqXESwyUqSNSGf2jh5VHtgRZOrzACnjBiI3Uatt3MahWPtlKWZNavMiMRfZSHUepkmxkBKtuOLzVLSDLjhc4QeOMIAETWAGs/LIlyLLgJWmcEdLxYUQajpVnthJjQGBCPFQ1lqy+lT5WPuvWC23XFpQTcmILiTDwP2EF5Z8tGhG7k0bCayRZEJF2BWU3kvgcDi14jalbFSDVxSoMWvpklyfEU9lCeadedbEKkeyLg611mBBnaFK6V1l3xt5iZb/SIcQ4MsBrCltIpHnWxSpQrotsn46Xna1MtYIKlet4N0PfomW9VdlTPZtQrUB775NGA172kCB5YR4y13G2E7ac8LKSBSuoCaoP3tcjNrwqI1nD/Z7AuS6yfSJedrbQAKvQuS6y3Qkv8yDSwyp4rpNsnxISWM6bh5KqXZhPDQjJ9WdkO6y3jGyhLlZPyXWW7Y54VfqAAFZPynWR7U54IW1AMgVW4aa+ItvJJZ3w0kaEYeUU6RnbzHRsd8NL46SajBWM6x5vK0y47O2q8nG9MRvPTRGeJI55oo5Ih6tnDYdEqbOPe642Uro7SefcuHCOh24koTMsN9Hh8JlDIkkQ7SwF/4A4eepwSNDCZct1wqWZaLG9Bpeilc7I9elXhE27SmcEz1Dc2k3ciy+5nstU3myEbDi4tOxcgPeH2sGHcXFVsZ+h3MFJfdg7F62XYuL1YIsrVxvJuZPJKV8UL7MeBFwW09PcbmR6yhfLxMfzWlPS3G4EnDxpgoLZOtTTllS2LWAERiYur+rDbs4wUk8sV2ONOBSvesZAktTFtMX6NCPZpPlKUSdzJo31lFnJVCNT5iv1rEnjYr+sx5arSUYmp3y9FIOI86A49laig5Hx85XiMPtxKlv9LfCYSdJ8uhFIedJI0OpLZykWF/fmVBIfsjSzeIWT8tTccVOB5id8PWIOxa2srldsw8kIWLleq/JGAxNoPULKliEU2fF6FbjIqnRzRhWGpKWMBSZE0SJO5IZ5KI5X0bl5RuDYNjCKcjL7OdCkloBqbjm+Jty2mW+krQyk3fzWkMv420KRyxZuHQOF8NW6dchHRKgT8IJODQ6Mr8ewwUk/t+1dg+mvPPm12u5D5uWtCjAFhtyWBwY/RuRhB7K/Psx+IFfc8GlDIfvwFZHWiRwYXz4Wi1XrQmbel5EWLtmLh0TnWhvuPhle4vnHM60XnrTb6H34M6J3svGFVqq9P5v5NKK/Xzd7MBRkVbonGPwayTVOKk9s6ciqTlhlq84jWEwqI6LLreB80loVlK1Ul4T5SaPyRJ0pziDfJz9XKz8GZaslSy6mJ5NKxW0e4wmkYAdkqyVLhbxPI4anDDYLD0qNj5WYOiafYDqcpnpItoAsVfLmk0gxHU2LQ0i2KFn6kSSfYKQyHExHkZBspZan+vROoGfgW1uv2LATkq1VZX6CV4pJKT6bjJQDH9an7laLudraHrRkTsDG8rEszUbK+2N5K7s+7A90bhdByWIhASflbfn5+fkQVUhX5R74oI6Vks+zgrKFybKFBJxgG1R30kf8nJx8LDmwbNhRj+bEQ8cDEpSt7XFMSGgHmwftHw2JzkjGAyKsUB88IEHZ2kNLlsXV7fEJakrcP6WRkgWktXIb/Q6H/TyyRrwXhK9r89uyExK9EQgISXk8tox8P9MqLFmicOF9R7y6PgkvjRgZ5FGnaV0gfAoxwo4MytZu1Bu/aETafcLm8cDd1Bt50OQo8bHsbD6GhGXLRhb0T3SFBAbdlph9tZHshkOR4YPal6F1XGn/Zx+rwGSxGRcabOFkSF1+UTbYWqrwihJ/CsvW7jhOik5fK42Rq+5cu9wXvMnYN94qMNIYqRS48RMM7fMxMTBZtDeyEXWOVKZTK9WHB7Z2x9FSrIrURhRrs3FBn8NWMt4IQpYowbfkM9vXPdR8a30cL3cjVdvPzqeq/UvX5tb79oni1ZK/ozKiOKz3RZC6lRwdZDdiP9H3fCtBWmWdnVK+V1qNKAAo071zDDfTKkO6/1DiiFauk2ITQTFCIPk71n0VOm3WyXUPeG3YOy9V+1J2I/Z9sdKwW791Lb+m+0uqDZ2q/2pLRoYHqDaTTNdcuQ6I+OTRIWnvb9iNwNiPzxkdEHzs3nmKkpudyB2ozEZ6X6ibCUAWXo4Yb/kNeiAvvuXtoF4pVhkxXnDtvqmVjYarhNtnRiOAlboVk5F0xgZ2PtZJ2b8RaJ/3qxsxiBdf/wW4D1fveV77rF/XSBiyoADbQ9I5sK3DV0ngAw62BAQOTObsomRjneTSfeYrak4DNegqsIJjLT5AlKwgBbjbC+mO+fX0/edjoD/fpysezDVN4O+HKb68AI8LyfDXbG02H5KPD/ytzSYfNNkLSIBhnWlPG7E7KQc2/l5+iA/Zyc/lL7Mit2ARLb6hCnBLRjmwcbl8qY184R/93SiM2K7D7iKGKsBtP8q+DbORC42K3ECw4kuU5qPgKjs2mB5qIw/2U7AC54crvnx1ZbtEC0aecRt2I2AFzg82rANb9pDk3AboW23km/8YrOQ8ICGLryjAdif5wMbl/P2h1Pf50rOCaWQ+ghZfUYDtcAkbYORDI2EErJB4WjX77SNkcLeHZGjjAsOIPJBchlbK7Alk2djKCVTr1/NoI1/DI8+va/qrWQOTZSzAxAT7BbnpeWDl649GXwMb55Twu1pviJkQaypbAc7pb/lt/yWM9K1v5fH9pdT3o2/jLRWX2bPfTx6o+EIBlnnq/37f3du5a+Xr56zS5acTEfz1W7+NhAXG+7AuVldDF5QnSa+sq9BLtZXuAa/yK40DQ3Y4/Q7r7eqqx9Oa8aRzctb6kH78qrlg2kt/fHkvZNECDDwpCzokCpXNCPvLmymD95wyb8WXFWDOk/Ufudm98t6ajOAPJVY6yvwUX769te2lti0odsnh0FM2e00F6vFkD4pRcjisgfGT6j15Csqbt5c4rHav/sLxj/Vq9LH4Rdq9abH6PeHgQVHrV4UjKioqKioqKioqKioqKioqKioqKioqKirq/6z/AMhLOEXbTKvCAAAAAElFTkSuQmCC'
Can return placeholder images if there is a wallet but type is unknown. Returns undefined
if no wallet was found at all.
Get connected account
async account():string
: Gets the currently connected and active account (without prompting a connect screen). Returns undefined
if no account is connected.
let wallet = getWallet();
await wallet.account() // '0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B'
Get connected accounts
async accounts():string
: Gets all conncetd accounts (without prompting a connect screen). Returns []
if no account is connected.
let wallet = getWallet();
await wallet.accounts() // ['0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B']
Connect an account
async connect():string
: Connects accounts. Potentially opens wallet connect screen. Provides connected accounts in async return. If wallet fails to connect, also returns an empty array []
.
let wallet = getWallet();
await wallet.connect() // ['0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B']
Receive supported blockchains
blockchains:Array
: Array containing the names of supported blockchains
let wallet = getWallet();
wallet.name // MetaMask
wallet.blockchains // ['ethereum', 'bsc']
Check if wallet is connected to a specific blockchain
async connectedTo(blockchain):Boolean
: Checks if wallet is connected to a specific blockchain.
let wallet = getWallet()
await wallet.connectedTo('ethereum') // true
If no param is given it well tell you to which blockchain the wallet is connected to:
let wallet = getWallet();
await wallet.connectedTo() // bsc
Receive wallet events
on(string, function):undefined
: Register a callback function for given events.
let wallet = getWallet();
wallet.on('account', (newAccount)=>{
doSomething(newAccount)
})
Events
on('account', (newAccount)=>{})
: Triggers when user changes the connected/active wallet account.
on('accounts', (newAccounts)=>{})
: Triggers when user changes any connected wallet account.
on('network', (newNetwork)=>{})
: Triggers when user changes network of the connected wallet.
on('disconnect', ()=>{})
: Triggers when user disconnects wallet.
Deregister wallet events
.on
returns a callback function that needs to be passed to .off
if you want to deregister the event listener:
let wallet = getWallet();
let callback = wallet.on('account', (newAccount)=>{
doSomething(newAccount)
})
//...
wallet.off('account', callback) // removes listener
Switch blockchain/network
async switchTo(blockchain)
: Changes wallet connection to a specific network (adds it to the wallet in case it's missing)
let wallet = getWallet()
await wallet.switchTo('bsc')
Transactions
sendTransaction
Sign and send a transaction through the connected wallet:
let wallet = getWallet()
let sentTransaction = await wallet.sendTransaction({
blockchain: 'ethereum',
to: '0xae60aC8e69414C2Dc362D0e6a03af643d1D85b92',
api: [{"inputs":[{"internalType":"address","name":"_configuration","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"configuration","outputs":[{"internalType":"contract DePayRouterV1Configuration","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pluginAddress","type":"address"}],"name":"isApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"address[]","name":"plugins","type":"address[]"},{"internalType":"string[]","name":"data","type":"string[]"}],"name":"route","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],
method: 'route',
params: {
path: ["0xb056c38f6b7Dc4064367403E26424CD2c60655e1","0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb"],
amounts: ["11275067000000000000000","100000000000000000000", "1632063302"],
addresses: ["0x39794c3171d4D82eB9C6FBb764749Eb7ED92881d", "0x39794c3171d4D82eB9C6FBb764749Eb7ED92881d"],
plugins: ["0xe04b08Dfc6CaA0F4Ec523a3Ae283Ece7efE00019", "0x99F3F4685a7178F26EB4F4Ca8B75a1724F1577B9"],
data: []
},
value: "0",
sent: function(transaction){},
confirmed: function(transaction){},
failed: function(transaction){}
})
or a simple value transfer:
let wallet = getWallet()
let sentTransaction = await wallet.sendTransaction({
blockchain: 'ethereum',
to: '0xae60aC8e69414C2Dc362D0e6a03af643d1D85b92',
value: "1000000000000000",
sent: function(transaction){},
confirmed: function(transaction){},
failed: function(transaction){}
})
Arguments for `sendTransaction`:
blockchain: String
: Name of the blockchain e.g. 'ethereum'.
to String
: Address of the contract to be transacted with.
api: Array
: Api of the contract (e.g. abi for Ethereum).
method: String
: Name of the contract method to be called.
params: Object or Array
: Parameters passed to the method.
value: BigNumber
: Value of the transaction (amount of the native blockchain currency sent along with the transaction).
sent: Function
: Callback to be executed if transaction has been sent to the network.
confirmed: Function
: Callback to be executed if transaction has been confirmed once by the network.
failed: Function
: Callback to be executed if transaction failed to confirm on the network (aka reverted).
value
If value is passed as a number it's gonna be converted into a big number applying the individual blockhain's default decimals:
let transaction = new Transaction({
...,
value: 1
})
transaction.value // '1000000000000000000'
If value is passed as a string or as a BigNumber, value is used just as provided:
let transaction = new Transaction({
...,
value: '1000000000000000000'
})
transaction.value // '1000000000000000000'
wrong network
sendTransaction
rejects with:
{ code: 'WRONG_NETWORK' }
in case wallet is connected to the wrong network and network cant be switched automatically.
Transaction
Returned instances of Transaction
(e.g. via sendTransaction
, or sent
, confirmed
or failed
callback) have the following format:
blockchain: string
: Blockchain the transaction belongs to.
id: string
: Unique identifier of the transaction, also known as transaction hash, only populated if transaction has been submitted to the network.
url: string
: A url to display the transaction status in a browser on a blockchain explorer.
from: string
: Address the transaction is sent from.
nonce: Number
: The number of the sent transactions (from the given address).
to: string
: Address the transaction is interacting with.
api: array
: Api of a contract the transaction is interacting with.
method: string
: The method name of the contract the transaction is interacting with.
params: object or array
: Params the transaction is passing to the contract method.
value: BigNumber
: Amount/value of the native token the transaction is forwarding as part of the interaction.
confirmation: Promise
: Returns a promise that resolves once the transaction confirms.
failure: Promise
: Returns a promise that resolves once the transaction fails.
Estimations
Allows you to estimate transactions before they happen to determine if they are possible and how much they will cost:
let cost = await wallet.estimate({
blockchain: 'ethereum',
to: '0xae60aC8e69414C2Dc362D0e6a03af643d1D85b92',
method: 'route',
api: [{"inputs":[{"internalType":"address","name":"_configuration","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"configuration","outputs":[{"internalType":"contract DePayRouterV1Configuration","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pluginAddress","type":"address"}],"name":"isApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"address[]","name":"plugins","type":"address[]"},{"internalType":"string[]","name":"data","type":"string[]"}],"name":"route","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],
params: {
path: ['0x1cBb83EbcD552D5EBf8131eF8c9CD9d9BAB342bC'],
amounts: ['160000000000000000', '160000000000000000', '1626096776'],
addresses: ['0x4e260bB2b25EC6F3A59B478fCDe5eD5B8D783B02'],
plugins: ['0x99F3F4685a7178F26EB4F4Ca8B75a1724F1577B9'],
data: []
},
value: 0
}) // 22111100000
Returns the cost of the estimate, otherwise rejects if transaction is not executable.
Rejects with
{ code: 'WRONG_NETWORK' }
in case wallet is connected to the wrong network.
Signatures
sign message
web3-wallets
allows you to sign a personal message:
let wallet = getWallet()
let signature = await wallet.sign("This is a message to be signed")
Development
Get started
yarn install
yarn dev
Release
npm publish