火星链 火星链
Ctrl+D收藏火星链
首页 > 火必 > 正文

metamask:教程:创建由以太坊支持的 Web3 聊天

作者:

时间:1900/1/1 0:00:00

在本文中,我们将学习如何将以太坊智能合约连接到React应用程序,并使用户能够与之交互。

先决条件

要在浏览器中安装MetaMask扩展

一个代码编辑器

关于以下主题的一些知识:以太坊,MetaMask,React,TypeScript

在以太坊主网上工作要花真金白银!

在本教程中,我假设的是你的MetaMask设置为使用Rinkeby。Rinkeby是一个复制主网的测试网络,允许我们免费部署和使用智能合约。

项目

我们将为这个基于区块链的聊天建立一个界面,如下所示:

左边的侧边栏包含一个按钮,用于连接到聊天或指示连接用户的地址。

右侧的聊天框,显示消息和输入栏。

在本篇文章中,我们不会关注如何让UI更漂亮,我们的目标是关注如何用最直接的方式与智能合约交互。

我已尽力使本教程易于理解,但如果有些东西还是不甚清晰,也不用灰心,你会在本文的最后找到一个包含已完成项目的GitHub存储库的链接。

智能合约

首先,我们要连接到前端的智能合约,如下所示:

event?、emit这些东西是什么?

event用于通知外部用户区块链上发生的事情。

在我们的例子中,“外部用户”是我们的前端应用程序,它将监听发送到智能合约的新消息,因此我们可以立即在我们的UI中显示它们。

前端

我准备了一个样板,这样你就可以马上开始编码了。

以下是启动项目的Github链接:

Gensyn完成由a16z领投4300万美元A轮融资:金色财经报道,Gensyn是一家为人工智能平台(AI)提供基于区块链的计算资源的提供商,已获得由风险投资巨头a16z领投的4300万美元A轮融资。这家总部位于英国的公司的协议使开发人员能够在较小的数据中心、个人游戏计算机和其他连接的硬件上构建人工智能系统,并按需付费。Gensysn使用加密验证网络,无需中介即可让用户确定通过协议共享的机器学习工作是否已正确完成。[2023/6/12 21:30:56]

https://github.com/thmsgbrt/web3-chat-powered-by-ethereum-starter

一旦你克隆了项目,使用npminstall安装依赖项,并用npmstart启动了它,那么花几分钟检查几个文件以了解应用是如何构造的,也是有必要的。这是非常基本的React,就不在此赘述了。

以下是我们的行动计划:

A-允许用户通过MetaMask连接到聊天

B-在我们的前端实例化智能合约

C-从我们的智能合约中获取消息并显示它们

D-允许用户在聊天中发布消息

E-收听新信息

A-允许用户通过MetaMask连接到聊天

要做到这一点,我们首先需要确保MetaMask扩展安装在了浏览器上。

让我们创建一个Hook来实现这一点:

解释:

MetaMask在window.ethereum注入了一个全局API。该API允许网站请求用户的以太坊账户,从用户连接的区块链读取数据,并建议用户签署消息和交易。

现在我们已经准备好了Hook,转向Sidebar.tsx,这样我们就可以利用它:

BRC-20代币总市值达1.37亿美元,较上周增长682%:5月2日消息,Ordspace数据显示,超过8800种BRC-20代币的总市值达1.37亿美元,相较于一周前的1750万美元增长了682%。

匿名链上分析师Domo在3月初创建了BRC-20代币标准,以促进比特币区块链上同质化代币的发行和转移,这项实验性发明是在Ordinals Protocol上线几周后推出的。

与ERC-20标准不同,BRC-20标准缺乏与智能合约交互的能力。另外,大多数活跃的BRC-20代币都属于meme币。截至发稿时,使用BRC-20标准铸造的前三种meme币分别是ORDI、OG和PEPE。[2023/5/2 14:38:46]

以现在,我们有一种方法来检测是否安装了MetaMask,如果没有安装MetaMask,我们可以警告用户,他们需要在浏览器上安装MetaMask。

接下来,让我们为“ConnectWithMetaMask”按钮添加一个onClick处理程序:

