Skip to content

Commit

Permalink
bug fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
vignesha22 committed Sep 30, 2024
1 parent e57b46b commit 6563217
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 10 deletions.
28 changes: 20 additions & 8 deletions backend/src/paymaster/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import OrochiOracleAbi from '../abi/OrochiOracleAbi.js';
import ChainlinkOracleAbi from '../abi/ChainlinkOracleAbi.js';
import ERC20PaymasterV07Abi from '../abi/ERC20PaymasterV07Abi.js';
import ERC20Abi from '../abi/ERC20Abi.js';
import EtherspotChainlinkOracleAbi from '../abi/EtherspotChainlinkOracleAbi.js';

export class Paymaster {
feeMarkUp: BigNumber;
Expand Down Expand Up @@ -235,11 +236,12 @@ export class Paymaster {
result.gasEstimates.verificationGasLimit = response.verificationGasLimit;
result.feeEstimates.maxFeePerGas = response.maxFeePerGas;
result.feeEstimates.maxPriorityFeePerGas = response.maxPriorityFeePerGas;

const paymasterAddress = multiTokenPaymasters[chainId][tokens_list[0]];
result.paymasterAddress = paymasterAddress;
const paymasterContract = new ethers.Contract(paymasterAddress, MultiTokenPaymasterAbi, provider);
result.postOpGas = await paymasterContract.UNACCOUNTED_COST;
if (!multiTokenPaymasters[chainId]) {
const paymasterAddress = multiTokenPaymasters[chainId][tokens_list[0]];
result.paymasterAddress = paymasterAddress;
const paymasterContract = new ethers.Contract(paymasterAddress, MultiTokenPaymasterAbi, provider);
result.postOpGas = await paymasterContract.UNACCOUNTED_COST;
}

for (let i = 0; i < tokens_list.length; i++) {
const gasToken = tokens_list[i];
Expand All @@ -253,11 +255,16 @@ export class Paymaster {
const oracleContract = new ethers.Contract(oracleAddress, OrochiOracleAbi, provider);
const result = await oracleContract.getLatestData(1, ethers.utils.hexlify(ethers.utils.toUtf8Bytes('ETH')).padEnd(42, '0'))
ethPrice = Number(ethers.utils.formatEther(result)).toFixed(0);
} else {
} else if (oracleName === "chainlink") {
const chainlinkContract = new ethers.Contract(oracleAddress, ChainlinkOracleAbi, provider);
const decimals = await chainlinkContract.decimals();
const result = await chainlinkContract.latestAnswer();
ethPrice = Number(ethers.utils.formatUnits(result, decimals)).toFixed(0);
} else {
const ecContract = new ethers.Contract(oracleAddress, EtherspotChainlinkOracleAbi, provider);
const decimals = await ecContract.decimals();
const result = await ecContract.cachedPrice();
ethPrice = Number(ethers.utils.formatUnits(result, decimals)).toFixed(0);
}
result.etherUSDExchangeRate = BigNumber.from(ethPrice).toHexString();
const exchangeRate = 1000000; // This is for setting min tokens required for the txn that gets validated on estimate
Expand Down Expand Up @@ -295,10 +302,15 @@ export class Paymaster {
const oracleContract = new ethers.Contract(oracleAggregator, OrochiOracleAbi, provider);
const result = await oracleContract.getLatestData(1, ethers.utils.hexlify(ethers.utils.toUtf8Bytes('ETH')).padEnd(42, '0'))
ethPrice = Number(ethers.utils.formatEther(result)).toFixed(0);
} else {
} else if (oracleName === "chainlink") {
const chainlinkContract = new ethers.Contract(oracleAggregator, ChainlinkOracleAbi, provider);
const decimals = await chainlinkContract.decimals();
const result = await chainlinkContract.latestAnswer();
const result = await chainlinkContract.latestRoundData();
ethPrice = Number(ethers.utils.formatUnits(result.answer, decimals)).toFixed(0);
} else {
const ecContract = new ethers.Contract(oracleAggregator, EtherspotChainlinkOracleAbi, provider);
const decimals = await ecContract.decimals();
const result = await ecContract.cachedPrice();
ethPrice = Number(ethers.utils.formatUnits(result, decimals)).toFixed(0);
}
userOp.paymasterAndData = await this.getPaymasterAndDataForMultiTokenPaymaster(userOp, validUntil, validAfter, feeToken, ethPrice, paymasterContract, signer);
Expand Down
4 changes: 2 additions & 2 deletions backend/src/routes/paymaster-routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ const paymasterRoutes: FastifyPluginAsync = async (server) => {
if (epVersion !== EPVersions.EPV_06)
throw new Error('Currently only EPV06 entryPoint address is supported')
if (!networkConfig.MultiTokenPaymasterOracleUsed ||
!(networkConfig.MultiTokenPaymasterOracleUsed == "orochi" || networkConfig.MultiTokenPaymasterOracleUsed == "chainlink"))
!(networkConfig.MultiTokenPaymasterOracleUsed == "orochi" || networkConfig.MultiTokenPaymasterOracleUsed == "chainlink" || networkConfig.MultiTokenPaymasterOracleUsed == "etherspotChainlink"))
throw new Error("Oracle is not Defined/Invalid");
result = await paymaster.getQuotesMultiToken(userOp, entryPoint, chainId, multiTokenPaymasters, tokens_list, multiTokenOracles, bundlerUrl, networkConfig.MultiTokenPaymasterOracleUsed, server.log);
}
Expand Down Expand Up @@ -331,7 +331,7 @@ const paymasterRoutes: FastifyPluginAsync = async (server) => {
str += hex;
str1 += hex1;
if (!networkConfig.MultiTokenPaymasterOracleUsed ||
!(networkConfig.MultiTokenPaymasterOracleUsed == "orochi" || networkConfig.MultiTokenPaymasterOracleUsed == "chainlink"))
!(networkConfig.MultiTokenPaymasterOracleUsed == "orochi" || networkConfig.MultiTokenPaymasterOracleUsed == "chainlink" || networkConfig.MultiTokenPaymasterOracleUsed == "etherspotChainlink"))
throw new Error("Oracle is not Defined/Invalid");
result = await paymaster.signMultiTokenPaymaster(userOp, str, str1, entryPoint, multiTokenPaymasters[chainId][gasToken], gasToken, multiTokenOracles[chainId][gasToken], bundlerUrl, signer, networkConfig.MultiTokenPaymasterOracleUsed, server.log);
break;
Expand Down

0 comments on commit 6563217

Please sign in to comment.