我是全新的web3和solidity development。试着在我的第一个dapp上工作,只是为了更多地了解这个世界。我使用的是metamask,在浏览器中也没有错误。我正在做一个发送事务,结果没有在控制台中弹出,但也没有错误。请帮助我改进我的代码,并指导我正确的方向。
const web3 = new Web3(Web3.givenProvider || "ws://localhost:8545");
async function requestWeb3() {
await window.ethereum.request({ method: "eth_requestAccounts" });
}
requestWeb3();
let account;
const contractABI = [
{
"inputs": [],
"name": "buyAd",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "lastPrice",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
]
const contractAddress = "0x933ef849cca1c037c5b335ce5ea1c309a6de6d67";
const contract = new web3.eth.Contract(contractABI, contractAddress);
web3.eth.getAccounts().then(accounts => {
console.log(accounts[0]);
accounts = accounts;
})
const connectBtn = document.getElementById("connect");
connectBtn.addEventListener('click', () => {
console.log('click');
contract.methods.buyAd().send({
from:accounts[0],
to:contractAddress,
value: "1000000000000000000",
data: "0xdf"
}, function (err, result) {
if (err) {
console.log("Error!", err);
return
}
console.log(result);
})
});
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract AdvertisementAuction {
uint public lastPrice = 0;
function buyAd() payable public {
require(msg.value > lastPrice, "This advertisement costs more then the inputed value.");
lastPrice = msg.value;
}
}
1条答案
按热度按时间3vpjnl9f1#
尝试使用以下脚本:
我们检查一下
window.ethereum
存在,然后创建一个window.web3
对象,使用window.ethereum对象作为输入提供程序。在这种情况下await window.ethereum.send('eth_requestAccounts')
函数调用弹出的ui对话框,该对话框请求用户允许将dapp连接到metamask。它应该有效。让我知道:)