@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.
- package/README.md +8 -0
- package/dist/esm/index.evm.js +11 -21902
- package/dist/esm/index.js +990 -0
- package/dist/umd/index.evm.js +801 -22696
- package/dist/umd/index.js +994 -0
- package/package.json +5 -47
|
@@ -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 };
|