现在,当用户单击ConnectWithMetaMask时,MetaMask扩展程序将提示一个模式并询问要使用哪个帐户:

“胖企鹅”Pudgy Penguins发布品牌建设者指南:金色财经报道,蓝筹NFT项目“胖企鹅”Pudgy Penguins在其官方Discord发布品牌建设者指南,为那些希望在Pudgy Penguins生态系统中建立品牌的用户提供资源,包括颜色、风格建议、字符表、字体等,帮助让社区成员更容易利用Pudgy Penguins知识产权 (IP),扩大利用该NFT系列许可的机会。[2023/4/22 14:19:15]

MetaMask要求我们连接到我们的聊天

现在已连接!

侧边栏现在显示你的以太坊地址!

B-在我们的前端实例化智能合约

为了能够获取信息并使用户能够发送消息,我们需要有一种方法与我们的智能合约进行通信。

我们要使用ethers库。

ethers是一个库,可以帮助我们的前端与智能合约进行对话。ethers通过提供商(在我们的例子中是MetaMask)连接到以太坊节点,它可以帮我们做很多事情。

让我们创建另一个Hook,它将允许我们在ethers的帮助下与我们的智能合约交互:

让我们来分解一下:

我们先检查一下window.ethereum是否存在并从中获取了Web3Provider。

如果已经定义了accountis,这意味着用户点击了“ConnectWithMetaMask”按钮,webThreeProvider.getSigner()会返回给我们他们的地址。

风险工作室Spartan Labs负责人离职:金色财经报道,Spartan Group旗下1亿美元风险工作室Spartan Labs的负责人Shaun Heng在任职不到一年后悄然离职,目前还不清楚是什么原因促使其离职。据Spartan Labs管理合伙人Kelvin Koh称,该工作室尚未推出项目,但将在本月首次亮相。Shaun Heng 2022年3月被任命为Spartan Labs负责人。之前的Spartan Labs创意和设计负责人Adrian Lai现在负责风险工作室。除了风险工作室之外,Spartan Group还管理着三个独立的投资基金:一个流动性代币基金,一个于2021年6月推出的1.1亿美元的DeFi工具,以及一个于去年3月推出的2亿美元的元宇宙和游戏风险基金。[2023/1/13 11:10:10]

最后,返回一个带有新的ether.contract()的合约实例。

实例化我们的智能合约

前往App.tsx,在那里我们可以使用我们创建的hook:

你是否注意到了,我们这里有一个错误,需要去做两件事情来解决问题:

contractAddress不是合约地址。

./contract/BlockchainChat-artifact.json是空的。

合约地址

这个地址告诉我们在哪里找到区块链上的区块链聊天智能合约。

你可以使用我为大家部署到Rinkeby的以下地址之一:

0x56cD072f27f06a58175aEe579be55601E82D8fcD

0xD99f113cAd1fe2eeebe0E7383415B586704DB5a3

0x23CAEEA0Bb03E6298C2eAaa76fBffa403c20984f

选择其中任何一个,它们都是指向已部署的区块链Chat智能合约的地址。

合约的ABI

我们的Hook期望一个来自BlockchainChatArtifact的ABI。这是两个新概念…

欧盟将提出要求加密货币服务提供商向税务机关报告客户信息的法案:11月30日消息,欧盟委员会将于下周提出一项法案,该法案将要求欧盟地区的加密货币服务提供商向当地国家税务机关报告欧盟内客户的详细信息。文件显示,该法案旨在防止利用·1 加密货币逃避税收,将可能适用于Stablecoin、衍生品以及NFT。[2022/11/30 21:13:12]

当你编译一个智能合约时,你会得到所谓的工件。

在Remix中(一个用于创建、编译、测试和部署智能合约的IDE),一旦你的智能合约已经编译完成,你将在contracts/artifacts下找到工件。

这个工件包含库的链接、字节码、部署的字节码、gas估计、方法标识符和ABI。它用于将库地址链接到文件。

现在,什么是“ABI”:

ABI代表应用程序二进制接口。ethers需要我们的BlockchainChat智能合约的ABI,以便知道我们的智能合约可以做什么(方法、事件、错误等),并为我们的前端提供与它交互的一种方式。

