-
Notifications
You must be signed in to change notification settings - Fork 15
/
initWeb3.ts
150 lines (139 loc) · 3.83 KB
/
initWeb3.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import Web3 from "web3"
// @ts-ignore
// const ProviderEngine = require("web3-provider-engine")
import ProviderEngine from "web3-provider-engine"
// @ts-ignore
// const RpcSubprovider = require("web3-provider-engine/subproviders/rpc")
import TransportU2F from "@ledgerhq/hw-transport-u2f"
import createLedgerSubprovider from "@ledgerhq/web3-subprovider"
import FetchSubprovider from "web3-provider-engine/subproviders/fetch"
export const connectToMetamask = async () => {
let web3js
// @ts-ignore
if (window.ethereum) {
// @ts-ignore
window.web3 = new Web3(ethereum)
// @ts-ignore
web3js = new Web3(ethereum)
// @ts-ignore
await ethereum.enable()
// @ts-ignore
} else if (window.web3) {
// @ts-ignore
window.web3 = new Web3(window.web3.currentProvider)
// @ts-ignore
web3js = new Web3(window.web3.currentProvider)
} else {
throw new Error("Metamask is not Enabled")
}
if (web3js) {
return web3js
}
}
export function initWeb3Hardware(): Promise<Web3> {
return new Promise(async (resolve, reject) => {
const engine = new ProviderEngine()
const getTransport = () => TransportU2F.create()
const ledger = createLedgerSubprovider(getTransport, {
networkId: 1,
accountsLength: 5,
})
ledger.getAccounts = () => ["123"]
ledger.signMessage = ledger.signPersonalMessage
engine.addProvider(ledger)
engine.addProvider(
new FetchSubprovider({
rpcUrl: "https://mainnet.infura.io/5Ic91y0T9nLh6qUg33K0",
}),
)
engine.start()
resolve(new Web3(engine))
})
}
/**
*
* @param {*} path
*/
export const initWeb3SelectedWallet = (path) => {
return new Promise(async (resolve, reject) => {
const engine = new ProviderEngine()
const getTransport = () => TransportU2F.create()
const ledger = createLedgerSubprovider(getTransport, {
networkId: 1,
// maybe we only need 1 now that we solved this
accountsLength: 5,
path,
})
ledger.signMessage = ledger.signPersonalMessage
engine.addProvider(ledger)
engine.addProvider(
new FetchSubprovider({
rpcUrl: "https://mainnet.infura.io/5Ic91y0T9nLh6qUg33K0",
}),
)
engine.start()
resolve(new Web3(engine))
})
}
/**
*
* @param {*} path
*/
export const initWeb3SelectedWalletBeta = (path) => {
return new Promise<any[]>(async (resolve, reject) => {
const engine = new ProviderEngine()
const getTransport = () => TransportU2F.create()
const ledger = createLedgerSubprovider(getTransport, {
networkId: 1,
accountsLength: 10,
path,
})
const accounts = ledger.getAccounts((err, val) => {
if (err) reject(err)
resolve(val)
})
})
}
export function initWeb3() {
return new Promise<Web3>(async (resolve, reject) => {
let myWeb3: Web3
if ("ethereum" in window) {
// @ts-ignore
myWeb3 = new Web3(ethereum)
try {
// @ts-ignore
await ethereum.enable()
} catch (err) {
reject("User denied access to Metamask")
}
} else if ("web3" in window) {
// @ts-ignore
myWeb3 = new Web3(window.web3.currentProvider)
} else {
return reject("no Metamask installation detected")
}
// @ts-ignore
window.web3 = myWeb3
resolve(myWeb3)
})
}
// export const init2 = async () => {
// let web3js
// if (window.ethereum) {
// window.web3 = new Web3(ethereum)
// web3js = new Web3(ethereum)
// try {
// await ethereum.enable()
// } catch (err) {
// // this.setErrorMsg("User denied access to Metamask")
// console.error(err)
// return
// }
// } else if (window.web3) {
// window.web3 = new Web3(window.web3.currentProvider)
// web3js = new Web3(window.web3.currentProvider)
// } else {
// // this.setErrorMsg('Metamask is not Enabled')
// }
// return web3js
// }