@dolomite-exchange/dolomite-margin
Version:
Ethereum Smart Contracts and TypeScript library used for the DolomiteMargin trading protocol
97 lines • 4.33 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StandardActions = void 0;
const bignumber_js_1 = require("bignumber.js");
const types_1 = require("../types");
class StandardActions {
constructor(operation, contracts) {
this.operation = operation;
this.contracts = contracts;
}
async deposit({ accountOwner, marketId, amount, accountNumber = new bignumber_js_1.BigNumber(0), options, }) {
const isEth = new bignumber_js_1.BigNumber(marketId).eq(types_1.MarketId.ETH);
const operation = this.operation.initiate({
proxy: isEth ? types_1.ProxyType.Payable : types_1.ProxyType.None,
sendEthTo: accountOwner,
});
const realMarketId = isEth ? types_1.MarketId.WETH : marketId;
const depositTokensFrom = isEth
? this.contracts.payableProxy.options.address
: accountOwner;
operation.deposit({
primaryAccountOwner: accountOwner,
primaryAccountId: new bignumber_js_1.BigNumber(accountNumber),
marketId: new bignumber_js_1.BigNumber(realMarketId),
amount: {
value: new bignumber_js_1.BigNumber(amount),
reference: types_1.AmountReference.Delta,
denomination: types_1.AmountDenomination.Actual,
},
from: depositTokensFrom,
});
const commitOptions = options || {};
if (!commitOptions.from) {
commitOptions.from = accountOwner;
}
if (isEth && !commitOptions.value) {
commitOptions.value = new bignumber_js_1.BigNumber(amount).toFixed(0);
}
return operation.commit(commitOptions);
}
async withdraw({ accountOwner, marketId, amount, accountNumber = new bignumber_js_1.BigNumber(0), options, }) {
const isEth = new bignumber_js_1.BigNumber(marketId).eq(types_1.MarketId.ETH);
const operation = this.operation.initiate({
proxy: isEth ? types_1.ProxyType.Payable : types_1.ProxyType.None,
sendEthTo: accountOwner,
});
const realMarketId = isEth ? types_1.MarketId.WETH : marketId;
const withdrawTokensTo = isEth
? this.contracts.payableProxy.options.address
: accountOwner;
operation.withdraw({
primaryAccountOwner: accountOwner,
primaryAccountId: new bignumber_js_1.BigNumber(accountNumber),
marketId: new bignumber_js_1.BigNumber(realMarketId),
amount: {
value: new bignumber_js_1.BigNumber(amount).times('-1'),
reference: types_1.AmountReference.Delta,
denomination: types_1.AmountDenomination.Actual,
},
to: withdrawTokensTo,
});
const commitOptions = options || {};
if (!commitOptions.from) {
commitOptions.from = accountOwner;
}
return operation.commit(commitOptions);
}
async withdrawToZero({ accountOwner, marketId, accountNumber = new bignumber_js_1.BigNumber(0), options, }) {
const isEth = new bignumber_js_1.BigNumber(marketId).eq(types_1.MarketId.ETH);
const operation = this.operation.initiate({
proxy: isEth ? types_1.ProxyType.Payable : types_1.ProxyType.None,
sendEthTo: accountOwner,
});
const realMarketId = isEth ? types_1.MarketId.WETH : marketId;
const withdrawTokensTo = isEth
? this.contracts.payableProxy.options.address
: accountOwner;
operation.withdraw({
primaryAccountOwner: accountOwner,
primaryAccountId: new bignumber_js_1.BigNumber(accountNumber),
marketId: new bignumber_js_1.BigNumber(realMarketId),
amount: {
value: new bignumber_js_1.BigNumber(0),
reference: types_1.AmountReference.Target,
denomination: types_1.AmountDenomination.Par,
},
to: withdrawTokensTo,
});
const commitOptions = options || {};
if (!commitOptions.from) {
commitOptions.from = accountOwner;
}
return operation.commit(commitOptions);
}
}
exports.StandardActions = StandardActions;
//# sourceMappingURL=StandardActions.js.map