最大侦听器已超出警告:检测到可能的事件发射器内存泄漏



我正在尝试为我的Solidity合约开发一些测试。我这里有一个compile.js脚本:

const path = require('path');
const solc = require('solc');
const fs = require('fs-extra');
const buildPath = path.resolve(__dirname, 'build');
fs.removeSync(buildPath);
const campaignPath = path.resolve(__dirname, 'contracts', 'Campaign.sol');
const source = fs.readFileSync(campaignPath, 'utf-8');
const output = solc.compile(source, 1).contracts;
fs.ensureDirSync(buildPath);
for (let contract in output) {
  fs.outputJsonSync(
    path.resolve(buildPath, contract.replace(':', '') + '.json'),
    output[contract]
  );
}

此事件发射器内存泄漏的罪魁祸首可能在此代码中的某个地方吗?我以前从未遇到过此错误。我在运行第一个测试时收到错误,这是我的测试文件:

const assert = require('assert');
const ganache = require('ganache-cli');
const Web3 = require('web3');
const web3 = new Web3(ganache.provider());
const compiledFactory = require('../ethereum/build/CampaignFactory.json');
const compiledCampaign = require('../ethereum/build/Campaign.json');
let accounts;
let factory;
let campaignAddress;
let campaign;
beforeEach(async () => {
  accounts = await web3.eth.getAccounts();
  factory = await new web3.eth.Contract(JSON.parse(compiledFactory.interface))
    .deploy({ data: compiledFactory.bytecode })
    .send({ from: accounts[0], gas: '1000000' });
  await factory.methods.createCampaign('100').send({
    from: accounts[0],
    gas: '1000000'
  });
  [campaignAddress] = await factory.methods.getDeployedCampaigns().call();
  campaign = new web3.eth.Contract(
    JSON.parse(compiledCampaign.interface),
    campaignAddress
  );
});
describe('Campaigns', () => {
  it('deploys a factory and a campaign', () => {
    assert.ok(factory.options.address);
    assert.ok(campaign.options.address);
  });
});

在此 EventEmitter 内存泄漏之后,我立即得到的第二个错误是说我的getDeployedCampaigns()不是一个函数,但如果您在此处查看Campaign.sol文件,它显然是:

pragma solidity ^0.4.17;
contract CampaignFactory {
    address[] public deployedCampaigns;
    function createCampaign(uint minimum) public {
      address newCampaign = new Campaign(minimum, msg.sender);
      deployedCampaigns.push(newCampaign);
    }
    function getDeployedCampaigns() public view returns (address[]) {
        return deployedCampaigns;
    }
}
我相信

这是由以下内存泄漏引起的:web3.eth.Contract()

它有已知的内存泄漏。我目前正在处理类似的问题。

https://github.com/ChainSafe/web3.js/issues/3042

相关内容

最新更新