@dolomite-exchange/dolomite-margin
Version:
Ethereum Smart Contracts and TypeScript library used for the DolomiteMargin trading protocol
113 lines • 5.28 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Token = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const Constants_1 = require("../lib/Constants");
// noinspection TypeScriptUnresolvedFunction
class Token {
constructor(contracts) {
this.contracts = contracts;
this.tokens = {};
}
async getAllowance(tokenAddress, ownerAddress, spenderAddress, options) {
const token = this.getToken(tokenAddress);
const allowStr = await this.contracts.callConstantContractFunction(token.methods.allowance(ownerAddress, spenderAddress), options);
return new bignumber_js_1.default(allowStr);
}
async getBalance(tokenAddress, ownerAddress, options) {
const token = this.getToken(tokenAddress);
const balStr = await this.contracts.callConstantContractFunction(token.methods.balanceOf(ownerAddress), options);
return new bignumber_js_1.default(balStr);
}
async getTotalSupply(tokenAddress, options) {
const token = this.getToken(tokenAddress);
const supplyStr = await this.contracts.callConstantContractFunction(token.methods.totalSupply(), options);
return new bignumber_js_1.default(supplyStr);
}
async getName(tokenAddress, options) {
const token = this.getToken(tokenAddress);
// @ts-ignore
return this.contracts.callConstantContractFunction(token.methods['name'](), options);
}
async getSymbol(tokenAddress, options) {
const token = this.getToken(tokenAddress);
// @ts-ignore
return this.contracts.callConstantContractFunction(token.methods['symbol'](), options);
}
async getDecimals(tokenAddress, options) {
const token = this.getToken(tokenAddress);
// @ts-ignore
const decStr = await this.contracts.callConstantContractFunction(token.methods['decimals'](), options);
return new bignumber_js_1.default(decStr);
}
async getDolomiteMarginAllowance(tokenAddress, ownerAddress, options) {
return this.getAllowance(tokenAddress, ownerAddress, this.contracts.dolomiteMargin.options.address, options);
}
async setAllowance(tokenAddress, ownerAddress, spenderAddress, amount, options = {}) {
const token = this.getToken(tokenAddress);
return this.contracts.callContractFunction(token.methods.approve(spenderAddress, amount.toFixed(0)), { ...options, from: ownerAddress });
}
async setDolomiteMarginllowance(tokenAddress, ownerAddress, amount, options = {}) {
return this.setAllowance(tokenAddress, ownerAddress, this.contracts.dolomiteMargin.options.address, amount, options);
}
async setMaximumAllowance(tokenAddress, ownerAddress, spenderAddress, options = {}) {
return this.setAllowance(tokenAddress, ownerAddress, spenderAddress, Constants_1.INTEGERS.ONES_255, options);
}
async setMaximumDolomiteMarginAllowance(tokenAddress, ownerAddress, options = {}) {
return this.setAllowance(tokenAddress, ownerAddress, this.contracts.dolomiteMargin.options.address, Constants_1.INTEGERS.ONES_255, options);
}
async unsetDolomiteMarginAllowance(tokenAddress, ownerAddress, options = {}) {
return this.setAllowance(tokenAddress, ownerAddress, this.contracts.dolomiteMargin.options.address, Constants_1.INTEGERS.ZERO, options);
}
async transfer(tokenAddress, fromAddress, toAddress, amount, options = {}) {
const token = this.getToken(tokenAddress);
return this.contracts.callContractFunction(token.methods.transfer(toAddress, amount.toFixed(0)), { ...options, from: fromAddress });
}
async transferFrom(tokenAddress, fromAddress, toAddress, senderAddress, amount, options = {}) {
const token = this.getToken(tokenAddress);
return this.contracts.callContractFunction(token.methods.transferFrom(fromAddress, toAddress, amount.toFixed(0)), { ...options, from: senderAddress });
}
subscribeToTransfers(tokenAddress, { from, to, fromBlock, } = {}) {
const token = this.getToken(tokenAddress);
const filter = {};
if (from) {
filter.from = from;
}
if (to) {
filter.to = to;
}
return token.events.Transfer({
filter,
fromBlock,
});
}
subscribeToApprovals(tokenAddress, { owner, spender, fromBlock, } = {}) {
const token = this.getToken(tokenAddress);
const filter = {};
if (owner) {
filter.owner = owner;
}
if (spender) {
filter.spender = spender;
}
return token.events.Approval({
filter,
fromBlock,
});
}
getToken(tokenAddress) {
if (this.tokens[tokenAddress]) {
return this.tokens[tokenAddress];
}
const token = this.contracts.erc20;
const contract = token.clone();
contract.options.address = tokenAddress;
this.tokens[tokenAddress] = contract;
return contract;
}
}
exports.Token = Token;
//# sourceMappingURL=Token.js.map