first contact
This commit is contained in:
parent
020e5259eb
commit
f8abf6fcad
|
|
@ -0,0 +1,5 @@
|
||||||
|
rm "./frontend/src/evm-output/*"
|
||||||
|
|
||||||
|
cp "./evm/ignition/deployments/chain-31337/deployed_addresses.json" "./frontend/src/evm-output/deployed_addresses.json"
|
||||||
|
|
||||||
|
cp "./evm/ignition/deployments/chain-31337/artifacts/MessageBoxModule#MessageBox.json" "./frontend/src/evm-output/MessageBox.artifacts.json"
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
// SPDX-License-Identifier: UNLICENSED
|
||||||
|
pragma solidity ^0.8.24;
|
||||||
|
|
||||||
|
contract MessageBox {
|
||||||
|
address public immutable owner;
|
||||||
|
string public message;
|
||||||
|
|
||||||
|
event MessageSet(string oldMessage, string newMessage, uint changedAt);
|
||||||
|
|
||||||
|
modifier onlyOwner() {
|
||||||
|
require(msg.sender == owner, "Only the owner can do that.");
|
||||||
|
_;
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(string memory _initialMessage) {
|
||||||
|
owner = msg.sender;
|
||||||
|
message = _initialMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMessage() external view returns (string memory) {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setMessage(string calldata _newMessage) external onlyOwner {
|
||||||
|
message = _newMessage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";
|
||||||
|
|
||||||
|
const INITIAL_MESSAGE = "Hello OsiPad!";
|
||||||
|
|
||||||
|
const MessageBoxModule = buildModule("MessageBoxModule", (m) => {
|
||||||
|
const initialMessage = m.getParameter("initialMessage", INITIAL_MESSAGE);
|
||||||
|
|
||||||
|
const messageBox = m.contract("MessageBox", [initialMessage]);
|
||||||
|
|
||||||
|
return { messageBox };
|
||||||
|
});
|
||||||
|
|
||||||
|
export default MessageBoxModule;
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { web3 } from "./web3";
|
import { messageBox, web3 } from "./web3";
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const [connectedAccount, setConnectedAccount] = useState("");
|
const [connectedAccount, setConnectedAccount] = useState("");
|
||||||
|
const [message, setMessage] = useState("");
|
||||||
|
|
||||||
// https://docs.web3js.org/guides/getting_started/metamask/#react-app
|
// https://docs.web3js.org/guides/getting_started/metamask/#react-app
|
||||||
async function connectMetamask() {
|
async function connectMetamask() {
|
||||||
|
|
@ -15,6 +16,9 @@ function App() {
|
||||||
|
|
||||||
// Show the first connected account in the page
|
// Show the first connected account in the page
|
||||||
setConnectedAccount(accounts[0]);
|
setConnectedAccount(accounts[0]);
|
||||||
|
|
||||||
|
const _message: string = await messageBox.methods.getMessage().call();
|
||||||
|
setMessage(_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
@ -35,6 +39,8 @@ function App() {
|
||||||
|
|
||||||
{/* Display the connected account */}
|
{/* Display the connected account */}
|
||||||
<h2>Connected account address: {connectedAccount}</h2>
|
<h2>Connected account address: {connectedAccount}</h2>
|
||||||
|
|
||||||
|
<h2>Message: {message}</h2>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"MessageBoxModule#MessageBox": "0x5FbDB2315678afecb367f032d93F642f64180aa3"
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
import { Web3 } from "web3";
|
import { Web3 } from "web3";
|
||||||
|
import messageBoxArtifacts from "./evm-output/MessageBox.artifacts.json";
|
||||||
|
import deployedAddresses from "./evm-output/deployed_addresses.json";
|
||||||
|
|
||||||
export let web3: Web3;
|
export let web3: Web3;
|
||||||
|
|
||||||
|
|
@ -10,3 +12,8 @@ if (window.ethereum) {
|
||||||
} else {
|
} else {
|
||||||
alert("ERROR: Please download MetaMask.");
|
alert("ERROR: Please download MetaMask.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const messageBox = new web3!.eth.Contract(
|
||||||
|
messageBoxArtifacts.abi,
|
||||||
|
deployedAddresses["MessageBoxModule#MessageBox"]
|
||||||
|
);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue