UNPKG

@dolomite-exchange/dolomite-margin

Version:

Ethereum Smart Contracts and TypeScript library used for the DolomiteMargin trading protocol

97 lines 4.33 kB
"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