在本文中,我们将学习如何将以太坊智能合约连接到React应用程序,并使用户能够与之交互。
先决条件
要在浏览器中安装MetaMask扩展
一个代码编辑器
关于以下主题的一些知识:以太坊,MetaMask,React,TypeScript
在以太坊主网上工作要花真金白银!
在本教程中,我假设的是你的MetaMask设置为使用Rinkeby。Rinkeby是一个复制主网的测试网络,允许我们免费部署和使用智能合约。
项目
我们将为这个基于区块链的聊天建立一个界面,如下所示:
左边的侧边栏包含一个按钮,用于连接到聊天或指示连接用户的地址。
右侧的聊天框,显示消息和输入栏。
在本篇文章中,我们不会关注如何让UI更漂亮,我们的目标是关注如何用最直接的方式与智能合约交互。
我已尽力使本教程易于理解,但如果有些东西还是不甚清晰,也不用灰心,你会在本文的最后找到一个包含已完成项目的GitHub存储库的链接。
智能合约
首先,我们要连接到前端的智能合约,如下所示:
event?、emit这些东西是什么?
event用于通知外部用户区块链上发生的事情。
在我们的例子中,“外部用户”是我们的前端应用程序,它将监听发送到智能合约的新消息,因此我们可以立即在我们的UI中显示它们。
前端
我准备了一个样板,这样你就可以马上开始编码了。
以下是启动项目的Github链接:
朱啸虎在朋友圈否认被拘留传闻:6月18日消息,今日,有传闻称金沙江创投管理合伙人朱啸虎被拘留。据了解,朱啸虎本人已在朋友圈否认相关传闻,并称应该网络秩序确实需要严格整顿。而谣言的来源指向一位微博用户,目前,微博内容已显示为“更正:说的是闯球场的少年被拘留”。(证券时报)[2023/6/18 21:45:33]
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,这样我们就可以利用它:
唐山上线知识产权区块链存证取证平台:1月15日消息,唐山市知识产权证据管理中心正式上线运行,利用区块链技术分布式存储、不可篡改、安全保密及可溯源等特性,为商标、专利、商业秘密等知识产权执法维权提供高效快捷的存证取证服务,进一步规范了数据存证取证流程。(唐山广电网)[2023/1/15 11:13:25]
以现在,我们有一种方法来检测是否安装了MetaMask,如果没有安装MetaMask,我们可以警告用户,他们需要在浏览器上安装MetaMask。
接下来,让我们为“ConnectWithMetaMask”按钮添加一个onClick处理程序:
现在,当用户单击ConnectWithMetaMask时,MetaMask扩展程序将提示一个模式并询问要使用哪个帐户:
MetaMask要求我们连接到我们的聊天
现在已连接!
侧边栏现在显示你的以太坊地址!
B-在我们的前端实例化智能合约
Polygon联合创始人:未来非托管人的问题是安全问题:金色财经联合Coinlive现场报道,“Token 2049”峰会活动在新加坡举办,在题为 \"未来之路 \"的圆桌讨论中。Ledger主席兼首席执行官Pascal Gauthier表示,要吸引人们进入加密货币,必须对他们有意义,而不像仅仅从应用商店下载一个应用程序。他认为NFT是惊人的,因为用户并不关心比特币和以太坊之间的战争,他们关心的反而是收藏。在过去的10年里,所有的品牌都开始了数字之旅,而我们现在所处的位置,已经是Web3了。 这是一个非常自然的业务扩展;他们明白NFT确实有实用性。
Polygon的联合创始人Jaynti Kanani指出,目前正在发生的是,Web2公司正在想办法与Web3平台整合,给用户提供Web3层面的东西。他认为未来非托管人的问题是安全问题。钱包的第二个安全问题是账户提取和智能合约钱包,这对用户来说是很难理解的。[2022/9/29 6:01:18]
为了能够获取信息并使用户能够发送消息,我们需要有一种方法与我们的智能合约进行通信。
我们要使用ethers库。
ethers是一个库,可以帮助我们的前端与智能合约进行对话。ethers通过提供商(在我们的例子中是MetaMask)连接到以太坊节点,它可以帮我们做很多事情。
让我们创建另一个Hook,它将允许我们在ethers的帮助下与我们的智能合约交互:
让我们来分解一下:
我们先检查一下window.ethereum是否存在并从中获取了Web3Provider。
如果已经定义了accountis,这意味着用户点击了“ConnectWithMetaMask”按钮,webThreeProvider.getSigner()会返回给我们他们的地址。
数据:近24小时全网爆仓3.38亿美元,比特币爆仓1.24亿美元:金色财经报道,据Coinglass数据,近24小时全网爆仓3.38亿美元,其中比特币爆仓1.24亿美元,以太坊爆仓1.19亿美元。[2022/9/14 13:28:11]
最后,返回一个带有新的ether.contract()的合约实例。
实例化我们的智能合约
前往App.tsx,在那里我们可以使用我们创建的hook:
你是否注意到了,我们这里有一个错误,需要去做两件事情来解决问题:
contractAddress不是合约地址。
./contract/BlockchainChat-artifact.json是空的。
合约地址
这个地址告诉我们在哪里找到区块链上的区块链聊天智能合约。
你可以使用我为大家部署到Rinkeby的以下地址之一:
0x56cD072f27f06a58175aEe579be55601E82D8fcD
0xD99f113cAd1fe2eeebe0E7383415B586704DB5a3
0x23CAEEA0Bb03E6298C2eAaa76fBffa403c20984f
选择其中任何一个,它们都是指向已部署的区块链Chat智能合约的地址。
合约的ABI
我们的Hook期望一个来自BlockchainChatArtifact的ABI。这是两个新概念…
当你编译一个智能合约时,你会得到所谓的工件。
在Remix中(一个用于创建、编译、测试和部署智能合约的IDE),一旦你的智能合约已经编译完成,你将在contracts/artifacts下找到工件。
这个工件包含库的链接、字节码、部署的字节码、gas估计、方法标识符和ABI。它用于将库地址链接到文件。
现在,什么是“ABI”:
ABI代表应用程序二进制接口。ethers需要我们的BlockchainChat智能合约的ABI,以便知道我们的智能合约可以做什么(方法、事件、错误等),并为我们的前端提供与它交互的一种方式。
马来西亚首家电竞酒店SEM9 Senai首发NFT系列“99LIVES”:金色财经报道,作为东南亚第一家电竞酒店,SEM9 Senai 宣布在 OpenSea 上推出首个酒店类 NFT 系列“99LIVES”,共计 500 枚,铸造价格为 0.065 ETH。SEM9 Senai 酒店由知名电竞组织 SEM9 创建并得到 SEAGM 和 Aiken Digital 的投资,99LIVES NFT 持有者将获得 SEM9 Senai 免费酒店住宿、限量版 SEM9 商品、参加实体和数字活动的邀请、以及访问 SEM9 幕后电竞训练等福利。(itnewsonline)[2022/9/12 13:23:37]
如果你没有自己部署智能合约,仍然可以通过复制./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
标签:METAMmetamaskMASKMETmetamask官网下载安卓版metamask币种logoX-MASK Coinmetis币生态锁仓2023
7月4日,「000.eth」ENS域名以300ETH的价格成交,创下了历史第二高的ENS域名成交价纪录。在这笔交易发生之前,ENS域名市场已经躁动数日.
1900/1/1 0:00:00那些认为加密货币崩盘尚未到头的空头们又得到了一个押注比特币下跌的新工具。金融机构ProShares于周二推出了做空比特币策略ETF,这是美国第一只与比特币挂钩的反向ETF.
1900/1/1 0:00:00关键要点: 截至2022年2月,币安链和币安智能链演变为一个统一的模块化系统,称为BNB链。自2017年以来,BNB链已经走过了漫长的道路,其架构向模块化的演变,带来了潜在的重要价值主张.
1900/1/1 0:00:00原文作者:?SnehaPrajapati 去中心化为什么重要? 资本主义世界的运行原则是获取更多的资源,这其中包括从他人身上获取财富。而一个中央集权的实体会导致财富和权力的不平衡分配,毫无疑问,这一特征正在破坏现今社会.
1900/1/1 0:00:00金色财经报道,6月29日消息,Polygon已完成了自定义区块链扩展解决方案“Avail”部署,开发人员可在Polygon主链和其他区块链上启动基于Avail的区块链应用程序.
1900/1/1 0:00:00最近,关于知名借贷平台Celsius资不抵债的传闻甚嚣尘上,Celsius及其他陷入危机的大机构抛售资产筹措资金引发了stETH价格的脱钩。目前,在Curve上stETH与ETH的汇率大概维持在0.937左右.
1900/1/1 0:00:00