ソースを参照

fix: gas exception

wren 1 年間 前
コミット
fd6b0bc7fd
1 ファイル変更27 行追加30 行削除
  1. 27 30
      js-runtime/src/script/layerzero/stargate/crossStargate.js

+ 27 - 30
js-runtime/src/script/layerzero/stargate/crossStargate.js

@@ -1,17 +1,10 @@
 import express from "express";
 import CommonUtil from "../../utils/commonUtil.js";
-import {Contract, ethers, utils} from "ethers";
+import {BigNumber, Contract, ethers, utils} from "ethers";
 import RouterEthAbi from './contract/routerEth.js'
 import mathUtil from "../../utils/mathUtil.js";
 
 const router = express.Router();
-// const ethChainId = 101;
-// const wrapperEth = "0x72E2F4830b9E45d52F80aC08CB2bEC0FeF72eD9c";
-// const routerAddress = "0x8731d54E9D02c286767d56ac03e8037C07e01e98";
-// const routerEthAddress = "0x150f94B44927F078737562f0fcF3C95c01Cc2376";
-// const network = "https://eth-mainnet.g.alchemy.com/v2/I0grWRjLbj_Rf1WP3QMJ-z3mKp71Hb4L";
-
-
 const networks = {
     eth: {
         chain_id: 101,
@@ -34,39 +27,27 @@ const networks = {
         router_eth_address: "0xB49c4e680174E331CB0A7fF3Ab58afC9738d5F8b",
         network: "https://opt-mainnet.g.alchemy.com/v2/-JQnqchpVew7O9KBdK_lkbXl_iHtfrwS"
     },
-    base:{
-        chain_id:184,
-        wrapper_eth:"0x224d8fd7ab6ad4c6eb4611ce56ef35dec2277f03",
-        router_address:"0x45f1A95A4D3f3836523F5c83673c797f4d4d263B",
-        router_eth_address:"0x50B6EbC2103BFEc165949CC946d739d5650d7ae4",
-        network:"https://base-mainnet.g.alchemy.com/v2/AmI0yZYNAaRMljIwlj_CFQV4MZw5XVvf"
+    base: {
+        chain_id: 184,
+        wrapper_eth: "0x224d8fd7ab6ad4c6eb4611ce56ef35dec2277f03",
+        router_address: "0x45f1A95A4D3f3836523F5c83673c797f4d4d263B",
+        router_eth_address: "0x50B6EbC2103BFEc165949CC946d739d5650d7ae4",
+        network: "https://base-mainnet.g.alchemy.com/v2/AmI0yZYNAaRMljIwlj_CFQV4MZw5XVvf"
     }
 }
-
-// const arbChainId = 110;
-// const wrapperArbEthAddress = "0x82cbecf39bee528b5476fe6d1550af59a9db6fc0";
-// const routerArbAddress = "0x53bf833a5d6c4dda888f69c22c88c9f356a41614";
-// const routerArbEthAddress = "0xbf22f0f184bCcbeA268dF387a49fF5238dD23E40";
-// const arbNetwork = "https://arb-mainnet.g.alchemy.com/v2/8hbABA2L3eaR7VWGY8yk-5p16Aeurf2Z";
-
-
 router.post("/", async (req, res) => {
     let {wallet, params} = CommonUtil.getParamsAndWallet(req);
     let dist_chain_id = networks[params.dist_chain].chain_id;
-    let source_chain_id = networks[params.source_chain].chain_id;
-    let wrap_addr = networks[params.source_chain].wrapper_eth;
-    let rt_addr = networks[params.source_chain].router_address;
     let rt_eth_addr = networks[params.source_chain].router_eth_address;
     let net_work = networks[params.source_chain].network;
     const provider = ethers.getDefaultProvider(net_work);
     const signer = new ethers.Wallet(wallet.privateKey, provider);
-    // const router = new Contract(rt_addr, RouterAbi, signer);
     const routerEth = new Contract(rt_eth_addr, RouterEthAbi, signer);
     let amountNumber = mathUtil.getRandomNumber(params.minAmount, params.maxAmount, params.accuracy);
     amountNumber = utils.parseEther(`${amountNumber}`);
     let crossGas = utils.parseEther(params.crossGas);
     const amountOut = amountNumber.mul(995).div(1000);
-    let tx = await routerEth.swapETH(
+    let gasLimit = (await routerEth.estimateGas.swapETH(
         dist_chain_id,
         wallet.address,
         wallet.address,
@@ -75,11 +56,27 @@ router.post("/", async (req, res) => {
         {
             value: amountNumber.add(crossGas)
         }
+    )).mul(6).div(5)
+    let gasPrice = await provider.getGasPrice()
+    console.log("gas-price:", gasPrice.toString())
+    console.log("gas-limit:", gasLimit.toString())
+    console.log("max-gas:", utils.formatEther(gasPrice.mul(gasLimit)))
+    const _tx = await routerEth.swapETH(
+        dist_chain_id,
+        wallet.address,
+        wallet.address,
+        amountNumber,
+        amountOut,
+        {
+            value: amountNumber.add(crossGas),
+            gasLimit,
+            gasPrice
+        }
     )
-    await tx.wait();
-    tx = await provider.getTransaction(tx.hash);
+    await _tx.wait();
+    const tx = await provider.getTransaction(_tx.hash);
     const txReceipt = await provider.getTransactionReceipt(tx.hash);
-    const gas = utils.formatEther((txReceipt.gasUsed * tx.gasPrice).toFixed(0));
+    const gas = utils.formatEther((txReceipt.gasUsed * gasPrice).toFixed(0));
     const balance = await signer.getBalance()
     const balanceStr = utils.formatEther(balance);
     const value = utils.formatEther(tx.value)