如果你没有自己部署智能合约,仍然可以通过复制./contract/blockchainchat-artifacts.json中的以下工件来继续本文。

指向工件的Gist链接:

https://gist.github.com/thmsgbrt/1db36bc688d6984070badb14652ed65c

应用程序现在应该没有错误了!

C-从我们的智能合约中获取消息并显示它们

现在我们已经在前端实例化了智能合约,我们终于可以获取消息了。打开Chat.tsx并添加以下getMessages函数:

Chat.tsx通过它的props接收chatContract实例,我们可以用它来调用chatContract.getMessages()。通过接收到的消息,我们填充messages状态变量。

如果你的聊天智能合约发布了消息,它们应该在聊天框中可见。否则,让我们继续允许用户发送消息。以下是目前为止你应该看到的:

D-允许用户在聊天中发布消息

在Chat.tsx中,添加以下sendMessage函数来发布消息:

让我们继续,在textarea中输入一条消息并发送它!这应该会提示MetaMask,要求验证交易,继续:

我们UI中的“sendmessage”按钮有不同的状态。它的内容根据交易状态而变化:

“WAIT”表示交易需要用户批准。

“SENDING”表示交易正在被验证。

要查看刚刚发布的消息,请重新加载页面。它就应该会被添加。

但是在用户体验方面,必须重新加载页面以查看是否有新消息发布并不是非常友好的。

E-收听新信息

回到我们的智能合约。正如你所看到的,当用户发布一条消息时,会触发一个事件:

我们可以通过添加以下setupMessageListener函数来监听这个事件:

接着,发送一条新消息,这一次,就应该不必重新加载页面来查看刚刚发布的消息。如果另一个用户发送消息,这显然也是有效的。

最终项目

恭喜完成了本教程的学习。正如上面所承诺的,这里有一个最终项目的链接:

https://github.com/thmsgbrt/web3-chat-powered-by-ethereum-finished-project

Source:https://betterprogramming.pub/create-a-web3-chat-powered-by-ethereum-6886824fad7

标签:AMASCHAASKmetamaskMetaMask下载blockchain安卓mask币圈子metamask小狐狸官网

火必热门资讯
POLY:成为多链世界的最大「卖水人」跨链赛道的下半场叙事如何继续?

原文标题:《成为多链世界的最大「卖水人」,跨链赛道的下半场叙事如何继续?》原文作者:加密世界爱好者Frank此前Bankless发布2022年加密行业预测.

1900/1/1 0:00:00
DAO:国人 DAO 大败局:放心吧 我们都实现不了去中心化自治

相信每个DAO的参与者,都会遇到过以下问题:自称DAO,却跟社群没区别核心团队集权统治招志愿者,白嫖劳动力开会繁琐,难以共识,没人做事简单来说:既不去中心,也不自治,连良好的激励机制也没有.

1900/1/1 0:00:00
DEF:两年前的DeFi弄潮儿 龙头、蓝筹们怎么样了?

距离DefiSummer转眼已经过去2个年头了~Defi经历了2年多的发展,诞生了无数创新性项目,去年的牛市更是掀起了以OHM为代表的Defi2.0盛宴,便眼见他起高楼,眼见他宴宾客.

1900/1/1 0:00:00
NFT:金色Web3.0周报 | 报告:预计到2027年全球NFT市场规模将达98.45亿美元

DeFi数据1.DeFi代币总市值:359.67亿美元 DeFi总市值数据来源:coingecko2.过去24小时去中心化交易所的交易量:16.

1900/1/1 0:00:00
LYT:IOSG Ventures:链上数据分析平台现状与展望

原文作者:Yang引子“数”中自有黄金屋,链上数据潜藏着无尽的Alpha。当我们跟随smartmoney闻风而动,当我们夜以继日地在NFTParadise中寻找trendingNFT,当我们查询.

1900/1/1 0:00:00
Magi:Magic Eden 成为独角兽的秘诀:透明度、创造力和社区

2022年2月,MagicEden面临了一场危机。在几个月前推出快速增长的SolanaNFT市场后,它面临着一个考验.

1900/1/1 0:00:00