UNPKG

@soundsright/chain

Version:

soundsright contracts

66 lines (65 loc) 3.1 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const ethers_1 = require("ethers"); const contracts_1 = require("@soundsright/contracts"); class Token { constructor(chain) { this.chain = chain; } approve(address, account, spender, amount) { return __awaiter(this, void 0, void 0, function* () { const contract = this.chain.getContract(address, contracts_1.ERC20); const allowance = yield this.chain.tryGet(contract.allowance(account, spender)); const allowanceAmountBN = ethers_1.BigNumber.from(allowance); const amountBN = ethers_1.BigNumber.from(String(amount)); if (allowanceAmountBN.gte(amountBN)) { return; } yield this.chain.tryTransaction(contract.approve(spender, Token.MAX_AMOUNT)); }); } balanceOf(address, account) { return __awaiter(this, void 0, void 0, function* () { const contract = this.chain.getContract(address, contracts_1.ERC20); const res = yield this.chain.tryGet(contract.balanceOf(account)); return res.toString(); }); } decimals(address) { return __awaiter(this, void 0, void 0, function* () { const contract = this.chain.getContract(address, contracts_1.ERC20); const decimals = yield this.chain.tryGet(contract.decimals()); return decimals; }); } compareAmount(amount1, amount2) { const bnAmount1 = ethers_1.BigNumber.from(String(amount1)); const bnAmount2 = ethers_1.BigNumber.from(String(amount2)); if (bnAmount1.gt(bnAmount2)) { return 1; } if (bnAmount1.lt(bnAmount2)) { return -1; } return 0; } isBalanceEnough(address, account, amount) { return __awaiter(this, void 0, void 0, function* () { const contract = this.chain.getContract(address, contracts_1.ERC20); const bnBalance = yield this.chain.tryGet(contract.balanceOf(account)); const bnAmount = ethers_1.BigNumber.from(String(amount)); return bnBalance.gte(bnAmount); }); } } exports.default = Token; Token.MAX_AMOUNT = ethers_1.BigNumber.from('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');