在本文中,我們將學習如何將以太坊智能合約連接到React應用程序,并使用戶能夠與之交互。
先決條件
要在瀏覽器中安裝MetaMask擴展
一個代碼編輯器
關于以下主題的一些知識:以太坊,MetaMask,React,TypeScript
在以太坊主網上工作要花真金白銀!
在本教程中,我假設的是你的MetaMask設置為使用Rinkeby。Rinkeby是一個復制主網的測試網絡,允許我們免費部署和使用智能合約。
項目
我們將為這個基于區塊鏈的聊天建立一個界面,如下所示:
左邊的側邊欄包含一個按鈕,用于連接到聊天或指示連接用戶的地址。
右側的聊天框,顯示消息和輸入欄。
在本篇文章中,我們不會關注如何讓UI更漂亮,我們的目標是關注如何用最直接的方式與智能合約交互。
我已盡力使本教程易于理解,但如果有些東西還是不甚清晰,也不用灰心,你會在本文的最后找到一個包含已完成項目的GitHub存儲庫的鏈接。
智能合約
首先,我們要連接到前端的智能合約,如下所示:
event?、emit這些東西是什么?
event用于通知外部用戶區塊鏈上發生的事情。
在我們的例子中,“外部用戶”是我們的前端應用程序,它將監聽發送到智能合約的新消息,因此我們可以立即在我們的UI中顯示它們。
MakerDAO推出DeFi借貸協議Spark:金色財經報道,穩定幣發行商 MakerDAO 宣布推出 Spark,這是一種以 DAI 穩定幣為中心的 DeFi 借貸協議。DAI 是第四大穩定幣,市值為47 億美元,僅次于 USDT、USDC 和 BUSD。通過 Spark,用戶可以使用以太坊、質押以太坊 (stETH) 和 DAI 等資產獲得 DAI 貸款。Spark 獨立于 MakerDAO 的主要機制運行,該機制僅允許用戶生成新的 DAI 作為超額抵押債務。借款人最初可以使用加密資產作為抵押品以 1.1% 的年利率借入 DAI。該借貸平臺采用量身定制的利率模型,其中借貸利率由治理成員通過鏈上投票確定,而不是像 Aave 或其他借貸協議中那樣根據供需波動。
MakerDAO表示,“Spark Protocol 的第一個版本 Spark Lend 是一個專門為提供和借入加密貨幣而設計的借貸市場,重點是 DAI。”從周二開始,所有去中心化金融 (DeFi) 用戶都可以訪問 Spark 協議。[2023/5/9 14:50:27]
前端
我準備了一個樣板,這樣你就可以馬上開始編碼了。
以下是啟動項目的Github鏈接:
https://github.com/thmsgbrt/web3-chat-powered-by-ethereum-starter
一旦你克隆了項目,使用npminstall安裝依賴項,并用npmstart啟動了它,那么花幾分鐘檢查幾個文件以了解應用是如何構造的,也是有必要的。這是非常基本的React,就不在此贅述了。
以下是我們的行動計劃:
A-允許用戶通過MetaMask連接到聊天
B-在我們的前端實例化智能合約
加密貨幣交易所TRT出現流動性問題正在暫停業務:金色財經報道,意大利加密貨幣交易所The Rock Trading(TRT)的用戶收到電子郵件,稱它出現流動性問題,正在 \"中斷 \"其工作。2月17日電子郵件中顯示,公司正在進行內部審計,以確定問題的原因,并評估采取所有適當或必要的舉措來保護客戶和其他利益相關者。到2月21日,該交易所表示它正在暫停其業務。[2023/2/25 12:28:21]
C-從我們的智能合約中獲取消息并顯示它們
D-允許用戶在聊天中發布消息
E-收聽新信息
A-允許用戶通過MetaMask連接到聊天
要做到這一點,我們首先需要確保MetaMask擴展安裝在了瀏覽器上。
讓我們創建一個Hook來實現這一點:
解釋:
MetaMask在window.ethereum注入了一個全局API。該API允許網站請求用戶的以太坊賬戶,從用戶連接的區塊鏈讀取數據,并建議用戶簽署消息和交易。
現在我們已經準備好了Hook,轉向Sidebar.tsx,這樣我們就可以利用它:
以現在,我們有一種方法來檢測是否安裝了MetaMask,如果沒有安裝MetaMask,我們可以警告用戶,他們需要在瀏覽器上安裝MetaMask。
Inery以1.28億美元的估值完成融資,Metavest領投:9月14日消息,去中心化的數據管理系統Inery獲得了專注于Web3的風險投資公司Metavest的投資,該輪融資估值為1.28億美元。
Inery是一個去中心化的數據管理系統,將DB引入 Web3。它為數據管理提供了低成本、減少延遲、安全和防篡改的方式。數據管理系統旨在確保用戶(包括游戲玩家和企業)通過所有者控制的數據資產保持對虛擬世界中數據的控制。[2022/9/14 13:29:38]
接下來,讓我們為“ConnectWithMetaMask”按鈕添加一個onClick處理程序:
現在,當用戶單擊ConnectWithMetaMask時,MetaMask擴展程序將提示一個模式并詢問要使用哪個帳戶:
MetaMask要求我們連接到我們的聊天
現在已連接!
側邊欄現在顯示你的以太坊地址!
B-在我們的前端實例化智能合約
為了能夠獲取信息并使用戶能夠發送消息,我們需要有一種方法與我們的智能合約進行通信。
Sky Mavis聯創:Axie Infinity打算在韓國市場“加倍押注”:8月9日消息,Axie Infinity背后公司Sky Mavis表示,盡管存在監管障礙,該公司仍希望在韓國市場“加倍押注”,并提高用戶采用。
在8月9日(當地時間)舉行的韓國區塊鏈周上,Sky Mavis聯合創始人兼增長主管Jeffrey Zirlin在接受采訪時表示,盡管韓國仍然禁止P2E游戲,但“韓國市場是世界上最重要的游戲市場之一,我們在韓國擁有大量玩家。”
Zirlin補充道,該公司目前正在尋找讓Axie Infinity適合韓國玩家的方法:“我們想要加倍押注。我們想要本土化,例如,韓國人不怎么說英語,所以要將游戲真正交到韓國玩家手中還存在許多障礙。”(Cointelegraph)[2022/8/9 12:12:12]
我們要使用ethers庫。
ethers是一個庫,可以幫助我們的前端與智能合約進行對話。ethers通過提供商(在我們的例子中是MetaMask)連接到以太坊節點,它可以幫我們做很多事情。
讓我們創建另一個Hook,它將允許我們在ethers的幫助下與我們的智能合約交互:
讓我們來分解一下:
我們先檢查一下window.ethereum是否存在并從中獲取了Web3Provider。
如果已經定義了accountis,這意味著用戶點擊了“ConnectWithMetaMask”按鈕,webThreeProvider.getSigner()會返回給我們他們的地址。
Wemade對多鏈GameFi基礎設施Froyo Games進行了戰略投資:5月31日消息,韓國游戲巨頭WeMade對多鏈GameFi基礎設施Froyo Games進行了戰略投資,以此加速Wemix生態系統的擴展。雖然Wemade稱投資金額巨大,但并未透露細節。
通過此次戰略投資,WeMade計劃與Froyo Games簽署合作伙伴關系,在Wemix的基礎上擴展代幣經濟學,擴大市場份額,并擴展更多內容。
此前去年12月,Froyo Games完成了由Animoca Brands領投的160萬美元戰略輪融資。[2022/5/31 3:52:56]
最后,返回一個帶有新的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,以便知道我們的智能合約可以做什么(方法、事件、錯誤等),并為我們的前端提供與它交互的一種方式。
如果你沒有自己部署智能合約,仍然可以通過復制./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
Tags:METAMETETAMASMetaVersusmetahashSeadog MetaverseMaster Swiscoin
報告分為上中下三篇發放:上篇闡述報告的第一章節探尋人類交易史的意義和第二章節歷史背景;中篇敘述證券交易所、加密貨幣交易所和去中心化交易所的技術發展;下篇說明三種交易所市場結構的形成與演進、突破性.
1900/1/1 0:00:00編者按:本文內容源于2022年6月25日BSN月度說明會上邊界智能創始人曹恒對文昌鏈的匯報口述內容,會后邊界智能CTO奚海峰為內容增加了更為詳細的問題分析和分布式應用開發建議.
1900/1/1 0:00:00若美聯儲繼續采取貨幣緊縮政策,比特幣等風險資產可能會繼續受到影響。來源:BlockTempo方舟投資分析師YassineElmandjra4日在推特上撰文,分享對市場走勢的最新看法.
1900/1/1 0:00:00今年5月17日,VitalikButerin在推特上發表了一些在其價值體系中尚未完全解決的矛盾的看法.
1900/1/1 0:00:00以太坊合并是加密貨幣歷史上最強大的催化劑之一,而且它很快就會到來。當我們到達PoW共識機制下以太坊的終局時,讓我們來談談合并后PoS以太坊的10個重要特征.
1900/1/1 0:00:00DeFi數據 1.DeFi代幣總市值:389.51億美元 DeFi總市值數據來源:coingecko2.過去24小時去中心化交易所的交易量:43.
1900/1/1 0:00:00