crossStargate.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import express from "express";
  2. import CommonUtil from "../../utils/commonUtil.js";
  3. import {Contract, ethers, utils} from "ethers";
  4. import RouterEthAbi from './contract/routerEth.js'
  5. import mathUtil from "../../utils/mathUtil.js";
  6. const router = express.Router();
  7. // const ethChainId = 101;
  8. // const wrapperEth = "0x72E2F4830b9E45d52F80aC08CB2bEC0FeF72eD9c";
  9. // const routerAddress = "0x8731d54E9D02c286767d56ac03e8037C07e01e98";
  10. // const routerEthAddress = "0x150f94B44927F078737562f0fcF3C95c01Cc2376";
  11. // const network = "https://eth-mainnet.g.alchemy.com/v2/I0grWRjLbj_Rf1WP3QMJ-z3mKp71Hb4L";
  12. const networks = {
  13. eth: {
  14. chain_id: 101,
  15. wrapper_eth: "0x72E2F4830b9E45d52F80aC08CB2bEC0FeF72eD9c",
  16. router_address: "0x8731d54E9D02c286767d56ac03e8037C07e01e98",
  17. router_eth_address: "0x150f94B44927F078737562f0fcF3C95c01Cc2376",
  18. network: "https://eth-mainnet.g.alchemy.com/v2/I0grWRjLbj_Rf1WP3QMJ-z3mKp71Hb4L"
  19. },
  20. arb: {
  21. chain_id: 110,
  22. wrapper_eth: "0x82cbecf39bee528b5476fe6d1550af59a9db6fc0",
  23. router_address: "0x53bf833a5d6c4dda888f69c22c88c9f356a41614",
  24. router_eth_address: "0xbf22f0f184bCcbeA268dF387a49fF5238dD23E40",
  25. network: "https://arb-mainnet.g.alchemy.com/v2/8hbABA2L3eaR7VWGY8yk-5p16Aeurf2Z"
  26. },
  27. opt: {
  28. chain_id: 111,
  29. wrapper_eth: "0xb69c8cbcd90a39d8d3d3ccf0a3e968511c3856a0",
  30. router_address: "0xB0D502E938ed5f4df2E681fE6E419ff29631d62b",
  31. router_eth_address: "0xB49c4e680174E331CB0A7fF3Ab58afC9738d5F8b",
  32. network: "https://opt-mainnet.g.alchemy.com/v2/-JQnqchpVew7O9KBdK_lkbXl_iHtfrwS"
  33. }
  34. }
  35. // const arbChainId = 110;
  36. // const wrapperArbEthAddress = "0x82cbecf39bee528b5476fe6d1550af59a9db6fc0";
  37. // const routerArbAddress = "0x53bf833a5d6c4dda888f69c22c88c9f356a41614";
  38. // const routerArbEthAddress = "0xbf22f0f184bCcbeA268dF387a49fF5238dD23E40";
  39. // const arbNetwork = "https://arb-mainnet.g.alchemy.com/v2/8hbABA2L3eaR7VWGY8yk-5p16Aeurf2Z";
  40. router.post("/", async (req, res) => {
  41. let {wallet, params} = CommonUtil.getParamsAndWallet(req);
  42. let dist_chain_id = networks[params.dist_chain].chain_id;
  43. let source_chain_id = networks[params.source_chain].chain_id;
  44. let wrap_addr = networks[params.source_chain].wrapper_eth;
  45. let rt_addr = networks[params.source_chain].router_address;
  46. let rt_eth_addr = networks[params.source_chain].router_eth_address;
  47. let net_work = networks[params.source_chain].network;
  48. // if (params.distChain === "eth") {
  49. // distChainId = ethChainId;
  50. // wrap_addr = wrapperEth;
  51. // rt_addr = routerAddress;
  52. // rt_eth_addr = routerEthAddress;
  53. // net_work = network;
  54. // } else if (params.distChain === "arb") {
  55. // distChainId = arbChainId;
  56. // wrap_addr = wrapperArbEthAddress;
  57. // rt_addr = routerArbAddress;
  58. // rt_eth_addr = routerArbEthAddress;
  59. // net_work = arbNetwork;
  60. // }
  61. const provider = ethers.getDefaultProvider(net_work);
  62. const signer = new ethers.Wallet(wallet.privateKey, provider);
  63. // const router = new Contract(rt_addr, RouterAbi, signer);
  64. const routerEth = new Contract(rt_eth_addr, RouterEthAbi, signer);
  65. let amountNumber = mathUtil.getRandomNumber(params.minAmount, params.maxAmount, params.accuracy);
  66. amountNumber = utils.parseEther(`${amountNumber}`);
  67. let crossGas = utils.parseEther(params.crossGas);
  68. const amountOut = amountNumber.mul(995).div(1000);
  69. let tx = await routerEth.swapETH(
  70. dist_chain_id,
  71. wallet.address,
  72. wallet.address,
  73. amountNumber,
  74. amountOut,
  75. {
  76. value: amountNumber.add(crossGas)
  77. }
  78. )
  79. await tx.wait();
  80. tx = await provider.getTransaction(tx.hash);
  81. const txReceipt = await provider.getTransactionReceipt(tx.hash);
  82. const gas = utils.formatEther((txReceipt.gasUsed * tx.gasPrice).toFixed(0));
  83. const balance = await signer.getBalance()
  84. const balanceStr = utils.formatEther(balance);
  85. const value = utils.formatEther(tx.value)
  86. res.send({
  87. code: 0,
  88. msg: "",
  89. data: {
  90. txId: tx.hash,
  91. gas: gas,
  92. currentBalance: balanceStr,
  93. status: txReceipt.status,
  94. value: value
  95. }
  96. });
  97. });
  98. export default router;