2018-10-04 13:14:03 +02:00
|
|
|
import * as Web3 from "web3"
|
2018-10-02 10:06:26 +02:00
|
|
|
import Config from "../models/Config"
|
2018-10-04 13:14:03 +02:00
|
|
|
import Logger from "../utils/Logger"
|
|
|
|
|
2018-10-04 16:17:32 +02:00
|
|
|
Logger.log("using web3", Web3.version)
|
2018-09-25 08:30:54 +02:00
|
|
|
|
2018-09-19 10:30:30 +02:00
|
|
|
export default class Web3Helper {
|
2018-10-01 18:10:26 +02:00
|
|
|
|
2018-10-02 10:06:26 +02:00
|
|
|
private web3: Web3
|
2018-09-25 08:30:54 +02:00
|
|
|
|
2018-09-25 09:14:01 +02:00
|
|
|
public constructor(config: Config) {
|
2018-10-02 10:06:26 +02:00
|
|
|
const web3Provider = config.web3Provider || new Web3.providers.HttpProvider(config.nodeUri)
|
2018-10-04 13:14:03 +02:00
|
|
|
this.web3 = new Web3(Web3.givenProvider || web3Provider)
|
2018-09-19 10:30:30 +02:00
|
|
|
}
|
|
|
|
|
2018-10-01 18:10:26 +02:00
|
|
|
public getWeb3() {
|
2018-10-02 10:06:26 +02:00
|
|
|
return this.web3
|
2018-10-01 18:10:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public getCurrentProvider() {
|
2018-10-02 10:06:26 +02:00
|
|
|
return this.web3.currentProvider
|
2018-10-01 18:10:26 +02:00
|
|
|
}
|
|
|
|
|
2018-09-25 09:14:01 +02:00
|
|
|
public async getAccounts(): Promise<any[]> {
|
|
|
|
return new Promise<any[]>((resolve, reject) => {
|
2018-09-25 08:30:54 +02:00
|
|
|
this.web3.eth.getAccounts((err: any, accounts: string[]) => {
|
2018-09-21 14:43:50 +02:00
|
|
|
if (err) {
|
2018-10-02 10:06:26 +02:00
|
|
|
reject(err)
|
|
|
|
throw err
|
2018-09-21 14:43:50 +02:00
|
|
|
}
|
2018-10-02 10:06:26 +02:00
|
|
|
resolve(accounts)
|
|
|
|
})
|
|
|
|
})
|
2018-09-21 11:57:33 +02:00
|
|
|
}
|
|
|
|
|
2018-09-25 09:14:01 +02:00
|
|
|
public async getNetworkName(): Promise<string> {
|
2018-10-05 10:59:48 +02:00
|
|
|
return this.web3.eth.net.getId()
|
|
|
|
.then((networkId) => {
|
|
|
|
let network: string = "unknown"
|
2018-10-01 18:10:26 +02:00
|
|
|
|
2018-09-21 14:43:50 +02:00
|
|
|
switch (networkId) {
|
2018-10-01 18:10:26 +02:00
|
|
|
case 1:
|
2018-10-02 10:06:26 +02:00
|
|
|
network = "Main"
|
|
|
|
break
|
2018-10-01 18:10:26 +02:00
|
|
|
case 2:
|
2018-10-02 10:06:26 +02:00
|
|
|
network = "Morden"
|
|
|
|
break
|
2018-10-01 18:10:26 +02:00
|
|
|
case 3:
|
2018-10-02 10:06:26 +02:00
|
|
|
network = "Ropsten"
|
|
|
|
break
|
2018-10-01 18:10:26 +02:00
|
|
|
case 4:
|
2018-10-02 10:06:26 +02:00
|
|
|
network = "Rinkeby"
|
|
|
|
break
|
2018-10-01 18:10:26 +02:00
|
|
|
case 42:
|
2018-10-02 10:06:26 +02:00
|
|
|
network = "Kovan"
|
|
|
|
break
|
2018-09-21 14:43:50 +02:00
|
|
|
default:
|
2018-10-02 10:06:26 +02:00
|
|
|
network = "development"
|
2018-09-21 14:43:50 +02:00
|
|
|
}
|
2018-10-05 10:59:48 +02:00
|
|
|
return network
|
2018-10-02 10:06:26 +02:00
|
|
|
})
|
2018-09-19 10:30:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// web3 wrappers
|
2018-09-25 09:14:01 +02:00
|
|
|
public sign(accountAddress: string, message: string) {
|
2018-10-02 10:06:26 +02:00
|
|
|
return this.web3.eth.sign(accountAddress, message)
|
2018-09-19 10:30:30 +02:00
|
|
|
}
|
2018-10-01 18:10:26 +02:00
|
|
|
|
2018-09-19 10:30:30 +02:00
|
|
|
}
|