diff --git a/package.json b/package.json index d4d891d8..00eb5d17 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ }, "dependencies": { "@ethereum-navigator/navigator": "^0.5.0", - "@oceanprotocol/contracts": "^0.3.4", + "@oceanprotocol/contracts": "^0.3.5", "decimal.js": "^10.2.0", "fs": "0.0.1-security", "node-fetch": "^2.6.0", diff --git a/src/balancer/OceanPool.ts b/src/balancer/OceanPool.ts index a9cb2493..ff8efe36 100644 --- a/src/balancer/OceanPool.ts +++ b/src/balancer/OceanPool.ts @@ -26,9 +26,10 @@ export class OceanPool extends Pool { /** * Create DataToken pool @param {String} account - * @param {String} token Data Token address - * @param {String} amount Data Token amount - * @param {String} weight Data Token weight + * @param {String} token DataToken address + * @param {String} amount DataToken amount + * @param {String} weight DataToken weight + * @param {String} fee Swap fee (as float) * @return {String} */ public async createDTPool( @@ -36,8 +37,7 @@ export class OceanPool extends Pool { token: string, amount: string, weight: string, - fee: string, - finalize = true + fee: string ): Promise { if (this.oceanAddress == null) { console.error('oceanAddress is not defined') @@ -50,22 +50,33 @@ export class OceanPool extends Pool { const address = await super.createPool(account) const oceanWeight = 10 - parseFloat(weight) const oceanAmount = (parseFloat(amount) * oceanWeight) / parseFloat(weight) - const tokens = [ - { - address: token, - amount: String(amount), - weight: String(weight) - }, - { - address: this.oceanAddress, - amount: String(oceanAmount), - weight: String(oceanWeight) - } - ] this.dtAddress = token - await super.addToPool(account, address, tokens) - await super.setSwapFee(account, address, fee) - if (finalize) await super.finalize(account, address) + + await this.approve( + account, + token, + address, + this.web3.utils.toWei(String(amount)) as any + ) + await this.approve( + account, + this.oceanAddress, + address, + this.web3.utils.toWei(String(oceanAmount)) as any + ) + + await super.setup( + account, + address, + token, + this.web3.utils.toWei(String(amount)), + this.web3.utils.toWei(String(weight)), + this.oceanAddress, + this.web3.utils.toWei(String(oceanAmount)), + this.web3.utils.toWei(String(oceanWeight)), + this.web3.utils.toWei(fee) + ) + return address } diff --git a/src/balancer/Pool.ts b/src/balancer/Pool.ts index 2c76f194..739ffa51 100644 --- a/src/balancer/Pool.ts +++ b/src/balancer/Pool.ts @@ -32,8 +32,54 @@ export class Pool extends PoolFactory { * Creates a new pool */ async createPool(account: string): Promise { - const pooladdress = await super.createPool(account) - return pooladdress + return await super.createPool(account) + } + + /** + * Setup a new pool by setting datatoken, base token, swap fee and + * finalizing the pool to make it public. + * + * @param {String} account ethereum address to use for sending this transaction + * @param {String} poolAddress address of new Balancer Pool + * @param {String} dataToken address of datatoken ERC20 contract + * @param {String} dataTokenAmount in wei + * @param {String} dataTokenWeight in wei + * @param {String} baseToken address of base token ERC20 contract + * @param {String} baseTokenAmount in wei + * @param {String} baseTokenWeight in wei + * @param {String} swapFee in wei + */ + async setup( + account: string, + poolAddress: string, + dataToken: string, + dataTokenAmount: string, + dataTokenWeight: string, + baseToken: string, + baseTokenAmount: string, + baseTokenWeight: string, + swapFee: string + ): Promise { + const pool = new this.web3.eth.Contract(this.poolABI, poolAddress, { + from: account + }) + let result = null + try { + result = await pool.methods + .setup( + dataToken, + dataTokenAmount, + dataTokenWeight, + baseToken, + baseTokenAmount, + baseTokenWeight, + swapFee + ) + .send({ from: account, gas: this.GASLIMIT_DEFAULT }) + } catch (e) { + console.error('Pool.setup failed:' + e) + } + return result } /** diff --git a/test/unit/balancer/Balancer.test.ts b/test/unit/balancer/Balancer.test.ts index c8cf83d0..d1cdefa2 100644 --- a/test/unit/balancer/Balancer.test.ts +++ b/test/unit/balancer/Balancer.test.ts @@ -105,11 +105,15 @@ describe('Balancer flow', () => { await oceandatatoken.mint(oceanTokenAddress, alice, tokenAmount) }) it('Alice transfers 200 ocean token to Bob', async () => { - const ts = await datatoken.transfer(oceanTokenAddress, bob, transferAmount, alice) + await datatoken.transfer(oceanTokenAddress, bob, transferAmount, alice) }) it('Alice creates a new OceanPool pool', async () => { /// new pool with total DT = 45 , dt weight=90% with swap fee 2% - alicePoolAddress = await Pool.createDTPool(alice, tokenAddress, 45, 9, '0.02') + alicePoolAddress = await Pool.createDTPool(alice, tokenAddress, '45', '9', '0.02') + const s = await Pool.totalSupply(alicePoolAddress) + assert(String(s) === '100', 'totalSupply does not match: ' + s) + const n = await Pool.getNumTokens(alice, alicePoolAddress) + assert(String(n) === '2', 'unexpected num tokens: ' + n) }) it('Get pool information', async () => { const currentTokens = await Pool.getCurrentTokens(alice, alicePoolAddress)