This commit is contained in:
void-57 2025-12-02 13:55:35 +05:30
commit 75ba0ff628
6 changed files with 39082 additions and 0 deletions

25
.gitignore vendored Normal file
View 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?

Binary file not shown.

123
assets/index-BsM49tGo.js Normal file
View 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
};

File diff suppressed because one or more lines are too long

38413
assets/index-CnJE9765.js Normal file

File diff suppressed because one or more lines are too long

520
index.html Normal file
View 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">&times;</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>