Я тестирую и создаю смарт-контракт для отправки эфира на одну учетную запись, используя TestRPC, Truffle и Metamask.
У меня есть страница с кнопкой, когда я нажимаю на кнопку, она запускает событие submitEtherWallet.
submitEtherToWallet: function() {
MyWallet.deployed().then(function(instance){
return instance.sendTransaction({from: account, to: instance.address, value: web3.toWei(5, 'ether')});
}).then(function(result) {
App.basicInfoUpdate();
});
},
Метод, по-видимому, работает хорошо, потому что метамаска открывает всплывающее окно для подтверждения транзакции.
После нажатия отправить транзакцию:
Вы уверены, что в коде "from: account" относится к account[0] ?
После нескольких часов, застрявших с этой проблемой, я понял, что, по-видимому, моя метамаска работала в другом экземпляре web3, чем мой testrpc, это странная ситуация.
Metamask открывал правильное всплывающее окно учетной записи для подтверждения транзакции, но метамаска бэкэнда пыталась отправить транзакцию с другой учетной записью, я не знаю, как это произошло, но я заменил свой addEventListener обратно на оригинал из трюфельного веб-пакета и явно это устранило проблему.
window.addEventListener('load', function() {
// Checking if Web3 has been injected by the browser (Mist/MetaMask)
if (typeof web3 !== 'undefined') {
console.warn("Using web3 detected from external source. If you find that your accounts don't appear or you have 0 MetaCoin, ensure you've configured that source properly. If using MetaMask, see the following link. Feel free to delete this warning. :) http://truffleframework.com/tutorials/truffle-and-metamask")
// Use Mist/MetaMask's provider
window.web3 = new Web3(web3.currentProvider);
} else {
console.warn("No web3 detected. Falling back to http://127.0.0.1:9545. You should remove this fallback when you deploy live, as it's inherently insecure. Consider switching to Metamask for development. More info here: http://truffleframework.com/tutorials/truffle-and-metamask");
// fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
window.web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:9545"));
}
App.start();
});
Как видно на принтскрине, metamask пытался отправить транзакцию через кошелек «0xf9...», а не через кошелек, который был во всплывающем окне.
Вы можете перезапустить testrpc. Я столкнулся с той же проблемой, перезапуск testrpc решил проблему
Гильерме Флорес