-
-
Notifications
You must be signed in to change notification settings - Fork 326
Unable to truffle migrate using a custom web3 provider engine #340
Description
Hi, I'm currently facing an issue while trying to deploy my contracts on a live network with truffle using a Ledger device.
Currently, I am able to connect to the device and properly sign and broadcast the first transaction, but it seems truffle is unable to resolve the transaction (while I can see the transaction confirmed).
I am 99% sure that the issue is coming from the web3 provider engine as I managed to deploy the contracts using the HDWallet provider, but I have no clue on what might be the difference in behavior.
This is the LedgerProvider I have:
const Web3 = require('web3');
const FiltersSubprovider = require('web3-provider-engine/subproviders/filters');
const NonceSubprovider = require('web3-provider-engine/subproviders/nonce-tracker');
const ProviderEngine = require('web3-provider-engine');
const ProviderSubprovider = require('web3-provider-engine/subproviders/provider');
const TransportU2F = require('@ledgerhq/hw-transport-node-hid').default;
const createLedgerSubprovider = require('@ledgerhq/web3-subprovider').default;
const {listen} = require('@ledgerhq/logs');
class LedgerProvider extends ProviderEngine {
constructor(connector, options, url, headers, debug) {
super();
this.addProvider(new FiltersSubprovider());
this.addProvider(new NonceSubprovider());
this.addProvider(createLedgerSubprovider(async () => {
const transport = await TransportU2F.create();
listen(logs => console.log(logs.type, logs.message));
return transport
}, options));
switch (connector) {
case 'http': {
const web3Provider = new Web3.providers.HttpProvider(url, {headers, keepAlive: false});
web3Provider.sendAsync = (payload, callback) => {
console.log(payload.method);
return web3Provider.send(payload, callback);
};
this.addProvider(new ProviderSubprovider(web3Provider));
break ;
}
case 'ws': {
const web3Provider = new Web3.providers.WebsocketProvider(url, {headers});
web3Provider.sendAsync = (payload, callback) => {
console.log(payload.method);
return web3Provider.send(payload, callback);
};
this.addProvider(new ProviderSubprovider(web3Provider));
break ;
}
}
this.start();
}
}And am using the following versions of the packages:
...
"web3": "1.2.6",
"web3-provider-engine": "15.0.7",
"@ledgerhq/hw-transport-node-hid": "5.13.1",
"@ledgerhq/web3-subprovider": "5.14.0",
"@ledgerhq/logs": "5.13.1"
...Truffle dispatches the transaction, and hangs for ever
> transaction hash: 0x0db54853b3cce673aa71e87c48b8669eed006fe178dca3b736888bfdebad7a8d
- Blocks: 0 Seconds: 0
I would like to know if someone else has such issues when using truffle + web3-provider-engine, or when trying to use a ledger device with truffle. Might not be the good place to ask this but honestly I cannot find people trying to do the same thing (I tried all ledger provider packages and have no results)