Я сталкиваюсь с проблемой, когда создаю контракт на своем локальном ethereum блокчейне. У меня есть базовый c контракт на регистрацию do c на блокчейне.
Итак, когда я запускаю свой контракт в трюфельной консоли, я могу безупречно вызывать все свои функции, но, когда я создаю веб-страницу с интерфейсом внешнего интерфейса, я не могу открыть метамаску для оплаты.
Мой контракт имеет в основном 2 функции: addDo c и FindDo c. Я провел тест, создавая транзакцию с использованием сайта ремикса, и она работала нормально. На моей странице я все еще могу позвонить findDo c и получить ответ с правильной информацией, но когда я пытаюсь создать транзакцию и заплатить комиссию, метамаска не показывает мне.
У меня всего 4 файла:
- index. html
- app. js
- notaryWebApp. js
- sha256
Коды можно найти здесь: https://github.com/ffelipesimoes/solidity/tree/master/webapp
Основным взаимодействием с блокчейном является нотариус WebApp. js file:
var contract = undefined;
var customProvider = undefined;
var address = "0x6A4494ed32ce0Ab8004fbEAdac534916f88C8d3E";
var abi = undefined;
function notary_init() {
// Check if Web3 has been injected by the browser (Mist/MetaMask)
if (typeof web3 !== 'undefined') {
// Use existing gateway
window.web3 = new Web3(web3.currentProvider);
} else {
alert("No Ethereum interface injected into browser. Read-only access");
}
//contract abi
abi = [...]
contract = new web3.eth.Contract(abi, address);
};
//sends a hash to the blockchain
function notary_send(hash, callback) {
web3.eth.getAccounts(function (error, accounts) {
contract.methods.addDocHash(hash).send({
from: accounts[0]
}, function (error, tx) {
if (error) callback(error, null);
else callback(null, tx);
});
});
};
//looks up a hash on the blockchain
function notary_find(hash, callback) {
contract.methods.findDocHash(hash).call(function (error, result) {
if (error) callback(error, null);
else {
let resultObj = {
mineTime: new Date(result[0] * 1000),
blockNumber: result[1]
}
callback(null, resultObj);
}
});
};
с тех пор, спасибо всем!