State.init({ chainId: 0, count: 0, message: "", address: "", }); if (Ethers.provider()) { Ethers.provider() .getNetwork() .then((chainIdData) => { if (chainIdData?.chainId) { State.update({ chainId: chainIdData.chainId }); } }); } const messageContractAddress = "0x319125a559454a728034f380ff05e4e6b34cd7ad"; const messageABI = [ { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "sender", type: "address", }, { indexed: true, internalType: "string", name: "receiver", type: "string", }, { indexed: false, internalType: "string", name: "content", type: "string", }, ], name: "MessageSent", type: "event", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, ], name: "getInboxCount", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, { internalType: "uint256", name: "index", type: "uint256", }, ], name: "getMessage", outputs: [ { internalType: "string", name: "", type: "string", }, { internalType: "string", name: "", type: "string", }, { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "uint256", name: "", type: "uint256", }, ], name: "inbox", outputs: [ { internalType: "address", name: "sender", type: "address", }, { internalType: "string", name: "receiver", type: "string", }, { internalType: "string", name: "content", type: "string", }, { internalType: "uint256", name: "timestamp", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "string", name: "receiver", type: "string", }, { internalType: "string", name: "content", type: "string", }, ], name: "sendMessage", outputs: [], stateMutability: "nonpayable", type: "function", }, ]; const sendMessage = async () => { const messageContract = new ethers.Contract( messageContractAddress, messageABI, Ethers.provider().getSigner() ); messageContract.getMessage().then((res) => { State.update({ count: res }); }); State.update({ chainId: chainIdData.chainId }); messageContract.sendMessage(state.address, state.message); }; return ( <> <div>Near Message</div> <input type="text" placeholder="Near Wallet Address" value={state.address} /> <input type="text" placeholder="Message" value={state.message} /> <button onClick={sendMessage}>SEND</button> <p>Total Message: {state.count} EA </p> {state.chainId} <Web3Connect /> </> );