1
0
mirror of https://github.com/oceanprotocol-archive/squid-js.git synced 2024-02-02 15:31:51 +01:00
squid-js/src/ocean/Account.ts

107 lines
2.6 KiB
TypeScript
Raw Normal View History

2018-10-05 12:34:31 +02:00
import BigNumber from "bignumber.js"
2018-11-12 10:06:24 +01:00
import * as EthJsUtils from "ethereumjs-util"
2018-10-16 14:56:18 +02:00
import Balance from "../models/Balance"
import { Instantiable, InstantiableConfig } from "../Instantiable.abstract"
2018-10-05 12:34:31 +02:00
2019-01-09 16:17:23 +01:00
/**
* Account information.
*/
export default class Account extends Instantiable {
private password?: string
constructor(private id: string = "0x0", config?: InstantiableConfig) {
super()
if (config) {
this.setInstanceConfig(config)
}
}
2019-03-19 12:27:33 +01:00
public getId() {
return this.id
}
public setId(id) {
this.id = id
}
/**
* Set account password.
* @param {string} password Password for account.
*/
2019-02-04 18:13:54 +01:00
public setPassword(password: string): void {
this.password = password
}
/**
* Returns account password.
* @return {string} Account password.
*/
2019-02-04 18:13:54 +01:00
public getPassword(): string {
return this.password
}
2019-01-09 16:17:23 +01:00
/**
* Balance of Ocean Token.
* @return {Promise<number>}
*/
2018-10-16 14:56:18 +02:00
public async getOceanBalance(): Promise<number> {
const token = this.ocean.keeper.token
return await token.balanceOf(this.id) / (10 ** await token.decimals())
2018-10-05 12:34:31 +02:00
}
2019-01-09 16:17:23 +01:00
/**
* Balance of Ether.
* @return {Promise<number>}
*/
public async getEtherBalance(): Promise<number> {
return this.web3
2018-11-27 12:27:15 +01:00
.eth
2018-10-16 14:56:18 +02:00
.getBalance(this.id, "latest")
.then((balance: string): number => {
2018-10-05 12:34:31 +02:00
return new BigNumber(balance).toNumber()
})
}
2019-01-09 16:17:23 +01:00
/**
* Balances of Ether and Ocean Token.
* @return {Promise<Balance>}
*/
2018-10-16 14:56:18 +02:00
public async getBalance(): Promise<Balance> {
2019-02-11 14:56:48 +01:00
return {
eth: await this.getEtherBalance(),
ocn: await this.getOceanBalance(),
2018-10-16 14:56:18 +02:00
}
2018-10-05 12:34:31 +02:00
}
2019-01-09 16:17:23 +01:00
/**
* Request Ocean Tokens.
* @param {number} amount Tokens to be requested.
* @return {Promise<number>}
*/
public async requestTokens(amount: number): Promise<number> {
2019-01-24 12:57:03 +01:00
try {
await this.ocean.keeper
2019-01-28 15:41:19 +01:00
.dispenser
2019-01-24 12:57:03 +01:00
.requestTokens(amount, this.id)
} catch (e) {
this.logger.error(e)
2019-01-24 12:57:03 +01:00
throw new Error("Error requesting tokens")
}
return amount
2018-10-05 12:34:31 +02:00
}
2018-11-12 10:06:24 +01:00
2019-01-09 16:17:23 +01:00
/**
* Returns the account public key.
* @return {Promise<string>}
*/
2018-11-12 10:06:24 +01:00
public async getPublicKey(): Promise<string> {
const msg = this.web3.utils.sha3(this.getId())
const sig = await this.web3.eth.sign(msg, this.getId())
2018-11-12 10:06:24 +01:00
const {v, r, s} = EthJsUtils.fromRpcSig(sig)
return EthJsUtils.ecrecover(EthJsUtils.toBuffer(msg), v, r, s).toString("hex")
}
2018-10-05 12:34:31 +02:00
}