このプロジェクトは私の最初の Web3 アプリケーションであり、Yoroi ウォレットを通じて Cardano ブロックチェーンに接続します。これは実際には非常にシンプルで、ウォレットの残高を確認するだけの方法ですが、今後多くのエキサイティングなプロジェクトの始まりを示します。このチュートリアルを進めながら、私の学習プロセスを皆さんと共有したいと思います。
?私たちは何を構築しているのでしょうか?
始める前に、何を作成しているのかを明確にしておきましょう。これは、次のことを可能にするシンプルかつシンプルなツールです。
- Cardano ウォレットの残高を覗いてみましょう (もちろん合法的に! ?)
- Yoroi ウォレットに接続します
- ADA の残高を表示
?必要なもの
JavaScript の基本的な知識 (console.log("hello world") ができれば大丈夫です!)
- - テキスト エディタ (VS Code、Sublime、または冒険したい場合はメモ帳でも)
- - Yoroi ウォレット拡張機能がインストールされています (テストのためにこれが必要になります)
- - Blockfrost API キー (心配しないでください。取得方法は説明します) さあ、始めましょう!
ステップ 1: プロジェクトをセットアップする
コンピュータ上に CardanoWalletExplorer という名前の新しいフォルダーを作成します (または、ジャンク justyk という名前でも構いません)。コード エディターでフォルダーを開きます (Visual Studio Code を使用します)。
フォルダー内に 2 つのファイルを作成します:
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 キーを取得するには?
ウォレットの残高を取得するには、Cardano ブロックチェーンとの対話を可能にする Blockfrost が必要になります。 API キーを取得する方法は次のとおりです:
- Blockfrost.io にアクセスしてサインアップします。
- ログインしたら、[新しいプロジェクトの作成] をクリックします。
- 実際の ADA にはメインネットを選択するか、テストにはテストネットを選択します。
- プロジェクトが作成されると、API キーを取得します。
ステップ 3: オペレーションの頭脳 ?
ここからは楽しい部分ですが、すべてを機能させる作業です。作成したフォルダーに 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 は、Cardano ブロックチェーンと対話するための API を提供します。承認用の API キーを使用して、特定のウォレット アドレスのエンドポイントに GET リクエストを送信します。この関数は、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 要素にイベント リスナーをアタッチします。
「ヨロイウォレットに接続」ボタンをクリックするとconnectWallet関数が呼び出されます。
「残高確認」ボタンをクリックすると、handleWalletSearch 関数が呼び出されます。
ユーザーがウォレットアドレス入力フィールドで「Enter」キーを押すと、残高チェックもトリガーされます。
おめでとうございます、やったね! ?
これで、Web3 のマスターにまた一歩近づきました! ?このプロジェクトは技術的な成果だけでなく、ブロックチェーン開発の広大な世界へのエキサイティングな一歩でもありました。 ?
Yoroi ウォレットにシームレスに接続し、残高を確認し、ブロックチェーンの力をすぐに活用できるようになりました。
?テストの時間です!
- vs code に liveserver 拡張機能をインストールし、「ライブ開始」ボタンをクリックして実行されていることを確認します。
- これにより、ブラウザで HTML ファイルが開きます
- ぜひ試してみてください!
?このプロジェクトから学んだこと
- Yoroi のようなブロックチェーン ウォレットがどのように機能し、分散型ネットワークと相互作用するかについてしっかりと理解しました。
- window.cardano API を使用してブラウザ ウォレットを Web アプリに安全に接続するプロセスを習得しました。
- Blockfrost API を探索して、Cardano ブロックチェーンからウォレットの残高とアドレスの詳細を取得しました。
- スムーズなユーザー エクスペリエンスを保証するための、非同期と待機、エラー処理、データ形式に関する知識が強化されています。
- リアルタイムのブロックチェーン データに基づいて Web ページ要素を動的に更新する方法を学びました。
- 暗号通貨単位を Lovelace から ADA に変換し、ユーザーが読みやすいようにフォーマットする仕組みを理解しました。
- 中断を防ぐために、API リクエストとユーザー入力に対する堅牢なエラー処理の重要性を認識しました。
- ウォレットの構造、アドレス管理、ブロックチェーン上のトランザクション表現について貴重な洞察を得ることができました。
- ユーザー インタラクションを強化するために、読み込みスピナー、ツールヒント、アラートなどの機能を実装しました。
- エッジケースとデバッグの課題に取り組み、分析スキルとコーディングスキルを強化しました。
?レベルアップのアイデア
このプロジェクトは、ブロックチェーン開発の世界への足がかりです。これをさらに進めるためのアイデアをいくつか紹介します:
- ウォレット アドレスの過去の取引を表示する取引履歴ビューアを追加します。
- マルチウォレットのサポートを実装し、ユーザーが Yoroi、Nami、Eternal などのウォレットを切り替えられるようにします。
- 送受信トランザクションの概要など、ウォレットのアクティビティの傾向を表示するダッシュボードを作成します。
- リアルタイムの価格データを統合して、USD や EUR などの法定通貨で ADA 残高を表示します。
- トランザクション構築機能を統合することで、アプリから ADA を直接送信できるようにします。
- ダークモードの切り替えを追加して、視覚的に魅力的でアクセスしやすいデザインにします。
- モバイル デバイスとの互換性を確保するためにインターフェイスの応答性を高めます。
- 無効なウォレット アドレスなどの問題の解決をユーザーに案内する、より適切なエラー メッセージを組み込みます。
?貢献方法
このプロジェクトは私にとって Web3 への最初のステップであり、最高の人材から学びたいと思っています。あなたの経験、洞察、提案は、このプロジェクトをより良いものにすると同時に、開発者としての私の成長にも役立ちます。貢献する方法は次のとおりです:
- GitHub でプロジェクトをフォークし、新機能や改善を追加します。
- ツールの使用中に発生したバグや問題を報告し、解決策を提案します。
- GitHub リポジトリで機能リクエストやディスカッションを開いて機能拡張を提案します。
- 追加する新機能については詳細なドキュメントを作成し、他の人が簡単に使用したり構築したりできるようにします。
✨ 考慮すべき新機能
- ウォレット アドレスの共有とスキャンを簡単にするための QR コード サポートを追加します。
- 残高の更新や取引の確認などのイベントの通知を実装します。
- 初心者向けにブロックチェーンの基本を説明する教育セクションを含めます。
- 頻繁にウォレットを使用するための実績や新機能の探索など、ゲーム化された要素を導入します。
- ステーキング報酬と委任ステータスを表示するステーキング機能を開発します。
構築と革新を続けましょう。あなたの貢献と創造力がこのツールの未来を形作ることができます。 ?
?助けが必要ですか?
行き詰まった?バグが見つかりましたか?チャットしたいですか?以下にコメントをドロップするか、Twitter で私を見つけてください。
覚えておいてください、私たちは皆どこかから始めています、そして唯一の愚かな質問はあなたが尋ねなかった質問です!
ブロックチェーン探索者の皆さん、コーディングを楽しんでください! ?
以上がイントロ。 JavaScript を使用した Cardano ウォレット チェッカーの Web 構築へ。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
