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

add getPoolsSharesbyAddress

This commit is contained in:
alexcos20 2020-10-29 04:35:30 -07:00
parent d1620d784f
commit 087b021c17
2 changed files with 43 additions and 8 deletions

View File

@ -10,12 +10,17 @@ declare type PoolTransactionType = 'swap' | 'join' | 'exit'
const POOL_MAX_AMOUNT_IN_LIMIT = 0.25 // maximum 1/4 of the pool reserve
const POOL_MAX_AMOUNT_OUT_LIMIT = 0.25 // maximum 1/4 of the pool reserve
const BPFACTORY_DEPLOY_BLOCK = 0
export interface PoolDetails {
poolAddress: string
tokens: string[]
}
export interface AllPoolsShares {
poolAddress: string
shares: string
}
export interface TokensReceived {
dtAmount: string
oceanAmount: string
@ -849,7 +854,7 @@ export class OceanPool extends Pool {
const factory = new this.web3.eth.Contract(this.factoryABI, this.factoryAddress)
const events = await factory.getPastEvents('BPoolRegistered', {
filter: {},
fromBlock: 0,
fromBlock: BPFACTORY_DEPLOY_BLOCK,
toBlock: 'latest'
})
events.sort((a, b) => (a.blockNumber > b.blockNumber ? 1 : -1))
@ -886,7 +891,7 @@ export class OceanPool extends Pool {
const events = await factory.getPastEvents('BPoolRegistered', {
filter: account ? { registeredBy: account } : {},
fromBlock: 0,
fromBlock: BPFACTORY_DEPLOY_BLOCK,
toBlock: 'latest'
})
@ -897,6 +902,32 @@ export class OceanPool extends Pool {
return result
}
/**
* Search all pools in which a user has shares
* @param {String} account
* @return {AllPoolsShares[]}
*/
public async getPoolsSharesbyAddress(account: string): Promise<AllPoolsShares[]> {
const result: AllPoolsShares[] = []
const factory = new this.web3.eth.Contract(this.factoryABI, this.factoryAddress)
const events = await factory.getPastEvents('BPoolRegistered', {
filter: account ? { registeredBy: account } : {},
fromBlock: BPFACTORY_DEPLOY_BLOCK,
toBlock: 'latest'
})
for (let i = 0; i < events.length; i++) {
const shares = await super.sharesBalance(account, events[i].returnValues[0])
if (shares) {
const onePool: AllPoolsShares = { shares, poolAddress: events[i].returnValues[0] }
result.push(onePool)
}
}
console.log(result)
return result
}
/**
* Get pool details
* @param {String} poolAddress Pool address
@ -926,7 +957,7 @@ export class OceanPool extends Pool {
events = await pool.getPastEvents('LOG_SWAP', {
filter,
fromBlock: 0,
fromBlock: BPFACTORY_DEPLOY_BLOCK,
toBlock: 'latest'
})
@ -937,7 +968,7 @@ export class OceanPool extends Pool {
events = await pool.getPastEvents('LOG_JOIN', {
filter,
fromBlock: 0,
fromBlock: BPFACTORY_DEPLOY_BLOCK,
toBlock: 'latest'
})
@ -948,7 +979,7 @@ export class OceanPool extends Pool {
events = await pool.getPastEvents('LOG_EXIT', {
filter,
fromBlock: 0,
fromBlock: BPFACTORY_DEPLOY_BLOCK,
toBlock: 'latest'
})
for (let i = 0; i < events.length; i++) {
@ -969,7 +1000,7 @@ export class OceanPool extends Pool {
const factory = new this.web3.eth.Contract(this.factoryABI, this.factoryAddress)
const events = await factory.getPastEvents('BPoolRegistered', {
filter: {},
fromBlock: 0,
fromBlock: BPFACTORY_DEPLOY_BLOCK,
toBlock: 'latest'
})

View File

@ -389,7 +389,6 @@ describe('Balancer flow', () => {
if (consoleDebug) console.log('poolShares:' + poolShares)
assert(parseFloat(poolShares) > 0)
})
it('Bob should remove Ocean liquidity from pool ', async () => {
const currentDtReserve = await Pool.getOceanReserve(greatPool)
const bobDtBalance = await datatoken.balance(oceanTokenAddress, bob)
@ -418,6 +417,11 @@ describe('Balancer flow', () => {
assert(parseFloat(amounts.dtAmount) > 0)
assert(parseFloat(amounts.oceanAmount) > 0)
})
it('ALice should get all her shares for all the pools', async () => {
const aliceShares = await Pool.getPoolsSharesbyAddress(alice)
assert(aliceShares.length > 0)
})
it('ALice should remove all liquidity', async () => {
const aliceShares = await Pool.sharesBalance(alice, greatPool)
const aliceDtBalance = await datatoken.balance(tokenAddress, alice)