這個專案是我的第一個 Web3 應用程序,它透過 Yoroi 錢包連接到 Cardano 區塊鏈。實際上,這非常簡單,只是檢查錢包餘額的一種方法,但它標誌著許多令人興奮的項目的開始。我想在學習本教程時與您分享我的學習過程。
?我們正在建設什麼?
在開始之前,讓我們先明確一下我們正在創建什麼。這是一個簡單的工具,可以讓您:
- 查看任何卡爾達諾錢包的餘額(當然是合法的!?)
- 連接到您的 Yoroi 錢包
- 在 ADA 中顯示餘額
?你需要什麼
基本的 JavaScript 知識(如果你會 console.log("hello world"),就很好了!)
- - 文字編輯器(VS Code、Sublime,如果您喜歡冒險,甚至可以使用記事本)
- - Yoroi 錢包擴充已安裝(我們需要它進行測試)
- - Blockfrost API 金鑰(別擔心,我將向您展示如何取得它) 讓我們開始吧!
第 1 步:設定項目
在電腦上建立一個名為 CardanoWalletExplorer 的新資料夾(如果您願意,也可以是 junky justyk,名稱並不重要)。在程式碼編輯器中開啟該資料夾(我使用 Visual Studio Code)。
在資料夾內,建立兩個檔案:
index.html 和 style.css
現在打開index.html並貼上以下內容:
<meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Cardano Wallet Explorer</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" rel="stylesheet"> <link rel="stylesheet" href="style.css"> <div> <p>Let's add some style to our creation. Inside the style.css file paste this in:<br> </p> <pre class="brush:php;toolbar:false">:root { --primary-color: #0033ad; --secondary-color: #2a71d4; --accent-color: #17d1aa; --background-color: #f8faff; --card-background: #ffffff; --text-primary: #1a202c; --text-secondary: #4a5568; --border-color: #e2e8f0; --shadow: 0 4px 6px rgba(0,0,0,0.1); } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Inter', system-ui, sans-serif; background: var(--background-color); color: var(--text-primary); line-height: 1.5; min-height: 100vh; display: flex; justify-content: center; align-items: center; padding: 2rem; } .container { background: var(--card-background); border-radius: 1.5rem; box-shadow: var(--shadow); width: 100%; max-width: 800px; overflow: hidden; } .app-header { background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); color: white; padding: 2rem; text-align: center; } .logo { display: flex; align-items: center; justify-content: center; gap: 1rem; margin-bottom: 0.5rem; } .logo i { font-size: 2rem; } h1 { font-size: 1.8rem; font-weight: 600; } .subtitle { opacity: 0.9; } .content { padding: 2rem; } .search-section { display: flex; flex-direction: column; align-items: center; gap: 1.5rem; margin-bottom: 2rem; } .search-box { display: flex; gap: 1rem; width: 100%; max-width: 600px; } #wallet-search { flex: 1; padding: 0.875rem 1rem; border: 2px solid var(--border-color); border-radius: 12px; font-size: 0.95rem; transition: 0.3s ease; } #wallet-search:focus { outline: none; border-color: var(--accent-color); box-shadow: 0 0 0 3px rgba(23, 209, 170, 0.1); } button { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.875rem 1.5rem; border: none; border-radius: 12px; font-size: 0.95rem; font-weight: 500; cursor: pointer; transition: 0.3s ease; } #search-button { background: var(--accent-color); color: white; } #search-button:hover { background: #15bea0; transform: translateY(-2px); } .divider { width: 100%; max-width: 600px; text-align: center; position: relative; color: var(--text-secondary); } .divider::before, .divider::after { content: ''; position: absolute; top: 50%; width: calc(50% - 2rem); height: 1px; background: var(--border-color); } .divider::before { left: 0; } .divider::after { right: 0; } .connect-button { background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); color: white; padding: 1rem 2rem; } .connect-button:hover { transform: translateY(-2px); box-shadow: var(--shadow); } .wallet-info { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem; margin-top: 2rem; } .info-card { background: var(--card-background); border: 1px solid var(--border-color); border-radius: 1rem; padding: 1.5rem; transition: 0.3s ease; } .info-card:hover { transform: translateY(-2px); box-shadow: var(--shadow); } .card-header { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1rem; color: var(--text-secondary); } .card-header i { font-size: 1.25rem; color: var(--primary-color); } .card-content { font-size: 0.95rem; color: var(--text-primary); word-break: break-all; } .app-footer { text-align: center; padding: 1.5rem; background: var(--background-color); color: var(--text-secondary); font-size: 0.9rem; } .app-footer a { color: var(--primary-color); text-decoration: none; } .app-footer a:hover { text-decoration: underline; } @media (max-width: 640px) { body { padding: 1rem; } .container { border-radius: 1.5rem; } .app-header { padding: 1.5rem; } .content { padding: 1.5rem; } .search-box { flex-direction: column; } button { width: 100%; justify-content: center; } .wallet-info { grid-template-columns: 1fr; } }
步驟 2:如何取得您的 Blockfrost API 金鑰?
為了取得錢包餘額,我們需要 Blockfrost,它允許我們與 Cardano 區塊鏈進行互動。以下是取得 API 金鑰的方法:
- 前往 Blockfrost.io 並註冊。
- 登入後,點選「建立新項目」。
- 選擇主網進行真正的 ADA 或選擇測試網進行測試。
- 專案建立後,您將獲得一個API Key。
第三步:手術的大腦?
現在到了有趣的部分,讓它一切正常!在我們創建的資料夾中建立一個名為 script.js 的檔案。
function checkYoroiInstalled() { return window.cardano && window.cardano.yoroi; }
?此功能檢查您的瀏覽器中是否安裝了 Yoroi 錢包擴充功能。 Window.cardano 是像 Yoroi 這樣的 Cardano 錢包公開的物件。我們檢查它是否存在以及 window.cardano.yoroi 是否可用於確認 Yoroi 錢包已安裝。
如果兩者都為 true,則函數傳回 true;否則,傳回 false。
<meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Cardano Wallet Explorer</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" rel="stylesheet"> <link rel="stylesheet" href="style.css"> <div> <p>Let's add some style to our creation. Inside the style.css file paste this in:<br> </p> <pre class="brush:php;toolbar:false">:root { --primary-color: #0033ad; --secondary-color: #2a71d4; --accent-color: #17d1aa; --background-color: #f8faff; --card-background: #ffffff; --text-primary: #1a202c; --text-secondary: #4a5568; --border-color: #e2e8f0; --shadow: 0 4px 6px rgba(0,0,0,0.1); } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Inter', system-ui, sans-serif; background: var(--background-color); color: var(--text-primary); line-height: 1.5; min-height: 100vh; display: flex; justify-content: center; align-items: center; padding: 2rem; } .container { background: var(--card-background); border-radius: 1.5rem; box-shadow: var(--shadow); width: 100%; max-width: 800px; overflow: hidden; } .app-header { background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); color: white; padding: 2rem; text-align: center; } .logo { display: flex; align-items: center; justify-content: center; gap: 1rem; margin-bottom: 0.5rem; } .logo i { font-size: 2rem; } h1 { font-size: 1.8rem; font-weight: 600; } .subtitle { opacity: 0.9; } .content { padding: 2rem; } .search-section { display: flex; flex-direction: column; align-items: center; gap: 1.5rem; margin-bottom: 2rem; } .search-box { display: flex; gap: 1rem; width: 100%; max-width: 600px; } #wallet-search { flex: 1; padding: 0.875rem 1rem; border: 2px solid var(--border-color); border-radius: 12px; font-size: 0.95rem; transition: 0.3s ease; } #wallet-search:focus { outline: none; border-color: var(--accent-color); box-shadow: 0 0 0 3px rgba(23, 209, 170, 0.1); } button { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.875rem 1.5rem; border: none; border-radius: 12px; font-size: 0.95rem; font-weight: 500; cursor: pointer; transition: 0.3s ease; } #search-button { background: var(--accent-color); color: white; } #search-button:hover { background: #15bea0; transform: translateY(-2px); } .divider { width: 100%; max-width: 600px; text-align: center; position: relative; color: var(--text-secondary); } .divider::before, .divider::after { content: ''; position: absolute; top: 50%; width: calc(50% - 2rem); height: 1px; background: var(--border-color); } .divider::before { left: 0; } .divider::after { right: 0; } .connect-button { background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); color: white; padding: 1rem 2rem; } .connect-button:hover { transform: translateY(-2px); box-shadow: var(--shadow); } .wallet-info { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem; margin-top: 2rem; } .info-card { background: var(--card-background); border: 1px solid var(--border-color); border-radius: 1rem; padding: 1.5rem; transition: 0.3s ease; } .info-card:hover { transform: translateY(-2px); box-shadow: var(--shadow); } .card-header { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1rem; color: var(--text-secondary); } .card-header i { font-size: 1.25rem; color: var(--primary-color); } .card-content { font-size: 0.95rem; color: var(--text-primary); word-break: break-all; } .app-footer { text-align: center; padding: 1.5rem; background: var(--background-color); color: var(--text-secondary); font-size: 0.9rem; } .app-footer a { color: var(--primary-color); text-decoration: none; } .app-footer a:hover { text-decoration: underline; } @media (max-width: 640px) { body { padding: 1rem; } .container { border-radius: 1.5rem; } .app-header { padding: 1.5rem; } .content { padding: 1.5rem; } .search-box { flex-direction: column; } button { width: 100%; justify-content: center; } .wallet-info { grid-template-columns: 1fr; } }
此函數以使用者友善的方式格式化 ADA 的餘額。
Cardano使用lovelace作為最小單位(1 ADA = 1,000,000 lovelace),所以我們需要將其除以1,000,000轉換為ADA。
它還確保餘額顯示為小數點後 6 位(例如 1.234567 ADA),或者如果餘額無效或為空,則傳回「0.000000」。
function checkYoroiInstalled() { return window.cardano && window.cardano.yoroi; }
我們使用 Fetch API 向 Blockfrost 發出 GET 請求。 Blockfrost 提供了一個 API 來與 Cardano 區塊鏈互動。我們向特定錢包位址的端點發送 GET 請求,並使用 API 金鑰進行授權。該函數透過向 Blockfrost 的 API 發出請求來獲取特定錢包位址的餘額。
如果回應成功,我們將解析 JSON 資料並傳回該位址中 ADA 的數量。
如果發生錯誤(例如,無效位址或 API 問題),它將拋出錯誤並將其記錄到控制台。端點 URL 包括我們要檢查的錢包位址。確保將 checkWalletBalance 函數中的 YOUR_API_KEY 佔位符替換為您的 API 金鑰。
function formatBalance(lovelaceBalance) { if (!lovelaceBalance || isNaN(lovelaceBalance)) { return "0.000000"; } const adaBalance = parseFloat(lovelaceBalance) / 1_000_000; return adaBalance.toFixed(6); }
- 此 UI 更新功能使用錢包位址和餘額更新使用者介面 (UI)。
- 它會縮短地址以顯示前 8 個和後 8 個字元(以使其更具可讀性)並將其顯示在「錢包地址」卡中。
- 它使用 formatBalance 函數格式化餘額並將其顯示在「錢包餘額」卡中。
- 當您將滑鼠懸停在地址文字上時,它還會設定包含完整地址的工具提示。
**Fetching Wallet Balance Using Blockfrost API async function checkWalletBalance(address) { try { const API_KEY = 'YOUR_API_KEY'; const response = await fetch(`https://cardano-mainnet.blockfrost.io/api/v0/addresses/${address}`, { headers: { 'project_id': API_KEY } }); if (!response.ok) { throw new Error('Invalid address or API error'); } const data = await response.json(); return data.amount[0].quantity; } catch (error) { console.error('Error fetching balance:', error); throw error; } }
此程式碼將事件偵聽器附加到 HTML 元素:
當點擊「連接 Yoroi Wallet」按鈕時,它會呼叫 connectWallet 函數。
當點擊「檢查餘額」按鈕時,它會呼叫handleWalletSearch函數。
如果使用者在錢包位址輸入欄中按下「Enter」鍵,也會觸發餘額檢查。
恭喜,你做到了! ?
您現在距離掌握 Web3 又更近了一步! ?這個專案不僅是一項技術成就,更是邁向區塊鏈開發廣闊世界的令人興奮的一步! ?
現在,您可以無縫連接到 Yoroi 錢包、檢查餘額,並將區塊鏈的力量帶到您的指尖。
?測試時間!
- 在 VS Code 上安裝 liveserver 擴展,並透過點擊「上線」按鈕確保其正在運行。
- 這應該會在您的瀏覽器中開啟 HTML 檔案
- 交叉手指並測試一下!
?您從這個專案中學到了什麼
- 深入了解 Yoroi 等區塊鏈錢包如何運作以及如何與去中心化網路互動。
- 掌握了使用 window.cardano API 將瀏覽器錢包安全地連接到網路應用程式的過程。
- 探索了 Blockfrost API 以從 Cardano 區塊鏈獲取錢包餘額和地址詳細資訊。
- 增強了非同步和等待、錯誤處理和資料格式化方面的知識,以確保流暢的使用者體驗。
- 學會根據即時區塊鏈資料動態更新網頁元素。
- 了解將加密貨幣單位從 Lovelace 轉換為 ADA 並格式化它們以供用戶閱讀的機制。
- 認識到對 API 請求和使用者輸入進行穩健錯誤處理以防止中斷的重要性。
- 獲得了對區塊鏈上的錢包結構、地址管理和交易表示的寶貴見解。
- 實作了載入旋轉器、工具提示和警報等功能,以增強使用者互動。
- 解決了邊緣情況和調試挑戰,加強了分析和編碼技能。
?升級的想法
這個專案是進入區塊鏈開發世界的墊腳石。以下是一些進一步推進的想法:
- 新增交易歷史檢視器以顯示錢包位址過去的交易。
- 實現多錢包支持,允許用戶在 Yoroi、Nami 或 Eternal 等錢包之間切換。
- 建立一個顯示錢包活動趨勢的儀表板,包括傳入和傳出交易摘要。
- 整合即時價格數據以顯示美元或歐元等法定貨幣的 ADA 餘額。
- 透過整合交易建置功能,啟用直接從應用程式發送 ADA 的功能。
- 添加深色模式切換,以獲得視覺上吸引人且易於訪問的設計。
- 使介面響應式以確保與行動裝置的相容性。
- 納入更好的錯誤訊息,引導使用者解決問題,例如無效的錢包地址。
?您如何做出貢獻
這個專案是我進入 Web3 的第一步,我渴望向最好的人學習。您的經驗、見解和建議可以使這個專案變得更好,同時也幫助我成長為開發人員。您可以透過以下方式做出貢獻:
- 在 GitHub 上分叉該專案並添加新功能或改進。
- 回報您在使用該工具時遇到的錯誤或問題並提出解決方案。
- 透過在 GitHub 儲存庫上提出功能請求或討論來提出改進建議。
- 為您新增的任何新功能編寫詳細文檔,以便其他人輕鬆使用和建置。
✨ 值得考慮的新功能
- 添加二維碼支持,方便錢包位址共享和掃描。
- 對餘額更新或交易確認等事件實施通知。
- 包括一個教育部分,為初學者解釋區塊鏈基礎知識。
- 引入遊戲化元素,例如頻繁使用錢包或探索新功能的成就。
- 發展質押功能,顯示質押獎勵和委託狀態。
讓我們繼續建構和創新—您的貢獻和創造力可以塑造這個工具的未來! ?
?需要幫助嗎?
卡住了嗎?發現錯誤?想聊天嗎?在下面發表評論或在 Twitter 上找到我!
請記住,我們都是從某個地方開始的,唯一愚蠢的問題就是你沒有問的問題!
區塊鏈探索者們,編碼愉快! ?
以上是簡介。使用 JavaScript Web建立 Cardano 錢包檢查器。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載
最受歡迎的的開源編輯器