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:
parent
b4a60b833c
commit
24ad553765
@ -13,7 +13,11 @@ import {
|
|||||||
Pool,
|
Pool,
|
||||||
OrderParams,
|
OrderParams,
|
||||||
FreOrderParams,
|
FreOrderParams,
|
||||||
ComputeAsset
|
ComputeAsset,
|
||||||
|
approve,
|
||||||
|
TokenInOutMarket,
|
||||||
|
AmountsInMaxFee,
|
||||||
|
AmountsOutMaxFee
|
||||||
} from '@oceanprotocol/lib'
|
} from '@oceanprotocol/lib'
|
||||||
import { toast } from 'react-toastify'
|
import { toast } from 'react-toastify'
|
||||||
import Price from '@shared/Price'
|
import Price from '@shared/Price'
|
||||||
@ -48,6 +52,7 @@ import { Decimal } from 'decimal.js'
|
|||||||
import { TransactionReceipt } from 'web3-core'
|
import { TransactionReceipt } from 'web3-core'
|
||||||
import { useAbortController } from '@hooks/useAbortController'
|
import { useAbortController } from '@hooks/useAbortController'
|
||||||
import { getAccessDetails } from '@utils/accessDetailsAndPricing'
|
import { getAccessDetails } from '@utils/accessDetailsAndPricing'
|
||||||
|
import AssetDetails from '../..'
|
||||||
|
|
||||||
export default function Compute({
|
export default function Compute({
|
||||||
ddo,
|
ddo,
|
||||||
@ -289,7 +294,7 @@ export default function Compute({
|
|||||||
let assetOrderId = hasPreviousDatasetOrder ? previousDatasetOrderId : ''
|
let assetOrderId = hasPreviousDatasetOrder ? previousDatasetOrderId : ''
|
||||||
|
|
||||||
if (!hasPreviousDatasetOrder) {
|
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(
|
const initializeData = await ProviderInstance.initialize(
|
||||||
ddo.id,
|
ddo.id,
|
||||||
ddo.services[0].id,
|
ddo.services[0].id,
|
||||||
@ -311,8 +316,65 @@ export default function Compute({
|
|||||||
let tx: TransactionReceipt
|
let tx: TransactionReceipt
|
||||||
switch (accessDetails?.type) {
|
switch (accessDetails?.type) {
|
||||||
case 'dynamic': {
|
case 'dynamic': {
|
||||||
// const poolInstance = new Pool(web3, LoggerInstance)
|
const oceanAmmount = new Decimal(accessDetails.price)
|
||||||
// const tx = poolInstance.
|
.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': {
|
case 'fixed': {
|
||||||
const datatokenInstance = new Datatoken(web3)
|
const datatokenInstance = new Datatoken(web3)
|
||||||
@ -410,8 +472,65 @@ export default function Compute({
|
|||||||
let tx: TransactionReceipt
|
let tx: TransactionReceipt
|
||||||
switch (algorithmConsumeDetails?.type) {
|
switch (algorithmConsumeDetails?.type) {
|
||||||
case 'dynamic': {
|
case 'dynamic': {
|
||||||
// const poolInstance = new Pool(web3, LoggerInstance)
|
const oceanAmmount = new Decimal(algorithmConsumeDetails.price)
|
||||||
// const tx = poolInstance.
|
.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': {
|
case 'fixed': {
|
||||||
const datatokenInstance = new Datatoken(web3)
|
const datatokenInstance = new Datatoken(web3)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user