Truffle & Web3 1.0.0-beta: Funktioniert es für irgendjemanden?

Ich versuche, den neuesten Truffle (3.4.3) und Web3 (1.0.0-beta11) in einer React-App zusammenarbeiten zu lassen.

Es schlägt fehl, wenn ich versuche anzurufenmyContractInstance.deployed()

import { default as Eth} from 'web3-eth';
import { default as Contract } from 'truffle-contract';
import myContract_artifacts from '../../build/contracts/myContract.json';
...
var eth = new Eth(Eth.givenProvider || "http://localhost:8545");
var myContractDef = Contract(myContract_artifacts);
myContractDef.setProvider( eth.currentProvider);
var myContractInstance = await myContractDef.deployed();

Die letzte Zeile wirft einen Fehler mit dem http-Anbieter localhost (testrpc v4.0.1):

Uncaught (in promise) TypeError: Cannot read property 'apply' of undefined
at Provider.sendAsync (bundle.js:113598)
at RequestManager.sendAsync (bundle.js:121952)
at Object.get [as getNetwork] (bundle.js:23150)
at bundle.js:114052
at Promise (<anonymous>)
at Function.detectNetwork (bundle.js:114043)
at Function.deployed (bundle.js:113991)
at App.componentDidMount (bundle.js:60259)
at bundle.js:68136
at measureLifeCyclePerf (bundle.js:67947)
at bundle.js:68135
at CallbackQueue.notifyAll (bundle.js:39530)
at ReactReconcileTransaction.close (bundle.js:70093)
at ReactReconcileTransaction.closeAll (bundle.js:26044)
at ReactReconcileTransaction.perform (bundle.js:25991)
at batchedMountComponentIntoNode (bundle.js:41397)
at ReactDefaultBatchingStrategyTransaction.perform (bundle.js:25978)
at Object.batchedUpdates (bundle.js:69759)
at Object.batchedUpdates (bundle.js:13827)
at Object._renderNewRootComponent (bundle.js:41590)
at Object._renderSubtreeIntoContainer (bundle.js:41672)
at render (bundle.js:41693)

aber auch mit Metamask (v3.9.0):

Uncaught (in promise) Error: MetamaskInpageProvider - sendAsync not overwritten
    at MetamaskInpageProvider.sendAsync (inpage.js:219)
    at Provider.sendAsync (bundle.js:113598)
    at RequestManager.sendAsync (bundle.js:121952)
    at Object.get [as getNetwork] (bundle.js:23150)
    at bundle.js:114052
    at Promise (<anonymous>)
    at Function.detectNetwork (bundle.js:114043)
    at Function.deployed (bundle.js:113991)
    at App.componentDidMount (bundle.js:60259)
    at bundle.js:68136
    at measureLifeCyclePerf (bundle.js:67947)
    at bundle.js:68135
    at CallbackQueue.notifyAll (bundle.js:39530)
    at ReactReconcileTransaction.close (bundle.js:70093)
    at ReactReconcileTransaction.closeAll (bundle.js:26044)
    at ReactReconcileTransaction.perform (bundle.js:25991)
    at batchedMountComponentIntoNode (bundle.js:41397)
    at ReactDefaultBatchingStrategyTransaction.perform (bundle.js:25978)
    at Object.batchedUpdates (bundle.js:69759)
    at Object.batchedUpdates (bundle.js:13827)
    at Object._renderNewRootComponent (bundle.js:41590)
    at Object._renderSubtreeIntoContainer (bundle.js:41672)

Ich habe die gleichen Fehler, wenn ich versuche:

myContractDef.deployed().then( function( error, result)  { ... } )
Ich habe das gleiche Problem. Es scheint, dass es in web3js 1.0 viele Änderungen gegenüber der stabilen Version gibt. Hast du eine Lösung gefunden?
Noch keine Lösung und ich konnte keine Informationen zu Truffle GitHub finden, wann sie planen, es mit Web3 1.0 zum Laufen zu bringen.
Haben Sie ein Beispiel-Repo, das andere ausprobieren könnten?
Das passiert mir gerade ... habe gerade 'npm install --save' des Standard-Zeugs gemacht ...

Antworten (3)

Ich konnte es mit kürzlich veröffentlichten truffle-contract.

  • web3@1.0.0-beta.20
  • truffle-contract@3.0.0
  • Trüffel@3.4.9

Probleme bei mir bisher:

  • funktioniert nicht mit http-Anbieter: "TypeError: Cannot read property 'apply' of undefined" UPDATE: Es gibt eine Problemumgehung für dieses Problem, überprüfen Sie die Kommentare zu dem verlinkten Problem
  • Die Seitenaktualisierung im Browser führt dazu, dass web3-Funktionen angehalten werden. Ich untersuche immer noch, ob es sich um einen Fehler in meinem Code UPDATE handelt: Chrome-Update auf Version 61.0.3163.91 hat dieses Problem behoben

Ein bisschen Arbeit für die Migration, das habe ich bisher gefunden:

  • util-Funktionen verschoben nach web3.utils. Z.B. fromWei, usw. toWei_sha3
  • getBalancegibt jetzt einen String zurück und kein BN
  • fromWei/ toWeigibt jetzt einen String zurück, wenn bignumber.jsbignumber übergeben wurde ( siehe Problem )
  • web3.eth.filterentfernt, ist web3.eth.subscribestattdessen ein bisschen Refactoring erforderlich
  • Konten, die von web3.eth.getAccountsusw. zurückgegeben werden, sind jetzt mit Prüfsumme (dh Groß-/Kleinschreibung verwendet). Siehe Dokumente

Ich kann die Truffle-Leute nicht dazu bringen, auf Gitter zu antworten, aber hier ist die Version von web3 , die sie in der Truffle-Suite verwenden, von der bekannt ist, dass sie funktioniert (ich verwende sie gerade): (von ihrem package.json:"web3": "^0.20.1",

Ich habe zu dieser Version von web3 gewechselt und die Bereitstellung scheint korrekt zu funktionieren.

Jetzt bekomme ich eine, invalid addresswenn ich den Vertrag verwende, aber das ist wahrscheinlich ein anderes Problem. (seltsam genug Vertrag.Adresse ist gültig ...)

Ich bin auf ein ähnliches Problem gestoßen, bei dem web3 nicht funktioniert und denselben Fehler ausgelöst hat.

Der Grund ist, dass ich die angeblich stabile Version web3@0.20.6 verwendet habe, aber es scheint jetzt Probleme mit der Abwärtskompatibilität zu geben.

Ich habe gerade die neueste web3-Version (web3@1.0.0-beta.34) mit installiert

npm install web3@latest --save

und jetzt funktioniert es wieder.