в контракте у вас есть
constructor() public {
owner == msg.sender;
}
это правильно?
не должно быть
constructor() public {
owner = msg.sender;
}
ОБНОВЛЕНИЕ 1:
// Web3.js instance
window.web3 = new Web3(web3.currentProvider);
Вы пишете web3.currentProvider
. Но в вашем коде web3
нигде не объявлено. Это объявлено в head
?
Из вашего кода я понимаю, что вы не используете metamask
. Если мы используем метамаску, она вставляет на страницу версию библиотеки web3. Мы можем использовать его для получения экземпляра web3, например
var web3 = new Web3(window.web3.currentProvider);
Но если мы не используем метамаску, нам нужно использовать стороннего поставщика для получения экземпляра web3, такого как infura
, и строка кода выше изменится на
var web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io/v3/<<your infura token>>"));
ОБНОВЛЕНИЕ 2:
изменение
// Contract instance
window.contractInstance = new window.web3.eth.contract(abi,myContractAddress)
contractInstance.owner((err, ownerValue) => {
document.querySelector('#owner-address').innerHTML(ownerValue)
})
до
// Contract instance
window.contractInstance = window.web3.eth.contract(abi).at(myContractAddress)
contractInstance.owner((err, ownerValue) => {
document.querySelector('#owner-address').innerHTML = ownerValue;
})
Я развернул тот же контракт на тестовой сети Rinkeby и ее работе. Адрес договора 0x104ec30CD6FDC5889eDff672b7ac8a2a42232F64
ОБНОВЛЕНИЕ 3:
Вопрос был отредактирован, и теперь этот ответ не совпадает с вопросом.