」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > WebA 簡單示範的第一步

WebA 簡單示範的第一步

發佈於2024-11-07
瀏覽:827

Web3 肯定會繼續存在。比特幣、以太坊、Solana 等網路正在快速發展,所有應用程式都建立在它們之上。

如果您是 JavaScript 開發人員並想嘗試 Web3,第一步就是安裝 Metamask。從那裡,您可以使用 Metamask 注入瀏覽器的 window.ethereum 物件上可用的 API 方法之一。

任何 Web3 專案通常都是從連接錢包開始的。在 Web3 中,錢包就像一個使用者帳戶,但與 Gmail、Instagram 或 TikTok 等中心化服務的帳戶不同,錢包是去中心化網路本身的核心部分。 Metamask 充當代理,使其更容易與網路互動並執行創建錢包等操作。雖然還有其他創建錢包的方法,但 Metamask 是迄今為止最常見的方法。

考慮到這一點,讓我們建立一個允許用戶連接錢包的 Web 應用程式。

先決條件

您需要在瀏覽器中安裝 Metamask 擴充程序,或者您可以在行動裝置上下載他們的應用程式 - 這兩個選項都可以。

圖表

讓我們來看看下圖,它概述了 Web 應用程式的流程:

Your First Steps in WebA Simple Demo

邏輯

邏輯很簡單,分成以下步驟:

  • 如果未安裝 Metamask: 顯示下載 Metamask 的連結。

這很簡單——當安裝 Metamask 時,它會注入 window.ethereum 物件。如果該物件不存在,我們可以假設 Metamask 尚未安裝或啟用。

  • 如果錢包未連接: 顯示連接錢包的按鈕。

如果window.ethereum可用,我們可以顯示一個「連線」按鈕,讓使用者連結他們的錢包。

  • 如果錢包已連接: 顯示錢包位址。

window.ethereum提供的關鍵方法之一是request,可以使用它來請求帳戶,如下所示:

   const accounts = await window.ethereum?.request({
     method: "eth_requestAccounts",
     params: [],
   });

   setAddress(accounts[0]);

這會提示使用者存取錢包。如果他們授予權限,則該方法將傳回帳戶陣列。為了簡單起見,我們將獲取第一個帳戶並顯示其地址。

示範

如果您在未安裝 Metamask 的情況下打開演示,您應該會看到以下內容:

Your First Steps in WebA Simple Demo

安裝 Metamask 後,您應該會看到一個「連接」按鈕。點擊時,Metamask 將提示您選擇要連線的帳戶。請參閱以下 GIF 的視覺範例:

Your First Steps in WebA Simple Demo

注意最終狀態如何顯示錢包位址。儘管這個演示非常簡單,但每個 Web3 應用程式都需要一個連接的錢包。有一些很棒的庫,例如 RainbowKit 和 WAGMI,可以簡化 Web3 整合。然而,在這個演示中,我使用簡單的 Metamask API 方法來實現相同的結果。當然,還有許多邊緣情況我尚未處理,例如如果用戶拒絕訪問或擁有多個帳戶會發生什麼 - 這只是可能出現的各種場景的幾個示例。

程式碼

完整程式碼可以在GitHub上找到。

"use client";

import { MetaMaskInpageProvider } from "@metamask/providers";

import { useState, useEffect } from "react";

declare global {
  interface Window {
    ethereum?: MetaMaskInpageProvider;
  }
}

function Button(props: { connectWalletHandler: () => void; address: string }) {
  const styles = {
    display: "inline-block",
    padding: "20px 40px",
    border: "5px solid black",
    fontSize: 24,
    cursor: "pointer",
  };

  if (props.address) {
    const shortAddress = `${props.address.slice(0, 7)}...${props.address.slice(
      -5
    )}`;
    return 
Wallet: {shortAddress}
; } if (window.ethereum) { return (
Connect wallet
); } return ( Install Metamask ); } export default function Page() { const [clientSide, setClientSide] = useState(false); const [address, setAddress] = useState(""); const connectWalletHandler = async () => { const accounts = await window.ethereum?.request({ method: "eth_requestAccounts", params: [], }); if (!Array.isArray(accounts) || !accounts.length) { return; } setAddress(accounts[0]); }; useEffect(() => { setClientSide(true); }, []); if (!clientSide) { return >; } return (
); }

結論

這是一個非常基本的演示,大部分程式碼只是標準的 React。事實上,唯一與Web3相關的行是:

