1
0
mirror of https://github.com/oceanprotocol/ocean.js.git synced 2024-11-26 20:39:05 +01:00

Merge pull request #361 from oceanprotocol/feature/add_pool_getTokensRemovedforPoolShares

add getTokensRemovedforPoolShares
This commit is contained in:
Matthias Kretschmann 2020-10-14 17:50:34 +02:00 committed by GitHub
commit 71314a83f8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 2 deletions

View File

@ -4,7 +4,6 @@ import { TransactionReceipt } from 'web3-core'
import { Pool } from './Pool'
import { EventData, Filter } from 'web3-eth-contract'
import BigNumber from 'bignumber.js'
import Decimal from 'decimal.js'
declare type PoolTransactionType = 'swap' | 'join' | 'exit'
@ -13,6 +12,11 @@ export interface PoolDetails {
tokens: string[]
}
export interface TokensReceived {
dtAmount: string
oceanAmount: string
}
export interface PoolTransaction {
poolAddress: string
dtAddress: string
@ -385,6 +389,34 @@ export class OceanPool extends Pool {
return this.calcSingleOutGivenPoolIn(poolAddress, this.oceanAddress, poolShares)
}
/**
* Returns Datatoken & Ocean amounts received after spending poolShares
* @param {String} poolAddress
* @param {String} poolShares
* @return {TokensReceived}
*/
public async getTokensRemovedforPoolShares(
poolAddress: string,
poolShares: string
): Promise<TokensReceived> {
try {
const totalPoolTokens = await this.getPoolSharesTotalSupply(poolAddress)
const dtReserve = await this.getDTReserve(poolAddress)
const oceanReserve = await this.getOceanReserve(poolAddress)
const dtAmount = `${
(Number(poolShares) / Number(totalPoolTokens)) * Number(dtReserve)
}`
const oceanAmount = `${
(Number(poolShares) / Number(totalPoolTokens)) * Number(oceanReserve)
}`
return { dtAmount, oceanAmount }
} catch (e) {
console.error(`ERROR: Unable to get token info. ${e.message}`)
}
}
/**
* Returns max DT amount that you can add to the pool
* @param poolAddress

View File

@ -388,7 +388,12 @@ describe('Balancer flow', () => {
assert(parseFloat(bobDtBalance) < parseFloat(newbobDtBalance))
assert(parseFloat(poolShares) > parseFloat(newpoolShares))
})
it('ALice should know how many tokens she will get for removing all liquidity', async () => {
const aliceShares = await Pool.sharesBalance(alice, greatPool)
const amounts = await Pool.getTokensRemovedforPoolShares(greatPool, aliceShares)
assert(parseFloat(amounts.dtAmount) > 0)
assert(parseFloat(amounts.oceanAmount) > 0)
})
it('ALice should remove all liquidity', async () => {
const aliceShares = await Pool.sharesBalance(alice, greatPool)
const aliceDtBalance = await datatoken.balance(tokenAddress, alice)