«Ошибка: неверный адрес» для dapp, работает на geth (Ganache)

У меня есть контракт, который создает другой контракт в функции. Я тестирую контракт, используя Ganache. При вызове этой функции с помощью geth она работает нормально. Но при вызове его с помощью моего dapp (yoman, gulp, bower и т. д.) он выдает мне «Ошибка: неверный адрес» через консоль браузера.

Я скопировал и вставил логику из моего децентрализованного приложения в geth, и она работает, как и ожидалось, и пользовательский интерфейс Ganache показывает транзакцию.

Ниже приведен код:

web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:7545"));

web3.eth.defaultAccount = web3.eth.accounts[0];

var myContract = web3.eth.contract([abi left out for readability]);    
var contractAddress = '0xae01c97dc970ad45f7be5d23ba72ae24640e90b1';
var contract = myContract.at(contractAddress);

function sendPurchaseTrade() {
    contract.makePurchaseTrade('0x427d25b7c0B71C1944df51765c55Bea1961e0a44', {value: 200000, gas: 3000000});
}

На соответствующей HTML-странице есть кнопка с onclick="sendPurchaseTrade();" .

Вызовы контракта без изменения состояния работают с децентрализованным приложением.

Есть идеи, почему тот же самый код будет работать на geth, но не в моем децентрализованном приложении?

Содержит ли web3.eth.defaultAccountадрес, который вы ожидаете?
Это действительно так. (показано через console.log())
Код работает вне функции. Я предполагаю, что это какая-то проблема с масштабом.

Ответы (1)

Функция, содержащая контрактную транзакцию, должна была содержать оператор web3.eth.default = web3.eth.accounts[0] .