Ich kann Merchant.buy anrufen und erhalte einen Erfolgsrückruf und sehe die Transaktion in meinem Ganache-Cli-Protokoll. Der Benutzer wurde nie aufgefordert.
Ich verwende Brave + Metamask und verweise auf das lokale Netzwerk.
Erwartetes Verhalten: Beim Aufruf von .send fordert Metamask den Benutzer auf.
class Merchant {
static load() {
if (typeof window.web3 !== 'undefined') {
window.web3 = new Web3(Web3.currentProvider);
console.log("Current provider" + Web3.currentProvider);
if (!Web3.currentProvider) {
window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
console.log("web3 is" + window.web3);
} else {
window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
console.log("New web3 is" + window.web3);
}
let c = new window.web3.eth.Contract(Merchant.abi(), Merchant.address());
Merchant.contract = c;
console.log("Loaded contract" + Merchant.contract);
window.web3.eth.getAccounts().then(function(a,b) {
Merchant.accounts = a;
console.log("Merchant accounts: " + Merchant.accounts);
});
}
static buy(amount) {
console.log("buying amount is" + amount);
let accounts = Merchant.accounts;
let c = Merchant.contract;
let account = accounts[0];
let buyParams = {from: account,value: amount};
let v = c.methods.buyKey().send(buyParams);
v.then(function(a,b) {
console.log("Bought successfully result" + (a));
});
}
Web3.currentProvider
sein sollte web3.currentProvider
(Kleinbuchstabe W).
Ich denke, was passiert, ist, dass es Web3.currentProvider
nicht existiert, also greifen Sie auf eine direkte Verbindung zu localhost ( ganache-cli
) zurück und verwenden MetaMask überhaupt nicht.
Benutzer22075
Benutzer22075
Benutzer19510
window.web3
, also müssen Sie verwendenwindow.web3.currentProvider
.Benutzer19510
Benutzer22075
Benutzer19510
window.web3
, was nicht so aussieht, als würden Sie es tun. (Sie verwendenWeb3
, was die Norm ist.)Benutzer22075
Benutzer19510