Greenkeeper caught a bug released in 5.0.44 over in Colony's repo: JoinColony/colonyNetwork#734.
~Appears to be related to InterfaceAdapter changes, but it could be something else. Seems like this is relatively high priority.~
EDIT: So far it seems like this is actually a Web3.js issue that appeared in the past. See #1504, #1461, & ethereum/web3.js#2105.
When investigating locally, I hit this type of error:
Contract: Colony Network
when initialised
✓ should accept ether
✓ should have the correct current Colony version set
1) "before each" hook for "should have the Resolver for current Colony version set"
Contract: Colony Payment
2) "before all" hook: prepare suite
Contract: ColonyPermissions
3) "before all" hook: prepare suite
Contract: Colony Recovery
4) "before all" hook: prepare suite
Contract: Colony Reward Payouts
5) "before all" hook: prepare suite
Contract: Colony Task Work Rating
6) "before all" hook: prepare suite
Contract: ColonyTask
7) "before all" hook: prepare suite
Contract: Colony Token Integration
8) "before all" hook: prepare suite
Contract: Colony
9) "before all" hook: prepare suite
Contract: Meta Colony
10) "before all" hook: prepare suite
Contract: Reputation mining - basic functionality
11) "before all" hook: prepare suite
Contract: Reputation Updates
12) "before all" hook: prepare suite
Contract: EtherRouter / Resolver
13) "before all" hook: prepare suite
Contract: Token Locking
14) "before all" hook: prepare suite
Contract: One transaction payments
15) "before all" hook: prepare suite
155 passing (26m)
15 failing
1) Contract: Colony Network
"before each" hook for "should have the Resolver for current Colony version set":
Could not connect to your Ethereum client with the following parameters:
- host > localhost
- port > 8545
- network_id > 1575397088637
Please check that your Ethereum client:
- is running
- is accepting RPC connections (i.e., "--rpc" option is used in geth)
- is accessible over the network
- is properly configured in your Truffle configuration file (truffle-config.js)
Error: at PromiEvent (node_modules/truffle/build/webpack:/packages/contract/lib/promievent.js:6:1)
at TruffleContract.lookup (node_modules/truffle/build/webpack:/packages/contract/lib/execute.js:109:1)
at lookup (helpers/upgradable-contracts.js:67:42)
at tryCatch (node_modules/regenerator-runtime/runtime.js:45:40)
at Generator.invoke [as _invoke] (node_modules/regenerator-runtime/runtime.js:271:22)
at Generator.prototype.(anonymous function) [as next] (node_modules/regenerator-runtime/runtime.js:97:21)
at asyncGeneratorStep (helpers/upgradable-contracts.js:24:103)
at _next (helpers/upgradable-contracts.js:26:194)
at process._tickCallback (internal/process/next_tick.js:68:7)
In 5.0.44 we bumped Web3.js to 1.2.2 (#2558), so there could be something going on with the "backported" typings, or the fact that the ganache-core dep truffle & colony uses ([email protected]) is still on 1.2.1 and appears to have unpinned types being pulled in.
Going to downgrade priority since this _appears_ to be more of a connectivity issue.
We received this error as well in CI for https://github.com/Synthetixio/synthetix when upgrading truffle from 5.0.43 to 50.0.44, and we're on web3 1.2.2 and ganache 6.7.0. FWIW I also tried upgrading web3 1.2.4 and ganache-cli to 6.8.1-beta.0 (which uses ganache-core 2.9.1-beta.0) but it still appears.
@CruzMolina I think I have a repro (or a guess about the problem).
test/metacoin.js, add const MetaCoin = artifacts.require("MetaCoin");
const util = require('util');
contract('MetaCoin', (accounts) => {
it('should put 10000 MetaCoin in the first account', async () => {
const metaCoinInstance = await MetaCoin.deployed();
const balance = await metaCoinInstance.getBalance.call(accounts[0]);
console.log(
"web3.currentProvider --> " +
util.inspect(web3.currentProvider)
);
console.log(
"Contract.web3 (web3Shim) --> " +
util.inspect(MetaCoin.web3.currentProvider)
);
console.log(
"instance.contract.currentProvider (also web3Shim?)--> " +
util.inspect(metaCoinInstance.contract.currentProvider)
);
assert.equal(balance.valueOf(), 10000, "10000 wasn't in the first account");
});
})
If you compare outputs for Truffle v5.0.43 vs v5.1.2, you'll see that the web.currentProvider injected into the global mocha context has a connected property which is true in the earlier version, but false on latest. The web3s attached directly to the contracts are true for both versions.
Truffle 5.1.2: web3.currentProvider
{
host: 'http://127.0.0.1:7545/',
httpAgent:
Agent {...},
withCredentials: false,
timeout: 0,
headers: undefined,
connected: false, // <-- Should be true?
send: [Function],
_alreadyWrapped: true
}
Truffle 5.0.43: web3.currentProvider
{
host: 'http://127.0.0.1:7545/',
httpAgent:
Agent {...},
timeout: 0,
headers: undefined,
connected: true, // True!
send: [Function],
_alreadyWrapped: true
}
Both Synthetix and JoinColony use this injected web3.currentProvider instance in their test helpers
@CruzMolina Just circling back here, for a quick look. In case the note above isn't clear - believe the bug is at Truffle, possibly where Web3 is instantiated in core/test.
But if you discover the problem is the dependency, please just lmk and will try to get it fixed.
So far #2653 looks somewhat related but a different issue altogether.
Hmm, I'm not exactly sure what's going on here. Is this a timeout issue or an issue with using web3's low-level rpc request method web3.currentProvider.send?
It doesn't seem like we should be using the connected boolean as the determining factor. 5.0.44's connected is coming up true locally, yet Colony's tests fail on that version.
Furthermore, the web3js default instantiation in core/test was implemented before 5.0.44. 🤷♂
It's looking like downgrading to web3 1.2.1 is the solution here.
@CruzMolina I will open a PR on latest with a reproduction / test case. If it passes then downgrading Web3 makes sense. If it doesn't, then downgrading Web3 won't fix the problem.
Furthermore, the web3js default instantiation in core/test was implemented before 5.0.44.
Ok yes, I'm wrong about currentProvider (unhappily because this problem seems worryingly non-deterministic). Will look back over on the Web3 side...
Colony's tests are:
@cgewecke Thanks for giving support here to the Truffle team!
I've checked the changeset between 1.2.1 and 1.2.2 related to the used HttpProvider. We were changing some smaller stuff which shouldn't have an impact on existing code.
The withCredentials options property does now default to false instead to true and we added a method called supportsSubscription which does return the boolean value false. The default options change was required to fix a CORS issue for Firefox/Safari and the added method was a small feature request from a web3.js user.
We also improved the transaction confirmations over a HTTP connection. It was before just a setInterval which triggered a confirmation each second but didn't check if actually a new block was mined.
The mentioned improvement of the transaction confirmations could probably be the thing that does give some problems in the Colony test suite but I'm not sure.
Not sure if this helps, but for https://github.com/sablierhq/sablier, downgrading and pinning [email protected] alone was not sufficient. I also had to also downgrade and pin truffle to 5.0.37.
Hey @PaulRBerg, I see a failing job using 5.1.3. Are there logs available for any version between 5.0.37 and 5.0.44?
I think the latest CircleCI workflow finished right after you replied: https://circleci.com/workflow-run/00101565-3959-48d0-9e9e-b587c768c9e8
Are there logs available for any version between 5.0.37 and 5.0.44?
Unfortunately, no. I left the contracts untouched for a while.
Based on the diff, it looks like the unpinned truffle deps were pulling in 5.1.3. Would love to know if this same issue was present between 5.0.37 & 5.0.44.
There you go, I created a branch for you where truffle is pinned to 4.0.40.
https://circleci.com/workflow-run/6bad4d9a-c04c-4820-990e-3f69cca867f3
@PaulRBerg , not quite sure what's going on with your workflow. Seems like it is either an unrelated issue or a different one.
Most helpful comment
@CruzMolina I think I have a repro (or a guess about the problem).
test/metacoin.js, addIf you compare outputs for Truffle v5.0.43 vs v5.1.2, you'll see that the
web.currentProviderinjected into the global mocha context has aconnectedproperty which istruein the earlier version, butfalseon latest. The web3s attached directly to the contracts aretruefor both versions.Truffle 5.1.2: web3.currentProvider
Truffle 5.0.43: web3.currentProvider
Both Synthetix and JoinColony use this injected web3.currentProvider instance in their test helpers