await window.ethereum?.request({
  method: "eth_requestAccounts",
  params: [],
});

Metamask 有替代品,這些錢包還注入一個類似於 window.ethereum 的對象,用於與其 API 互動。

您始終可以選擇一個庫,如前面提到的庫,它可以處理 Web3 整合所需的大部分樣板文件,並讓您專注於業務和 UI 邏輯。

Web3 不會消失,而且很可能您最終需要將其包含在您的一個專案中。誰知道,您甚至可能成為加密貨幣愛好者!如果是這樣的話,這就是您開始旅程的方式。

連結

  • 示範
  • 程式碼庫
版本聲明 本文轉載於:https://dev.to/garciadiazjaime/your-first-steps-in-web3-a-simple-demo-5990?1如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • 如何消除 Matplotlib 大數字刻度標籤中的相對偏移?
    如何消除 Matplotlib 大數字刻度標籤中的相對偏移?
    刪除Matplotlib 軸中的相對偏移在Matplotlib 中針對大量數字進行繪圖可能會導致軸的刻度標籤出現相對偏移。為了說明這一點,請考慮以下繪圖:plot([1000, 1001, 1002], [1, 2, 3])這會在橫座標軸上產生刻度,如下圖所示:0.0 0.5 1.0...
    程式設計 發佈於2024-11-07
  • 為什麼 Python 正規表示式中有時會缺少 \'r\' 前綴?
    為什麼 Python 正規表示式中有時會缺少 \'r\' 前綴?
    Python 正規表示式:「r」前綴之謎在Python 正規表示式領域,神秘的「r」前綴經常引發人們對其必要性的質疑。為了闡明這個主題,讓我們深入研究一個令人費解的場景:丟失“r”的奇怪案例示例1 提出了一個令人費解的觀察結果:import re print(re.sub('\s ', ' ', '...
    程式設計 發佈於2024-11-07
  • 如何在沒有資料庫的情況下根據第一個下拉選擇自動更新下拉選項?
    如何在沒有資料庫的情況下根據第一個下拉選擇自動更新下拉選項?
    如何在不使用資料庫的情況下根據第一個下拉清單中的選擇自動更新第二個下拉清單中的選項您有兩個下拉列表,其中選項不是從資料庫中檢索的。第一個下拉清單允許使用者選擇一個類別。第二個下拉清單中的選項取決於第一個下拉清單中的選擇。 例如,如果使用者在第一個下拉清單中選擇First 選項,第二個下拉清單應顯示選...
    程式設計 發佈於2024-11-07
  • C 中的頭文件
    C 中的頭文件
    什麼是頭文件 C 中的頭文件是帶有「.h」副檔名的文件,其中包含函數、巨集、常數的聲明,有時還包含可以在多個原始檔之間共享的資料類型。 預處理器指令 預處理器指令是程式中的一行,它不是程式語句,而是實際上預處理器的命令。 例如:- #包括 #定義 在此指令中,#...
    程式設計 發佈於2024-11-07
  • 如何解決 Python 中的意外縮排錯誤:逐步指南
    如何解決 Python 中的意外縮排錯誤:逐步指南
    Python 中意外的縮排:解決指南縮排錯誤是 Python 程式設計師常見的挫折感。當一行程式碼的縮排多於或少於預期時,就會出現「意外縮排」錯誤,導致程式碼結構不正確。解決這個問題的方法如下:瞭解縮排規則Python利用縮排來區分程式碼區塊。每個子區塊(例如迴圈和條件語句)必須以一定數量的空格開頭...
    程式設計 發佈於2024-11-07
  • Python 的 Enter 和 Exit 魔術方法是什麼以及如何在上下文管理器中使用它們?
    Python 的 Enter 和 Exit 魔術方法是什麼以及如何在上下文管理器中使用它們?
    理解Python的神奇方法:enter與exitThe enter 和exit 方法是用於處理上下文管理器協定的特殊Python 函數。此協定支援在 with 語句中方便地使用對象,確保正確的初始化和清理。 當將with 語句與定義了enter 和exit 的物件一起使用時方法,它委託以下行為:_...
    程式設計 發佈於2024-11-07
  • 關於 UUID 您需要了解的一切。
    關於 UUID 您需要了解的一切。
    A 通用唯一标识符 (UUID) 是计算机系统中用于唯一标识信息的 128 位标签。 UUID 被设计为在空间和时间上都是唯一的,允许它们在没有中央权威的情况下独立生成,从而最大限度地减少重复的风险。 UUID 有多种用途,包括: 识别数据库中的记录。 标记分布式系统中的对象。 在唯一性至关重要的应...
    程式設計 發佈於2024-11-07
  • Java集合框架
    Java集合框架
    问什么是 Java Collection Framework? Ans Java Collection 框架是一个功能强大的内置库,提供了一组最常用数据结构和算法的优化实现。它广泛用于构建 Java 应用程序和解决实际软件开发问题挑战。 Java集合框架有何优势? Ans Java Collecti...
    程式設計 發佈於2024-11-07
  • 在 React 中為功能元件渲染 Props
    在 React 中為功能元件渲染 Props
    在 React 中,Render Props 是一種使用 function prop 在元件之間共享邏輯的技術。不使用子項或組合,而是將函數作為 prop 傳遞以動態呈現內容。這種方法適用於功能組件和鉤子。 以下是如何使用功能元件實作 Render Props 的範例: 例子 im...
    程式設計 發佈於2024-11-07
  • 如何防止 Twitter Bootstrap 下拉選單在內部點擊時關閉?
    如何防止 Twitter Bootstrap 下拉選單在內部點擊時關閉?
    防止內部點擊時下拉選單關閉要防止Twitter Bootstrap 下拉選單在點擊內部元素時關閉,一種規避解決方案需要委託點擊事件處理。以下是詳細說明和建議的解決方案:預設情況下,Twitter Bootstrap 下拉選單會在任何點擊後關閉,即使在選單本身內也是如此。為了克服這種行為,常見的方法是...
    程式設計 發佈於2024-11-07
  • 如何使用串流上下文透過 file_get_contents 傳送多個 Cookie?
    如何使用串流上下文透過 file_get_contents 傳送多個 Cookie?
    利用串流上下文透過 file_get_contents 發送多個 CookiePHP 手冊中提供的範例展示如何使用串流上下文發送 cookie。若要傳輸多個 cookie,請考慮以下方法:附加所需的 cookie,並以分號 (;) 作為分隔符號。例如,發送「user=3345」和「pass=abcd...
    程式設計 發佈於2024-11-07
  • 索引布林欄位真的能提高查詢效能嗎?
    索引布林欄位真的能提高查詢效能嗎?
    索引布林欄位的效能影響在資料庫系統中,索引欄位透過允許資料庫引擎無需掃描即可快速定位資料來提高查詢效能整桌。然而,索引布林字段的性能增益一直是爭論的話題。 索引布林欄位會提高效能嗎? 使用 WHERE boolean_field= 等子句執行查詢時確實,對布林欄位建立索引確實可以提高效能。像 Inn...
    程式設計 發佈於2024-11-07
  • 使用陣列和函數在 JavaScript 中建立初學者友好的購物車的逐步指南
    使用陣列和函數在 JavaScript 中建立初學者友好的購物車的逐步指南
    学习新编程语言的最佳方法是创建尽可能多的项目。如果您构建专注于您所学知识的迷你项目,您将获得更顺畅的初学者体验。 我们的目标是避免“教程地狱”——你不断观看几个教程视频而没有任何具体项目来展示你的技能的可怕地方——并建立处理大型项目所需的信心。 在本文中,我将向初学者解释如何使用基本的 Javasc...
    程式設計 發佈於2024-11-07
  • TinyMCE 發行說明 - 概述
    TinyMCE 發行說明 - 概述
    TinyMCE 7.3 發行說明 - 概述 TinyMCE 的最新版本已經發布,我們有一些令人興奮的增強功能,包括 AI 助理、修訂歷史記錄、增強的程式碼編輯器和匯出到 Word 功能的改進。 TinyMCE 7.3 還包括 17 個錯誤修復和可用性改進。 我們的工程、產品和設計...
    程式設計 發佈於2024-11-07
  • 在 C++ 頭檔中內嵌方法實作是個好主意嗎?
    在 C++ 頭檔中內嵌方法實作是個好主意嗎?
    內聯頭檔實作:優化 C 程式碼內聯頭檔實作:優化 C 程式碼C 頭檔的目的主要是在多個原始檔之間共用程式碼。然而,最近的程式碼審查揭示了一種不尋常的做法:在類別的頭檔中找到了方法實作。這引發了有關這種方法的好處和影響的問題。 與不同文件中將聲明與實作分開的常見做法不同,頭檔中的此方法實作是例外。預處...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3