交易因错误退出状态 0

问题描述

我正在尝试使用 solidity 和 truffle 中的脚本在币安测试网上进行一些交易。合约只是 pancakeswap 的一个克隆。我的脚本基本上为池增加了流动性。我能够成功编译并执行一次脚本。当我尝试在路由器和工厂的不同地址上再次执行此操作时,它给了我以下错误

StatusError: Transaction: 0xc94424b8c6037e75e0eaf5f21982e2f73f88e71e18e0e5e783c642d6210e686f exited with an error (status 0). 
    at module.exports (D:\Blockchain\pancake\createpool\scripts\deploypool.js:18:18)
    at runMicrotasks (<anonymous>)
    at processticksAndRejections (internal/process/task_queues.js:97:5) {
  tx: '0xc94424b8c6037e75e0eaf5f21982e2f73f88e71e18e0e5e783c642d6210e686f',receipt: {
    blockHash: '0xc4bea040096811e809c18216d85fc82813b60db9545d4e1bf6ab7c4dd344fe87',blockNumber: 8023495,contractAddress: null,cumulativeGasUsed: 699140,from: '0xe95745a8f4e3cdb1cf5bffd4a94f0b249e99f489',gasUsed: 29046,logs: [],logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',status: false,to: '0x7632ae832440032fb4ca93e56873a92a01b06e13',transactionHash: '0xc94424b8c6037e75e0eaf5f21982e2f73f88e71e18e0e5e783c642d6210e686f',transactionIndex: 2,rawLogs: []
  },reason: undefined,hijackedStack: 'StatusError: Transaction: 0xc94424b8c6037e75e0eaf5f21982e2f73f88e71e18e0e5e783c642d6210e686f exited with an error (status 0). \n' +
    '     Please check that the transaction:\n' +
    '     - satisfies all conditions set by solidity `require` statements.\n' +
    '     - does not trigger a solidity `revert` statement.\n' +
    '\n' +
    '    at Object.receipt (C:\\Users\\DELL\\AppData\\Roaming\\npm\\node_modules\\truffle\\build\\webpack:\\packages\\contract\\lib\\handlers.js:124:1)\n' +
    '    at runMicrotasks (<anonymous>)\n' +
    '    at processticksAndRejections (internal/process/task_queues.js:97:5)\n' +
    '    at Function.start (C:\\Users\\DELL\\AppData\\Roaming\\npm\\node_modules\\truffle\\build\\webpack:\\packages\\contract\\lib\\override.js:49:1)'

我的truffle-config.js

//SPDX-License-Identifier: MIT 
require('dotenv').config();
var HDWalletProvider = require("truffle-hdwallet-provider");

const infuraKey = process.env.infuraKey;
const mnemonic = process.env.mnemonic;

module.exports = {

  networks: {
    // Useful for testing. The `development` name is special - truffle uses it by default
    // if it's defined here and no other network is specified at the command line.
    // You should run a client (like ganache-cli,geth or parity) in a separate terminal
    // tab if you use this network and you must also set the `host`,`port` and `network_id`
    // options below to some value.
    //
    development: {
      host: "127.0.0.1",// Localhost (default: none)
      port: 8545,// Standard Ethereum port (default: none)
      network_id: "*",// Any network (default: none)
    },rinkeby: {
      provider: function () {
        return new HDWalletProvider(mnemonic,"https://rinkeby.infura.io/v3/" + infuraKey);
      },network_id: 4,gas: 4500000,gasPrice: 10000000000,},bscTestnet: {
      provider: () => new HDWalletProvider(
        mnemonic,'https://data-seed-prebsc-1-s1.binance.org:8545'
      ),from: '0xe95745a8F4E3cDb1cF5bfFD4A94F0B249e99f489',network_id: 97,skipDryRun: true
    },mainnet: {
      provider: () => new HDWalletProvider(
        mnemonic,'https://bsc-dataseed.binance.org/'
      ),network_id: 56,skipDryRun: true
    }

  },mocha: {
    // timeout: 100000
  },// Configure your compilers
  compilers: {
    solc: {
      version: "0.8.0",// Fetch exact version from solc-bin (default: truffle's version)
      // docker: true,// Use "0.5.1" you've installed locally with docker (default: false)
      // settings: {          // See the solidity docs for advice about optimization and evmVersion
      //  optimizer: {
      //    enabled: false,//    runs: 200
      //  },//  evmVersion: "byzantium"
      // }
    },};

合约中的流动性函数

// **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,address tokenB,uint amountADesired,uint amountBDesired,uint amountAMin,uint amountBMin
    ) private returns (uint amountA,uint amountB) {
        // create the pair if it doesn't exist yet
        if (INiftFactory(factory).getPair(tokenA,tokenB) == address(0)) {
            INiftFactory(factory).createPair(tokenA,tokenB);
        }
        (uint reserveA,uint reserveB) = NiftLibrary.getReserves(factory,tokenA,tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA,amountB) = (amountADesired,amountBDesired);
        } else {
            uint amountBOptimal = NiftLibrary.quote(amountADesired,reserveA,reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin,'NiftRouter: INSUFFICIENT_B_AMOUNT');
                (amountA,amountBOptimal);
            } else {
                uint amountAOptimal = NiftLibrary.quote(amountBDesired,reserveB,reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin,'NiftRouter: INSUFFICIENT_A_AMOUNT');
                (amountA,amountB) = (amountAOptimal,amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,uint amountBMin,address to,uint deadline
    ) external override ensure(deadline) returns (uint amountA,uint amountB,uint liquidity) {
        (amountA,amountB) = _addLiquidity(tokenA,tokenB,amountADesired,amountBDesired,amountAMin,amountBMin);
        address pair = NiftLibrary.pairFor(factory,tokenB);
        TransferHelper.safeTransferFrom(tokenA,msg.sender,pair,amountA);
        TransferHelper.safeTransferFrom(tokenB,amountB);
        liquidity = INiftPair(pair).mint(to);
    }

我的deploypool.js 脚本:

const Factory = artifacts.require('Factory.sol');
const Router = artifacts.require('Router.sol');
const Pair = artifacts.require('Pair.sol');
const Token1 = artifacts.require('token1.sol');
const Token2 = artifacts.require('token2.sol');

module.exports = async done => {
  try {
    //const [admin,_] = await web3.eth.getAccounts();
    const factory = await Factory.at('0x78A47245BC7BDaa0DB7c19b7B6116E1E11e9fE20');
    const router = await Router.at('0xE1672640636a56E2905B8a303224b65A605286CF');
    const token1 = await Token1.new();
    const token2 = await Token2.new();
    const pairAddress = await factory.createPair.call(token1.address,token2.address);
    const tx = await factory.createPair(token1.address,token2.address);
    await token1.approve(router.address,10000);
    await token2.approve(router.address,10000);
    await router.addLiquidity(
      token1.address,token2.address,9000,10000,myMetamaskaddress,Math.floor(Date.Now() / 1000) + 60 * 10
    );
    const pair = await Pair.at(pairAddress);
    const balance = await pair.balanceOf("0xe95745a8F4E3cDb1cF5bfFD4A94F0B249e99f489");
    console.log(`balance LP: ${balance.toString()}`);
  } catch (e) {
    console.log(e);
  }
  done();
};

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...