From 8d0f9db29b2798496a0812af3eec527ee332b4e5 Mon Sep 17 00:00:00 2001 From: void-57 Date: Mon, 29 Dec 2025 00:23:03 +0530 Subject: [PATCH] feat: Add comprehensive wallet features - Add balance checking for ETH, USDC, and USDT tokens - Implement transaction history with filtering (All/Received/Sent) - Add pagination support for transaction history - Implement transaction hash search functionality - Fix ETH transaction sending issues - Add gas fee calculation popup before sending transactions This update significantly enhances the wallet functionality by providing users with complete visibility into their token balances and transaction history, along with improved transaction management and gas fee transparency. --- css/main.css | 110 ++++++ css/main.scss | 132 ++++++- index.html | 851 ++++++++++++++++++++++++++++++++++------- scripts/ethOperator.js | 313 +++++++++++++-- 4 files changed, 1228 insertions(+), 178 deletions(-) diff --git a/css/main.css b/css/main.css index cdb5d0f..6c2991d 100644 --- a/css/main.css +++ b/css/main.css @@ -895,6 +895,7 @@ main { margin: 0 auto; } + aside { view-transition-name: search-history; padding-bottom: 1.5rem; @@ -958,6 +959,101 @@ aside h4 { padding-bottom: 0.5rem; } +/* Transaction list styling matching BTC wallet */ +.transaction { + display: grid; + grid-template-columns: auto 1fr; + gap: 0.8rem; + padding: 1rem; + border-bottom: solid thin rgba(var(--text-color), 0.1); +} + +.transaction:last-child { + border-bottom: none; +} + +.transaction__icon { + display: flex; + align-items: flex-start; + padding-top: 0.2rem; +} + +.transaction__icon .icon { + width: 1.5rem; + height: 1.5rem; + fill: rgba(var(--text-color), 0.7); +} + +.transaction.in .icon { + fill: var(--green); +} + +.transaction.out .icon.sent { + fill: var(--danger-color); +} + +.transaction__time { + font-size: 0.85rem; + color: rgba(var(--text-color), 0.7); +} + +.transaction__amount { + font-weight: 600; + font-size: 0.95rem; +} + +.transaction.in .transaction__amount { + color: var(--green); +} + +.transaction.out .transaction__amount { + color: var(--danger-color); +} + +.transaction__receiver { + font-size: 0.9rem; + color: rgba(var(--text-color), 0.9); + word-break: break-all; +} + +.tx-participant { + color: var(--accent-color); + text-decoration: none; + font-family: monospace; + font-size: 0.85rem; +} + +.tx-participant:hover { + text-decoration: underline; +} + +.wrap-around { + word-break: break-all; +} + +.transaction__id { + display: inline-flex; + align-items: center; +} + +.transaction__id .icon { + width: 1rem; + height: 1rem; + fill: currentColor; +} + +#transaction_list { + max-height: 500px; + overflow-y: auto; + /* Hide scrollbar for Chrome, Safari and Opera */ + scrollbar-width: none; /* Firefox */ + -ms-overflow-style: none; /* IE and Edge */ +} + +#transaction_list::-webkit-scrollbar { + display: none; /* Chrome, Safari and Opera */ +} + #error_section { display: grid; height: 100%; @@ -1179,3 +1275,17 @@ aside h4 { animation: none !important; } } +.transaction__time { + font-size: 0.75rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex-shrink: 1; + min-width: 0; +} +.transaction__amount { + font-size: 0.75rem; + margin-left: auto; + white-space: nowrap; + flex-shrink: 0; +} diff --git a/css/main.scss b/css/main.scss index 2bab491..433300f 100644 --- a/css/main.scss +++ b/css/main.scss @@ -1113,6 +1113,101 @@ aside { } } +/* Transaction list styling matching BTC wallet */ +.transaction { + display: grid; + grid-template-columns: auto 1fr; + gap: 0.8rem; + padding: 1rem; + border-bottom: solid thin rgba(var(--text-color), 0.1); + + &:last-child { + border-bottom: none; + } +} + +.transaction__icon { + display: flex; + align-items: flex-start; + padding-top: 0.2rem; + + .icon { + width: 1.5rem; + height: 1.5rem; + fill: rgba(var(--text-color), 0.7); + } +} + +.transaction.in .icon { + fill: var(--green); +} + +.transaction.out .icon.sent { + fill: var(--danger-color); +} + +.transaction__time { + font-size: 0.85rem; + color: rgba(var(--text-color), 0.7); +} + +.transaction__amount { + font-weight: 600; + font-size: 0.95rem; +} + +.transaction.in .transaction__amount { + color: var(--green); +} + +.transaction.out .transaction__amount { + color: var(--danger-color); +} + +.transaction__receiver { + font-size: 0.9rem; + color: rgba(var(--text-color), 0.9); + word-break: break-all; +} + +.tx-participant { + color: var(--accent-color); + text-decoration: none; + font-family: monospace; + font-size: 0.85rem; + + &:hover { + text-decoration: underline; + } +} + +.wrap-around { + word-break: break-all; +} + +.transaction__id { + display: inline-flex; + align-items: center; + + .icon { + width: 1rem; + height: 1rem; + fill: currentColor; + } +} + +#transaction_list { + max-height: 500px; + overflow-y: auto; + /* Hide scrollbar for Chrome, Safari and Opera */ + scrollbar-width: none; /* Firefox */ + -ms-overflow-style: none; /* IE and Edge */ + + &::-webkit-scrollbar { + display: none; /* Chrome, Safari and Opera */ + } +} + @media only screen and (max-width: 640px) { .hide-on-small { display: none; @@ -1172,7 +1267,9 @@ aside { } } + aside { + min-width: 18rem; border-right: solid thin rgba(var(--text-color), 0.3); overflow-y: auto; @@ -1238,4 +1335,37 @@ aside { ::view-transition-new(*) { animation: none !important; } -} \ No newline at end of file +} + +// Transaction display styles +.transaction__time { + font-size: 0.75rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex-shrink: 1; + min-width: 0; +} + +.transaction__amount { + font-size: 0.75rem; + margin-left: auto; + white-space: nowrap; + flex-shrink: 0; +} + +.transaction { + grid-template-columns: auto 1fr; + gap: 0.5rem; +} + +.transaction__icon { + display: flex; + align-items: flex-start; + padding-top: 0.2rem; + + .icon { + width: 1rem; + height: 1rem; + } +} diff --git a/index.html b/index.html index 036d75e..ee4653a 100644 --- a/index.html +++ b/index.html @@ -11,6 +11,7 @@ + @@ -170,7 +171,7 @@