Web3JS 发送事务
Posted
技术标签:
【中文标题】Web3JS 发送事务【英文标题】:Web3JS Send Transaction 【发布时间】:2021-09-20 06:58:37 【问题描述】:我是 Web3 和 Solidity 开发的新手。尝试开发我的第一个 DAPP 只是为了更多地了解这个世界。我正在使用元掩码,并且在浏览器中也没有出现错误。我正在执行发送事务,结果没有在控制台中弹出,但也没有错误。请帮助我改进我的代码并引导我朝着正确的方向前进。
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】:试试这个脚本:
const Web3 = require("web3");
const ethEnabled = async () =>
if (window.ethereum)
await window.ethereum.send('eth_requestAccounts');
window.web3 = new Web3(window.ethereum);
return true;
return false;
我们检查window.ethereum
是否存在,然后使用我们自己的web3 版本创建一个window.web3
对象,使用window.ethereum 对象作为输入提供者。
在这种情况下,await window.ethereum.send('eth_requestAccounts')
函数会调用弹出 UI 对话框,询问用户是否允许将 dApp 连接到 MetaMask。
它应该可以工作。让我知道:)
【讨论】:
以上是关于Web3JS 发送事务的主要内容,如果未能解决你的问题,请参考以下文章