@depay/web3-wallets-evm 12.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 DePay
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,365 @@
1
+ ## Quickstart
2
+
3
+ ```
4
+ yarn add @depay/web3-wallets
5
+ ```
6
+
7
+ or
8
+
9
+ ```
10
+ npm install --save @depay/web3-wallets
11
+ ```
12
+
13
+ ```javascript
14
+ import { getWallets } from '@depay/web3-wallets'
15
+
16
+ let wallets = getWallets()
17
+ let wallet = wallets[0]
18
+
19
+ wallet.name // MetaMask
20
+ wallet.connect()
21
+ ```
22
+
23
+ ## Demo
24
+
25
+ https://depayfi.github.io/web3-wallets/demo.html
26
+
27
+ ## Support
28
+
29
+ This library supports the following blockchains:
30
+
31
+ - [Ethereum](https://ethereum.org)
32
+ - [BNB Smart Chain](https://www.binance.org/smartChain)
33
+ - [Polygon](https://polygon.technology)
34
+ - [Solana](https://solana.com)
35
+ - [Velas](https://velas.com)
36
+
37
+ This library supports the following wallets:
38
+
39
+ - [MetaMask](https://metamask.io)
40
+ - [Coinbase Wallet](https://wallet.coinbase.com)
41
+ - [Phantom](https://phantom.app)
42
+ - [WalletConnect](https://walletconnect.org)
43
+
44
+ 100+ different wallets via [WalletConnect](https://walletconnect.org), such as:
45
+ - [Trust Wallet](https://trustwallet.com)
46
+ - [DeFi Wallet by crypto.com](https://crypto.com/defi-wallet)
47
+ - [1inch Wallet](https://1inch.io/wallet/)
48
+ - [imToken Wallet](https://www.token.im)
49
+ - [TokenPocket](https://www.tokenpocket.pro/en)
50
+ - [Pillar](https://www.pillar.fi/)
51
+ - [Math Wallet](https://mathwallet.org/)
52
+ - [Ledger Live](https://www.ledger.com/ledger-live)
53
+ - [Argent Wallet](https://www.argent.xyz)
54
+ - [AlphaWallet](https://alphawallet.com/)
55
+ - [Unstoppable Wallet](https://unstoppable.money)
56
+ - [Atomic Wallet](https://atomicwallet.io)
57
+ - [Rainbow](https://rainbow.me/)
58
+ - and more...
59
+
60
+ ## Functionalities
61
+
62
+ ### getWallets
63
+
64
+ `getWallets`: Returns an array of available/connectable wallets.
65
+
66
+ ```javascript
67
+ let wallets = getWallets();
68
+ // [<Wallet name='MetaMask'>, <Wallet name='Phantom'>]
69
+ ```
70
+
71
+ ```javascript
72
+ let wallets = getWallets();
73
+ // [] no wallets detected. (you can still try WalletConnect or WalletLink)
74
+ ```
75
+
76
+ ```javascript
77
+ { getWallets, wallets } from "@depay/web3-wallets"
78
+
79
+ let foundWallets = getWallets()
80
+
81
+ let wallet
82
+ if(foundWallets.length == 1) {
83
+ wallet = foundWallets[0]
84
+ } else if(foundWallets.length > 1) {
85
+ wallet = foundWallets[parseInt(prompt('Which wallet do you want to connect?'), 10)]
86
+ } else {
87
+ // Let the user choose:
88
+ // you can still try to connect via wallets.WalletConnect.connect()
89
+ // or wallets.WalletLink.connect()
90
+ wallet = wallets.WalletLink
91
+ }
92
+ ```
93
+
94
+ ### Name
95
+
96
+ `name:string`: Returns the name of the wallet.
97
+
98
+ ```javascript
99
+ wallet.name // 'MetaMask'
100
+ ```
101
+
102
+ ### Logo
103
+
104
+ `logo:string`: Returns the logo of the wallet as PNG base64-encoded.
105
+
106
+ ```javascript
107
+ wallet.logo // 'data:image/png;base64,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'
108
+ ```
109
+
110
+ ### Account
111
+
112
+ `async account():string`: Gets the currently connected and active account (without prompting a connect screen). Returns `undefined` if no account is connected.
113
+
114
+ ```javascript
115
+ await wallet.account() // '0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B'
116
+ ```
117
+
118
+ ### Connect an account
119
+
120
+ `async connect():array`: Connects accounts. Potentially opens wallet connect screen. Provides connected accounts in async return. If wallet fails to connect, also returns an empty array `[]`.
121
+
122
+ ```javascript
123
+ await wallet.connect() // '0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B'
124
+ ```
125
+
126
+ ### Supported Blockchains
127
+
128
+ `blockchains:Array`: Array containing the names of supported blockchains
129
+
130
+ ```javascript
131
+ wallet.name // MetaMask
132
+ wallet.blockchains // ['ethereum', 'bsc', 'polygon']
133
+ ```
134
+
135
+ ### Check if wallet is connected to a specific blockchain
136
+
137
+ `async connectedTo(blockchain):Boolean`: Checks if wallet is connected to a specific blockchain.
138
+
139
+ ```javascript
140
+ await wallet.connectedTo('ethereum') // true
141
+ ```
142
+
143
+ If no param is given it well tell you to which blockchain the wallet is connected to:
144
+
145
+ ```javascript
146
+ await wallet.connectedTo() // 'bsc'
147
+ ```
148
+
149
+ ### Receive wallet events
150
+
151
+ `on(string, function):undefined`: Register a callback function for given events.
152
+
153
+ ```javascript
154
+ wallet.on('account', (newAccount)=>{
155
+ doSomething(newAccount)
156
+ })
157
+ ```
158
+
159
+ #### Events
160
+
161
+ `on('account', (newAccount)=>{})`: Triggers when user changes the connected/active wallet account.
162
+
163
+ #### Deregister wallet events
164
+
165
+ `.on` returns a callback function that needs to be passed to `.off` if you want to deregister the event listener:
166
+
167
+ ```javascript
168
+ let callback = wallet.on('account', (newAccount)=>{
169
+ doSomething(newAccount)
170
+ })
171
+
172
+ //...
173
+
174
+ wallet.off('account', callback) // removes listener
175
+ ```
176
+
177
+ ### Switch blockchain/network
178
+
179
+ `async switchTo(blockchain)`: Changes wallet connection to a specific network (adds it to the wallet in case it's missing)
180
+
181
+ ```javascript
182
+ await wallet.switchTo('bsc')
183
+ ```
184
+
185
+ ### Transaction
186
+
187
+ ### sendTransaction
188
+
189
+ #### EVM: sendTransaction
190
+
191
+ Available arguments for EVM blockchains:
192
+
193
+ `blockchain: String`: Name of the blockchain e.g. 'ethereum'.
194
+
195
+ `to String`: Address of the contract to be transacted with.
196
+
197
+ `api: Array`: Api of the contract (e.g. abi for Ethereum).
198
+
199
+ `method: String`: Name of the contract method to be called.
200
+
201
+ `params: Object or Array`: Parameters passed to the method.
202
+
203
+ `value: Number or BigNumber as String`: Value of the transaction (amount of the native blockchain currency sent along with the transaction).
204
+
205
+ `sent: Function (transaction)=>{}`: Callback to be executed if transaction has been sent to the network.
206
+
207
+ `succeeded: Function (transaction)=>{}`: Callback to be executed if transaction was successful and has been confirmed once by the network.
208
+
209
+ `failed: Function (transaction, error)=>{}`: Callback to be executed if transaction failed (e.g. reverted).
210
+
211
+ ##### EVM: Simple value transfer
212
+
213
+ e.g. sending 0.01 ETH on Ethereum:
214
+
215
+ ```javascript
216
+
217
+ let sentTransaction = await wallet.sendTransaction({
218
+ blockchain: 'ethereum',
219
+ to: '0xae60aC8e69414C2Dc362D0e6a03af643d1D85b92',
220
+ value: 0.01,
221
+ sent: function(transaction){},
222
+ succeeded: function(transaction){},
223
+ failed: function(transaction, error){}
224
+ })
225
+ ```
226
+
227
+ ##### EVM: Smart contract interaction
228
+
229
+ ```javascript
230
+ let sentTransaction = await wallet.sendTransaction({
231
+ blockchain: 'ethereum',
232
+ to: '0xae60aC8e69414C2Dc362D0e6a03af643d1D85b92',
233
+ 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"}],
234
+ method: 'route',
235
+ params: {
236
+ path: ["0xb056c38f6b7Dc4064367403E26424CD2c60655e1","0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb"],
237
+ amounts: ["11275067000000000000000","100000000000000000000", "1632063302"],
238
+ addresses: ["0x39794c3171d4D82eB9C6FBb764749Eb7ED92881d", "0x39794c3171d4D82eB9C6FBb764749Eb7ED92881d"],
239
+ plugins: ["0xe04b08Dfc6CaA0F4Ec523a3Ae283Ece7efE00019", "0x99F3F4685a7178F26EB4F4Ca8B75a1724F1577B9"],
240
+ data: []
241
+ },
242
+ value: "0",
243
+ sent: function(transaction){},
244
+ succeeded: function(transaction){},
245
+ failed: function(transaction, error){}
246
+ })
247
+ ```
248
+
249
+ #### Solana: sendTransaction
250
+
251
+ Available arguments for Solana blockchains:
252
+
253
+ `blockchain: String`: Name of the blockchain e.g. 'solana'.
254
+
255
+ `sent: Function (transaction)=>{}`: Callback to be executed if transaction has been sent to the network.
256
+
257
+ `succeeded: Function (transaction)=>{}`: Callback to be executed if transaction was successful and has been confirmed once by the network.
258
+
259
+ `failed: Function (transaction, error)=>{}`: Callback to be executed if transaction failed (e.g. reverted).
260
+
261
+ ##### Solana: Simple value transfer
262
+
263
+ e.g. send 0.01 SOL on Solana:
264
+
265
+ `to String`: Address of the receiver.
266
+
267
+ `value: Number or BigNumber as String`: Value of the transaction (only needed for simple SOL transfers).
268
+
269
+ ```javascript
270
+
271
+ let sentTransaction = await wallet.sendTransaction({
272
+ blockchain: 'solana',
273
+ to: '2UgCJaHU5y8NC4uWQcZYeV9a5RyYLF7iKYCybCsdFFD1',
274
+ value: 0.01,
275
+ sent: function(transaction){},
276
+ succeeded: function(transaction){},
277
+ failed: function(transaction, error){}
278
+ })
279
+ ```
280
+
281
+ ##### Solana: Sign and send instructions
282
+
283
+ `instructions Array`: A set of TransactionInstructions
284
+
285
+ e.g. Send 1 USDC:
286
+
287
+ ```javascript
288
+ import { Token } from '@depay/web3-tokens'
289
+
290
+ let sentTransaction = await wallet.sendTransaction({
291
+ blockchain: 'solana',
292
+ instructions: [
293
+ await Token.solana.createTransferInstructions({
294
+ token: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
295
+ amount: '1000000',
296
+ from: await wallet.account(),
297
+ to: '5AcFMJZkXo14r3Hj99iYd1HScPiM4hAcLZf552DfZkxas'
298
+ })
299
+ ],
300
+ sent: function(transaction){},
301
+ succeeded: function(transaction){},
302
+ failed: function(transaction, error){}
303
+ })
304
+ ```
305
+
306
+ #### value
307
+
308
+ If value is passed as a number it's gonna be converted into a big number applying the individual blockhain's default decimals:
309
+
310
+ ```javascript
311
+ let transaction = new Transaction({
312
+ ...,
313
+ value: 1
314
+ })
315
+
316
+ transaction.value // '1000000000000000000'
317
+ ```
318
+
319
+ If value is passed as a string or as a BigNumber, value is used just as provided:
320
+
321
+ ```javascript
322
+ let transaction = new Transaction({
323
+ ...,
324
+ value: '1000000000000000000'
325
+ })
326
+
327
+ transaction.value // '1000000000000000000'
328
+ ```
329
+
330
+ #### wrong network
331
+
332
+ `sendTransaction` rejects with:
333
+
334
+ ```javascript
335
+ { code: 'WRONG_NETWORK' }
336
+ ```
337
+
338
+ in case wallet is connected to the wrong network and network cant be switched automatically.
339
+
340
+ ### Sign messages
341
+
342
+ ```javascript
343
+ let signature = await wallet.sign("This is a message to be signed")
344
+ ```
345
+
346
+ ## Logos
347
+
348
+ ### Conversion
349
+
350
+ Use https://codebeautify.org
351
+
352
+ ## Development
353
+
354
+ ### Get started
355
+
356
+ ```
357
+ yarn install
358
+ yarn dev
359
+ ```
360
+
361
+ ### Release
362
+
363
+ ```
364
+ npm publish
365
+ ```