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

Merge pull request #1504 from oceanprotocol/issue-1474-refactoring-move-functions-from-utils-to-classes

Issue-#1474: Refactoring(5). Move functions from \utils to classes
This commit is contained in:
Miquel A. Cabot 2022-07-22 12:59:45 +02:00 committed by GitHub
commit 66527216f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 203 additions and 249 deletions

View File

@ -34,7 +34,7 @@ export abstract class SmartContract {
this.abi = abi || (this.getDefaultAbi() as AbiItem[])
}
async amountToUnits(
protected async amountToUnits(
token: string,
amount: string,
tokenDecimals?: number
@ -42,7 +42,7 @@ export abstract class SmartContract {
return amountToUnits(this.web3, token, amount, tokenDecimals)
}
async unitsToAmount(
protected async unitsToAmount(
token: string,
amount: string,
tokenDecimals?: number
@ -50,11 +50,15 @@ export abstract class SmartContract {
return unitsToAmount(this.web3, token, amount, tokenDecimals)
}
async getFairGasPrice(): Promise<string> {
protected async getFairGasPrice(): Promise<string> {
return getFairGasPrice(this.web3, this.config)
}
getContract(address: string, account?: string, abi?: AbiItem | AbiItem[]): Contract {
protected getContract(
address: string,
account?: string,
abi?: AbiItem | AbiItem[]
): Contract {
const contract = new this.web3.eth.Contract(abi || this.abi, address, {
from: account
})

View File

@ -2,15 +2,7 @@ import Web3 from 'web3'
import { TransactionReceipt } from 'web3-core'
import { AbiItem } from 'web3-utils'
import ERC721Factory from '@oceanprotocol/contracts/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json'
import {
LoggerInstance,
generateDtName,
getFreCreationParams,
getErcCreationParams,
getPoolCreationParams,
estimateGas,
ZERO_ADDRESS
} from '../../utils'
import { LoggerInstance, generateDtName, estimateGas, ZERO_ADDRESS } from '../../utils'
import {
FreCreationParams,
Erc20CreateParams,
@ -583,7 +575,7 @@ export class NftFactory extends SmartContractWithAddress {
nftCreateData: NftCreateData,
ercParams: Erc20CreateParams
): Promise<any> {
const ercCreateData = getErcCreationParams(ercParams)
const ercCreateData = this.getErcCreationParams(ercParams)
return estimateGas(
address,
this.contract.methods.createNftWithErc20,
@ -606,7 +598,7 @@ export class NftFactory extends SmartContractWithAddress {
nftCreateData: NftCreateData,
ercParams: Erc20CreateParams
): Promise<TransactionReceipt> {
const ercCreateData = getErcCreationParams(ercParams)
const ercCreateData = this.getErcCreationParams(ercParams)
const estGas = await estimateGas(
address,
@ -641,8 +633,8 @@ export class NftFactory extends SmartContractWithAddress {
ercParams: Erc20CreateParams,
poolParams: PoolCreationParams
): Promise<any> {
const ercCreateData = getErcCreationParams(ercParams)
const poolData = await getPoolCreationParams(this.web3, poolParams)
const ercCreateData = this.getErcCreationParams(ercParams)
const poolData = await this.getPoolCreationParams(poolParams)
return estimateGas(
address,
this.contract.methods.createNftWithErc20WithPool,
@ -668,8 +660,8 @@ export class NftFactory extends SmartContractWithAddress {
ercParams: Erc20CreateParams,
poolParams: PoolCreationParams
): Promise<TransactionReceipt> {
const ercCreateData = getErcCreationParams(ercParams)
const poolData = await getPoolCreationParams(this.web3, poolParams)
const ercCreateData = this.getErcCreationParams(ercParams)
const poolData = await this.getPoolCreationParams(poolParams)
const estGas = await estimateGas(
address,
@ -704,8 +696,8 @@ export class NftFactory extends SmartContractWithAddress {
ercParams: Erc20CreateParams,
freParams: FreCreationParams
): Promise<any> {
const ercCreateData = getErcCreationParams(ercParams)
const fixedData = await getFreCreationParams(freParams)
const ercCreateData = this.getErcCreationParams(ercParams)
const fixedData = await this.getFreCreationParams(freParams)
return estimateGas(
address,
this.contract.methods.createNftWithErc20WithFixedRate,
@ -731,8 +723,8 @@ export class NftFactory extends SmartContractWithAddress {
ercParams: Erc20CreateParams,
freParams: FreCreationParams
): Promise<TransactionReceipt> {
const ercCreateData = getErcCreationParams(ercParams)
const fixedData = getFreCreationParams(freParams)
const ercCreateData = this.getErcCreationParams(ercParams)
const fixedData = this.getFreCreationParams(freParams)
const estGas = await estimateGas(
address,
@ -767,7 +759,7 @@ export class NftFactory extends SmartContractWithAddress {
ercParams: Erc20CreateParams,
dispenserParams: DispenserCreationParams
): Promise<any> {
const ercCreateData = getErcCreationParams(ercParams)
const ercCreateData = this.getErcCreationParams(ercParams)
return estimateGas(
address,
this.contract.methods.createNftWithErc20WithDispenser,
@ -793,7 +785,7 @@ export class NftFactory extends SmartContractWithAddress {
ercParams: Erc20CreateParams,
dispenserParams: DispenserCreationParams
): Promise<TransactionReceipt> {
const ercCreateData = getErcCreationParams(ercParams)
const ercCreateData = this.getErcCreationParams(ercParams)
dispenserParams.maxBalance = Web3.utils.toWei(dispenserParams.maxBalance)
dispenserParams.maxTokens = Web3.utils.toWei(dispenserParams.maxTokens)
@ -817,4 +809,73 @@ export class NftFactory extends SmartContractWithAddress {
return trxReceipt
}
private getErcCreationParams(ercParams: Erc20CreateParams): any {
let name: string, symbol: string
// Generate name & symbol if not present
if (!ercParams.name || !ercParams.symbol) {
;({ name, symbol } = generateDtName())
}
return {
templateIndex: ercParams.templateIndex,
strings: [ercParams.name || name, ercParams.symbol || symbol],
addresses: [
ercParams.minter,
ercParams.paymentCollector,
ercParams.mpFeeAddress,
ercParams.feeToken
],
uints: [Web3.utils.toWei(ercParams.cap), Web3.utils.toWei(ercParams.feeAmount)],
bytess: []
}
}
private getFreCreationParams(freParams: FreCreationParams): any {
if (!freParams.allowedConsumer) freParams.allowedConsumer = ZERO_ADDRESS
const withMint = freParams.withMint ? 1 : 0
return {
fixedPriceAddress: freParams.fixedRateAddress,
addresses: [
freParams.baseTokenAddress,
freParams.owner,
freParams.marketFeeCollector,
freParams.allowedConsumer
],
uints: [
freParams.baseTokenDecimals,
freParams.datatokenDecimals,
Web3.utils.toWei(freParams.fixedRate),
Web3.utils.toWei(freParams.marketFee),
withMint
]
}
}
private async getPoolCreationParams(poolParams: PoolCreationParams): Promise<any> {
return {
addresses: [
poolParams.ssContract,
poolParams.baseTokenAddress,
poolParams.baseTokenSender,
poolParams.publisherAddress,
poolParams.marketFeeCollector,
poolParams.poolTemplateAddress
],
ssParams: [
Web3.utils.toWei(poolParams.rate),
poolParams.baseTokenDecimals,
Web3.utils.toWei(poolParams.vestingAmount),
poolParams.vestedBlocks,
await this.amountToUnits(
poolParams.baseTokenAddress,
poolParams.initialBaseTokenLiquidity
)
],
swapFees: [
Web3.utils.toWei(poolParams.swapFeeLiquidityProvider),
Web3.utils.toWei(poolParams.swapFeeMarketRunner)
]
}
}
}

View File

@ -950,7 +950,7 @@ export class FixedRateExchange extends SmartContractWithAddress {
* Get Router address set in fixed rate contract
* @return {String}
*/
async getRouter(): Promise<string> {
public async getRouter(): Promise<string> {
let result = null
try {
result = await this.contract.methods.router().call()

View File

@ -7,12 +7,10 @@ import Bpool from '@oceanprotocol/contracts/artifacts/contracts/pools/balancer/B
import {
LoggerInstance,
estimateGas,
getMaxAddLiquidity,
getMaxRemoveLiquidity,
getMaxSwapExactIn,
getMaxSwapExactOut,
MAX_UINT_256,
decimals
decimals,
calcMaxExactOut,
calcMaxExactIn
} from '../../utils'
import {
CurrentFees,
@ -706,7 +704,7 @@ export class Pool extends SmartContract {
): Promise<TransactionReceipt> {
const pool = this.getContract(poolAddress)
const maxSwap = await getMaxSwapExactIn(this, poolAddress, tokenInOutMarket.tokenIn)
const maxSwap = await this.getMaxSwapExactIn(poolAddress, tokenInOutMarket.tokenIn)
if (new Decimal(amountsInOutMaxFee.tokenAmountIn).greaterThan(maxSwap)) {
throw new Error(`tokenAmountIn is greater than ${maxSwap.toString()}`)
}
@ -845,7 +843,7 @@ export class Pool extends SmartContract {
const pool = this.getContract(poolAddress)
let result = null
const maxSwap = await getMaxSwapExactOut(this, poolAddress, tokenInOutMarket.tokenOut)
const maxSwap = await this.getMaxSwapExactOut(poolAddress, tokenInOutMarket.tokenOut)
if (new Decimal(amountsInOutMaxFee.tokenAmountOut).greaterThan(maxSwap)) {
throw new Error(`tokenAmountOut is greater than ${maxSwap.toString()}`)
}
@ -959,7 +957,7 @@ export class Pool extends SmartContract {
const pool = this.getContract(poolAddress)
let result = null
const tokenIn = await this.getBaseToken(poolAddress)
const maxSwap = await getMaxAddLiquidity(this, poolAddress, tokenIn)
const maxSwap = await this.getMaxAddLiquidity(poolAddress, tokenIn)
if (new Decimal(tokenAmountIn).greaterThan(maxSwap)) {
throw new Error(`tokenAmountOut is greater than ${maxSwap.toString()}`)
}
@ -1048,7 +1046,7 @@ export class Pool extends SmartContract {
poolAmountIn
)
const maxSwap = await getMaxRemoveLiquidity(this, poolAddress, tokenOut)
const maxSwap = await this.getMaxRemoveLiquidity(poolAddress, tokenOut)
if (new Decimal(tokenAmountOut).greaterThan(maxSwap)) {
throw new Error(`tokenAmountOut is greater than ${maxSwap.toString()}`)
}
@ -1156,7 +1154,7 @@ export class Pool extends SmartContract {
): Promise<PoolPriceAndFees> {
const pool = this.getContract(poolAddress)
const maxSwap = await getMaxSwapExactOut(this, poolAddress, tokenOut)
const maxSwap = await this.getMaxSwapExactOut(poolAddress, tokenOut)
if (new Decimal(tokenAmountOut).greaterThan(maxSwap)) {
throw new Error(`tokenAmountOut is greater than ${maxSwap.toString()}`)
@ -1233,7 +1231,7 @@ export class Pool extends SmartContract {
): Promise<PoolPriceAndFees> {
const pool = this.getContract(poolAddress)
const maxSwap = await getMaxSwapExactIn(this, poolAddress, tokenIn)
const maxSwap = await this.getMaxSwapExactIn(poolAddress, tokenIn)
if (new Decimal(tokenAmountIn).greaterThan(maxSwap)) {
throw new Error(`tokenAmountIn is greater than ${maxSwap.toString()}`)
}
@ -1461,4 +1459,40 @@ export class Pool extends SmartContract {
const topic = this.web3.eth.abi.encodeEventSignature(eventdata as any)
return topic
}
private async getMaxSwapExactOut(
poolAddress: string,
tokenAddress: string
): Promise<Decimal> {
const reserve = await this.getReserve(poolAddress, tokenAddress)
return calcMaxExactOut(reserve)
}
private async getMaxSwapExactIn(
poolAddress: string,
tokenAddress: string
): Promise<Decimal> {
const reserve = await this.getReserve(poolAddress, tokenAddress)
return calcMaxExactIn(reserve)
}
private async getMaxAddLiquidity(
poolAddress: string,
tokenAddress: string
): Promise<Decimal> {
const reserve = await this.getReserve(poolAddress, tokenAddress)
return calcMaxExactIn(reserve)
}
private async getMaxRemoveLiquidity(
poolAddress: string,
tokenAddress: string
): Promise<Decimal> {
const reserve = await this.getReserve(poolAddress, tokenAddress)
return calcMaxExactIn(reserve)
}
}

View File

@ -321,7 +321,7 @@ export class SideStaking extends SmartContract {
* @param {String} datatokenAddress datatokenAddress
* @return {TransactionReceipt}
*/
async setPoolSwapFee(
private async setPoolSwapFee(
account: string,
ssAddress: string,
datatokenAddress: string,
@ -358,7 +358,7 @@ export class SideStaking extends SmartContract {
* @param {String} ssAddress side staking contract address
* @return {String}
*/
async getRouter(ssAddress: string): Promise<string> {
public async getRouter(ssAddress: string): Promise<string> {
const sideStaking = this.getContract(ssAddress)
let result = null
try {

View File

@ -5,7 +5,7 @@ import { Contract } from 'web3-eth-contract'
import Decimal from 'decimal.js'
import ERC20Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20Template.sol/ERC20Template.json'
import ERC20TemplateEnterprise from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20TemplateEnterprise.sol/ERC20TemplateEnterprise.json'
import { LoggerInstance, getFreOrderParams, estimateGas, ZERO_ADDRESS } from '../../utils'
import { LoggerInstance, estimateGas, ZERO_ADDRESS } from '../../utils'
import {
ConsumeMarketFee,
FreOrderParams,
@ -907,7 +907,7 @@ export class Datatoken extends SmartContract {
): Promise<TransactionReceipt> {
const dtContract = this.getContract(dtAddress, null, this.abiEnterprise)
try {
const freContractParams = getFreOrderParams(freParams)
const freContractParams = this.getFreOrderParams(freParams)
const estGas = await estimateGas(
address,
@ -1243,4 +1243,14 @@ export class Datatoken extends SmartContract {
}
return returnValues
}
private getFreOrderParams(freParams: FreOrderParams): any {
return {
exchangeContract: freParams.exchangeContract,
exchangeId: freParams.exchangeId,
maxBaseTokenAmount: Web3.utils.toWei(freParams.maxBaseTokenAmount),
swapMarketFee: Web3.utils.toWei(freParams.swapMarketFee),
marketFeeAddress: freParams.marketFeeAddress
}
}
}

View File

@ -1,6 +1,6 @@
import Web3 from 'web3'
import fetch from 'cross-fetch'
import { LoggerInstance, getData, noZeroX } from '../utils'
import { LoggerInstance } from '../utils'
import {
FileMetadata,
ComputeJob,
@ -21,7 +21,7 @@ export class Provider {
*/
async getEndpoints(providerUri: string): Promise<any> {
try {
const endpoints = await getData(providerUri)
const endpoints = await this.getData(providerUri)
return await endpoints.json()
} catch (e) {
LoggerInstance.error('Finding the service endpoints failed:', e)
@ -526,7 +526,7 @@ export class Provider {
let signatureMessage = consumerAddress
signatureMessage += jobId || ''
signatureMessage += (did && `${noZeroX(did)}`) || ''
signatureMessage += (did && `${this.noZeroX(did)}`) || ''
signatureMessage += nonce
const signature = await this.signProviderRequest(
web3,
@ -535,7 +535,7 @@ export class Provider {
)
const payload = Object()
payload.signature = signature
payload.documentId = noZeroX(did)
payload.documentId = this.noZeroX(did)
payload.consumerAddress = consumerAddress
if (jobId) payload.jobId = jobId
@ -590,7 +590,7 @@ export class Provider {
: null
let url = `?consumerAddress=${consumerAddress}`
url += (did && `&documentId=${noZeroX(did)}`) || ''
url += (did && `&documentId=${this.noZeroX(did)}`) || ''
url += (jobId && `&jobId=${jobId}`) || ''
if (!computeStatusUrl) return null
@ -699,7 +699,7 @@ export class Provider {
let signatureMessage = consumerAddress
signatureMessage += jobId || ''
signatureMessage += (did && `${noZeroX(did)}`) || ''
signatureMessage += (did && `${this.noZeroX(did)}`) || ''
signatureMessage += nonce
const signature = await this.signProviderRequest(
web3,
@ -707,7 +707,7 @@ export class Provider {
signatureMessage
)
const payload = Object()
payload.documentId = noZeroX(did)
payload.documentId = this.noZeroX(did)
payload.consumerAddress = consumerAddress
payload.jobId = jobId
if (signature) payload.signature = signature
@ -766,6 +766,51 @@ export class Provider {
return false
}
}
private zeroX(input: string): string {
return this.zeroXTransformer(input, true)
}
private noZeroX(input: string): string {
return this.zeroXTransformer(input, false)
}
private zeroXTransformer(input = '', zeroOutput: boolean): string {
const { valid, output } = this.inputMatch(
input,
/^(?:0x)*([a-f0-9]+)$/i,
'zeroXTransformer'
)
return (zeroOutput && valid ? '0x' : '') + output
}
// Shared functions
private inputMatch(
input: string,
regexp: RegExp,
conversorName: string
): { valid: boolean; output: string } {
if (typeof input !== 'string') {
LoggerInstance.debug('Not input string:')
LoggerInstance.debug(input)
throw new Error(`[${conversorName}] Expected string, input type: ${typeof input}`)
}
const match = input.match(regexp)
if (!match) {
LoggerInstance.warn(`[${conversorName}] Input transformation failed.`)
return { valid: false, output: input }
}
return { valid: true, output: match[1] }
}
private async getData(url: string): Promise<Response> {
return fetch(url, {
method: 'GET',
headers: {
'Content-type': 'application/json'
}
})
}
}
export const ProviderInstance = new Provider()

View File

@ -1,14 +1,8 @@
import Web3 from 'web3'
import BigNumber from 'bignumber.js'
import { Contract } from 'web3-eth-contract'
import {
Erc20CreateParams,
FreCreationParams,
FreOrderParams,
PoolCreationParams
} from '../@types'
import { Config } from '../config'
import { generateDtName, minAbi, LoggerInstance, GASLIMIT_DEFAULT, ZERO_ADDRESS } from '.'
import { minAbi, LoggerInstance, GASLIMIT_DEFAULT } from '.'
export function setContractDefaults(contract: Contract, config: Config): Contract {
if (config) {
@ -32,89 +26,6 @@ export async function getFairGasPrice(web3: Web3, config: Config): Promise<strin
else return x.toString(10)
}
export function getErcCreationParams(ercParams: Erc20CreateParams): any {
let name: string, symbol: string
// Generate name & symbol if not present
if (!ercParams.name || !ercParams.symbol) {
;({ name, symbol } = generateDtName())
}
return {
templateIndex: ercParams.templateIndex,
strings: [ercParams.name || name, ercParams.symbol || symbol],
addresses: [
ercParams.minter,
ercParams.paymentCollector,
ercParams.mpFeeAddress,
ercParams.feeToken
],
uints: [Web3.utils.toWei(ercParams.cap), Web3.utils.toWei(ercParams.feeAmount)],
bytess: []
}
}
export function getFreOrderParams(freParams: FreOrderParams): any {
return {
exchangeContract: freParams.exchangeContract,
exchangeId: freParams.exchangeId,
maxBaseTokenAmount: Web3.utils.toWei(freParams.maxBaseTokenAmount),
swapMarketFee: Web3.utils.toWei(freParams.swapMarketFee),
marketFeeAddress: freParams.marketFeeAddress
}
}
export function getFreCreationParams(freParams: FreCreationParams): any {
if (!freParams.allowedConsumer) freParams.allowedConsumer = ZERO_ADDRESS
const withMint = freParams.withMint ? 1 : 0
return {
fixedPriceAddress: freParams.fixedRateAddress,
addresses: [
freParams.baseTokenAddress,
freParams.owner,
freParams.marketFeeCollector,
freParams.allowedConsumer
],
uints: [
freParams.baseTokenDecimals,
freParams.datatokenDecimals,
Web3.utils.toWei(freParams.fixedRate),
Web3.utils.toWei(freParams.marketFee),
withMint
]
}
}
export async function getPoolCreationParams(
web3: Web3,
poolParams: PoolCreationParams
): Promise<any> {
return {
addresses: [
poolParams.ssContract,
poolParams.baseTokenAddress,
poolParams.baseTokenSender,
poolParams.publisherAddress,
poolParams.marketFeeCollector,
poolParams.poolTemplateAddress
],
ssParams: [
Web3.utils.toWei(poolParams.rate),
poolParams.baseTokenDecimals,
Web3.utils.toWei(poolParams.vestingAmount),
poolParams.vestedBlocks,
await amountToUnits(
web3,
poolParams.baseTokenAddress,
poolParams.initialBaseTokenLiquidity
)
],
swapFees: [
Web3.utils.toWei(poolParams.swapFeeLiquidityProvider),
Web3.utils.toWei(poolParams.swapFeeMarketRunner)
]
}
}
export async function unitsToAmount(
web3: Web3,
token: string,

View File

@ -1,27 +0,0 @@
import { LoggerInstance } from '.'
export const zeroX = (input: string): string => zeroXTransformer(input, true)
export const noZeroX = (input: string): string => zeroXTransformer(input, false)
export function zeroXTransformer(input = '', zeroOutput: boolean): string {
const { valid, output } = inputMatch(input, /^(?:0x)*([a-f0-9]+)$/i, 'zeroXTransformer')
return (zeroOutput && valid ? '0x' : '') + output
}
// Shared functions
function inputMatch(
input: string,
regexp: RegExp,
conversorName: string
): { valid: boolean; output: string } {
if (typeof input !== 'string') {
LoggerInstance.debug('Not input string:')
LoggerInstance.debug(input)
throw new Error(`[${conversorName}] Expected string, input type: ${typeof input}`)
}
const match = input.match(regexp)
if (!match) {
LoggerInstance.warn(`[${conversorName}] Input transformation failed.`)
return { valid: false, output: input }
}
return { valid: true, output: match[1] }
}

View File

@ -1,16 +1,5 @@
import fetch from 'cross-fetch'
import { DownloadResponse } from '../@types'
import { LoggerInstance } from '.'
export async function fetchData(url: string, opts: RequestInit): Promise<Response> {
const result = await fetch(url, opts)
if (!result.ok) {
LoggerInstance.error(`Error requesting [${opts.method}] ${url}`)
LoggerInstance.error(`Response message: \n${await result.text()}`)
throw result
}
return result
}
export async function downloadFileBrowser(url: string): Promise<void> {
const anchor = document.createElement('a')
@ -42,37 +31,3 @@ export async function downloadFile(
return { data: await response.arrayBuffer(), filename }
}
export async function getData(url: string): Promise<Response> {
return fetch(url, {
method: 'GET',
headers: {
'Content-type': 'application/json'
}
})
}
async function postWithHeaders(
url: string,
payload: BodyInit,
headers: any
): Promise<Response> {
if (payload != null) {
return fetch(url, {
method: 'POST',
body: payload,
headers
})
} else {
return fetch(url, {
method: 'POST'
})
}
}
export async function postData(url: string, payload: BodyInit): Promise<Response> {
const headers = {
'Content-type': 'application/json'
}
return postWithHeaders(url, payload, headers)
}

View File

@ -1,5 +1,4 @@
import Decimal from 'decimal.js'
import { Pool } from '../contracts'
export function calcMaxExactOut(balance: string): Decimal {
return new Decimal(balance).div(2)
@ -8,40 +7,3 @@ export function calcMaxExactOut(balance: string): Decimal {
export function calcMaxExactIn(balance: string): Decimal {
return new Decimal(balance).div(2)
}
export async function getMaxSwapExactOut(
poolInstance: Pool,
poolAddress: string,
tokenAddress: string
): Promise<Decimal> {
const reserve = await poolInstance.getReserve(poolAddress, tokenAddress)
return calcMaxExactOut(reserve)
}
export async function getMaxSwapExactIn(
poolInstance: Pool,
poolAddress: string,
tokenAddress: string
): Promise<Decimal> {
const reserve = await poolInstance.getReserve(poolAddress, tokenAddress)
return calcMaxExactIn(reserve)
}
export async function getMaxAddLiquidity(
poolInstance: Pool,
poolAddress: string,
tokenAddress: string
): Promise<Decimal> {
const reserve = await poolInstance.getReserve(poolAddress, tokenAddress)
return calcMaxExactIn(reserve)
}
export async function getMaxRemoveLiquidity(
poolInstance: Pool,
poolAddress: string,
tokenAddress: string
): Promise<Decimal> {
const reserve = await poolInstance.getReserve(poolAddress, tokenAddress)
return calcMaxExactIn(reserve)
}

View File

@ -1,6 +1,5 @@
export * from './Constants'
export * from './ContractUtils'
export * from './ConversionTypeHelper'
export * from './DatatokenName'
export * from './DdoHelpers'
export * from './FetchHelper'