100 lines
3.5 KiB
JavaScript
100 lines
3.5 KiB
JavaScript
import { ethers } from "./pages/demo/ethers-5.6.esm.min.js";
|
|
import { abi, contractAddress } from "./pages/demo/constants.js";
|
|
|
|
const connectButton = document.getElementById("connectButton");
|
|
const withdrawButton = document.getElementById("withdrawButton");
|
|
const fundButton = document.getElementById("fundButton");
|
|
const balanceButton = document.getElementById("balanceButton");
|
|
connectButton.onclick = connect;
|
|
withdrawButton.onclick = withdraw;
|
|
fundButton.onclick = fund;
|
|
balanceButton.onclick = getBalance;
|
|
|
|
async function connect() {
|
|
if (typeof window.ethereum !== "undefined") {
|
|
try {
|
|
await ethereum.request({ method: "eth_requestAccounts" });
|
|
} catch (error) {
|
|
console.log(error);
|
|
}
|
|
connectButton.innerHTML = "Connected";
|
|
const accounts = await ethereum.request({ method: "eth_accounts" });
|
|
console.log(accounts);
|
|
} else {
|
|
connectButton.innerHTML = "Please install MetaMask";
|
|
}
|
|
}
|
|
|
|
async function withdraw() {
|
|
console.log(`Withdrawing...`);
|
|
if (typeof window.ethereum !== "undefined") {
|
|
const provider = new ethers.providers.Web3Provider(window.ethereum);
|
|
await provider.send("eth_requestAccounts", []);
|
|
const signer = provider.getSigner();
|
|
const contract = new ethers.Contract(contractAddress, abi, signer);
|
|
try {
|
|
const transactionResponse = await contract.withdraw();
|
|
await listenForTransactionMine(transactionResponse, provider);
|
|
// await transactionResponse.wait(1)
|
|
} catch (error) {
|
|
console.log(error);
|
|
}
|
|
} else {
|
|
withdrawButton.innerHTML = "Please install MetaMask";
|
|
}
|
|
}
|
|
|
|
async function fund() {
|
|
const ethAmount = document.getElementById("ethAmount").value;
|
|
console.log(`Funding with ${ethAmount}...`);
|
|
if (typeof window.ethereum !== "undefined") {
|
|
/* Need:
|
|
provider / connection to the blockchain
|
|
signer / wallet / someone with gas
|
|
contract that we are interacting with
|
|
ABI & address
|
|
*/
|
|
const provider = new ethers.providers.Web3Provider(window.ethereum);
|
|
const signer = provider.getSigner();
|
|
const contract = new ethers.Contract(contractAddress, abi, signer);
|
|
try {
|
|
const transactionResponse = await contract.fund({
|
|
value: ethers.utils.parseEther(ethAmount),
|
|
});
|
|
await listenForTransactionMine(transactionResponse, provider);
|
|
} catch (error) {
|
|
console.log(error);
|
|
}
|
|
} else {
|
|
fundButton.innerHTML = "Please install MetaMask";
|
|
}
|
|
}
|
|
|
|
async function getBalance() {
|
|
if (typeof window.ethereum !== "undefined") {
|
|
const provider = new ethers.providers.Web3Provider(window.ethereum);
|
|
try {
|
|
const balance = await provider.getBalance(contractAddress);
|
|
console.log(ethers.utils.formatEther(balance));
|
|
} catch (error) {
|
|
console.log(error);
|
|
}
|
|
} else {
|
|
balanceButton.innerHTML = "Please install MetaMask";
|
|
}
|
|
}
|
|
|
|
function listenForTransactionMine(transactionResponse, provider) {
|
|
console.log(`Mining ${transactionResponse.hash}`);
|
|
return new Promise((resolve, reject) => {
|
|
try {
|
|
provider.once(transactionResponse.hash, (transactionReceipt) => {
|
|
console.log(`Completed with ${transactionReceipt.confirmations} confirmations. `);
|
|
resolve();
|
|
});
|
|
} catch (error) {
|
|
reject(error);
|
|
}
|
|
});
|
|
}
|