mirror of
https://github.com/oceanprotocol/react.git
synced 2024-11-23 02:00:27 +01:00
merge dtUtils
This commit is contained in:
parent
6167d88fd9
commit
e39f41403d
@ -44,33 +44,6 @@ export async function getCheapestPool(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getFirstPool(
|
|
||||||
ocean: Ocean,
|
|
||||||
dataTokenAddress: string
|
|
||||||
): Promise<Pool | null> {
|
|
||||||
if (!ocean || !dataTokenAddress) return null
|
|
||||||
|
|
||||||
const tokenPools = await ocean.pool.searchPoolforDT(dataTokenAddress)
|
|
||||||
|
|
||||||
if (tokenPools === undefined || tokenPools.length === 0) {
|
|
||||||
return {
|
|
||||||
address: '',
|
|
||||||
price: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const firstPoolAddress = tokenPools[0]
|
|
||||||
const firstPoolPrice = await ocean.pool.getOceanNeeded(firstPoolAddress, '1')
|
|
||||||
const oceanReserve = await ocean.pool.getOceanReserve(firstPoolAddress)
|
|
||||||
const dtReserve = await ocean.pool.getDTReserve(firstPoolAddress)
|
|
||||||
|
|
||||||
return {
|
|
||||||
address: firstPoolAddress,
|
|
||||||
price: Number(firstPoolPrice),
|
|
||||||
ocean: Number(oceanReserve),
|
|
||||||
datatoken: Number(dtReserve)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getCheapestExchange(
|
export async function getCheapestExchange(
|
||||||
ocean: Ocean,
|
ocean: Ocean,
|
||||||
dataTokenAddress: string
|
dataTokenAddress: string
|
||||||
@ -113,6 +86,33 @@ export async function getCheapestExchange(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getFirstPool(
|
||||||
|
ocean: Ocean,
|
||||||
|
dataTokenAddress: string
|
||||||
|
): Promise<Pool | null> {
|
||||||
|
if (!ocean || !dataTokenAddress) return null
|
||||||
|
|
||||||
|
const tokenPools = await ocean.pool.searchPoolforDT(dataTokenAddress)
|
||||||
|
|
||||||
|
if (tokenPools === undefined || tokenPools.length === 0) {
|
||||||
|
return {
|
||||||
|
address: '',
|
||||||
|
price: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const firstPoolAddress = tokenPools[0]
|
||||||
|
const firstPoolPrice = await ocean.pool.getOceanNeeded(firstPoolAddress, '1')
|
||||||
|
const oceanReserve = await ocean.pool.getOceanReserve(firstPoolAddress)
|
||||||
|
const dtReserve = await ocean.pool.getDTReserve(firstPoolAddress)
|
||||||
|
|
||||||
|
return {
|
||||||
|
address: firstPoolAddress,
|
||||||
|
price: Number(firstPoolPrice),
|
||||||
|
ocean: Number(oceanReserve),
|
||||||
|
datatoken: Number(dtReserve)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export async function getBestDataTokenPrice(
|
export async function getBestDataTokenPrice(
|
||||||
ocean: Ocean,
|
ocean: Ocean,
|
||||||
dataTokenAddress: string
|
dataTokenAddress: string
|
||||||
@ -146,3 +146,62 @@ export async function getBestDataTokenPrice(
|
|||||||
} as BestPrice
|
} as BestPrice
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function checkAndBuyDT(
|
||||||
|
ocean: Ocean,
|
||||||
|
dataTokenAddress: string,
|
||||||
|
account: Account,
|
||||||
|
config: Config
|
||||||
|
): Promise<TransactionReceipt | undefined> {
|
||||||
|
const userOwnedTokens = await ocean.accounts.getTokenBalance(
|
||||||
|
dataTokenAddress,
|
||||||
|
account
|
||||||
|
)
|
||||||
|
Logger.log(`User has ${userOwnedTokens} tokens`)
|
||||||
|
if (userOwnedTokens === '0') {
|
||||||
|
const bestPrice = await getBestDataTokenPrice(ocean, dataTokenAddress)
|
||||||
|
|
||||||
|
switch (bestPrice?.type) {
|
||||||
|
case 'pool': {
|
||||||
|
const price = new Decimal(bestPrice.value).times(1.05).toString()
|
||||||
|
const maxPrice = new Decimal(bestPrice.value).times(2).toString()
|
||||||
|
Logger.log('Buying token from pool', bestPrice, account.getId(), price)
|
||||||
|
const buyResponse = await ocean.pool.buyDT(
|
||||||
|
account.getId(),
|
||||||
|
bestPrice.address,
|
||||||
|
'1',
|
||||||
|
price,
|
||||||
|
maxPrice
|
||||||
|
)
|
||||||
|
Logger.log('DT buy response', buyResponse)
|
||||||
|
return buyResponse
|
||||||
|
}
|
||||||
|
case 'exchange': {
|
||||||
|
if (!config.oceanTokenAddress) {
|
||||||
|
Logger.error(`'oceanTokenAddress' not set in config`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.fixedRateExchangeAddress) {
|
||||||
|
Logger.error(`'fixedRateExchangeAddress' not set in config`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.log('Buying token from exchange', bestPrice, account.getId())
|
||||||
|
await ocean.datatokens.approve(
|
||||||
|
config.oceanTokenAddress,
|
||||||
|
config.fixedRateExchangeAddress,
|
||||||
|
bestPrice.value.toString(),
|
||||||
|
account.getId()
|
||||||
|
)
|
||||||
|
const exchange = await ocean.fixedRateExchange.buyDT(
|
||||||
|
bestPrice.address,
|
||||||
|
'1',
|
||||||
|
account.getId()
|
||||||
|
)
|
||||||
|
Logger.log('DT exchange buy response', exchange)
|
||||||
|
return exchange
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user