From cd04dc4f1be6552bc2631479c376a6f2f1b3eb44 Mon Sep 17 00:00:00 2001 From: Mustafa Tuncay Date: Fri, 24 Nov 2023 12:30:24 +0300 Subject: [PATCH 1/3] issue48: Transaction issues --- src/datafeed/providerListener.ts | 8 +-- .../checkAndSubscribe/checkAndSubscribe.ts | 2 +- src/utils/contracts/Predictoor.ts | 49 +++++++++++++++---- 3 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/datafeed/providerListener.ts b/src/datafeed/providerListener.ts index 33900e3..9ee9fc6 100644 --- a/src/datafeed/providerListener.ts +++ b/src/datafeed/providerListener.ts @@ -27,7 +27,7 @@ let latestEpoch = 0; type TProviderListenerArgs = { io: Server; contractAddresses: string[]; - epochEmitterName: EEpochEmitterNames + epochEmitterName: EEpochEmitterNames; }; export type TProviderListenerEmitData = Array<{ @@ -63,8 +63,7 @@ export const providerListener = async ({ const block = await provider.getBlock(currentBlock); const currentTs = block.timestamp; - const SPE = - await predictoorContracts[0]?.getSecondsPerEpoch(); + const SPE = await predictoorContracts[0]?.getSecondsPerEpoch(); const subscribedPredictoors = await checkAndSubscribe({ predictoorContracts, @@ -137,6 +136,7 @@ export const providerListener = async ({ })); predValDataHolder.setFixedMessage(epochEmitterName, result); - io.emit('newEpoch', result); + console.log("result", result); + io.emit("newEpoch", result); }); }; diff --git a/src/services/checkAndSubscribe/checkAndSubscribe.ts b/src/services/checkAndSubscribe/checkAndSubscribe.ts index de815c4..0a13c6b 100644 --- a/src/services/checkAndSubscribe/checkAndSubscribe.ts +++ b/src/services/checkAndSubscribe/checkAndSubscribe.ts @@ -21,7 +21,7 @@ export const checkAndSubscribe = async ({ let expirationTs = subscription.expires.toNumber(); const isValid = expirationTs > currentEpoch; - if (!isValid) { + if (isValid) { await predictorContract.buyAndStartSubscription(predictoorWallet); const subscription = await predictorContract.getSubscriptions( predictoorWallet.address diff --git a/src/utils/contracts/Predictoor.ts b/src/utils/contracts/Predictoor.ts index 08664f2..f7477f6 100644 --- a/src/utils/contracts/Predictoor.ts +++ b/src/utils/contracts/Predictoor.ts @@ -110,6 +110,7 @@ class Predictoor { // Get order parameters async getOrderParams(user: ethers.Wallet) { const providerFee = await this.getCalculatedProviderFee(user); + console.log("providerFee", providerFee); return { consumer: user.address, serviceIndex: 0, @@ -128,11 +129,16 @@ class Predictoor { freParams: TFreParams ): Promise { const isBarge = process.env.ENVIRONMENT === "barge"; - return isBarge - ? (await networkProvider.getProvider().getBlock("latest")).gasLimit - : this.instance - .connect(user) - .estimateGas.buyFromFreAndOrder(orderParams, freParams); + const latestGasLimit = ( + await networkProvider.getProvider().getBlock("latest") + ).gasLimit; + if (isBarge) return latestGasLimit; + + const gasLimitEstimate = await this.instance + .connect(user) + .estimateGas.buyFromFreAndOrder(orderParams, freParams); + + return BigNumber.from(Math.max(gasLimitEstimate.mul(2).toNumber(), latestGasLimit.toNumber())); } // Buy from Fixed Rate Exchange (FRE) and order @@ -140,7 +146,13 @@ class Predictoor { user: ethers.Wallet, exchangeId: string, baseTokenAmount: string - ): Promise { + ): Promise< + | { + receipt: ethers.ContractReceipt; + confirmation: ethers.providers.TransactionReceipt; + } + | Error + > { try { console.log("buyFromFreAndOrder"); const orderParams = await this.getOrderParams(user); @@ -159,17 +171,24 @@ class Predictoor { orderParams, freParams ); + + const nonce = await this.provider.getTransactionCount(user.address); + // Execute transaction and wait for receipt const tx = await this.instance .connect(user) .buyFromFreAndOrder(orderParams, freParams, { gasLimit, - gasPrice, + gasPrice: gasPrice.mul(2), }); const receipt = await tx.wait(); - return receipt; + const confirmation = await this.provider.waitForTransaction( + receipt.transactionHash + ); + + return { confirmation, receipt }; } catch (e: any) { console.error(e); return e; @@ -198,11 +217,23 @@ class Predictoor { ethers.utils.formatEther(baseTokenAmount), this.provider ); - return await this.buyFromFreAndOrder( + const result = await this.buyFromFreAndOrder( user, this.exchangeId?.toString(), formattedBaseTokenAmount ); + + if (!(result instanceof Error)) { + const receipt = result.receipt; + const confirmation = result.confirmation; + + //console.log("confirmation", confirmation); + //console.log("result", receipt); + //console.log("success"); + return receipt; + } else { + throw result; + } } catch (e: any) { console.error(e); return null; From 0b7694d91250055d6f53969ba2c358c1ed169f08 Mon Sep 17 00:00:00 2001 From: Mustafa Tuncay Date: Fri, 24 Nov 2023 12:36:23 +0300 Subject: [PATCH 2/3] issue48: deleted testing logs) --- src/datafeed/providerListener.ts | 1 - src/services/checkAndSubscribe/checkAndSubscribe.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/datafeed/providerListener.ts b/src/datafeed/providerListener.ts index 9ee9fc6..efd48d3 100644 --- a/src/datafeed/providerListener.ts +++ b/src/datafeed/providerListener.ts @@ -136,7 +136,6 @@ export const providerListener = async ({ })); predValDataHolder.setFixedMessage(epochEmitterName, result); - console.log("result", result); io.emit("newEpoch", result); }); }; diff --git a/src/services/checkAndSubscribe/checkAndSubscribe.ts b/src/services/checkAndSubscribe/checkAndSubscribe.ts index 0a13c6b..de815c4 100644 --- a/src/services/checkAndSubscribe/checkAndSubscribe.ts +++ b/src/services/checkAndSubscribe/checkAndSubscribe.ts @@ -21,7 +21,7 @@ export const checkAndSubscribe = async ({ let expirationTs = subscription.expires.toNumber(); const isValid = expirationTs > currentEpoch; - if (isValid) { + if (!isValid) { await predictorContract.buyAndStartSubscription(predictoorWallet); const subscription = await predictorContract.getSubscriptions( predictoorWallet.address From 827e743c4bfb6727f3d38b1a6a637a4c4da90a58 Mon Sep 17 00:00:00 2001 From: Mustafa Tuncay Date: Mon, 27 Nov 2023 16:09:00 +0300 Subject: [PATCH 3/3] issue48: ProviderData is changed --- src/utils/contracts/Predictoor.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/utils/contracts/Predictoor.ts b/src/utils/contracts/Predictoor.ts index f7477f6..64926b8 100644 --- a/src/utils/contracts/Predictoor.ts +++ b/src/utils/contracts/Predictoor.ts @@ -79,7 +79,7 @@ class Predictoor { const providerFeeToken = ethers.constants.AddressZero; const providerFeeAmount = 0; - const providerValidUntil = 0; + const providerValidUntil = Math.floor(Date.now() / 1000 + 3600); // Create message to sign const message = ethers.utils.solidityKeccak256( ["bytes", "address", "address", "uint256", "uint256"], @@ -227,9 +227,9 @@ class Predictoor { const receipt = result.receipt; const confirmation = result.confirmation; - //console.log("confirmation", confirmation); - //console.log("result", receipt); - //console.log("success"); + console.log("confirmation", confirmation); + console.log("result", receipt); + console.log("success"); return receipt; } else { throw result;