Updates
This commit is contained in:
commit
75ba0ff628
25
.gitignore
vendored
Normal file
25
.gitignore
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
|
||||
BIN
assets/cardano_serialization_lib_bg-pbZPHw08.wasm
Normal file
BIN
assets/cardano_serialization_lib_bg-pbZPHw08.wasm
Normal file
Binary file not shown.
123
assets/index-BsM49tGo.js
Normal file
123
assets/index-BsM49tGo.js
Normal file
@ -0,0 +1,123 @@
|
||||
function N(d, w) {
|
||||
for (var i = 0; i < w.length; i++) {
|
||||
const g = w[i];
|
||||
if (typeof g != "string" && !Array.isArray(g)) {
|
||||
for (const h in g) if (h !== "default" && !(h in d)) {
|
||||
const x = Object.getOwnPropertyDescriptor(g, h);
|
||||
x && Object.defineProperty(d, h, x.get ? x : { enumerable: true, get: () => g[h] });
|
||||
}
|
||||
}
|
||||
}
|
||||
return Object.freeze(Object.defineProperty(d, Symbol.toStringTag, { value: "Module" }));
|
||||
}
|
||||
var y = {}, O;
|
||||
function P() {
|
||||
if (O) return y;
|
||||
O = 1, Object.defineProperty(y, "__esModule", { value: true }), y.bech32m = y.bech32 = void 0;
|
||||
const d = "qpzry9x8gf2tvdw0s3jn54khce6mua7l", w = {};
|
||||
for (let t = 0; t < d.length; t++) {
|
||||
const e = d.charAt(t);
|
||||
w[e] = t;
|
||||
}
|
||||
function i(t) {
|
||||
const e = t >> 25;
|
||||
return (t & 33554431) << 5 ^ -(e >> 0 & 1) & 996825010 ^ -(e >> 1 & 1) & 642813549 ^ -(e >> 2 & 1) & 513874426 ^ -(e >> 3 & 1) & 1027748829 ^ -(e >> 4 & 1) & 705979059;
|
||||
}
|
||||
function g(t) {
|
||||
let e = 1;
|
||||
for (let o = 0; o < t.length; ++o) {
|
||||
const s = t.charCodeAt(o);
|
||||
if (s < 33 || s > 126) return "Invalid prefix (" + t + ")";
|
||||
e = i(e) ^ s >> 5;
|
||||
}
|
||||
e = i(e);
|
||||
for (let o = 0; o < t.length; ++o) {
|
||||
const s = t.charCodeAt(o);
|
||||
e = i(e) ^ s & 31;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
function h(t, e, o, s) {
|
||||
let p = 0, l = 0;
|
||||
const r = (1 << o) - 1, c = [];
|
||||
for (let n = 0; n < t.length; ++n) for (p = p << e | t[n], l += e; l >= o; ) l -= o, c.push(p >> l & r);
|
||||
if (s) l > 0 && c.push(p << o - l & r);
|
||||
else {
|
||||
if (l >= e) return "Excess padding";
|
||||
if (p << o - l & r) return "Non-zero padding";
|
||||
}
|
||||
return c;
|
||||
}
|
||||
function x(t) {
|
||||
return h(t, 8, 5, true);
|
||||
}
|
||||
function j(t) {
|
||||
const e = h(t, 5, 8, false);
|
||||
if (Array.isArray(e)) return e;
|
||||
}
|
||||
function k(t) {
|
||||
const e = h(t, 5, 8, false);
|
||||
if (Array.isArray(e)) return e;
|
||||
throw new Error(e);
|
||||
}
|
||||
function E(t) {
|
||||
let e;
|
||||
t === "bech32" ? e = 1 : e = 734539939;
|
||||
function o(r, c, n) {
|
||||
if (n = n || 90, r.length + 7 + c.length > n) throw new TypeError("Exceeds length limit");
|
||||
r = r.toLowerCase();
|
||||
let u = g(r);
|
||||
if (typeof u == "string") throw new Error(u);
|
||||
let b = r + "1";
|
||||
for (let f = 0; f < c.length; ++f) {
|
||||
const a = c[f];
|
||||
if (a >> 5 !== 0) throw new Error("Non 5-bit word");
|
||||
u = i(u) ^ a, b += d.charAt(a);
|
||||
}
|
||||
for (let f = 0; f < 6; ++f) u = i(u);
|
||||
u ^= e;
|
||||
for (let f = 0; f < 6; ++f) {
|
||||
const a = u >> (5 - f) * 5 & 31;
|
||||
b += d.charAt(a);
|
||||
}
|
||||
return b;
|
||||
}
|
||||
function s(r, c) {
|
||||
if (c = c || 90, r.length < 8) return r + " too short";
|
||||
if (r.length > c) return "Exceeds length limit";
|
||||
const n = r.toLowerCase(), u = r.toUpperCase();
|
||||
if (r !== n && r !== u) return "Mixed-case string " + r;
|
||||
r = n;
|
||||
const b = r.lastIndexOf("1");
|
||||
if (b === -1) return "No separator character for " + r;
|
||||
if (b === 0) return "Missing prefix for " + r;
|
||||
const f = r.slice(0, b), a = r.slice(b + 1);
|
||||
if (a.length < 6) return "Data too short";
|
||||
let A = g(f);
|
||||
if (typeof A == "string") return A;
|
||||
const _ = [];
|
||||
for (let m = 0; m < a.length; ++m) {
|
||||
const C = a.charAt(m), v = w[C];
|
||||
if (v === void 0) return "Unknown character " + C;
|
||||
A = i(A) ^ v, !(m + 6 >= a.length) && _.push(v);
|
||||
}
|
||||
return A !== e ? "Invalid checksum for " + r : { prefix: f, words: _ };
|
||||
}
|
||||
function p(r, c) {
|
||||
const n = s(r, c);
|
||||
if (typeof n == "object") return n;
|
||||
}
|
||||
function l(r, c) {
|
||||
const n = s(r, c);
|
||||
if (typeof n == "object") return n;
|
||||
throw new Error(n);
|
||||
}
|
||||
return { decodeUnsafe: p, decode: l, encode: o, toWords: x, fromWordsUnsafe: j, fromWords: k };
|
||||
}
|
||||
return y.bech32 = E("bech32"), y.bech32m = E("bech32m"), y;
|
||||
}
|
||||
var D = P();
|
||||
const z = N({ __proto__: null }, [D]);
|
||||
export {
|
||||
z as i
|
||||
};
|
||||
1
assets/index-C4oHu9vm.css
Normal file
1
assets/index-C4oHu9vm.css
Normal file
File diff suppressed because one or more lines are too long
38413
assets/index-CnJE9765.js
Normal file
38413
assets/index-CnJE9765.js
Normal file
File diff suppressed because one or more lines are too long
520
index.html
Normal file
520
index.html
Normal file
@ -0,0 +1,520 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Cardano Wallet - RanchiMall</title>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
|
||||
/>
|
||||
<script type="module" crossorigin src="./assets/index-CnJE9765.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="./assets/index-C4oHu9vm.css">
|
||||
</head>
|
||||
<body>
|
||||
<!-- Loading Screen -->
|
||||
<div id="loadingScreen" class="loading-screen">
|
||||
<div class="loading-content">
|
||||
<div class="loading-spinner"></div>
|
||||
<h2>Loading Cardano Wallet...</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Notification Drawer -->
|
||||
<div id="notificationDrawer" class="notification-drawer"></div>
|
||||
|
||||
<header class="header">
|
||||
<div class="header-content">
|
||||
<div id="logo" class="app-brand">
|
||||
<svg id="main_logo" class="icon" viewBox="0 0 27.25 32">
|
||||
<title>RanchiMall</title>
|
||||
<path
|
||||
d="M27.14,30.86c-.74-2.48-3-4.36-8.25-6.94a20,20,0,0,1-4.2-2.49,6,6,0,0,1-1.25-1.67,4,4,0,0,1,0-2.26c.37-1.08.79-1.57,3.89-4.55a11.66,11.66,0,0,0,3.34-4.67,6.54,6.54,0,0,0,.05-2.82C20,3.6,18.58,2,16.16.49c-.89-.56-1.29-.64-1.3-.24a3,3,0,0,1-.3.72l-.3.55L13.42.94C13,.62,12.4.26,12.19.15c-.4-.2-.73-.18-.72.05a9.39,9.39,0,0,1-.61,1.33s-.14,0-.27-.13C8.76.09,8-.27,8,.23A11.73,11.73,0,0,1,6.76,2.6C4.81,5.87,2.83,7.49.77,7.49c-.89,0-.88,0-.61,1,.22.85.33.92,1.09.69A5.29,5.29,0,0,0,3,8.33c.23-.17.45-.29.49-.26a2,2,0,0,1,.22.63A1.31,1.31,0,0,0,4,9.34a5.62,5.62,0,0,0,2.27-.87L7,8l.13.55c.19.74.32.82,1,.65a7.06,7.06,0,0,0,3.46-2.47l.6-.71-.06.64c-.17,1.63-1.3,3.42-3.39,5.42L6.73,14c-3.21,3.06-3,5.59.6,8a46.77,46.77,0,0,0,4.6,2.41c.28.13,1,.52,1.59.87,3.31,2,4.95,3.92,4.95,5.93a2.49,2.49,0,0,0,.07.77h0c.09.09,0,.1.9-.14a2.61,2.61,0,0,0,.83-.32,3.69,3.69,0,0,0-.55-1.83A11.14,11.14,0,0,0,17,26.81a35.7,35.7,0,0,0-5.1-2.91C9.37,22.64,8.38,22,7.52,21.17a3.53,3.53,0,0,1-1.18-2.48c0-1.38.71-2.58,2.5-4.23,2.84-2.6,3.92-3.91,4.67-5.65a3.64,3.64,0,0,0,.42-2A3.37,3.37,0,0,0,13.61,5l-.32-.74.29-.48c.17-.27.37-.63.46-.8l.15-.3.44.64a5.92,5.92,0,0,1,1,2.81,5.86,5.86,0,0,1-.42,1.94c0,.12-.12.3-.15.4a9.49,9.49,0,0,1-.67,1.1,28,28,0,0,1-4,4.29C8.62,15.49,8.05,16.44,8,17.78a3.28,3.28,0,0,0,1.11,2.76c.95,1,2.07,1.74,5.25,3.32,3.64,1.82,5.22,2.9,6.41,4.38A4.78,4.78,0,0,1,21.94,31a3.21,3.21,0,0,0,.14.92,1.06,1.06,0,0,0,.43-.05l.83-.22.46-.12-.06-.46c-.21-1.53-1.62-3.25-3.94-4.8a37.57,37.57,0,0,0-5.22-2.82A13.36,13.36,0,0,1,11,21.19a3.36,3.36,0,0,1-.8-4.19c.41-.85.83-1.31,3.77-4.15,2.39-2.31,3.43-4.13,3.43-6a5.85,5.85,0,0,0-2.08-4.29c-.23-.21-.44-.43-.65-.65A2.5,2.5,0,0,1,15.27.69a10.6,10.6,0,0,1,2.91,2.78A4.16,4.16,0,0,1,19,6.16a4.91,4.91,0,0,1-.87,3c-.71,1.22-1.26,1.82-4.27,4.67a9.47,9.47,0,0,0-2.07,2.6,2.76,2.76,0,0,0-.33,1.54,2.76,2.76,0,0,0,.29,1.47c.57,1.21,2.23,2.55,4.65,3.73a32.41,32.41,0,0,1,5.82,3.24c2.16,1.6,3.2,3.16,3.2,4.8a1.94,1.94,0,0,0,.09.76,4.54,4.54,0,0,0,1.66-.4C27.29,31.42,27.29,31.37,27.14,30.86ZM6.1,7h0a3.77,3.77,0,0,1-1.46.45L4,7.51l.68-.83a25.09,25.09,0,0,0,3-4.82A12,12,0,0,1,8.28.76c.11-.12.77.32,1.53,1l.63.58-.57.84A10.34,10.34,0,0,1,6.1,7Zm5.71-1.78A9.77,9.77,0,0,1,9.24,7.18h0a5.25,5.25,0,0,1-1.17.28l-.58,0,.65-.78a21.29,21.29,0,0,0,2.1-3.12c.22-.41.42-.76.44-.79s.5.43.9,1.24L12,5ZM13.41,3a2.84,2.84,0,0,1-.45.64,11,11,0,0,1-.9-.91l-.84-.9.19-.45c.34-.79.39-.8,1-.31A9.4,9.4,0,0,1,13.80,2.33q-.18.34-.39.69Z"
|
||||
/>
|
||||
</svg>
|
||||
<div class="app-name">
|
||||
<div class="app-name__company">RanchiMall</div>
|
||||
<h4 class="app-name__title">Cardano Wallet</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="header-actions">
|
||||
<button class="theme-toggle" id="themeToggle" title="Toggle theme">
|
||||
<i class="fas fa-moon" id="themeIcon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div id="sidebarOverlay" class="sidebar-overlay"></div>
|
||||
|
||||
<aside id="sidebar" class="sidebar">
|
||||
<ul class="sidebar-menu">
|
||||
<li>
|
||||
<a href="#" class="nav-link active" data-page="generate">
|
||||
<i class="fas fa-plus-circle"></i>
|
||||
<span>Generate</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="nav-link" data-page="send">
|
||||
<i class="fas fa-paper-plane"></i>
|
||||
<span>Send</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="nav-link" data-page="transactions">
|
||||
<i class="fas fa-history"></i>
|
||||
<span>Transactions</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="nav-link" data-page="recover">
|
||||
<i class="fas fa-key"></i>
|
||||
<span>Recover</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
|
||||
<div class="container">
|
||||
<main class="main-content">
|
||||
<!-- Generate Page -->
|
||||
<div id="generatePage" class="page">
|
||||
<div class="page-header">
|
||||
<h2>
|
||||
<i class="fas fa-wallet"></i> Generate Multi-Blockchain Addresses
|
||||
</h2>
|
||||
<p>
|
||||
Generate addresses for ADA, FLO, BTC from a single private key
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="generate-wallet-intro">
|
||||
<div class="intro-icon">
|
||||
<i class="fas fa-wallet"></i>
|
||||
</div>
|
||||
<div class="intro-content">
|
||||
<h3>One Key, Multiple Blockchains</h3>
|
||||
<p>
|
||||
Generate a single private key that works across ADA, FLO, BTC networks. This creates a unified experience across multiple blockchains.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card generate-actions">
|
||||
|
||||
|
||||
<button
|
||||
id="generateBtn"
|
||||
class="btn btn-primary btn-block"
|
||||
>
|
||||
<i class="fas fa-wallet"></i>
|
||||
Generate
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="walletOutput" class="output"></div>
|
||||
|
||||
<div class="wallet-security-notice">
|
||||
<div class="notice-icon">
|
||||
<i class="fas fa-shield-alt"></i>
|
||||
</div>
|
||||
<div class="notice-content">
|
||||
<h4>Security Notice</h4>
|
||||
<p>
|
||||
Your private keys are generated locally and never leave your
|
||||
device. Make sure to backup your keys securely before using.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Send ADA Page -->
|
||||
<div id="sendPage" class="page hidden">
|
||||
<div class="page-header">
|
||||
<h2><i class="fas fa-paper-plane"></i> Send ADA</h2>
|
||||
<p>Send ADA to another Cardano address</p>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<form id="sendForm">
|
||||
<div class="form-group">
|
||||
<label for="sendPrivateKey">
|
||||
<i class="fas fa-key"></i> Private Key
|
||||
</label>
|
||||
<div class="input-with-actions">
|
||||
<input
|
||||
type="password"
|
||||
id="sendPrivateKey"
|
||||
class="form-input"
|
||||
placeholder="Enter ADA/FLO/BTC private key"
|
||||
required
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
class="input-action-btn password-toggle"
|
||||
onclick="togglePasswordVisibility('sendPrivateKey')"
|
||||
title="Show/Hide Password"
|
||||
>
|
||||
<i class="fas fa-eye"></i>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="input-action-btn clear-btn"
|
||||
onclick="clearInput('sendPrivateKey')"
|
||||
title="Clear"
|
||||
>
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
id="balanceDisplay"
|
||||
class="balance-info card"
|
||||
style="display: none; margin-bottom: 1.5rem"
|
||||
>
|
||||
<div class="balance-header">
|
||||
<h3><i class="fas fa-wallet"></i> Sender Balance</h3>
|
||||
</div>
|
||||
<div class="balance-display">
|
||||
<div class="balance-amount" id="availableBalance">
|
||||
0 <span class="currency">ADA</span>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="address-display"
|
||||
style="display: block; margin-top: 0.5rem"
|
||||
>
|
||||
<span class="address-label">Address:</span>
|
||||
<span class="address-value" id="senderAddress">-</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="recipientAddress">
|
||||
<i class="fas fa-user"></i> To Address
|
||||
</label>
|
||||
<div class="input-with-actions">
|
||||
<input
|
||||
type="text"
|
||||
id="recipientAddress"
|
||||
class="form-input"
|
||||
placeholder="Enter recipient address (addr1...)"
|
||||
required
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
class="input-action-btn clear-btn"
|
||||
onclick="clearInput('recipientAddress')"
|
||||
title="Clear"
|
||||
>
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="sendAmount">
|
||||
<i class="fas fa-coins"></i> Amount (ADA)
|
||||
</label>
|
||||
<div class="input-with-actions">
|
||||
<input
|
||||
type="number"
|
||||
id="sendAmount"
|
||||
class="form-input"
|
||||
placeholder="Enter the amount to send"
|
||||
min="0.000001"
|
||||
step="0.000001"
|
||||
required
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
class="input-action-btn clear-btn"
|
||||
onclick="clearInput('sendAmount')"
|
||||
title="Clear"
|
||||
>
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" id="sendBtn" class="btn btn-primary btn-block">
|
||||
<i class="fas fa-paper-plane"></i>
|
||||
Send Transaction
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id="sendOutput" class="output"></div>
|
||||
</div>
|
||||
|
||||
<!-- Transactions Page -->
|
||||
<div id="transactionsPage" class="page hidden">
|
||||
<div class="page-header">
|
||||
<h2><i class="fas fa-exchange-alt"></i> Cardano Transactions</h2>
|
||||
<p>Check balance and transaction history for any Cardano address</p>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<!-- Search Type Selector -->
|
||||
<div class="search-type-selector">
|
||||
<div class="search-type-label">Search Type</div>
|
||||
<div class="search-type-options">
|
||||
<label class="radio-button-container active" id="addressSearchType">
|
||||
<input type="radio" name="searchType" value="address" checked />
|
||||
<div class="radio-icon"><i class="fas fa-wallet"></i></div>
|
||||
<span>Cardano Address</span>
|
||||
</label>
|
||||
<label class="radio-button-container" id="hashSearchType">
|
||||
<input type="radio" name="searchType" value="hash" />
|
||||
<div class="radio-icon"><i class="fas fa-fingerprint"></i></div>
|
||||
<span>Transaction Hash</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="searchInput">ADA Address or ADA/FLO/BTC Private Key</label>
|
||||
<div class="input-with-actions">
|
||||
<input
|
||||
type="text"
|
||||
id="searchInput"
|
||||
class="form-input"
|
||||
placeholder="Enter ADA address or ADA/FLO/BTC private key"
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
class="input-action-btn clear-btn"
|
||||
onclick="clearInput('searchInput')"
|
||||
title="Clear"
|
||||
>
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="form-text">
|
||||
Enter ADA address or ADA/FLO/BTC private key to view transactions
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button
|
||||
class="btn btn-primary btn-block"
|
||||
onclick="searchTransactions()"
|
||||
id="searchBtn"
|
||||
>
|
||||
<i class="fas fa-search"></i>
|
||||
Search
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div
|
||||
id="transactionBalance"
|
||||
class="balance-info card"
|
||||
style="display: none"
|
||||
>
|
||||
<div class="balance-header">
|
||||
<h3><i class="fas fa-wallet"></i> Balance</h3>
|
||||
</div>
|
||||
<div class="balance-display">
|
||||
<div class="balance-amount" id="adaBalance">
|
||||
0 <span class="currency">ADA</span>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="address-display"
|
||||
id="transactionAddressDisplay"
|
||||
style="display: none"
|
||||
>
|
||||
<span class="address-label">Address:</span>
|
||||
<span class="address-value" id="displayedAddress"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
id="transactionFilterSection"
|
||||
class="transaction-section"
|
||||
style="display: none"
|
||||
>
|
||||
<div class="transaction-header">
|
||||
<h3><i class="fas fa-history"></i> Transactions</h3>
|
||||
<div class="filter-buttons">
|
||||
<button class="filter-btn active" data-filter="all">All</button>
|
||||
<button class="filter-btn" data-filter="received">Received</button>
|
||||
<button class="filter-btn" data-filter="sent">Sent</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="transactionList" class="transaction-list"></div>
|
||||
|
||||
<div
|
||||
id="paginationSection"
|
||||
class="pagination-section"
|
||||
style="display: none"
|
||||
>
|
||||
<div class="pagination-info">
|
||||
<span id="paginationInfo">Showing 1-10 of 0 transactions</span>
|
||||
</div>
|
||||
<div class="pagination-controls">
|
||||
<button
|
||||
class="pagination-btn"
|
||||
id="prevPageBtn"
|
||||
disabled
|
||||
>
|
||||
<i class="fas fa-chevron-left"></i>
|
||||
<span class="btn-text">Prev</span>
|
||||
</button>
|
||||
<div class="page-numbers" id="pageNumbers"></div>
|
||||
<button class="pagination-btn" id="nextPageBtn">
|
||||
<span class="btn-text">Next</span>
|
||||
<i class="fas fa-chevron-right"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Searched Addresses History -->
|
||||
<div id="searchedAddressesSection" class="card" style="margin-top: 1.5rem; display: none;">
|
||||
<div class="search-history-header">
|
||||
<h3><i class="fas fa-sync-alt"></i> Recent Addresses</h3>
|
||||
<button class="btn btn-secondary btn-sm" onclick="clearSearchHistory()" title="Clear all history">
|
||||
<i class="fas fa-trash-alt"></i> Clear All
|
||||
</button>
|
||||
</div>
|
||||
<div id="searchedAddressesList" class="searched-addresses-list"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Recover Page -->
|
||||
<div id="recoverPage" class="page hidden">
|
||||
<div class="page-header">
|
||||
<h2>
|
||||
<i class="fas fa-sync-alt"></i> Recover Multi-Blockchain Addresses
|
||||
</h2>
|
||||
<p>
|
||||
Recover all blockchain addresses (ADA, FLO, BTC) from a single private key
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label for="recoverPrivateKey"
|
||||
><i class="fas fa-key"></i> Private Key (ADA/FLO/BTC)</label
|
||||
>
|
||||
<div class="input-with-actions">
|
||||
<input
|
||||
type="password"
|
||||
id="recoverPrivateKey"
|
||||
class="form-input"
|
||||
placeholder="Enter ADA/FLO/BTC private key"
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
class="input-action-btn password-toggle"
|
||||
onclick="togglePasswordVisibility('recoverPrivateKey')"
|
||||
title="Show/Hide Password"
|
||||
>
|
||||
<i class="fas fa-eye"></i>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="input-action-btn clear-btn"
|
||||
onclick="clearInput('recoverPrivateKey')"
|
||||
title="Clear"
|
||||
>
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="form-text">
|
||||
Only private keys accepted
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button id="recoverBtn" class="btn btn-primary btn-block">
|
||||
<i class="fas fa-sync-alt"></i>
|
||||
Recover
|
||||
</button>
|
||||
|
||||
<div id="recoverOutput" class="output"></div>
|
||||
</div>
|
||||
|
||||
<div class="wallet-security-notice">
|
||||
<div class="notice-icon">
|
||||
<i class="fas fa-shield-alt"></i>
|
||||
</div>
|
||||
<div class="notice-content">
|
||||
<h4>Privacy Notice</h4>
|
||||
<p>
|
||||
Your private key is processed locally and never transmitted to
|
||||
any server. All recovery operations happen in your browser.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<!-- Bottom Navigation (Mobile) -->
|
||||
<nav class="nav-box">
|
||||
<button class="nav-btn active" data-page="generate">
|
||||
<i class="fas fa-plus-circle"></i>
|
||||
<span>Generate</span>
|
||||
</button>
|
||||
<button class="nav-btn" data-page="send">
|
||||
<i class="fas fa-paper-plane"></i>
|
||||
<span>Send</span>
|
||||
</button>
|
||||
<button class="nav-btn" data-page="transactions">
|
||||
<i class="fas fa-history"></i>
|
||||
<span>Transactions</span>
|
||||
</button>
|
||||
<button class="nav-btn" data-page="recover">
|
||||
<i class="fas fa-key"></i>
|
||||
<span>Recover</span>
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
<!-- Transaction Confirmation Modal -->
|
||||
<div id="confirmModal" class="modal">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h3><i class="fas fa-shield-alt"></i> Confirm Transaction</h3>
|
||||
<span class="modal-close" id="closeModal">×</span>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="confirm-details">
|
||||
<div class="detail-group">
|
||||
<label><i class="fas fa-coins"></i> Amount</label>
|
||||
<div class="confirm-value" id="confirmAmount">0 ADA</div>
|
||||
</div>
|
||||
<div class="detail-group">
|
||||
<label><i class="fas fa-gas-pump"></i> Network Fee</label>
|
||||
<div class="confirm-value" id="confirmFee">0 ADA</div>
|
||||
</div>
|
||||
<div class="detail-group">
|
||||
<label><i class="fas fa-arrow-right"></i> Total Cost</label>
|
||||
<div class="confirm-value" id="confirmTotal">0 ADA</div>
|
||||
</div>
|
||||
<div class="detail-group">
|
||||
<label><i class="fas fa-user"></i> Recipient</label>
|
||||
<div class="confirm-value address-value" id="confirmRecipient">addr1...</div>
|
||||
</div>
|
||||
<div class="detail-group warning">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<span>Transactions are irreversible. Please verify the recipient address carefully.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-secondary" id="cancelTxBtn">Cancel</button>
|
||||
<button class="btn btn-primary" id="confirmTxBtn">
|
||||
<i class="fas fa-check"></i> Confirm & Send
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="./src/lib/lib.cardano.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in New Issue
Block a user