Вам не хватает последнего аргумента для sendTransaction
обратного вызоваfunction(error, transactionHash) { ... }
В часто задаваемых вопросах по MetaMask говорится:
All Async — думайте о MetaMask как о легком клиенте
У пользователя нет полной цепочки блоков на своем компьютере, поэтому поиск данных может быть немного медленным. По этой причине мы не можем поддерживать большинство синхронных методов. Исключением является:
eth_accounts (web3.eth.accounts)
eth_coinbase (web3.eth.coinbase)
Обычно вызов метода можно сделать асинхронным, просто добавив обратный вызов в качестве последнего аргумента синхронного метода.
См. вики Эфириума об «использовании обратных вызовов»
Это не только техническое ограничение, но и проблема с пользовательским интерфейсом. Когда вы используете синхронные вызовы, вы блокируете пользовательский интерфейс, и в любом случае это плохая практика. Думайте об этом ограничении API как о подарке своим пользователям.
Таким образом, все вызовы web3.js должны иметь обратный вызов в качестве последнего аргумента: единственные вызовы, где это не требуется, — for web3.eth.accounts
и web3.eth.coinbase
. Общая форма обратного вызова function(error, result)
.
deasync
var receiver = "0x541209bd9C60cDb11A5076b785ba1BD44cd15768";
var sender = web3.eth.accounts[0];
web3.eth.sendTransaction({to:receiver,
from:sender,
value:web3.toWei("0.5", "ether")}
,function (err, res){});
DanF