Кажется, что на моем компьютере/веб-браузере Google Chrome медленно вводит метамаску. Поэтому я должен написать что-то вроде этого, чтобы мое приложение фактически получило экземпляр web3 вместо сбоя:
setTimeout(function(){
if (typeof web3 !== 'undefined'){
console.log('getting web3');
App.web3Provider = web3.currentProvider;
}
else {
console.log('No Web3 instance given!');
// flash modal saying "please download Metamask"
}
web3 = new Web3(App.web3Provider);
return App.initContract(web3);
}, 500);
Однако это не очень хорошо работает с библиотекой Truffle-Contract js, которой сразу нужен экземпляр web3. У кого-нибудь есть обходной путь или исправление для этого? Спасибо.
Библиотеке truffle-contract
не нужен экземпляр web3 сразу. Он должен быть там только тогда, когда вы начинаете пытаться его использовать.
var contract = require("truffle-contract");
var my_contract_json = require('../../../truffle/build/contracts/MyContract.json');
var MyContract;
var my_contract_deployed;
window.onload = function() {
if (typeof web3 !== 'undefined') {
window.web3 = new Web3(web3.currentProvider);
MyContract = contract(my_contract_json);
MyContract.setProvider(web3.currentProvider);
MyContract.deployed().then(function(instance) {
my_contract_deployed = instance;
// doWhateverUIStuff();
});
}
}
См. рабочий пример здесь: https://github.com/realitykeys/realitycheck/blob/8674f7b07cef2c4c96762c30befd549138bdb8e4/assets/js/scripts/main.js#L3398 .
Алекс