@depay/web3-wallets-evm 12.3.6 → 12.3.9

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.
@@ -0,0 +1,990 @@
1
+ import { Blockchain } from '@depay/web3-blockchains';
2
+ import { ethers } from 'ethers';
3
+ import { CONSTANTS } from '@depay/web3-constants';
4
+ import { PublicKey, Transaction as Transaction$1, SystemProgram } from '@depay/solana-web3.js';
5
+ import { getProvider, estimate } from '@depay/web3-client';
6
+ import { WalletConnectClient, QRCodeModal } from '@depay/walletconnect-v1';
7
+ import { CoinbaseWalletSDK } from '@depay/coinbase-wallet-sdk';
8
+
9
+ function _optionalChain$8(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
10
+ class Transaction {
11
+
12
+ constructor({ blockchain, from, to, value, api, method, params, instructions, sent, succeeded, failed }) {
13
+
14
+ // required
15
+ this.blockchain = blockchain;
16
+ this.from = from;
17
+ this.to = to;
18
+
19
+ // optional
20
+ this.value = _optionalChain$8([Transaction, 'access', _ => _.bigNumberify, 'call', _2 => _2(value, blockchain), 'optionalAccess', _3 => _3.toString, 'call', _4 => _4()]);
21
+ this.api = api;
22
+ this.method = method;
23
+ this.params = params;
24
+ this.sent = sent;
25
+ this.succeeded = succeeded;
26
+ this.failed = failed;
27
+ this.instructions = instructions;
28
+
29
+ // internal
30
+ this._succeeded = false;
31
+ this._failed = false;
32
+ }
33
+
34
+ async prepare({ wallet }) {
35
+ this.from = await wallet.account();
36
+ }
37
+
38
+ static bigNumberify(value, blockchain) {
39
+ if (typeof value === 'number') {
40
+ return ethers.utils.parseUnits(value.toString(), CONSTANTS[blockchain].DECIMALS)
41
+ } else if (value && value.toString) {
42
+ return ethers.BigNumber.from(value.toString())
43
+ } else {
44
+ return value
45
+ }
46
+ }
47
+
48
+ getContractArguments() {
49
+ let fragment = this.getContract().interface.fragments.find((fragment) => {
50
+ return fragment.name == this.method
51
+ });
52
+
53
+ if(this.params instanceof Array) {
54
+ return this.params
55
+ } else if (this.params instanceof Object) {
56
+ return fragment.inputs.map((input) => {
57
+ return this.params[input.name]
58
+ })
59
+ } else {
60
+ throw 'Contract params have wrong type!'
61
+ }
62
+ }
63
+
64
+ getContract() {
65
+ return new ethers.Contract(this.to, this.api)
66
+ }
67
+
68
+ async getData() {
69
+ let populatedTransaction = await this.getContract().populateTransaction[this.method].apply(
70
+ null, this.getContractArguments()
71
+ );
72
+ return populatedTransaction.data
73
+ }
74
+
75
+ success() {
76
+ if (this._succeeded) {
77
+ return Promise.resolve(this)
78
+ }
79
+ return new Promise((resolve, reject) => {
80
+ let originalSucceeded = this.succeeded;
81
+ this.succeeded = (transaction) => {
82
+ if (originalSucceeded) originalSucceeded(transaction);
83
+ resolve(transaction);
84
+ };
85
+ })
86
+ }
87
+
88
+ failure() {
89
+ if (this._failed) {
90
+ return Promise.resolve(this)
91
+ }
92
+ return new Promise((resolve, reject) => {
93
+ let originalFailed = this.failed;
94
+ this.failed = (transaction, reason) => {
95
+ if (originalFailed) originalFailed(transaction, reason);
96
+ resolve(transaction, reason);
97
+ };
98
+ })
99
+ }
100
+ }
101
+
102
+ const sendTransaction$3 = async ({ transaction, wallet })=> {
103
+ transaction = new Transaction(transaction);
104
+ if((await wallet.connectedTo(transaction.blockchain)) == false) {
105
+ await wallet.switchTo(transaction.blockchain);
106
+ }
107
+ await transaction.prepare({ wallet });
108
+ let provider = new ethers.providers.Web3Provider(window.ethereum, 'any');
109
+ let signer = provider.getSigner(0);
110
+ await submit$3({ transaction, provider, signer }).then((sentTransaction)=>{
111
+ if (sentTransaction) {
112
+ transaction.id = sentTransaction.hash;
113
+ transaction.nonce = sentTransaction.nonce;
114
+ transaction.url = Blockchain.findByName(transaction.blockchain).explorerUrlFor({ transaction });
115
+ if (transaction.sent) transaction.sent(transaction);
116
+ sentTransaction.wait(1).then(() => {
117
+ transaction._succeeded = true;
118
+ if (transaction.succeeded) transaction.succeeded(transaction);
119
+ }).catch((error)=>{
120
+ if(error && error.code && error.code == 'TRANSACTION_REPLACED') {
121
+ if(error.replacement && error.replacement.hash) {
122
+ transaction.id = error.replacement.hash;
123
+ transaction.url = Blockchain.findByName(transaction.blockchain).explorerUrlFor({ transaction });
124
+ }
125
+ if(error.replacement && error.replacement.hash && error.receipt && error.receipt.status == 1) {
126
+ transaction._succeeded = true;
127
+ if (transaction.succeeded) transaction.succeeded(transaction);
128
+ } else if(error.replacement && error.replacement.hash && error.receipt && error.receipt.status == 0) {
129
+ transaction._failed = true;
130
+ if(transaction.failed) transaction.failed(transaction, error);
131
+ }
132
+ } else {
133
+ transaction._failed = true;
134
+ if(transaction.failed) transaction.failed(transaction, error);
135
+ }
136
+ });
137
+ } else {
138
+ throw('Submitting transaction failed!')
139
+ }
140
+ });
141
+ return transaction
142
+ };
143
+
144
+ const submit$3 = ({ transaction, provider, signer }) => {
145
+ if(transaction.method) {
146
+ return submitContractInteraction$2({ transaction, signer, provider })
147
+ } else {
148
+ return submitSimpleTransfer$3({ transaction, signer })
149
+ }
150
+ };
151
+
152
+ const submitContractInteraction$2 = ({ transaction, signer, provider })=>{
153
+ let contract = new ethers.Contract(transaction.to, transaction.api, provider);
154
+ return contract
155
+ .connect(signer)
156
+ [transaction.method](...transaction.getContractArguments({ contract }), {
157
+ value: Transaction.bigNumberify(transaction.value, transaction.blockchain)
158
+ })
159
+ };
160
+
161
+ const submitSimpleTransfer$3 = ({ transaction, signer })=>{
162
+ return signer.sendTransaction({
163
+ to: transaction.to,
164
+ value: Transaction.bigNumberify(transaction.value, transaction.blockchain)
165
+ })
166
+ };
167
+
168
+ let supported$2 = ['ethereum', 'bsc', 'polygon', 'velas'];
169
+ supported$2.evm = ['ethereum', 'bsc', 'polygon', 'velas'];
170
+ supported$2.solana = [];
171
+
172
+ function _optionalChain$7(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
173
+ class WindowEthereum {
174
+
175
+ static __initStatic() {this.info = {
176
+ name: 'Wallet (Ethereum)',
177
+ logo: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA0NDYuNCAzNzYuOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDQ2LjQgMzc2Ljg7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojODI4NDg3O30KCS5zdDF7ZmlsbDojMzQzNDM0O30KCS5zdDJ7ZmlsbDojOEM4QzhDO30KCS5zdDN7ZmlsbDojM0MzQzNCO30KCS5zdDR7ZmlsbDojMTQxNDE0O30KCS5zdDV7ZmlsbDojMzkzOTM5O30KPC9zdHlsZT4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTM4MS43LDExMC4yaDY0LjdWNDYuNWMwLTI1LjctMjAuOC00Ni41LTQ2LjUtNDYuNUg0Ni41QzIwLjgsMCwwLDIwLjgsMCw0Ni41djY1LjFoMzUuN2wyNi45LTI2LjkKCWMxLjUtMS41LDMuNi0yLjUsNS43LTIuN2wwLDBoMC40aDc4LjZjNS4zLTI1LjUsMzAuMi00Miw1NS43LTM2LjdjMjUuNSw1LjMsNDIsMzAuMiwzNi43LDU1LjdjLTEuNiw3LjUtNC45LDE0LjYtOS44LDIwLjUKCWMtMC45LDEuMS0xLjksMi4yLTMsMy4zYy0xLjEsMS4xLTIuMiwyLjEtMy4zLDNjLTIwLjEsMTYuNi00OS45LDEzLjgtNjYuNS02LjNjLTQuOS01LjktOC4zLTEzLTkuOC0yMC42SDczLjJsLTI2LjksMjYuOAoJYy0xLjUsMS41LTMuNiwyLjUtNS43LDIuN2wwLDBoLTAuNGgtMC4xaC0wLjVIMHY3NGgyOC44bDE4LjItMTguMmMxLjUtMS42LDMuNi0yLjUsNS43LTIuN2wwLDBoMC40aDI5LjkKCWM1LjItMjUuNSwzMC4yLTQxLjksNTUuNy0zNi43czQxLjksMzAuMiwzNi43LDU1LjdzLTMwLjIsNDEuOS01NS43LDM2LjdjLTE4LjUtMy44LTMyLjktMTguMi0zNi43LTM2LjdINTcuN2wtMTguMiwxOC4zCgljLTEuNSwxLjUtMy42LDIuNS01LjcsMi43bDAsMGgtMC40SDB2MzQuMmg1Ni4zYzAuMiwwLDAuMywwLDAuNSwwaDAuMWgwLjRsMCwwYzIuMiwwLjIsNC4yLDEuMiw1LjgsMi44bDI4LDI4aDU3LjcKCWM1LjMtMjUuNSwzMC4yLTQyLDU1LjctMzYuN3M0MiwzMC4yLDM2LjcsNTUuN2MtMS43LDguMS01LjUsMTUuNy0xMSwyMS45Yy0wLjYsMC43LTEuMiwxLjMtMS45LDJzLTEuMywxLjMtMiwxLjkKCWMtMTkuNSwxNy4zLTQ5LjMsMTUuNi02Ni43LTMuOWMtNS41LTYuMi05LjMtMTMuNy0xMS0yMS45SDg3LjFjLTEuMSwwLTIuMS0wLjItMy4xLTAuNWgtMC4xbC0wLjMtMC4xbC0wLjItMC4xbC0wLjItMC4xbC0wLjMtMC4xCgloLTAuMWMtMC45LTAuNS0xLjgtMS4xLTIuNi0xLjhsLTI4LTI4SDB2NTMuNWMwLjEsMjUuNywyMC45LDQ2LjQsNDYuNSw0Ni40aDM1My4zYzI1LjcsMCw0Ni41LTIwLjgsNDYuNS00Ni41di02My42aC02NC43CgljLTQzLjIsMC03OC4yLTM1LTc4LjItNzguMmwwLDBDMzAzLjUsMTQ1LjIsMzM4LjUsMTEwLjIsMzgxLjcsMTEwLjJ6Ii8+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMjAuOSwyOTguMWMwLTE0LjQtMTEuNi0yNi0yNi0yNnMtMjYsMTEuNi0yNiwyNnMxMS42LDI2LDI2LDI2UzIyMC45LDMxMi40LDIyMC45LDI5OC4xTDIyMC45LDI5OC4xeiIvPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjE5LjYsOTEuNWMwLTE0LjQtMTEuNi0yNi0yNi0yNnMtMjYsMTEuNi0yNiwyNnMxMS42LDI2LDI2LDI2UzIxOS42LDEwNS44LDIxOS42LDkxLjV6Ii8+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0zODIuMiwxMjguOGgtMC41Yy0zMi45LDAtNTkuNiwyNi43LTU5LjYsNTkuNmwwLDBsMCwwYzAsMzIuOSwyNi43LDU5LjYsNTkuNiw1OS42bDAsMGgwLjUKCWMzMi45LDAsNTkuNi0yNi43LDU5LjYtNTkuNmwwLDBDNDQxLjgsMTU1LjQsNDE1LjEsMTI4LjgsMzgyLjIsMTI4Ljh6IE0zOTYuNiwyMTkuNGgtMzFsOC45LTMyLjVjLTcuNy0zLjctMTEtMTIuOS03LjQtMjAuNgoJYzMuNy03LjcsMTIuOS0xMSwyMC42LTcuNGM3LjcsMy43LDExLDEyLjksNy40LDIwLjZjLTEuNSwzLjItNC4xLDUuOC03LjQsNy40TDM5Ni42LDIxOS40eiIvPgo8ZyBpZD0iTGF5ZXJfeDAwMjBfMSI+Cgk8ZyBpZD0iXzE0MjEzOTQzNDI0MDAiPgoJCTxnPgoJCQk8cG9seWdvbiBjbGFzcz0ic3QxIiBwb2ludHM9IjEyOSwxNjYuMiAxMjguNywxNjcuMyAxMjguNywyMDEuNCAxMjksMjAxLjcgMTQ0LjgsMTkyLjQgCQkJIi8+CgkJCTxwb2x5Z29uIGNsYXNzPSJzdDIiIHBvaW50cz0iMTI5LDE2Ni4yIDExMy4yLDE5Mi40IDEyOSwyMDEuNyAxMjksMTg1LjIgCQkJIi8+CgkJCTxwb2x5Z29uIGNsYXNzPSJzdDMiIHBvaW50cz0iMTI5LDIwNC43IDEyOC44LDIwNC45IDEyOC44LDIxNyAxMjksMjE3LjYgMTQ0LjgsMTk1LjQgCQkJIi8+CgkJCTxwb2x5Z29uIGNsYXNzPSJzdDIiIHBvaW50cz0iMTI5LDIxNy42IDEyOSwyMDQuNyAxMTMuMiwxOTUuNCAJCQkiLz4KCQkJPHBvbHlnb24gY2xhc3M9InN0NCIgcG9pbnRzPSIxMjksMjAxLjcgMTQ0LjgsMTkyLjQgMTI5LDE4NS4yIAkJCSIvPgoJCQk8cG9seWdvbiBjbGFzcz0ic3Q1IiBwb2ludHM9IjExMy4yLDE5Mi40IDEyOSwyMDEuNyAxMjksMTg1LjIgCQkJIi8+CgkJPC9nPgoJPC9nPgo8L2c+Cjwvc3ZnPgo=",
178
+ blockchains: supported$2.evm
179
+ };}
180
+
181
+ static __initStatic2() {this.isAvailable = ()=>{
182
+ return (
183
+ _optionalChain$7([window, 'optionalAccess', _8 => _8.ethereum]) &&
184
+ !_optionalChain$7([window, 'optionalAccess', _9 => _9.ethereum, 'optionalAccess', _10 => _10.isMetaMask]) &&
185
+ !(_optionalChain$7([window, 'optionalAccess', _11 => _11.ethereum, 'optionalAccess', _12 => _12.isCoinbaseWallet]) || _optionalChain$7([window, 'optionalAccess', _13 => _13.ethereum, 'optionalAccess', _14 => _14.isWalletLink]))
186
+ )
187
+ };}
188
+
189
+ constructor () {
190
+ this.name = this.constructor.info.name;
191
+ this.logo = this.constructor.info.logo;
192
+ this.blockchains = this.constructor.info.blockchains;
193
+ this.sendTransaction = (transaction)=>{
194
+ return sendTransaction$3({
195
+ wallet: this,
196
+ transaction
197
+ })
198
+ };
199
+ }
200
+
201
+ async account() {
202
+ if(!_optionalChain$7([window, 'optionalAccess', _15 => _15.ethereum])) { return undefined }
203
+ const accounts = await window.ethereum.request({ method: 'eth_accounts' });
204
+ return accounts[0]
205
+ }
206
+
207
+ async connect() {
208
+ if(!_optionalChain$7([window, 'optionalAccess', _16 => _16.ethereum])) { return undefined }
209
+ const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });
210
+ return accounts[0]
211
+ }
212
+
213
+ on(event, callback) {
214
+ let internalCallback;
215
+ switch (event) {
216
+ case 'account':
217
+ internalCallback = (accounts) => callback(accounts[0]);
218
+ window.ethereum.on('accountsChanged', internalCallback);
219
+ break
220
+ }
221
+ return internalCallback
222
+ }
223
+
224
+ off(event, internalCallback) {
225
+ switch (event) {
226
+ case 'account':
227
+ window.ethereum.removeListener('accountsChanged', internalCallback);
228
+ break
229
+ }
230
+ return internalCallback
231
+ }
232
+
233
+ async connectedTo(input) {
234
+ const blockchain = Blockchain.findById(await window.ethereum.request({ method: 'eth_chainId' }));
235
+ if(input) {
236
+ return input === blockchain.name
237
+ } else {
238
+ return blockchain.name
239
+ }
240
+ }
241
+
242
+ addNetwork(blockchainName) {
243
+ return new Promise((resolve, reject)=>{
244
+ const blockchain = Blockchain.findByName(blockchainName);
245
+ window.ethereum.request({
246
+ method: 'wallet_addEthereumChain',
247
+ params: [{
248
+ chainId: blockchain.id,
249
+ chainName: blockchain.fullName,
250
+ nativeCurrency: {
251
+ name: blockchain.currency.name,
252
+ symbol: blockchain.currency.symbol,
253
+ decimals: blockchain.currency.decimals
254
+ },
255
+ rpcUrls: [blockchain.rpc],
256
+ blockExplorerUrls: [blockchain.explorer],
257
+ iconUrls: [blockchain.logo]
258
+ }],
259
+ }).then(resolve).catch(reject);
260
+ })
261
+ }
262
+
263
+ switchTo(blockchainName) {
264
+ return new Promise((resolve, reject)=>{
265
+ const blockchain = Blockchain.findByName(blockchainName);
266
+ window.ethereum.request({
267
+ method: 'wallet_switchEthereumChain',
268
+ params: [{ chainId: blockchain.id }],
269
+ }).then(resolve).catch((error)=> {
270
+ if(error.code === 4902){ // chain not yet added
271
+ this.addNetwork(blockchainName)
272
+ .then(()=>this.switchTo(blockchainName).then(resolve))
273
+ .catch(reject);
274
+ } else {
275
+ reject(error);
276
+ }
277
+ });
278
+ })
279
+ }
280
+
281
+ async sign(message) {
282
+ await this.account();
283
+ let provider = new ethers.providers.Web3Provider(window.ethereum, 'any');
284
+ let signer = provider.getSigner(0);
285
+ let signature = await signer.signMessage(message);
286
+ return signature
287
+ }
288
+ } WindowEthereum.__initStatic(); WindowEthereum.__initStatic2();
289
+
290
+ function _optionalChain$6(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
291
+ class Coinbase extends WindowEthereum {
292
+
293
+ static __initStatic() {this.info = {
294
+ name: 'Coinbase',
295
+ logo: "data:image/svg+xml;base64,PHN2ZyBpZD0nTGF5ZXJfMScgZGF0YS1uYW1lPSdMYXllciAxJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB2aWV3Qm94PScwIDAgNDg4Ljk2IDQ4OC45Nic+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOnVybCgjbGluZWFyLWdyYWRpZW50KTt9LmNscy0ye2ZpbGw6IzQzNjFhZDt9PC9zdHlsZT48bGluZWFyR3JhZGllbnQgaWQ9J2xpbmVhci1ncmFkaWVudCcgeDE9JzI1MCcgeTE9JzcuMzUnIHgyPScyNTAnIHkyPSc0OTYuMzInIGdyYWRpZW50VHJhbnNmb3JtPSdtYXRyaXgoMSwgMCwgMCwgLTEsIDAsIDUwMiknIGdyYWRpZW50VW5pdHM9J3VzZXJTcGFjZU9uVXNlJz48c3RvcCBvZmZzZXQ9JzAnIHN0b3AtY29sb3I9JyMzZDViYTknLz48c3RvcCBvZmZzZXQ9JzEnIHN0b3AtY29sb3I9JyM0ODY4YjEnLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cGF0aCBjbGFzcz0nY2xzLTEnIGQ9J00yNTAsNS42OEMxMTQuODcsNS42OCw1LjUyLDExNSw1LjUyLDI1MC4xN1MxMTQuODcsNDk0LjY1LDI1MCw0OTQuNjUsNDk0LjQ4LDM4NS4yOSw0OTQuNDgsMjUwLjE3LDM4NS4xMyw1LjY4LDI1MCw1LjY4Wm0wLDM4Ny41NEExNDMuMDYsMTQzLjA2LDAsMSwxLDM5My4wNSwyNTAuMTcsMTQzLjExLDE0My4xMSwwLDAsMSwyNTAsMzkzLjIyWicgdHJhbnNmb3JtPSd0cmFuc2xhdGUoLTUuNTIgLTUuNjgpJy8+PHBhdGggY2xhc3M9J2Nscy0yJyBkPSdNMjg0LjY5LDI5Ni4wOUgyMTUuMzFhMTEsMTEsMCwwLDEtMTAuOS0xMC45VjIxNS40OGExMSwxMSwwLDAsMSwxMC45LTEwLjkxSDI4NWExMSwxMSwwLDAsMSwxMC45LDEwLjkxdjY5LjcxQTExLjA3LDExLjA3LDAsMCwxLDI4NC42OSwyOTYuMDlaJyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgtNS41MiAtNS42OCknLz48L3N2Zz4=",
296
+ blockchains: ['ethereum', 'bsc', 'polygon', 'velas']
297
+ };}
298
+
299
+ static __initStatic2() {this.isAvailable = ()=>{ return (_optionalChain$6([window, 'optionalAccess', _5 => _5.ethereum, 'optionalAccess', _6 => _6.isCoinbaseWallet]) || _optionalChain$6([window, 'optionalAccess', _7 => _7.ethereum, 'optionalAccess', _8 => _8.isWalletLink])) };}
300
+ } Coinbase.__initStatic(); Coinbase.__initStatic2();
301
+
302
+ function _optionalChain$5(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
303
+ class MetaMask extends WindowEthereum {
304
+
305
+ static __initStatic() {this.info = {
306
+ name: 'MetaMask',
307
+ logo: "data:image/svg+xml;base64,PHN2ZyBpZD0nTGF5ZXJfMScgZGF0YS1uYW1lPSdMYXllciAxJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0ODUuOTMgNDUwLjU2Jz48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6IzgyODQ4Nzt9LmNscy0ye2ZpbGw6I2UyNzcyNjtzdHJva2U6I2UyNzcyNjt9LmNscy0xMCwuY2xzLTExLC5jbHMtMiwuY2xzLTMsLmNscy00LC5jbHMtNSwuY2xzLTYsLmNscy03LC5jbHMtOCwuY2xzLTl7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30uY2xzLTN7ZmlsbDojZTM3NzI1O3N0cm9rZTojZTM3NzI1O30uY2xzLTR7ZmlsbDojZDZjMGIzO3N0cm9rZTojZDZjMGIzO30uY2xzLTV7ZmlsbDojMjQzNDQ3O3N0cm9rZTojMjQzNDQ3O30uY2xzLTZ7ZmlsbDojY2Q2MzI4O3N0cm9rZTojY2Q2MzI4O30uY2xzLTd7ZmlsbDojZTM3NTI1O3N0cm9rZTojZTM3NTI1O30uY2xzLTh7ZmlsbDojZjY4NTFmO3N0cm9rZTojZjY4NTFmO30uY2xzLTl7ZmlsbDojYzFhZTllO3N0cm9rZTojYzFhZTllO30uY2xzLTEwe2ZpbGw6IzE3MTcxNztzdHJva2U6IzE3MTcxNzt9LmNscy0xMXtmaWxsOiM3NjNlMWE7c3Ryb2tlOiM3NjNlMWE7fTwvc3R5bGU+PC9kZWZzPjxwYXRoIGNsYXNzPSdjbHMtMScgZD0nTTI0Ny45MSwzNTYuMjlhMjYsMjYsMCwxLDAtMjYsMjZBMjYsMjYsMCwwLDAsMjQ3LjkxLDM1Ni4yOVonIHRyYW5zZm9ybT0ndHJhbnNsYXRlKC03Ljk3IC0yMS4zMyknLz48cGF0aCBjbGFzcz0nY2xzLTEnIGQ9J00yNDYuNTUsMTQ5LjcxYTI2LDI2LDAsMSwwLTI2LDI2QTI2LDI2LDAsMCwwLDI0Ni41NSwxNDkuNzFaJyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgtNy45NyAtMjEuMzMpJy8+PGNpcmNsZSBjbGFzcz0nY2xzLTEnIGN4PScxNDguNCcgY3k9JzIzMC4wNScgcj0nMjUuOTknLz48cG9seWdvbiBjbGFzcz0nY2xzLTInIHBvaW50cz0nNDYxLjI4IDAuNSAyNzIuMDYgMTQxLjAzIDMwNy4wNSA1OC4xMiA0NjEuMjggMC41Jy8+PHBvbHlnb24gY2xhc3M9J2Nscy0zJyBwb2ludHM9JzI0LjQ2IDAuNSAyMTIuMTYgMTQyLjM3IDE3OC44OCA1OC4xMiAyNC40NiAwLjUnLz48cG9seWdvbiBjbGFzcz0nY2xzLTMnIHBvaW50cz0nMzkzLjIgMzI2LjI2IDM0Mi44MSA0MDMuNDcgNDUwLjYzIDQzMy4xNCA0ODEuNjMgMzI3Ljk3IDM5My4yIDMyNi4yNicvPjxwb2x5Z29uIGNsYXNzPSdjbHMtMycgcG9pbnRzPSc0LjQ5IDMyNy45NyAzNS4zIDQzMy4xNCAxNDMuMTMgNDAzLjQ3IDkyLjczIDMyNi4yNiA0LjQ5IDMyNy45NycvPjxwb2x5Z29uIGNsYXNzPSdjbHMtMycgcG9pbnRzPScxMzcuMDQgMTk1LjggMTA3IDI0MS4yNSAyMTQuMDYgMjQ2LjAxIDIxMC4yNiAxMzAuOTYgMTM3LjA0IDE5NS44Jy8+PHBvbHlnb24gY2xhc3M9J2Nscy0zJyBwb2ludHM9JzM0OC43IDE5NS44IDI3NC41MyAxMjkuNjMgMjcyLjA2IDI0Ni4wMSAzNzguOTQgMjQxLjI1IDM0OC43IDE5NS44Jy8+PHBvbHlnb24gY2xhc3M9J2Nscy0zJyBwb2ludHM9JzE0My4xMyA0MDMuNDcgMjA3LjQxIDM3Mi4wOSAxNTEuODggMzI4LjczIDE0My4xMyA0MDMuNDcnLz48cG9seWdvbiBjbGFzcz0nY2xzLTMnIHBvaW50cz0nMjc4LjM0IDM3Mi4wOSAzNDIuODEgNDAzLjQ3IDMzMy44NyAzMjguNzMgMjc4LjM0IDM3Mi4wOScvPjxwb2x5Z29uIGNsYXNzPSdjbHMtNCcgcG9pbnRzPSczNDIuODEgNDAzLjQ3IDI3OC4zNCAzNzIuMDkgMjgzLjQ3IDQxNC4xMiAyODIuOSA0MzEuODEgMzQyLjgxIDQwMy40NycvPjxwb2x5Z29uIGNsYXNzPSdjbHMtNCcgcG9pbnRzPScxNDMuMTMgNDAzLjQ3IDIwMy4wMyA0MzEuODEgMjAyLjY1IDQxNC4xMiAyMDcuNDEgMzcyLjA5IDE0My4xMyA0MDMuNDcnLz48cG9seWdvbiBjbGFzcz0nY2xzLTUnIHBvaW50cz0nMjAzLjk4IDMwMC45NyAxNTAuMzUgMjg1LjE4IDE4OC4yIDI2Ny44OCAyMDMuOTggMzAwLjk3Jy8+PHBvbHlnb24gY2xhc3M9J2Nscy01JyBwb2ludHM9JzI4MS43NiAzMDAuOTcgMjk3LjU1IDI2Ny44OCAzMzUuNTggMjg1LjE4IDI4MS43NiAzMDAuOTcnLz48cG9seWdvbiBjbGFzcz0nY2xzLTYnIHBvaW50cz0nMTQzLjEzIDQwMy40NyAxNTIuMjUgMzI2LjI2IDkyLjczIDMyNy45NyAxNDMuMTMgNDAzLjQ3Jy8+PHBvbHlnb24gY2xhc3M9J2Nscy02JyBwb2ludHM9JzMzMy42OCAzMjYuMjYgMzQyLjgxIDQwMy40NyAzOTMuMiAzMjcuOTcgMzMzLjY4IDMyNi4yNicvPjxwb2x5Z29uIGNsYXNzPSdjbHMtNicgcG9pbnRzPSczNzguOTQgMjQxLjI1IDI3Mi4wNiAyNDYuMDEgMjgxLjk1IDMwMC45NyAyOTcuNzQgMjY3Ljg4IDMzNS43NyAyODUuMTggMzc4Ljk0IDI0MS4yNScvPjxwb2x5Z29uIGNsYXNzPSdjbHMtNicgcG9pbnRzPScxNTAuMzUgMjg1LjE4IDE4OC4zOSAyNjcuODggMjAzLjk4IDMwMC45NyAyMTQuMDYgMjQ2LjAxIDEwNyAyNDEuMjUgMTUwLjM1IDI4NS4xOCcvPjxwb2x5Z29uIGNsYXNzPSdjbHMtNycgcG9pbnRzPScxMDcgMjQxLjI1IDE1MS44OCAzMjguNzMgMTUwLjM1IDI4NS4xOCAxMDcgMjQxLjI1Jy8+PHBvbHlnb24gY2xhc3M9J2Nscy03JyBwb2ludHM9JzMzNS43NyAyODUuMTggMzMzLjg3IDMyOC43MyAzNzguOTQgMjQxLjI1IDMzNS43NyAyODUuMTgnLz48cG9seWdvbiBjbGFzcz0nY2xzLTcnIHBvaW50cz0nMjE0LjA2IDI0Ni4wMSAyMDMuOTggMzAwLjk3IDIxNi41MyAzNjUuODIgMjE5LjM4IDI4MC40MyAyMTQuMDYgMjQ2LjAxJy8+PHBvbHlnb24gY2xhc3M9J2Nscy03JyBwb2ludHM9JzI3Mi4wNiAyNDYuMDEgMjY2LjkzIDI4MC4yNCAyNjkuMjEgMzY1LjgyIDI4MS45NSAzMDAuOTcgMjcyLjA2IDI0Ni4wMScvPjxwb2x5Z29uIGNsYXNzPSdjbHMtOCcgcG9pbnRzPScyODEuOTUgMzAwLjk3IDI2OS4yMSAzNjUuODIgMjc4LjM0IDM3Mi4wOSAzMzMuODcgMzI4LjczIDMzNS43NyAyODUuMTggMjgxLjk1IDMwMC45NycvPjxwb2x5Z29uIGNsYXNzPSdjbHMtOCcgcG9pbnRzPScxNTAuMzUgMjg1LjE4IDE1MS44OCAzMjguNzMgMjA3LjQxIDM3Mi4wOSAyMTYuNTMgMzY1LjgyIDIwMy45OCAzMDAuOTcgMTUwLjM1IDI4NS4xOCcvPjxwb2x5Z29uIGNsYXNzPSdjbHMtOScgcG9pbnRzPScyODIuOSA0MzEuODEgMjgzLjQ3IDQxNC4xMiAyNzguNzIgNDA5Ljk0IDIwNy4wMiA0MDkuOTQgMjAyLjY1IDQxNC4xMiAyMDMuMDMgNDMxLjgxIDE0My4xMyA0MDMuNDcgMTY0LjA1IDQyMC41OCAyMDYuNDUgNDUwLjA2IDI3OS4yOSA0NTAuMDYgMzIxLjg5IDQyMC41OCAzNDIuODEgNDAzLjQ3IDI4Mi45IDQzMS44MScvPjxwb2x5Z29uIGNsYXNzPSdjbHMtMTAnIHBvaW50cz0nMjc4LjM0IDM3Mi4wOSAyNjkuMjEgMzY1LjgyIDIxNi41MyAzNjUuODIgMjA3LjQxIDM3Mi4wOSAyMDIuNjUgNDE0LjEyIDIwNy4wMiA0MDkuOTQgMjc4LjcyIDQwOS45NCAyODMuNDcgNDE0LjEyIDI3OC4zNCAzNzIuMDknLz48cG9seWdvbiBjbGFzcz0nY2xzLTExJyBwb2ludHM9JzQ2OS4yNyAxNTAuMTYgNDg1LjQzIDcyLjU3IDQ2MS4yOCAwLjUgMjc4LjM0IDEzNi4yOCAzNDguNyAxOTUuOCA0NDguMTYgMjI0LjkgNDcwLjIyIDE5OS4yMyA0NjAuNzEgMTkyLjM4IDQ3NS45MiAxNzguNSA0NjQuMTMgMTY5LjM3IDQ3OS4zNSAxNTcuNzcgNDY5LjI3IDE1MC4xNicvPjxwb2x5Z29uIGNsYXNzPSdjbHMtMTEnIHBvaW50cz0nMC41IDcyLjU3IDE2LjY2IDE1MC4xNiA2LjM5IDE1Ny43NyAyMS42MSAxNjkuMzcgMTAuMDEgMTc4LjUgMjUuMjIgMTkyLjM4IDE1LjcxIDE5OS4yMyAzNy41OCAyMjQuOSAxMzcuMDQgMTk1LjggMjA3LjQxIDEzNi4yOCAyNC40NiAwLjUgMC41IDcyLjU3Jy8+PHBvbHlnb24gY2xhc3M9J2Nscy04JyBwb2ludHM9JzQ0OC4xNiAyMjQuOSAzNDguNyAxOTUuOCAzNzguOTQgMjQxLjI1IDMzMy44NyAzMjguNzMgMzkzLjIgMzI3Ljk3IDQ4MS42MyAzMjcuOTcgNDQ4LjE2IDIyNC45Jy8+PHBvbHlnb24gY2xhc3M9J2Nscy04JyBwb2ludHM9JzEzNy4wNCAxOTUuOCAzNy41OCAyMjQuOSA0LjQ5IDMyNy45NyA5Mi43MyAzMjcuOTcgMTUxLjg4IDMyOC43MyAxMDcgMjQxLjI1IDEzNy4wNCAxOTUuOCcvPjxwb2x5Z29uIGNsYXNzPSdjbHMtOCcgcG9pbnRzPScyNzIuMDYgMjQ2LjAxIDI3OC4zNCAxMzYuMjggMzA3LjI0IDU4LjEyIDE3OC44OCA1OC4xMiAyMDcuNDEgMTM2LjI4IDIxNC4wNiAyNDYuMDEgMjE2LjM0IDI4MC42MiAyMTYuNTMgMzY1LjgyIDI2OS4yMSAzNjUuODIgMjY5LjU5IDI4MC42MiAyNzIuMDYgMjQ2LjAxJy8+PC9zdmc+",
308
+ blockchains: ['ethereum', 'bsc', 'polygon', 'velas']
309
+ };}
310
+
311
+ static __initStatic2() {this.isAvailable = ()=>{ return _optionalChain$5([window, 'optionalAccess', _3 => _3.ethereum, 'optionalAccess', _4 => _4.isMetaMask]) };}
312
+ } MetaMask.__initStatic(); MetaMask.__initStatic2();
313
+
314
+ function _optionalChain$4(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
315
+ const POLL_SPEED = 500; // 0.5 seconds
316
+ const MAX_POLLS = 240; // 120 seconds
317
+
318
+ const sendTransaction$2 = async ({ transaction, wallet })=> {
319
+ transaction = new Transaction(transaction);
320
+ await transaction.prepare({ wallet });
321
+ await submit$2({ transaction, wallet }).then(({ signature })=>{
322
+ if(signature) {
323
+ transaction.id = signature;
324
+ transaction.url = Blockchain.findByName(transaction.blockchain).explorerUrlFor({ transaction });
325
+ if (transaction.sent) transaction.sent(transaction);
326
+
327
+ let count = 0;
328
+ const interval = setInterval(async ()=> {
329
+ count++;
330
+ if(count >= MAX_POLLS) { return clearInterval(interval) }
331
+
332
+ const provider = await getProvider(transaction.blockchain);
333
+ const { value } = await provider.getSignatureStatus(signature);
334
+ const confirmationStatus = _optionalChain$4([value, 'optionalAccess', _ => _.confirmationStatus]);
335
+ if(confirmationStatus) {
336
+ const hasReachedSufficientCommitment = confirmationStatus === 'confirmed' || confirmationStatus === 'finalized';
337
+ if (hasReachedSufficientCommitment) {
338
+ if(value.err) {
339
+ transaction._failed = true;
340
+ const confirmedTransaction = await provider.getConfirmedTransaction(signature);
341
+ const failedReason = _optionalChain$4([confirmedTransaction, 'optionalAccess', _2 => _2.meta, 'optionalAccess', _3 => _3.logMessages]) ? confirmedTransaction.meta.logMessages[confirmedTransaction.meta.logMessages.length - 1] : null;
342
+ if(transaction.failed) transaction.failed(transaction, failedReason);
343
+ } else {
344
+ transaction._succeeded = true;
345
+ if (transaction.succeeded) transaction.succeeded(transaction);
346
+ }
347
+ return clearInterval(interval)
348
+ }
349
+ }
350
+ }, POLL_SPEED);
351
+ } else {
352
+ throw('Submitting transaction failed!')
353
+ }
354
+ });
355
+ return transaction
356
+ };
357
+
358
+ const submit$2 = ({ transaction, wallet })=> {
359
+ if(transaction.instructions) {
360
+ return submitInstructions({ transaction, wallet })
361
+ } else {
362
+ return submitSimpleTransfer$2({ transaction, wallet })
363
+ }
364
+ };
365
+
366
+ const submitSimpleTransfer$2 = async ({ transaction, wallet })=> {
367
+ let fromPubkey = new PublicKey(await wallet.account());
368
+ let toPubkey = new PublicKey(transaction.to);
369
+ const provider = await getProvider(transaction.blockchain);
370
+ let recentBlockhash = (await provider.getLatestBlockhash()).blockhash;
371
+ let transferTransaction = new Transaction$1({
372
+ recentBlockhash,
373
+ feePayer: fromPubkey
374
+ });
375
+ transferTransaction.add(
376
+ SystemProgram.transfer({
377
+ fromPubkey,
378
+ toPubkey,
379
+ lamports: parseInt(Transaction.bigNumberify(transaction.value, transaction.blockchain), 10)
380
+ })
381
+ );
382
+ return window.solana.signAndSendTransaction(transferTransaction)
383
+ };
384
+
385
+ const submitInstructions = async ({ transaction, wallet })=> {
386
+ let fromPubkey = new PublicKey(await wallet.account());
387
+ const provider = await getProvider(transaction.blockchain);
388
+ let recentBlockhash = (await provider.getLatestBlockhash()).blockhash;
389
+ let transferTransaction = new Transaction$1({
390
+ recentBlockhash,
391
+ feePayer: fromPubkey
392
+ });
393
+ transaction.instructions.forEach((instruction)=>{
394
+ transferTransaction.add(instruction);
395
+ });
396
+
397
+ return window.solana.signAndSendTransaction(transferTransaction)
398
+ };
399
+
400
+ let supported$1 = ['ethereum', 'bsc', 'polygon', 'solana', 'velas'];
401
+ supported$1.evm = ['ethereum', 'bsc', 'polygon', 'velas'];
402
+ supported$1.solana = ['solana'];
403
+
404
+ function _optionalChain$3(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
405
+ class WindowSolana {
406
+
407
+ static __initStatic() {this.info = {
408
+ name: 'Wallet (Solana)',
409
+ logo: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA0NDYuNCAzNzYuOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDQ2LjQgMzc2Ljg7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojODI4NDg3O30KCS5zdDF7ZmlsbDp1cmwoI1NWR0lEXzFfKTt9Cgkuc3Qye2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDE2NTIzNDE5NTQ5NTc2MDU4MDgwMDAwMDAwNjMwMzAwNDA2OTM1MjExODk1MV8pO30KCS5zdDN7ZmlsbDp1cmwoI1NWR0lEXzAwMDAwMDkyNDIyMzgxNjc5OTg1OTI5MTcwMDAwMDA2ODU0NzIyMTYxOTE4MTIzNjUzXyk7fQo8L3N0eWxlPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMzgxLjcsMTEwLjJoNjQuN1Y0Ni41YzAtMjUuNy0yMC44LTQ2LjUtNDYuNS00Ni41SDQ2LjVDMjAuOCwwLDAsMjAuOCwwLDQ2LjV2NjUuMWgzNS43bDI2LjktMjYuOQoJYzEuNS0xLjUsMy42LTIuNSw1LjctMi43bDAsMGgwLjRoNzguNmM1LjMtMjUuNSwzMC4yLTQyLDU1LjctMzYuN2MyNS41LDUuMyw0MiwzMC4yLDM2LjcsNTUuN2MtMS42LDcuNS00LjksMTQuNi05LjgsMjAuNQoJYy0wLjksMS4xLTEuOSwyLjItMywzLjNjLTEuMSwxLjEtMi4yLDIuMS0zLjMsM2MtMjAuMSwxNi42LTQ5LjksMTMuOC02Ni41LTYuM2MtNC45LTUuOS04LjMtMTMtOS44LTIwLjZINzMuMmwtMjYuOSwyNi44CgljLTEuNSwxLjUtMy42LDIuNS01LjcsMi43bDAsMGgtMC40aC0wLjFoLTAuNUgwdjc0aDI4LjhsMTguMi0xOC4yYzEuNS0xLjYsMy42LTIuNSw1LjctMi43bDAsMGgwLjRoMjkuOQoJYzUuMi0yNS41LDMwLjItNDEuOSw1NS43LTM2LjdzNDEuOSwzMC4yLDM2LjcsNTUuN3MtMzAuMiw0MS45LTU1LjcsMzYuN2MtMTguNS0zLjgtMzIuOS0xOC4yLTM2LjctMzYuN0g1Ny43bC0xOC4yLDE4LjMKCWMtMS41LDEuNS0zLjYsMi41LTUuNywyLjdsMCwwaC0wLjRIMHYzNC4yaDU2LjNjMC4yLDAsMC4zLDAsMC41LDBoMC4xaDAuNGwwLDBjMi4yLDAuMiw0LjIsMS4yLDUuOCwyLjhsMjgsMjhoNTcuNwoJYzUuMy0yNS41LDMwLjItNDIsNTUuNy0zNi43czQyLDMwLjIsMzYuNyw1NS43Yy0xLjcsOC4xLTUuNSwxNS43LTExLDIxLjljLTAuNiwwLjctMS4yLDEuMy0xLjksMnMtMS4zLDEuMy0yLDEuOQoJYy0xOS41LDE3LjMtNDkuMywxNS42LTY2LjctMy45Yy01LjUtNi4yLTkuMy0xMy43LTExLTIxLjlIODcuMWMtMS4xLDAtMi4xLTAuMi0zLjEtMC41aC0wLjFsLTAuMy0wLjFsLTAuMi0wLjFsLTAuMi0wLjFsLTAuMy0wLjEKCWgtMC4xYy0wLjktMC41LTEuOC0xLjEtMi42LTEuOGwtMjgtMjhIMHY1My41YzAuMSwyNS43LDIwLjksNDYuNCw0Ni41LDQ2LjRoMzUzLjNjMjUuNywwLDQ2LjUtMjAuOCw0Ni41LTQ2LjV2LTYzLjZoLTY0LjcKCWMtNDMuMiwwLTc4LjItMzUtNzguMi03OC4ybDAsMEMzMDMuNSwxNDUuMiwzMzguNSwxMTAuMiwzODEuNywxMTAuMnoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTIyMC45LDI5OC4xYzAtMTQuNC0xMS42LTI2LTI2LTI2cy0yNiwxMS42LTI2LDI2czExLjYsMjYsMjYsMjZTMjIwLjksMzEyLjQsMjIwLjksMjk4LjFMMjIwLjksMjk4LjF6Ii8+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMTkuNiw5MS41YzAtMTQuNC0xMS42LTI2LTI2LTI2cy0yNiwxMS42LTI2LDI2czExLjYsMjYsMjYsMjZTMjE5LjYsMTA1LjgsMjE5LjYsOTEuNXoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTM4Mi4yLDEyOC44aC0wLjVjLTMyLjksMC01OS42LDI2LjctNTkuNiw1OS42bDAsMGwwLDBjMCwzMi45LDI2LjcsNTkuNiw1OS42LDU5LjZsMCwwaDAuNQoJYzMyLjksMCw1OS42LTI2LjcsNTkuNi01OS42bDAsMEM0NDEuOCwxNTUuNCw0MTUuMSwxMjguOCwzODIuMiwxMjguOHogTTM5Ni42LDIxOS40aC0zMWw4LjktMzIuNWMtNy43LTMuNy0xMS0xMi45LTcuNC0yMC42CgljMy43LTcuNywxMi45LTExLDIwLjYtNy40YzcuNywzLjcsMTEsMTIuOSw3LjQsMjAuNmMtMS41LDMuMi00LjEsNS44LTcuNCw3LjRMMzk2LjYsMjE5LjR6Ii8+CjxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMV8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTQ5LjAwNzciIHkxPSIxMzkuMzA5MyIgeDI9IjEyMi4xMjMxIiB5Mj0iMTkwLjgwNDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMSAwIDMwLjUzNTQpIj4KCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiMwMEZGQTMiLz4KCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQzFGRkYiLz4KPC9saW5lYXJHcmFkaWVudD4KPHBhdGggY2xhc3M9InN0MSIgZD0iTTExMi43LDIwMy41YzAuMy0wLjMsMC43LTAuNSwxLjEtMC41aDM4LjhjMC43LDAsMS4xLDAuOSwwLjYsMS40bC03LjcsNy43Yy0wLjMsMC4zLTAuNywwLjUtMS4xLDAuNWgtMzguOAoJYy0wLjcsMC0xLjEtMC45LTAuNi0xLjRMMTEyLjcsMjAzLjV6Ii8+CjxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMDAwMDAxNzUzMTAwMjIwMDgyNTMzODQyNTAwMDAwMTEwOTY3OTQyODQ4NDUzNDEzNTVfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjEzNy4yNTMzIiB5MT0iMTMzLjE3MjUiIHgyPSIxMTAuMzY4NyIgeTI9IjE4NC42Njc0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMCAzMC41MzU0KSI+Cgk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojMDBGRkEzIi8+Cgk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojREMxRkZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjxwYXRoIHN0eWxlPSJmaWxsOnVybCgjU1ZHSURfMDAwMDAxNzUzMTAwMjIwMDgyNTMzODQyNTAwMDAwMTEwOTY3OTQyODQ4NDUzNDEzNTVfKTsiIGQ9Ik0xMTIuNywxNzQuOWMwLjMtMC4zLDAuNy0wLjUsMS4xLTAuNWgzOC44CgljMC43LDAsMS4xLDAuOSwwLjYsMS40bC03LjcsNy43Yy0wLjMsMC4zLTAuNywwLjUtMS4xLDAuNWgtMzguOGMtMC43LDAtMS4xLTAuOS0wLjYtMS40TDExMi43LDE3NC45eiIvPgo8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzAwMDAwMDIyNTU3MTYwNTg5MTY1MTU3NTIwMDAwMDE1NDYyNjI0Mjk4Nzk4NTYzMjYxXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxNDMuMDkyOSIgeTE9IjEzNi4yMjEyIiB4Mj0iMTE2LjIwODIiIHkyPSIxODcuNzE2MiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDAgMzAuNTM1NCkiPgoJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzAwRkZBMyIvPgoJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0RDMUZGRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8cGF0aCBzdHlsZT0iZmlsbDp1cmwoI1NWR0lEXzAwMDAwMDIyNTU3MTYwNTg5MTY1MTU3NTIwMDAwMDE1NDYyNjI0Mjk4Nzk4NTYzMjYxXyk7IiBkPSJNMTQ1LjYsMTg5LjFjLTAuMy0wLjMtMC43LTAuNS0xLjEtMC41CgloLTM4LjhjLTAuNywwLTEuMSwwLjktMC42LDEuNGw3LjcsNy43YzAuMywwLjMsMC43LDAuNSwxLjEsMC41aDM4LjhjMC43LDAsMS4xLTAuOSwwLjYtMS40TDE0NS42LDE4OS4xeiIvPgo8L3N2Zz4K',
410
+ blockchains: supported$1.solana
411
+ };}
412
+
413
+ static __initStatic2() {this.isAvailable = ()=>{
414
+ return (
415
+ _optionalChain$3([window, 'optionalAccess', _4 => _4.solana]) &&
416
+ !_optionalChain$3([window, 'optionalAccess', _5 => _5.solana, 'optionalAccess', _6 => _6.isPhantom])
417
+ )
418
+ };}
419
+
420
+ constructor () {
421
+ this.name = this.constructor.info.name;
422
+ this.logo = this.constructor.info.logo;
423
+ this.blockchains = this.constructor.info.blockchains;
424
+ this.sendTransaction = (transaction)=>{
425
+ return sendTransaction$2({
426
+ wallet: this,
427
+ transaction
428
+ })
429
+ };
430
+ }
431
+
432
+ async account() {
433
+ if(_optionalChain$3([window, 'optionalAccess', _7 => _7.solana, 'optionalAccess', _8 => _8.publicKey])) {return window.solana.publicKey.toString() }
434
+ if(_optionalChain$3([window, 'optionalAccess', _9 => _9.solana]) == undefined){ return }
435
+ let { publicKey } = await window.solana.connect({ onlyIfTrusted: true });
436
+ if(publicKey){ return publicKey.toString() }
437
+ }
438
+
439
+ async connect() {
440
+ if(!_optionalChain$3([window, 'optionalAccess', _10 => _10.solana])) { return undefined }
441
+ let { publicKey } = await window.solana.connect();
442
+ return publicKey.toString()
443
+ }
444
+
445
+ on(event, callback) {
446
+ let internalCallback;
447
+ switch (event) {
448
+ case 'account':
449
+ internalCallback = (publicKey) => callback(_optionalChain$3([publicKey, 'optionalAccess', _11 => _11.toString, 'call', _12 => _12()]));
450
+ window.solana.on('accountChanged', internalCallback);
451
+ break
452
+ }
453
+ return internalCallback
454
+ }
455
+
456
+ off(event, internalCallback) {
457
+ switch (event) {
458
+ case 'account':
459
+ console.log('removeListener');
460
+ window.solana.removeListener('accountChanged', internalCallback);
461
+ break
462
+ }
463
+ return internalCallback
464
+ }
465
+
466
+ async connectedTo(input) {
467
+ return input == 'solana'
468
+ }
469
+
470
+ switchTo(blockchainName) {
471
+ return new Promise((resolve, reject)=>{
472
+ reject({ code: 'NOT_SUPPORTED' });
473
+ })
474
+ }
475
+
476
+ addNetwork(blockchainName) {
477
+ return new Promise((resolve, reject)=>{
478
+ reject({ code: 'NOT_SUPPORTED' });
479
+ })
480
+ }
481
+
482
+ async sign(message) {
483
+ const encodedMessage = new TextEncoder().encode(message);
484
+ const signedMessage = await window.solana.signMessage(encodedMessage, "utf8");
485
+ return JSON.stringify(signedMessage.signature)
486
+ }
487
+ } WindowSolana.__initStatic(); WindowSolana.__initStatic2();
488
+
489
+ function _optionalChain$2(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
490
+ class Phantom extends WindowSolana {
491
+
492
+ static __initStatic() {this.info = {
493
+ name: 'Phantom',
494
+ logo: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBjeD0iNjQiIGN5PSI2NCIgcj0iNjQiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcikiLz48cGF0aCBkPSJNMTEwLjU4NCA2NC45MTQySDk5LjE0MkM5OS4xNDIgNDEuNzY1MSA4MC4xNzMgMjMgNTYuNzcyNCAyM0MzMy42NjEyIDIzIDE0Ljg3MTYgNDEuMzA1NyAxNC40MTE4IDY0LjA1ODNDMTMuOTM2IDg3LjU3NyAzNi4yNDEgMTA4IDYwLjAxODYgMTA4SDYzLjAwOTRDODMuOTcyMyAxMDggMTEyLjA2OSA5MS43NjY3IDExNi40NTkgNzEuOTg3NEMxMTcuMjcgNjguMzQxMyAxMTQuMzU4IDY0LjkxNDIgMTEwLjU4NCA2NC45MTQyWk0zOS43Njg5IDY1Ljk0NTRDMzkuNzY4OSA2OS4wNDExIDM3LjIwOTUgNzEuNTcyOSAzNC4wODAyIDcxLjU3MjlDMzAuOTUwOSA3MS41NzI5IDI4LjM5MTYgNjkuMDM5OSAyOC4zOTE2IDY1Ljk0NTRWNTYuODQxNEMyOC4zOTE2IDUzLjc0NTcgMzAuOTUwOSA1MS4yMTM5IDM0LjA4MDIgNTEuMjEzOUMzNy4yMDk1IDUxLjIxMzkgMzkuNzY4OSA1My43NDU3IDM5Ljc2ODkgNTYuODQxNFY2NS45NDU0Wk01OS41MjI0IDY1Ljk0NTRDNTkuNTIyNCA2OS4wNDExIDU2Ljk2MzEgNzEuNTcyOSA1My44MzM4IDcxLjU3MjlDNTAuNzA0NSA3MS41NzI5IDQ4LjE0NTEgNjkuMDM5OSA0OC4xNDUxIDY1Ljk0NTRWNTYuODQxNEM0OC4xNDUxIDUzLjc0NTcgNTAuNzA1NiA1MS4yMTM5IDUzLjgzMzggNTEuMjEzOUM1Ni45NjMxIDUxLjIxMzkgNTkuNTIyNCA1My43NDU3IDU5LjUyMjQgNTYuODQxNFY2NS45NDU0WiIgZmlsbD0idXJsKCNwYWludDFfbGluZWFyKSIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhciIgeDE9IjY0IiB5MT0iMCIgeDI9IjY0IiB5Mj0iMTI4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzUzNEJCMSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzU1MUJGOSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJwYWludDFfbGluZWFyIiB4MT0iNjUuNDk5OCIgeTE9IjIzIiB4Mj0iNjUuNDk5OCIgeTI9IjEwOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IndoaXRlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwLjgyIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PC9zdmc+Cg=',
495
+ blockchains: supported$1.solana
496
+ };}
497
+
498
+ static __initStatic2() {this.isAvailable = ()=>{ return _optionalChain$2([window, 'optionalAccess', _3 => _3.solana, 'optionalAccess', _4 => _4.isPhantom]) };}
499
+ } Phantom.__initStatic(); Phantom.__initStatic2();
500
+
501
+ function _optionalChain$1(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
502
+ const sendTransaction$1 = async ({ transaction, wallet })=> {
503
+ transaction = new Transaction(transaction);
504
+ await transaction.prepare({ wallet });
505
+ if((await wallet.connectedTo(transaction.blockchain)) == false) {
506
+ throw({ code: 'WRONG_NETWORK' })
507
+ }
508
+ await submit$1({ transaction, wallet }).then(async (tx)=>{
509
+ if (tx) {
510
+ let blockchain = Blockchain.findByName(transaction.blockchain);
511
+ transaction.id = tx;
512
+ transaction.url = blockchain.explorerUrlFor({ transaction });
513
+ if (transaction.sent) transaction.sent(transaction);
514
+ let sentTransaction = await retrieveTransaction(tx, transaction.blockchain);
515
+ transaction.nonce = sentTransaction.nonce;
516
+ if(!sentTransaction) {
517
+ transaction._failed = true;
518
+ console.log('Error retrieving transaction');
519
+ if(transaction.failed) transaction.failed(transaction, 'Error retrieving transaction');
520
+ } else {
521
+ sentTransaction.wait(1).then(() => {
522
+ transaction._succeeded = true;
523
+ if (transaction.succeeded) transaction.succeeded(transaction);
524
+ }).catch((error)=>{
525
+ if(error && error.code && error.code == 'TRANSACTION_REPLACED') {
526
+ if(error.replacement && error.replacement.hash && error.receipt && error.receipt.status == 1) {
527
+ transaction.id = error.replacement.hash;
528
+ transaction._succeeded = true;
529
+ if (transaction.succeeded) transaction.succeeded(transaction);
530
+ } else if(error.replacement && error.replacement.hash && error.receipt && error.receipt.status == 0) {
531
+ transaction.id = error.replacement.hash;
532
+ transaction._failed = true;
533
+ if(transaction.failed) transaction.failed(transaction, error);
534
+ }
535
+ } else {
536
+ transaction._failed = true;
537
+ if(transaction.failed) transaction.failed(transaction, error);
538
+ }
539
+ });
540
+ }
541
+ } else {
542
+ throw('Submitting transaction failed!')
543
+ }
544
+ });
545
+ return transaction
546
+ };
547
+
548
+ const retrieveTransaction = async (tx, blockchain)=>{
549
+ let sentTransaction;
550
+ const provider = await getProvider(blockchain);
551
+ sentTransaction = await provider.getTransaction(tx);
552
+ const maxRetries = 120;
553
+ let attempt = 1;
554
+ while (attempt <= maxRetries && !sentTransaction) {
555
+ sentTransaction = await provider.getTransaction(tx);
556
+ await (new Promise((resolve)=>setTimeout(resolve, 5000)));
557
+ attempt++;
558
+ }
559
+ return sentTransaction
560
+ };
561
+
562
+ const submit$1 = ({ transaction, wallet }) => {
563
+ if(transaction.method) {
564
+ return submitContractInteraction$1({ transaction, wallet })
565
+ } else {
566
+ return submitSimpleTransfer$1({ transaction, wallet })
567
+ }
568
+ };
569
+
570
+ const submitContractInteraction$1 = async ({ transaction, wallet })=>{
571
+ const provider = await getProvider(transaction.blockchain);
572
+ return wallet.connector.sendTransaction({
573
+ from: transaction.from,
574
+ to: transaction.to,
575
+ value: _optionalChain$1([transaction, 'access', _ => _.value, 'optionalAccess', _2 => _2.toString, 'call', _3 => _3()]),
576
+ data: await transaction.getData(),
577
+ gas: (await estimate(transaction)).toString(),
578
+ gasPrice: (await provider.getGasPrice()).toString()
579
+ })
580
+ };
581
+
582
+ const submitSimpleTransfer$1 = async ({ transaction, wallet })=>{
583
+ const provider = await getProvider(transaction.blockchain);
584
+ return wallet.connector.sendTransaction({
585
+ from: transaction.from,
586
+ to: transaction.to,
587
+ value: _optionalChain$1([transaction, 'access', _4 => _4.value, 'optionalAccess', _5 => _5.toString, 'call', _6 => _6()]),
588
+ gas: (await estimate(transaction)).toString(),
589
+ gasPrice: (await provider.getGasPrice()).toString()
590
+ })
591
+ };
592
+
593
+ function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
594
+ const getConnectedInstance$1 = ()=>{
595
+ return window._connectedWalletConnectInstance
596
+ };
597
+
598
+ const setConnectedInstance$1 = (value)=>{
599
+ window._connectedWalletConnectInstance = value;
600
+ };
601
+
602
+ class WalletConnect {
603
+
604
+ static __initStatic() {this.info = {
605
+ name: 'WalletConnect',
606
+ logo: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnPz48IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMjUuNC4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAtLT48c3ZnIHZlcnNpb249JzEuMScgaWQ9J0xheWVyXzEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyB2aWV3Qm94PScwIDAgNTAwIDUwMCcgc3R5bGU9J2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAwIDUwMDsnIHhtbDpzcGFjZT0ncHJlc2VydmUnPjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+IC5zdDB7ZmlsbDojNTk5MUNEO30KPC9zdHlsZT48ZyBpZD0nUGFnZS0xJz48ZyBpZD0nd2FsbGV0Y29ubmVjdC1sb2dvLWFsdCc+PHBhdGggaWQ9J1dhbGxldENvbm5lY3QnIGNsYXNzPSdzdDAnIGQ9J00xMDIuNywxNjJjODEuNS03OS44LDIxMy42LTc5LjgsMjk1LjEsMGw5LjgsOS42YzQuMSw0LDQuMSwxMC41LDAsMTQuNEwzNzQsMjE4LjkgYy0yLDItNS4zLDItNy40LDBsLTEzLjUtMTMuMmMtNTYuOC01NS43LTE0OS01NS43LTIwNS44LDBsLTE0LjUsMTQuMWMtMiwyLTUuMywyLTcuNCwwTDkxLjksMTg3Yy00LjEtNC00LjEtMTAuNSwwLTE0LjQgTDEwMi43LDE2MnogTTQ2Ny4xLDIyOS45bDI5LjksMjkuMmM0LjEsNCw0LjEsMTAuNSwwLDE0LjRMMzYyLjMsNDA1LjRjLTQuMSw0LTEwLjcsNC0xNC44LDBjMCwwLDAsMCwwLDBMMjUyLDMxMS45IGMtMS0xLTIuNy0xLTMuNywwaDBsLTk1LjUsOTMuNWMtNC4xLDQtMTAuNyw0LTE0LjgsMGMwLDAsMCwwLDAsMEwzLjQsMjczLjZjLTQuMS00LTQuMS0xMC41LDAtMTQuNGwyOS45LTI5LjIgYzQuMS00LDEwLjctNCwxNC44LDBsOTUuNSw5My41YzEsMSwyLjcsMSwzLjcsMGMwLDAsMCwwLDAsMGw5NS41LTkzLjVjNC4xLTQsMTAuNy00LDE0LjgsMGMwLDAsMCwwLDAsMGw5NS41LDkzLjUgYzEsMSwyLjcsMSwzLjcsMGw5NS41LTkzLjVDNDU2LjQsMjI1LjksNDYzLDIyNS45LDQ2Ny4xLDIyOS45eicvPjwvZz48L2c+PC9zdmc+Cg==",
607
+ blockchains: ['ethereum', 'bsc', 'polygon', 'velas']
608
+ };}
609
+
610
+ static __initStatic2() {this.isAvailable = ()=>{
611
+ return getConnectedInstance$1() != undefined
612
+ };}
613
+
614
+ constructor() {
615
+ this.name = this.constructor.info.name;
616
+ this.logo = this.constructor.info.logo;
617
+ this.blockchains = this.constructor.info.blockchains;
618
+ this.connector = WalletConnect.instance || this.newWalletConnectInstance();
619
+ this.sendTransaction = (transaction)=>{
620
+ return sendTransaction$1({
621
+ wallet: this,
622
+ transaction
623
+ })
624
+ };
625
+ }
626
+
627
+ newWalletConnectInstance() {
628
+ let instance = new WalletConnectClient({
629
+ bridge: "https://bridge.walletconnect.org",
630
+ qrcodeModal: QRCodeModal
631
+ });
632
+
633
+ instance.on("connect", (error, payload) => {
634
+ if (error) { throw error }
635
+ const { accounts, chainId } = payload.params[0];
636
+ this.connectedAccounts = accounts;
637
+ this.connectedChainId = chainId;
638
+ });
639
+
640
+ instance.on("session_update", (error, payload) => {
641
+ if (error) { throw error }
642
+ const { accounts, chainId } = payload.params[0];
643
+ this.connectedAccounts = accounts;
644
+ this.connectedChainId = chainId;
645
+ });
646
+
647
+ instance.on("disconnect", (error, payload) => {
648
+ setConnectedInstance$1(undefined);
649
+ if (error) { throw error }
650
+ });
651
+
652
+ instance.on("modal_closed", ()=>{
653
+ setConnectedInstance$1(undefined);
654
+ this.connector = undefined;
655
+ });
656
+
657
+ return instance
658
+ }
659
+
660
+ async account() {
661
+ if(this.connectedAccounts == undefined) { return }
662
+ return this.connectedAccounts[0]
663
+ }
664
+
665
+ async connect(options) {
666
+ try {
667
+ window.localStorage.removeItem('walletconnect'); // https://github.com/WalletConnect/walletconnect-monorepo/issues/315
668
+
669
+ if(this.connector == undefined){
670
+ this.connector = this.newWalletConnectInstance();
671
+ }
672
+
673
+ if(this.connector.connected) {
674
+ await this.connector.killSession();
675
+ setConnectedInstance$1(undefined);
676
+ this.connector = this.newWalletConnectInstance();
677
+ }
678
+
679
+ const { accounts, chainId } = await this.connector.connect({ chainId: _optionalChain([options, 'optionalAccess', _ => _.chainId]) });
680
+
681
+ if(accounts instanceof Array && accounts.length) {
682
+ setConnectedInstance$1(this);
683
+ }
684
+
685
+ this.connectedAccounts = accounts;
686
+ this.connectedChainId = chainId;
687
+
688
+ return accounts[0]
689
+ } catch (error) {
690
+ console.log('WALLETCONNECT ERROR', error);
691
+ return undefined
692
+ }
693
+ }
694
+
695
+ async connectedTo(input) {
696
+ let chainId = await this.connector.sendCustomRequest({ method: 'eth_chainId' });
697
+ const blockchain = Blockchain.findById(chainId);
698
+ if(input) {
699
+ return input === blockchain.name
700
+ } else {
701
+ return blockchain.name
702
+ }
703
+ }
704
+
705
+ switchTo(blockchainName) {
706
+ return new Promise((resolve, reject)=>{
707
+ reject({ code: 'NOT_SUPPORTED' });
708
+ })
709
+ }
710
+
711
+ addNetwork(blockchainName) {
712
+ return new Promise((resolve, reject)=>{
713
+ reject({ code: 'NOT_SUPPORTED' });
714
+ })
715
+ }
716
+
717
+ on(event, callback) {
718
+ let internalCallback;
719
+ switch (event) {
720
+ case 'account':
721
+ internalCallback = (error, payload) => {
722
+ const { accounts } = payload.params[0];
723
+ if(accounts instanceof Array) { callback(accounts[0]); }
724
+ };
725
+ this.connector.on("session_update", internalCallback);
726
+ break
727
+ }
728
+ return internalCallback
729
+ }
730
+
731
+ off(event, callback) {
732
+ switch (event) {
733
+ case 'account':
734
+ this.connector.off("session_update");
735
+ break
736
+ }
737
+ }
738
+
739
+ async sign(message) {
740
+ let address = await this.account();
741
+ var params = [ethers.utils.toUtf8Bytes(message), address];
742
+ let signature = await this.connector.signPersonalMessage(params);
743
+ return signature
744
+ }
745
+ } WalletConnect.__initStatic(); WalletConnect.__initStatic2();
746
+
747
+ WalletConnect.getConnectedInstance = getConnectedInstance$1;
748
+ WalletConnect.setConnectedInstance = setConnectedInstance$1;
749
+
750
+ const sendTransaction = async ({ transaction, wallet })=> {
751
+ transaction = new Transaction(transaction);
752
+ if((await wallet.connectedTo(transaction.blockchain)) == false) {
753
+ await wallet.switchTo(transaction.blockchain);
754
+ }
755
+ await transaction.prepare({ wallet });
756
+ let provider = new ethers.providers.Web3Provider(wallet.connector, 'any');
757
+ let signer = provider.getSigner(0);
758
+ await submit({ transaction, provider, signer }).then((sentTransaction)=>{
759
+ if (sentTransaction) {
760
+ transaction.id = sentTransaction.hash;
761
+ transaction.nonce = sentTransaction.nonce;
762
+ transaction.url = Blockchain.findByName(transaction.blockchain).explorerUrlFor({ transaction });
763
+ if (transaction.sent) transaction.sent(transaction);
764
+ sentTransaction.wait(1).then(() => {
765
+ transaction._succeeded = true;
766
+ if (transaction.succeeded) transaction.succeeded(transaction);
767
+ }).catch((error)=>{
768
+ if(error && error.code && error.code == 'TRANSACTION_REPLACED') {
769
+ if(error.replacement && error.replacement.hash) {
770
+ transaction.id = error.replacement.hash;
771
+ transaction.url = Blockchain.findByName(transaction.blockchain).explorerUrlFor({ transaction });
772
+ }
773
+ if(error.replacement && error.replacement.hash && error.receipt && error.receipt.status == 1) {
774
+ transaction._succeeded = true;
775
+ if (transaction.succeeded) transaction.succeeded(transaction);
776
+ } else if(error.replacement && error.replacement.hash && error.receipt && error.receipt.status == 0) {
777
+ transaction._failed = true;
778
+ if(transaction.failed) transaction.failed(transaction, error);
779
+ }
780
+ } else {
781
+ transaction._failed = true;
782
+ if(transaction.failed) transaction.failed(transaction, error);
783
+ }
784
+ });
785
+ } else {
786
+ throw('Submitting transaction failed!')
787
+ }
788
+ });
789
+ return transaction
790
+ };
791
+
792
+ const submit = ({ transaction, provider, signer }) => {
793
+ if(transaction.method) {
794
+ return submitContractInteraction({ transaction, signer, provider })
795
+ } else {
796
+ return submitSimpleTransfer({ transaction, signer })
797
+ }
798
+ };
799
+
800
+ const submitContractInteraction = ({ transaction, signer, provider })=>{
801
+ let contract = new ethers.Contract(transaction.to, transaction.api, provider);
802
+ return contract
803
+ .connect(signer)
804
+ [transaction.method](...transaction.getContractArguments({ contract }), {
805
+ value: Transaction.bigNumberify(transaction.value, transaction.blockchain)
806
+ })
807
+ };
808
+
809
+ const submitSimpleTransfer = ({ transaction, signer })=>{
810
+ return signer.sendTransaction({
811
+ to: transaction.to,
812
+ value: Transaction.bigNumberify(transaction.value, transaction.blockchain)
813
+ })
814
+ };
815
+
816
+ const getConnectedInstance = ()=>{
817
+ return window._connectedWalletLinkInstance
818
+ };
819
+
820
+ const setConnectedInstance = (value)=>{
821
+ window._connectedWalletLinkInstance = value;
822
+ };
823
+
824
+ class WalletLink {
825
+
826
+ static __initStatic() {this.info = {
827
+ name: 'Coinbase',
828
+ logo: Coinbase.info.logo,
829
+ blockchains: ['ethereum', 'bsc', 'polygon', 'velas'],
830
+ };}
831
+
832
+ static __initStatic2() {this.isAvailable = ()=>{ return getConnectedInstance() != undefined };}
833
+
834
+ constructor() {
835
+ this.name = this.constructor.info.name;
836
+ this.logo = this.constructor.info.logo;
837
+ this.blockchains = this.constructor.info.blockchains;
838
+ this.connector = WalletLink.instance || this.newWalletLinkInstance();
839
+ this.sendTransaction = (transaction)=>{
840
+ return sendTransaction({
841
+ wallet: this,
842
+ transaction
843
+ })
844
+ };
845
+ }
846
+
847
+ newWalletLinkInstance() {
848
+ let instance = new CoinbaseWalletSDK({}).makeWeb3Provider();
849
+ return instance
850
+ }
851
+
852
+ async account() {
853
+ if(this.connectedAccounts == undefined) { return }
854
+ return this.connectedAccounts[0]
855
+ }
856
+
857
+ async connect(options) {
858
+ let relay = await this.connector._relayProvider();
859
+ relay.setConnectDisabled(false);
860
+ let accounts = await this.connector.enable();
861
+ if(accounts instanceof Array && accounts.length) {
862
+ setConnectedInstance(this);
863
+ }
864
+ this.connectedAccounts = accounts;
865
+ this.connectedChainId = await this.connector.getChainId();
866
+ return accounts[0]
867
+ }
868
+
869
+ async connectedTo(input) {
870
+ let chainId = await this.connector.getChainId();
871
+ const blockchain = Blockchain.findByNetworkId(chainId);
872
+ if(input) {
873
+ return input === blockchain.name
874
+ } else {
875
+ return blockchain.name
876
+ }
877
+ }
878
+
879
+ switchTo(blockchainName) {
880
+ return new Promise((resolve, reject)=>{
881
+ const blockchain = Blockchain.findByName(blockchainName);
882
+ this.connector.request({
883
+ method: 'wallet_switchEthereumChain',
884
+ params: [{ chainId: blockchain.id }],
885
+ }).then(resolve).catch((error)=> {
886
+ if(error.code === 4902){ // chain not yet added
887
+ this.addNetwork(blockchainName)
888
+ .then(()=>this.switchTo(blockchainName).then(resolve))
889
+ .catch(reject);
890
+ } else {
891
+ reject(error);
892
+ }
893
+ });
894
+ })
895
+ }
896
+
897
+ addNetwork(blockchainName) {
898
+ return new Promise((resolve, reject)=>{
899
+ const blockchain = Blockchain.findByName(blockchainName);
900
+ this.connector.request({
901
+ method: 'wallet_addEthereumChain',
902
+ params: [{
903
+ chainId: blockchain.id,
904
+ chainName: blockchain.fullName,
905
+ nativeCurrency: {
906
+ name: blockchain.currency.name,
907
+ symbol: blockchain.currency.symbol,
908
+ decimals: blockchain.currency.decimals
909
+ },
910
+ rpcUrls: [blockchain.rpc],
911
+ blockExplorerUrls: [blockchain.explorer],
912
+ iconUrls: [blockchain.logo]
913
+ }],
914
+ }).then(resolve).catch(reject);
915
+ })
916
+ }
917
+
918
+ on(event, callback) {
919
+ let internalCallback;
920
+ switch (event) {
921
+ case 'account':
922
+ internalCallback = (accounts) => callback(accounts[0]);
923
+ this.connector.on('accountsChanged', internalCallback);
924
+ break
925
+ }
926
+ return internalCallback
927
+ }
928
+
929
+ off(event, internalCallback) {
930
+ switch (event) {
931
+ case 'account':
932
+ this.connector.removeListener('accountsChanged', internalCallback);
933
+ break
934
+ }
935
+ return internalCallback
936
+ }
937
+
938
+ async sign(message) {
939
+ await this.account();
940
+ let provider = new ethers.providers.Web3Provider(this.connector, 'any');
941
+ let signer = provider.getSigner(0);
942
+ let signature = await signer.signMessage(message);
943
+ return signature
944
+ }
945
+ } WalletLink.__initStatic(); WalletLink.__initStatic2();
946
+
947
+ WalletLink.getConnectedInstance = getConnectedInstance;
948
+ WalletLink.setConnectedInstance = setConnectedInstance;
949
+
950
+ var wallets = {
951
+ MetaMask,
952
+ Phantom,
953
+ Coinbase,
954
+ WindowEthereum,
955
+ WindowSolana,
956
+ WalletConnect,
957
+ WalletLink
958
+ };
959
+
960
+ let instances = {};
961
+
962
+ const getWallets = ()=>{
963
+ let availableWallets = [];
964
+
965
+ Object.keys(wallets).forEach((key)=>{
966
+ let wallet = wallets[key];
967
+ if(wallet.isAvailable()) {
968
+ if(!instances[wallet]) {
969
+ if(wallet.getConnectedInstance && wallet.getConnectedInstance()) {
970
+ instances[wallet] = wallet.getConnectedInstance();
971
+ } else {
972
+ instances[wallet] = new wallet;
973
+ }
974
+ }
975
+ availableWallets.push(instances[wallet]);
976
+ }
977
+ });
978
+
979
+ return availableWallets
980
+ };
981
+
982
+ const supported = [
983
+ wallets.MetaMask,
984
+ wallets.Phantom,
985
+ wallets.Coinbase,
986
+ wallets.WalletConnect,
987
+ wallets.WalletLink
988
+ ];
989
+
990
+ export { getWallets, supported, wallets };