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

wip check allowance for dt and ocean at pool creation

This commit is contained in:
Bogdan Fazakas 2021-01-07 21:58:30 +02:00
parent db03bd3f77
commit a5a55b19a1
2 changed files with 48 additions and 20 deletions

View File

@ -118,28 +118,36 @@ export class OceanPool extends Pool {
const address = createTxid.events.BPoolRegistered.returnValues[0]
const oceanWeight = 10 - parseFloat(dtWeight)
this.dtAddress = dtAddress
observer.next(PoolCreateProgressStep.ApprovingDatatoken)
let txid
txid = await this.approve(
account,
dtAddress,
address,
this.web3.utils.toWei(String(dtAmount))
)
if (!txid) {
this.logger.error('ERROR: Failed to call approve DT token')
return null
let dtAllowance
dtAllowance = await this.allowance(dtAddress, account, address)
if (dtAllowance < dtAmount){
observer.next(PoolCreateProgressStep.ApprovingDatatoken)
txid = await this.approve(
account,
dtAddress,
address,
this.web3.utils.toWei(String(dtAmount))
)
if (!txid) {
this.logger.error('ERROR: Failed to call approve DT token')
return null
}
}
observer.next(PoolCreateProgressStep.ApprovingOcean)
txid = await this.approve(
account,
this.oceanAddress,
address,
this.web3.utils.toWei(String(oceanAmount))
)
if (!txid) {
this.logger.error('ERROR: Failed to call approve OCEAN token')
return null
let oceanAllowance
oceanAllowance = await this.allowance(dtAddress, account, address)
if (oceanAllowance < oceanAmount){
observer.next(PoolCreateProgressStep.ApprovingOcean)
txid = await this.approve(
account,
this.oceanAddress,
address,
this.web3.utils.toWei(String(oceanAmount))
)
if (!txid) {
this.logger.error('ERROR: Failed to call approve OCEAN token')
return null
}
}
observer.next(PoolCreateProgressStep.SetupPool)
txid = await super.setup(

View File

@ -4,6 +4,7 @@ import { TransactionReceipt } from 'web3-core'
import { Logger, getFairGasPrice } from '../utils'
import BigNumber from 'bignumber.js'
import jsonpoolABI from '@oceanprotocol/contracts/artifacts/BPool.json'
import defaultDatatokensABI from '@oceanprotocol/contracts/artifacts/DataTokenTemplate.json'
import { PoolFactory } from './PoolFactory'
const MaxUint256 =
@ -107,6 +108,25 @@ export class Pool extends PoolFactory {
return result
}
/**
* Get Alloance for both DataToken and Ocean
* @param {String } tokenAdress
* @param {String} owner
* @param {String} spender
*/
public async allowance(
tokenAdress: string,
owner: string,
spender: string
): Promise<string> {
const tokenAbi = (defaultDatatokensABI.abi as AbiItem[])
const datatoken = new this.web3.eth.Contract(tokenAbi, tokenAdress, {
from: spender
})
const trxReceipt = await datatoken.methods.allowance(owner, spender).call()
return this.web3.utils.fromWei(trxReceipt)
}
/**
* Approve spender to spent amount tokens
* @param {String} account