1
0
mirror of https://github.com/oceanprotocol/market.git synced 2024-12-02 05:57:29 +01:00

add pool logic for order

This commit is contained in:
Bogdan Fazakas 2022-02-08 11:30:16 +02:00
parent b4a60b833c
commit 24ad553765

View File

@ -13,7 +13,11 @@ import {
Pool,
OrderParams,
FreOrderParams,
ComputeAsset
ComputeAsset,
approve,
TokenInOutMarket,
AmountsInMaxFee,
AmountsOutMaxFee
} from '@oceanprotocol/lib'
import { toast } from 'react-toastify'
import Price from '@shared/Price'
@ -48,6 +52,7 @@ import { Decimal } from 'decimal.js'
import { TransactionReceipt } from 'web3-core'
import { useAbortController } from '@hooks/useAbortController'
import { getAccessDetails } from '@utils/accessDetailsAndPricing'
import AssetDetails from '../..'
export default function Compute({
ddo,
@ -289,7 +294,7 @@ export default function Compute({
let assetOrderId = hasPreviousDatasetOrder ? previousDatasetOrderId : ''
if (!hasPreviousDatasetOrder) {
// going to move replace part of this logic when the use consume hook will be ready
// going to move/replace part of this logic when the use consume hook will be ready
const initializeData = await ProviderInstance.initialize(
ddo.id,
ddo.services[0].id,
@ -311,8 +316,65 @@ export default function Compute({
let tx: TransactionReceipt
switch (accessDetails?.type) {
case 'dynamic': {
// const poolInstance = new Pool(web3, LoggerInstance)
// const tx = poolInstance.
const oceanAmmount = new Decimal(accessDetails.price)
.times(1.05)
.toString()
const maxPrice = new Decimal(accessDetails.price)
.times(2)
.toString()
const poolInstance = new Pool(web3)
if (
new Decimal('1').greaterThan(
await poolInstance.getReserve(
accessDetails.addressOrId,
accessDetails.datatoken.address
)
)
) {
LoggerInstance.error(
'ERROR: Buy quantity exceeds quantity allowed'
)
}
const calcInGivenOut = await poolInstance.getAmountInExactOut(
accessDetails.addressOrId,
accessDetails.baseToken.address,
accessDetails.datatoken.address,
'1',
'0.1'
)
if (new Decimal(calcInGivenOut).greaterThan(oceanAmmount)) {
this.logger.error('ERROR: Not enough Ocean Tokens')
return null
}
const approvetx = await approve(
web3,
accountId,
accessDetails.baseToken.address,
accountId,
'1'
)
if (!approvetx) {
LoggerInstance.error(
'ERROR: Failed to call approve OCEAN token'
)
}
const tokenInOutMarket: TokenInOutMarket = {
tokenIn: accessDetails.baseToken.address,
tokenOut: accessDetails.datatoken.address,
marketFeeAddress: appConfig.marketFeeAddress
}
const amountsInOutMaxFee: AmountsOutMaxFee = {
maxAmountIn: oceanAmmount,
tokenAmountOut: '1',
swapMarketFee: '0.1'
}
const tx = await poolInstance.swapExactAmountOut(
accountId,
accessDetails.addressOrId,
tokenInOutMarket,
amountsInOutMaxFee
)
}
case 'fixed': {
const datatokenInstance = new Datatoken(web3)
@ -410,8 +472,65 @@ export default function Compute({
let tx: TransactionReceipt
switch (algorithmConsumeDetails?.type) {
case 'dynamic': {
// const poolInstance = new Pool(web3, LoggerInstance)
// const tx = poolInstance.
const oceanAmmount = new Decimal(algorithmConsumeDetails.price)
.times(1.05)
.toString()
const maxPrice = new Decimal(algorithmConsumeDetails.price)
.times(2)
.toString()
const poolInstance = new Pool(web3)
if (
new Decimal('1').greaterThan(
await poolInstance.getReserve(
algorithmConsumeDetails.addressOrId,
algorithmConsumeDetails.datatoken.address
)
)
) {
LoggerInstance.error(
'ERROR: Buy quantity exceeds quantity allowed'
)
}
const calcInGivenOut = await poolInstance.getAmountInExactOut(
algorithmConsumeDetails.addressOrId,
algorithmConsumeDetails.baseToken.address,
algorithmConsumeDetails.datatoken.address,
'1',
'0.1'
)
if (new Decimal(calcInGivenOut).greaterThan(oceanAmmount)) {
this.logger.error('ERROR: Not enough Ocean Tokens')
return null
}
const approvetx = await approve(
web3,
accountId,
algorithmConsumeDetails.baseToken.address,
accountId,
'1'
)
if (!approvetx) {
LoggerInstance.error(
'ERROR: Failed to call approve OCEAN token'
)
}
const tokenInOutMarket: TokenInOutMarket = {
tokenIn: algorithmConsumeDetails.baseToken.address,
tokenOut: algorithmConsumeDetails.datatoken.address,
marketFeeAddress: appConfig.marketFeeAddress
}
const amountsInOutMaxFee: AmountsOutMaxFee = {
maxAmountIn: oceanAmmount,
tokenAmountOut: '1',
swapMarketFee: '0.1'
}
const tx = await poolInstance.swapExactAmountOut(
accountId,
algorithmConsumeDetails.addressOrId,
tokenInOutMarket,
amountsInOutMaxFee
)
}
case 'fixed': {
const datatokenInstance = new Datatoken(web3)