Skip to content
This repository has been archived by the owner on Mar 17, 2024. It is now read-only.

Report not available for calls for contracts created by other contracts #64

Open
elenadimitrova opened this issue Mar 16, 2018 · 7 comments
Labels

Comments

@elenadimitrova
Copy link

No results are shown for contract created by another contract in test. Example is the ReputationMiningCycle contract calls in
https://github.com/JoinColony/colonyNetwork/pull/179/files#diff-16a74db0d2b552059a5414340b64eafdR186

@cgewecke
Copy link
Owner

@elenadimitrova Thanks for raising this - adding it to the README as a shortcoming. To capture this data automatically I think we'd need to inspect each transaction trace for CREATE opcodes, get the contract creation address from memory and track gas usage at the opcode level.

At the moment the only work around is to have a fake test that calls new on the 'interior' contract in order to get the gas reading. Not sure if that's viable for your case.

@laurentsenta
Copy link

laurentsenta commented Mar 19, 2018

Thanks for the details @cgewecke

I think the another issue we're experiencing comes from the mapMethodToContract that relies on listing .sol files. Our inner contract doesn't have its own file.
https://github.com/cgewecke/eth-gas-reporter/blob/master/gasStats.js#L312

I'm not familiar with the truffle stack yet, maybe an unknown mapping is common.
Else, It could be nice to log a warning that happens:
https://github.com/cgewecke/eth-gas-reporter/blob/master/index.js#L51

@cgewecke
Copy link
Owner

@lsenta Yes, that's a good idea.

Actually, I looked through your repo and was wondering where the missing contract is. Even the trace tracking idea mentioned above would require the existence of a source file and a truffle build 'artifact' that contains information like the ABI, the contract name, and the solc AST.

If that information is available the gas-reporter (as written) should be able to collect data about method calls. It can't capture deployment costs if the contract only deploys via another contract though.

@laurentsenta
Copy link

Sorry for the commit spam, I had a trial & error time with our CI.

We don't mind you closing this ticket since we don't need the measure of the inner contract's new().

FWIW, the workaround we came up with:

  • Give the contract its own file,
  • artifacts.require the contract during migration. That way eth-gas-reporter knows about it during test setup.

The reports looks fine now, thanks for maintaining the lib!

@cgewecke
Copy link
Owner

Ok excellent! Thanks for the solution @lsenta.

Will leave this open for the time being because I think it's still an issue / confusing for anyone who is using a factory method for deployments.

jsfag pushed a commit to jsfag/colonyNetwork that referenced this issue Apr 27, 2018
Before we wouldn't get gas costs for calls on the
ReputationMiningCycle contract.

Workaround is:

- give it its own file
- require it before the tests starts (in migrations/)

related issue: cgewecke/eth-gas-reporter#64
@flockonus
Copy link

+1 to this issue. I'm deploying contracts multiple times during test to reset the contract state, so would be pretty nice to have an option to track contracts deployed while the test is running.

*ps: just found this lib, it's amazing

@cgewecke cgewecke changed the title Report not available for calls for contracts created within test Report not available for calls for contracts created by other contracts Jul 20, 2019
@sebastiantf
Copy link

sebastiantf commented Jan 19, 2023

This would be really nice to have. I have a factory contract that deploys a contract, for which the source is not part of the codebase, but available in one of the dependency packages. I have tests that call the child contract, but no report is generated for such calls. I tried using remoteContracts for this, but didnt work out

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

5 participants