Ich benutze:
Erste Frage - kann web3-providers-ws
mit verwendet werden web3
v0.20.*
?
Zweite Frage (Problem) - Ich erhalte eine Fehlermeldung, wenn ich wahrscheinlich versuche, eine Transaktion zu senden (das Lesen und Ansehen von Ereignissen über diesen Anbieter ist völlig in Ordnung).
Pull-Request: https://github.com/ethereum-alarm-clock/timenode-core/pull/146
Funktionierende HTTP-Anbieter-E2E-Tests:
https://travis-ci.org/ethereum-alarm-clock/timenode-core/jobs/406823597
Fehlerhafte E2E-Tests des WS-Anbieters:
https://travis-ci.org/ethereum-alarm-clock/timenode-core/jobs/406823603
Tatsächlicher Fehler:
5 passing (4s)
3 failing
1) ScheduleTx
schedules a basic transaction:
TypeError: Cannot set property 'method' of undefined
at WebsocketProvider._addResponseCallback (node_modules/web3-providers-ws/src/index.js:197:39)
at WebsocketProvider.send (node_modules/web3-providers-ws/src/index.js:252:10)
at RequestManager.send (node_modules/web3/lib/web3/requestmanager.js:58:32)
at Eth.get [as accounts] (node_modules/web3/lib/web3/property.js:107:62)
at Object.<anonymous> (test/e2e/TestScheduleTx.ts:75:34)
at Generator.next (<anonymous>)
at fulfilled (test/e2e/TestScheduleTx.ts:4:58)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
Der einzige Unterschied zwischen HTTP-Anbieter und WS-Anbieter besteht darin, ws://localhost:5454
anstelle von http://localhost:8545
. RPC, mit dem ich spreche, ist ganache-cli 6.1.6.
Stellen Sie sicher, dass Sie ganache-cli@beta
installiert haben
Sie müssen beim Einstellen des Anbieters um den send
und das sendAsync
Problem herumhacken.
So:
export const setProvider = (provider: any) =>
Contracts.concat(HumanFriendlyToken).forEach((contract) => {
contract.setProvider(provider)
if (typeof contract.currentProvider.sendAsync !== "function") {
contract.currentProvider.sendAsync = function() {
return contract.currentProvider.send.apply(contract.currentProvider, arguments)
}
}
})
^ Stellen Sie sicher, dass Sie KEINEN Pfeil () => Funktion oben verwenden, da dies an den Bereich gebunden ist, und das wollen wir nicht.
Sollte danach funktionieren
Ist Ihnen bewusst, dass die API für RPC und WS unterschiedlich ist? Nicht sicher, ob Ganache dies unterstützt, mit dem "normalen" Geth müssen Sie es wie starten geth --ws
. Dadurch wird die Websocket-API 8546
standardmäßig an den Port gebunden.