vue-blocklink
Version:
Vue support for the Blockchain Link browser extension
107 lines (106 loc) • 3.33 kB
JavaScript
import { BigNumber } from "bignumber.js";
import BN from 'bn.js';
export default class CoinDetail {
constructor(address, dec, sym, name) {
this.address = address;
if (dec instanceof BigNumber) {
this.decimal = dec.toNumber();
}
else {
this.decimal = dec;
}
this.tokenName = name;
this.tokenSymbol = sym;
this.unlimited = {};
this.holder = {};
this.spender = {};
}
setHolder(address, bal) {
let abal = 0;
if (bal instanceof BigNumber) {
abal = bal.toNumber();
}
else {
abal = bal;
}
if (this.holder.hasOwnProperty(address)) {
this.holder[address] = abal;
}
else {
this.holder[address] = abal;
}
}
async runAllowanceAmount(contract, owner_address, spender) {
let g = await contract.allowance(owner_address, spender);
let allowance = 0;
if (g instanceof BigNumber) {
allowance = g.toNumber();
}
else if (g instanceof BN) {
allowance = g.toNumber();
}
else {
allowance = g;
}
if (allowance >= 1000000000000000000000000000000000000) {
this.setSpenderExtreme(owner_address, spender, true);
}
else {
this.setSpenderNormal(owner_address, spender, allowance);
}
}
setSpenderExtreme(coin_owner, spender, isAll) {
return this._setDeep(this.unlimited, [coin_owner, spender], isAll);
}
setSpenderNormal(coin_owner, spender, allowance) {
return this._setDeep(this.spender, [coin_owner, spender], allowance);
}
name() {
return this.tokenName;
}
symbol() {
return this.tokenSymbol;
}
amountCode(address) {
return this.holder[address];
}
balance(address) {
return this.amountCode(address);
}
byFloat(address) {
return this.holder[address] / this.decimal;
}
showAllowance(coin_owner, spender) {
if (this.spender.hasOwnProperty(coin_owner)) {
if (this.spender[coin_owner].hasOwnProperty(spender)) {
return this.spender[coin_owner][spender];
}
}
return 0;
}
showAllowed(coin_owner, spender) {
if (this.unlimited.hasOwnProperty(coin_owner)) {
if (this.unlimited[coin_owner].hasOwnProperty(spender)) {
return this.unlimited[coin_owner][spender];
}
}
return false;
}
approvalStatus(coin_owner, spender) {
const approvedAmount = this.showAllowance(coin_owner, spender);
const isUnlimited = this.showAllowed(coin_owner, spender);
return { approvedAmount, isUnlimited };
}
_setDeep(obj, path, value, setrecursively = false) {
let properties = Array.isArray(path) ? path : path.split(".");
if (properties.length > 1) {
if (!obj.hasOwnProperty(properties[0]) || typeof obj[properties[0]] !== "object")
obj[properties[0]] = {};
return this._setDeep(obj[properties[0]], properties.slice(1), value);
}
else {
obj[properties[0]] = value;
return true;
}
}
}