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 konnte es mit kürzlich veröffentlichten truffle-contract
.
Probleme bei mir bisher:
Ein bisschen Arbeit für die Migration, das habe ich bisher gefunden:
web3.utils
. Z.B. fromWei
, usw. toWei
_sha3
getBalance
gibt jetzt einen String zurück und kein BNfromWei
/ toWei
gibt jetzt einen String zurück, wenn bignumber.js
bignumber übergeben wurde ( siehe Problem )web3.eth.filter
entfernt, ist web3.eth.subscribe
stattdessen ein bisschen Refactoring erforderlichweb3.eth.getAccounts
usw. zurückgegeben werden, sind jetzt mit Prüfsumme (dh Groß-/Kleinschreibung verwendet). Siehe DokumenteIch 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 address
wenn 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.
Laxmana
szerte
JohnAllen
Paul S