Я пытаюсь заставить последнюю версию Truffle (3.4.3) и Web3 (1.0.0-beta11) работать вместе в приложении React.
Не получается, когда я пытаюсь позвонитьmyContractInstance.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();
последняя строка выдает ошибку с http-провайдером 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)
но и с 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)
У меня те же ошибки, когда я пытаюсь:
myContractDef.deployed().then( function( error, result) { ... } )
Я смог заставить его работать с недавно выпущенным файлом truffle-contract
.
Проблемы для меня до сих пор:
Немного работы, необходимой для миграции, это то, что я нашел до сих пор:
web3.utils
. Например. fromWei
, toWei
, sha3
и т.д.getBalance
теперь возвращает строку, а не BNfromWei
/ toWei
теперь возвращает строку при bignumber.js
передаче большого числа ( см. проблему )web3.eth.filter
удалено, web3.eth.subscribe
вместо этого требуется небольшой рефакторингweb3.eth.getAccounts
etc., теперь имеют контрольную сумму (т. е. используются верхний/нижний регистр). Посмотреть документыЯ не могу заставить людей, занимающихся трюфелями, ответить на Gitter, но вот версия web3 , которую они используют в наборе трюфелей, которая, как известно, работает (я использую ее прямо сейчас): (от их package.json
:"web3": "^0.20.1",
Я перешел на эту версию web3, и развертывание работает правильно.
Теперь я получаю, invalid address
когда я использую контракт, но это, вероятно, другая проблема. (как ни странно договор.адрес действителен...)
Я столкнулся с аналогичной проблемой, когда web3 не работал и выдавал ту же ошибку.
Причина в том, что я использовал предположительно стабильную версию web3@0.20.6, но теперь, похоже, возникли проблемы с обратной совместимостью.
Я только что установил последнюю версию web3 (web3@1.0.0-beta.34), используя
npm install web3@latest --save
и теперь снова работает.
Лакшмана
серте
ДжонАллен
Пол С