From 795b659edaa11b06779edf4129e97ca0395d48bc Mon Sep 17 00:00:00 2001 From: Ghina Al Rashwani Date: Tue, 2 Sep 2025 01:53:49 +0300 Subject: [PATCH 1/7] Add Transaction size in bytes and corresponding translations for transaction size --- i18n/ar.json | 1 + i18n/de.json | 1 + i18n/en.json | 3 +++ i18n/es.json | 1 + i18n/fr.json | 1 + i18n/it.json | 1 + i18n/ja.json | 1 + i18n/ko.json | 1 + i18n/pl.json | 1 + i18n/pt.json | 1 + i18n/ro.json | 1 + i18n/zh.json | 1 + 12 files changed, 14 insertions(+) diff --git a/i18n/ar.json b/i18n/ar.json index 39b02d795..ccd038ce1 100644 --- a/i18n/ar.json +++ b/i18n/ar.json @@ -392,6 +392,7 @@ "transactionPage.refBlockPrefix": "بادئة البلوك المرجعية", "transactionPage.expiration": "الانتهاء", "transactionPage.transactionNumber": "رقم المعاملة", + "transactionPage.transactionSize": "حجم المعاملة", "pageTitle.informationAboutTitle": "معلومات حول العنوان", "pageTitle.hiveWitnesses": "شهود Hive", "pageTitle.hiveBlocks": "بلوكات Hive", diff --git a/i18n/de.json b/i18n/de.json index 393f1a5a2..10059fd2f 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -384,6 +384,7 @@ "transactionPage.refBlockPrefix": "Ref-Block-Präfix", "transactionPage.expiration": "Ablauf", "transactionPage.transactionNumber": "Transaktionsnummer", + "transactionPage.transactionSize": "Transaktionsgröße", "pageTitle.informationAboutTitle": "Informationen über den Titel", "pageTitle.hiveWitnesses": "Hive-Zeugen", "pageTitle.hiveBlocks": "Hive-Blöcke", diff --git a/i18n/en.json b/i18n/en.json index f3f52448e..dba03fc30 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -93,6 +93,7 @@ "transactionStatisticsFullChartDialog.title": "Transaction Statistics Chart", "transactionStatisticsFullChartDialog.granularity": "Granularity", "transactionStatisticsFullChartDialog.selectGranularity": "Select Granularity", + "searchRanges.last": "Last *", "searchRanges.from": "From *", "searchRanges.to": "To", @@ -146,6 +147,7 @@ "syncInfo.lastSyncedBlock": "Last Synced Block At", "syncInfo.connecting": "Connecting", "searchBar.placeholder": "User, Block, Trx #", + "witnesses.title": "Witnesses", "witnesses.votes": "Votes", "witnesses.voters": "Voters", @@ -381,6 +383,7 @@ "transactionPage.refBlockPrefix": "Ref Block Prefix", "transactionPage.expiration": "Expiration", "transactionPage.transactionNumber": "Transaction Number", + "transactionPage.transactionSize": "Transaction Size", "pageTitle.informationAboutTitle": "Information about the title", "pageTitle.hiveWitnesses": "Hive Witnesses", "pageTitle.hiveBlocks": "Hive Blocks", diff --git a/i18n/es.json b/i18n/es.json index e65d029be..cee6cb20b 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -382,6 +382,7 @@ "transactionPage.refBlockPrefix": "Prefijo del Bloque de Ref.", "transactionPage.expiration": "Expiración", "transactionPage.transactionNumber": "Número de Transacción", + "transactionPage.transactionSize": "Tamaño de Transacción", "pageTitle.informationAboutTitle": "Información sobre el título", "pageTitle.hiveWitnesses": "Testigos de Hive", "pageTitle.hiveBlocks": "Bloques de Hive", diff --git a/i18n/fr.json b/i18n/fr.json index 71f9a5c86..eee076587 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -383,6 +383,7 @@ "transactionPage.refBlockPrefix": "Préfixe Bloc Réf.", "transactionPage.expiration": "Expiration", "transactionPage.transactionNumber": "Numéro de Transaction", + "transactionPage.transactionSize": "Taille de la transaction", "pageTitle.informationAboutTitle": "Informations sur le titre", "pageTitle.hiveWitnesses": "Témoins Hive", "pageTitle.hiveBlocks": "Blocs Hive", diff --git a/i18n/it.json b/i18n/it.json index 9143ce8fb..33133d809 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -383,6 +383,7 @@ "transactionPage.refBlockPrefix": "Prefisso Blocco Rif.", "transactionPage.expiration": "Scadenza", "transactionPage.transactionNumber": "Numero Transazione", + "transactionPage.transactionSize": "Dimensione della transazione", "pageTitle.informationAboutTitle": "Informazioni sul titolo", "pageTitle.hiveWitnesses": "Testimoni Hive", "pageTitle.hiveBlocks": "Blocchi Hive", diff --git a/i18n/ja.json b/i18n/ja.json index c4ff2dddb..f52e649b6 100644 --- a/i18n/ja.json +++ b/i18n/ja.json @@ -384,6 +384,7 @@ "transactionPage.refBlockPrefix": "参照ブロックプレフィックス", "transactionPage.expiration": "有効期限", "transactionPage.transactionNumber": "トランザクション番号", + "transactionPage.transactionSize": "トランザクションサイズ", "pageTitle.informationAboutTitle": "タイトルに関する情報", "pageTitle.hiveWitnesses": "Hive証人", "pageTitle.hiveBlocks": "Hiveブロック", diff --git a/i18n/ko.json b/i18n/ko.json index 5a87ea3ee..e05799dda 100644 --- a/i18n/ko.json +++ b/i18n/ko.json @@ -384,6 +384,7 @@ "transactionPage.refBlockPrefix": "참조 블록 접두사", "transactionPage.expiration": "만료", "transactionPage.transactionNumber": "트랜잭션 번호", + "transactionPage.transactionSize": "트랜잭션 크기", "pageTitle.informationAboutTitle": "제목에 대한 정보", "pageTitle.hiveWitnesses": "Hive 증인", "pageTitle.hiveBlocks": "Hive 블록", diff --git a/i18n/pl.json b/i18n/pl.json index 244a62d8a..5f77b88da 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -384,6 +384,7 @@ "transactionPage.refBlockPrefix": "Prefiks Bloku Ref.", "transactionPage.expiration": "Wygaśnięcie", "transactionPage.transactionNumber": "Numer Transakcji", + "transactionPage.transactionSize": "Rozmiar transakcji", "pageTitle.informationAboutTitle": "Informacje o tytule", "pageTitle.hiveWitnesses": "Świadkowie Hive", "pageTitle.hiveBlocks": "Bloki Hive", diff --git a/i18n/pt.json b/i18n/pt.json index e38194a29..0d916aeff 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -384,6 +384,7 @@ "transactionPage.refBlockPrefix": "Prefixo Bloco Ref.", "transactionPage.expiration": "Expiração", "transactionPage.transactionNumber": "Número da Transação", + "transactionPage.transactionSize": "Tamanho da transação", "pageTitle.informationAboutTitle": "Informações sobre o título", "pageTitle.hiveWitnesses": "Testemunhas do Hive", "pageTitle.hiveBlocks": "Blocos do Hive", diff --git a/i18n/ro.json b/i18n/ro.json index c5a3462da..62fc62260 100644 --- a/i18n/ro.json +++ b/i18n/ro.json @@ -383,6 +383,7 @@ "transactionPage.refBlockPrefix": "Prefix Bloc Ref.", "transactionPage.expiration": "Expirare", "transactionPage.transactionNumber": "Număr Tranzacție", + "transactionPage.transactionSize": "Dimensiunea tranzacției", "pageTitle.informationAboutTitle": "Informații despre titlu", "pageTitle.hiveWitnesses": "Martori Hive", "pageTitle.hiveBlocks": "Blocuri Hive", diff --git a/i18n/zh.json b/i18n/zh.json index 39262dff9..00aab42b6 100644 --- a/i18n/zh.json +++ b/i18n/zh.json @@ -384,6 +384,7 @@ "transactionPage.refBlockPrefix": "引用区块前缀", "transactionPage.expiration": "过期", "transactionPage.transactionNumber": "交易号", + "transactionPage.transactionSize": "交易大小", "pageTitle.informationAboutTitle": "关于标题的信息", "pageTitle.hiveWitnesses": "Hive见证人", "pageTitle.hiveBlocks": "Hive区块", -- GitLab From d5116a164eb917dc607306c7c4f126c572f28f0f Mon Sep 17 00:00:00 2001 From: Ghina Al Rashwani Date: Tue, 2 Sep 2025 11:33:46 +0300 Subject: [PATCH 2/7] Fixing transaction size format localization (apply toLocaleString to all numbers) and fixing translations --- i18n/ar.json | 1 + i18n/de.json | 1 + i18n/en.json | 1 + i18n/es.json | 1 + i18n/fr.json | 1 + i18n/it.json | 1 + i18n/ja.json | 1 + i18n/ko.json | 1 + i18n/pl.json | 1 + i18n/pt.json | 1 + i18n/ro.json | 1 + i18n/zh.json | 1 + pages/transaction/[transactionId].tsx | 2 +- 13 files changed, 13 insertions(+), 1 deletion(-) diff --git a/i18n/ar.json b/i18n/ar.json index 364873206..764215560 100644 --- a/i18n/ar.json +++ b/i18n/ar.json @@ -392,6 +392,7 @@ "transactionPage.expiration": "الانتهاء", "transactionPage.transactionNumber": "رقم المعاملة", "transactionPage.transactionSize": "حجم المعاملة", + "transactionPage.bytes": "بايت", "pageTitle.informationAboutTitle": "معلومات حول العنوان", "pageTitle.hiveWitnesses": "شهود Hive", "pageTitle.hiveBlocks": "بلوكات Hive", diff --git a/i18n/de.json b/i18n/de.json index eafcc3e96..f03630aa8 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -385,6 +385,7 @@ "transactionPage.expiration": "Ablauf", "transactionPage.transactionNumber": "Transaktionsnummer", "transactionPage.transactionSize": "Transaktionsgröße", + "transactionPage.bytes": "Bytes", "pageTitle.informationAboutTitle": "Informationen über den Titel", "pageTitle.hiveWitnesses": "Hive-Zeugen", "pageTitle.hiveBlocks": "Hive-Blöcke", diff --git a/i18n/en.json b/i18n/en.json index ccbe89c2c..fe40b8481 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -384,6 +384,7 @@ "transactionPage.expiration": "Expiration", "transactionPage.transactionNumber": "Transaction Number", "transactionPage.transactionSize": "Transaction Size", + "transactionPage.bytes": "Bytes", "pageTitle.informationAboutTitle": "Information about the title", "pageTitle.hiveWitnesses": "Hive Witnesses", "pageTitle.hiveBlocks": "Hive Blocks", diff --git a/i18n/es.json b/i18n/es.json index ae9491574..4f901e83f 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -383,6 +383,7 @@ "transactionPage.expiration": "Expiración", "transactionPage.transactionNumber": "Número de Transacción", "transactionPage.transactionSize": "Tamaño de Transacción", + "transactionPage.bytes": "Octeto", "pageTitle.informationAboutTitle": "Información sobre el título", "pageTitle.hiveWitnesses": "Testigos de Hive", "pageTitle.hiveBlocks": "Bloques de Hive", diff --git a/i18n/fr.json b/i18n/fr.json index c2623f99b..6fe2b8b4e 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -384,6 +384,7 @@ "transactionPage.expiration": "Expiration", "transactionPage.transactionNumber": "Numéro de Transaction", "transactionPage.transactionSize": "Taille de la transaction", + "transactionPage.bytes": "Octets", "pageTitle.informationAboutTitle": "Informations sur le titre", "pageTitle.hiveWitnesses": "Témoins Hive", "pageTitle.hiveBlocks": "Blocs Hive", diff --git a/i18n/it.json b/i18n/it.json index 5e2ecd86b..5c69528d3 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -384,6 +384,7 @@ "transactionPage.expiration": "Scadenza", "transactionPage.transactionNumber": "Numero Transazione", "transactionPage.transactionSize": "Dimensione della transazione", + "transactionPage.bytes": "Bytes", "pageTitle.informationAboutTitle": "Informazioni sul titolo", "pageTitle.hiveWitnesses": "Testimoni Hive", "pageTitle.hiveBlocks": "Blocchi Hive", diff --git a/i18n/ja.json b/i18n/ja.json index d06dabb64..58e2f1423 100644 --- a/i18n/ja.json +++ b/i18n/ja.json @@ -385,6 +385,7 @@ "transactionPage.expiration": "有効期限", "transactionPage.transactionNumber": "トランザクション番号", "transactionPage.transactionSize": "トランザクションサイズ", + "transactionPage.bytes": "バイト", "pageTitle.informationAboutTitle": "タイトルに関する情報", "pageTitle.hiveWitnesses": "Hive証人", "pageTitle.hiveBlocks": "Hiveブロック", diff --git a/i18n/ko.json b/i18n/ko.json index 0590eb712..eaee1ef31 100644 --- a/i18n/ko.json +++ b/i18n/ko.json @@ -384,6 +384,7 @@ "transactionPage.expiration": "만료", "transactionPage.transactionNumber": "트랜잭션 번호", "transactionPage.transactionSize": "트랜잭션 크기", + "transactionPage.bytes": "바이트", "pageTitle.informationAboutTitle": "제목에 대한 정보", "pageTitle.hiveWitnesses": "Hive 증인", "pageTitle.hiveBlocks": "Hive 블록", diff --git a/i18n/pl.json b/i18n/pl.json index fe9a8eaee..4d0221fb0 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -385,6 +385,7 @@ "transactionPage.expiration": "Wygaśnięcie", "transactionPage.transactionNumber": "Numer Transakcji", "transactionPage.transactionSize": "Rozmiar transakcji", + "transactionPage.bytes": "Bajt", "pageTitle.informationAboutTitle": "Informacje o tytule", "pageTitle.hiveWitnesses": "Świadkowie Hive", "pageTitle.hiveBlocks": "Bloki Hive", diff --git a/i18n/pt.json b/i18n/pt.json index acbf58a8d..a67baca71 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -385,6 +385,7 @@ "transactionPage.expiration": "Expiração", "transactionPage.transactionNumber": "Número da Transação", "transactionPage.transactionSize": "Tamanho da transação", + "transactionPage.bytes": "Bytes", "pageTitle.informationAboutTitle": "Informações sobre o título", "pageTitle.hiveWitnesses": "Testemunhas do Hive", "pageTitle.hiveBlocks": "Blocos do Hive", diff --git a/i18n/ro.json b/i18n/ro.json index e52573f34..53e544a3a 100644 --- a/i18n/ro.json +++ b/i18n/ro.json @@ -384,6 +384,7 @@ "transactionPage.expiration": "Expirare", "transactionPage.transactionNumber": "Număr Tranzacție", "transactionPage.transactionSize": "Dimensiunea tranzacției", + "transactionPage.bytes": "Octet", "pageTitle.informationAboutTitle": "Informații despre titlu", "pageTitle.hiveWitnesses": "Martori Hive", "pageTitle.hiveBlocks": "Blocuri Hive", diff --git a/i18n/zh.json b/i18n/zh.json index 37097ffa2..59202f364 100644 --- a/i18n/zh.json +++ b/i18n/zh.json @@ -385,6 +385,7 @@ "transactionPage.expiration": "过期", "transactionPage.transactionNumber": "交易号", "transactionPage.transactionSize": "交易大小", + "transactionPage.bytes": "字节", "pageTitle.informationAboutTitle": "关于标题的信息", "pageTitle.hiveWitnesses": "Hive见证人", "pageTitle.hiveBlocks": "Hive区块", diff --git a/pages/transaction/[transactionId].tsx b/pages/transaction/[transactionId].tsx index e165f784a..fafba30d1 100644 --- a/pages/transaction/[transactionId].tsx +++ b/pages/transaction/[transactionId].tsx @@ -192,7 +192,7 @@ export default function Transaction() { /> -- GitLab From 73e114f6efa8a6119bfa0bab79855069fb63d598 Mon Sep 17 00:00:00 2001 From: Ghina Al Rashwani Date: Tue, 2 Sep 2025 18:50:30 +0300 Subject: [PATCH 3/7] removed react-env:000 from package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8ca9e6862..c7d372af1 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "react-country-flag": "^3.1.0", "react-day-picker": "^8.10.0", "react-dom": "18.3.1", - "react-env": "^0.0.0", + "react-error-boundary": "^4.0.11", "recharts": "^2.9.2", "sharp": "^0.32.4", -- GitLab From 44932c870f63f427ec0b5ffe36cd2c9120d3302d Mon Sep 17 00:00:00 2001 From: Ghina Al Rashwani Date: Tue, 2 Sep 2025 18:55:38 +0300 Subject: [PATCH 4/7] removed react-env from both package and lock json --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 104e9fa47..a5fba5cf8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,7 +46,7 @@ "react-country-flag": "^3.1.0", "react-day-picker": "^8.10.0", "react-dom": "18.3.1", - "react-env": "^0.0.0", + "react-error-boundary": "^4.0.11", "recharts": "^2.9.2", "sharp": "^0.32.4", -- GitLab From 559a35fb9a601e2dda72d42f799dc8978e173849 Mon Sep 17 00:00:00 2001 From: Ghina Al Rashwani Date: Wed, 3 Sep 2025 00:20:37 +0300 Subject: [PATCH 5/7] removed version 000 from lock json --- package-lock.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index a5fba5cf8..58a373b1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6642,11 +6642,7 @@ "react": "^18.3.1" } }, - "node_modules/react-env": { - "version": "0.0.0", - "resolved": "https://registry.npmmirror.com/react-env/-/react-env-0.0.0.tgz", - "integrity": "sha512-kaZymS9Rgh58AVNNCTf1EewJKnGYtNJagmt3+omw0EvCNXhUOcdEXRT4qTCL3EECBx1dCA+2moBRN9QLj9PxJw==" - }, + "node_modules/react-error-boundary": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-4.0.11.tgz", -- GitLab From 4270a38c817f8f8daadd8d7739c9cdc316cf8157 Mon Sep 17 00:00:00 2001 From: Ghina Al Rashwani Date: Thu, 4 Sep 2025 19:14:32 +0300 Subject: [PATCH 6/7] estimation of transaction bytes --- package-lock.json | 34 +++-------------- package.json | 1 - pages/transaction/[transactionId].tsx | 21 ++++++++--- utils/TransactionSize.ts | 53 +++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 35 deletions(-) create mode 100644 utils/TransactionSize.ts diff --git a/package-lock.json b/package-lock.json index 58a373b1f..d80f65d8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,7 +46,6 @@ "react-country-flag": "^3.1.0", "react-day-picker": "^8.10.0", "react-dom": "18.3.1", - "react-error-boundary": "^4.0.11", "recharts": "^2.9.2", "sharp": "^0.32.4", @@ -228,14 +227,6 @@ "react-dom": "^16 || ^17 || ^18" } }, - "node_modules/@hiveio/beekeeper": { - "version": "1.27.11-stable.250508111822", - "resolved": "https://gitlab.syncad.com/api/v4/projects/198/packages/npm/@hiveio/beekeeper/-/@hiveio/beekeeper-1.27.11-stable.250508111822.tgz", - "integrity": "sha1-VzR+ETHeiK6+rKn2+0fbtSj+W0Q=", - "engines": { - "node": "^20.11 || >= 21.2" - } - }, "node_modules/@hiveio/healthchecker-component": { "version": "1.0.0-stable.250604102752", "resolved": "https://gitlab.syncad.com/api/v4/projects/520/packages/npm/@hiveio/healthchecker-component/-/@hiveio/healthchecker-component-1.0.0-stable.250604102752.tgz", @@ -247,11 +238,10 @@ } }, "node_modules/@hiveio/wax": { - "version": "1.27.6-rc7-stable.250512112737", - "resolved": "https://gitlab.syncad.com/api/v4/projects/419/packages/npm/@hiveio/wax/-/@hiveio/wax-1.27.6-rc7-stable.250512112737.tgz", - "integrity": "sha1-6b1XeiJkFbQ5/ujb7On6VVnuXV4=", + "version": "1.27.6-rc9-stable.250711121639", + "resolved": "https://gitlab.syncad.com/api/v4/projects/419/packages/npm/@hiveio/wax/-/@hiveio/wax-1.27.6-rc9-stable.250711121639.tgz", + "integrity": "sha1-XjqwfAkpDfaPexgho3Vla0CHTXY=", "dependencies": { - "@hiveio/beekeeper": "1.27.11-stable.250508111822", "events": "^3.3.0", "long": "^5.2.3" }, @@ -6642,7 +6632,6 @@ "react": "^18.3.1" } }, - "node_modules/react-error-boundary": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-4.0.11.tgz", @@ -8259,11 +8248,6 @@ "client-only": "^0.0.1" } }, - "@hiveio/beekeeper": { - "version": "1.27.11-stable.250508111822", - "resolved": "https://gitlab.syncad.com/api/v4/projects/198/packages/npm/@hiveio/beekeeper/-/@hiveio/beekeeper-1.27.11-stable.250508111822.tgz", - "integrity": "sha1-VzR+ETHeiK6+rKn2+0fbtSj+W0Q=" - }, "@hiveio/healthchecker-component": { "version": "1.0.0-stable.250604102752", "resolved": "https://gitlab.syncad.com/api/v4/projects/520/packages/npm/@hiveio/healthchecker-component/-/@hiveio/healthchecker-component-1.0.0-stable.250604102752.tgz", @@ -8271,11 +8255,10 @@ "requires": {} }, "@hiveio/wax": { - "version": "1.27.6-rc7-stable.250512112737", - "resolved": "https://gitlab.syncad.com/api/v4/projects/419/packages/npm/@hiveio/wax/-/@hiveio/wax-1.27.6-rc7-stable.250512112737.tgz", - "integrity": "sha1-6b1XeiJkFbQ5/ujb7On6VVnuXV4=", + "version": "1.27.6-rc9-stable.250711121639", + "resolved": "https://gitlab.syncad.com/api/v4/projects/419/packages/npm/@hiveio/wax/-/@hiveio/wax-1.27.6-rc9-stable.250711121639.tgz", + "integrity": "sha1-XjqwfAkpDfaPexgho3Vla0CHTXY=", "requires": { - "@hiveio/beekeeper": "1.27.11-stable.250508111822", "events": "^3.3.0", "long": "^5.2.3" } @@ -12276,11 +12259,6 @@ "scheduler": "^0.23.2" } }, - "react-env": { - "version": "0.0.0", - "resolved": "https://registry.npmmirror.com/react-env/-/react-env-0.0.0.tgz", - "integrity": "sha512-kaZymS9Rgh58AVNNCTf1EewJKnGYtNJagmt3+omw0EvCNXhUOcdEXRT4qTCL3EECBx1dCA+2moBRN9QLj9PxJw==" - }, "react-error-boundary": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-4.0.11.tgz", diff --git a/package.json b/package.json index c7d372af1..675a2354a 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,6 @@ "react-country-flag": "^3.1.0", "react-day-picker": "^8.10.0", "react-dom": "18.3.1", - "react-error-boundary": "^4.0.11", "recharts": "^2.9.2", "sharp": "^0.32.4", diff --git a/pages/transaction/[transactionId].tsx b/pages/transaction/[transactionId].tsx index fafba30d1..7a4febdac 100644 --- a/pages/transaction/[transactionId].tsx +++ b/pages/transaction/[transactionId].tsx @@ -1,9 +1,10 @@ -import { useState } from "react"; +'use client'; import { useRouter } from "next/router"; import Link from "next/link"; import Head from "next/head"; - import Hive from "@/types/Hive"; +import React, { useEffect, useState } from "react"; +import { calcTransactionSize, TransactionForSize } from "@/utils/TransactionSize"; import { useUserSettingsContext } from "@/contexts/UserSettingsContext"; import { convertTransactionResponseToTableOperations } from "@/lib/utils"; import { formatAndDelocalizeTime } from "@/utils/TimeUtils"; @@ -70,9 +71,17 @@ export default function Transaction() { return ; } // Calculate transaction size in bytes - const transactionSize = trxData ? new TextEncoder().encode(JSON.stringify(trxData.transaction_json)).length : 0 - - return ( +const transactionSize = trxData + ? calcTransactionSize({ + ref_block_num: trxData.transaction_json.ref_block_num, + ref_block_prefix: trxData.transaction_json.ref_block_prefix, + expiration: trxData.transaction_json.expiration, + operations: trxData.transaction_json.operations || [], + extensions: trxData.transaction_json.extensions || [], + signatures: (trxData as any).signatures || [], + }) + : 0; +return( <> {trxData?.transaction_id?.slice(0, 10)} - Hive Explorer @@ -210,5 +219,5 @@ export default function Transaction() { )} - ); + ); } diff --git a/utils/TransactionSize.ts b/utils/TransactionSize.ts new file mode 100644 index 000000000..6e8a638b9 --- /dev/null +++ b/utils/TransactionSize.ts @@ -0,0 +1,53 @@ + +export interface TransactionForSize { + ref_block_num: number; + ref_block_prefix: number; + expiration: string | Date; + operations?: any[]; + extensions?: any[]; + signatures?: any[]; +} + +/** + * Calculates approximate transaction size in bytes + * using a simple binary/UTF-8 simulation for operations, extensions, and signatures. + */ +export function calcTransactionSize(tx: TransactionForSize): number { + const operations = tx.operations || []; + const extensions = tx.extensions || []; + const signatures = tx.signatures || []; + + let size = 0; + + // ref_block_num and ref_block_prefix: 2 + 4 bytes (approx) + size += 2 + 4; + + // expiration: treat as UTF-8 string length if string, else 8 bytes for date + if (typeof tx.expiration === "string") { + size += new TextEncoder().encode(tx.expiration).length; + } else if (tx.expiration instanceof Date) { + size += 8; // approx 8 bytes for Date + } + + // Operations: estimate size per operation + for (const op of operations) { + // Each op: type string length + JSON string length of value + const typeStr = op.type || ""; + const valueStr = JSON.stringify(op.value || op); + size += new TextEncoder().encode(typeStr).length; + size += new TextEncoder().encode(valueStr).length; + } + + // Extensions: length of JSON strings + for (const ext of extensions) { + const extStr = JSON.stringify(ext); + size += new TextEncoder().encode(extStr).length; + } + //signatures + for (const sig of signatures) { + const sigStr = sig || ""; + size += new TextEncoder().encode(sigStr).length; + } + + return size; +} -- GitLab From e5ebb83a5862fd65fde9a90dda2f1edf61b37a55 Mon Sep 17 00:00:00 2001 From: Ghina Al Rashwani Date: Fri, 5 Sep 2025 19:14:27 +0300 Subject: [PATCH 7/7] using wax library but estimations are still off and greater than actual --- package-lock.json | 25 +++------- package.json | 2 +- pages/transaction/[transactionId].tsx | 28 +++++++----- utils/TransactionSize.ts | 66 ++++++++++----------------- 4 files changed, 48 insertions(+), 73 deletions(-) diff --git a/package-lock.json b/package-lock.json index d80f65d8d..30de42e17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3292,7 +3292,6 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -5945,8 +5944,7 @@ "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node_modules/node-abi": { "version": "3.51.0", @@ -6218,7 +6216,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, "engines": { "node": ">=4" } @@ -7044,7 +7041,6 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, "bin": { "semver": "bin/semver" } @@ -7137,7 +7133,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, "dependencies": { "shebang-regex": "^1.0.0" }, @@ -7149,7 +7144,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -8009,7 +8003,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -9958,11 +9951,11 @@ } } }, + "cross-fetch": { "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -11811,8 +11804,7 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node-abi": { "version": "3.51.0", @@ -12001,8 +11993,7 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" }, "path-parse": { "version": "1.0.7", @@ -12521,8 +12512,7 @@ "semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" }, "set-function-length": { "version": "1.2.2", @@ -12592,7 +12582,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -12600,8 +12589,7 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" }, "shelljs": { "version": "0.8.5", @@ -13183,7 +13171,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } diff --git a/package.json b/package.json index 675a2354a..3beeed7da 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.2.0", "private": true, "scripts": { - "dev": "node helpers/versions.js && react-env -- next dev --turbopack", + "dev": "node helpers/versions.js && react-env -- next dev ", "copy:public": "shx cp -R public/ .next/standalone/", "copy:static": "shx cp -R .next/static/ .next/standalone/.next", "build": "node helpers/versions.js && next build", diff --git a/pages/transaction/[transactionId].tsx b/pages/transaction/[transactionId].tsx index 7a4febdac..bbf5778af 100644 --- a/pages/transaction/[transactionId].tsx +++ b/pages/transaction/[transactionId].tsx @@ -4,7 +4,7 @@ import Link from "next/link"; import Head from "next/head"; import Hive from "@/types/Hive"; import React, { useEffect, useState } from "react"; -import { calcTransactionSize, TransactionForSize } from "@/utils/TransactionSize"; +import { getTransactionSizeFromJson } from "@/utils/TransactionSize"; import { useUserSettingsContext } from "@/contexts/UserSettingsContext"; import { convertTransactionResponseToTableOperations } from "@/lib/utils"; import { formatAndDelocalizeTime } from "@/utils/TimeUtils"; @@ -71,16 +71,22 @@ export default function Transaction() { return ; } // Calculate transaction size in bytes -const transactionSize = trxData - ? calcTransactionSize({ - ref_block_num: trxData.transaction_json.ref_block_num, - ref_block_prefix: trxData.transaction_json.ref_block_prefix, - expiration: trxData.transaction_json.expiration, - operations: trxData.transaction_json.operations || [], - extensions: trxData.transaction_json.extensions || [], - signatures: (trxData as any).signatures || [], - }) - : 0; + +const [transactionSize, setTransactionSize] = useState(0); + +// Fetch and calculate transaction size when trxData is available +useEffect(() => { + if (trxData?.transaction_json) { + (async () => { + try { + const size = await getTransactionSizeFromJson(trxData.transaction_json); + setTransactionSize(size); + } catch (err) { + console.error("Error calculating transaction size:", err); + } + })(); + } +}, [trxData]); return( <> diff --git a/utils/TransactionSize.ts b/utils/TransactionSize.ts index 6e8a638b9..5d0b44ab3 100644 --- a/utils/TransactionSize.ts +++ b/utils/TransactionSize.ts @@ -1,53 +1,35 @@ +import { createHiveChain, type ITransaction } from "@hiveio/wax/vite"; -export interface TransactionForSize { - ref_block_num: number; - ref_block_prefix: number; - expiration: string | Date; - operations?: any[]; - extensions?: any[]; - signatures?: any[]; +const CHAIN_ID = + "beeab0de00000000000000000000000000000000000000000000000000000000"; // Hive mainnet +const API_ENDPOINT = "https://api.hive.blog"; + +let chain: any = null; + +async function getChain() { + if (!chain) { + chain = await createHiveChain({ chainId: CHAIN_ID, apiEndpoint: API_ENDPOINT }); + } + return chain; } /** - * Calculates approximate transaction size in bytes - * using a simple binary/UTF-8 simulation for operations, extensions, and signatures. + * transaction size in bytes using Wax library + * @param trxJson Hive transaction JSON + * @returns number of bytes */ -export function calcTransactionSize(tx: TransactionForSize): number { - const operations = tx.operations || []; - const extensions = tx.extensions || []; - const signatures = tx.signatures || []; - - let size = 0; +export async function getTransactionSizeFromJson(trxJson: any): Promise { + const hiveChain = await getChain(); - // ref_block_num and ref_block_prefix: 2 + 4 bytes (approx) - size += 2 + 4; + // Create transaction object from JSON + const tx: ITransaction & { + binaryViewMetadata: { binary: Uint8Array }; + } = hiveChain.createTransactionFromJson(trxJson); - // expiration: treat as UTF-8 string length if string, else 8 bytes for date - if (typeof tx.expiration === "string") { - size += new TextEncoder().encode(tx.expiration).length; - } else if (tx.expiration instanceof Date) { - size += 8; // approx 8 bytes for Date - } + //full binary serialization + const binary: Uint8Array = tx.binaryViewMetadata.binary; - // Operations: estimate size per operation - for (const op of operations) { - // Each op: type string length + JSON string length of value - const typeStr = op.type || ""; - const valueStr = JSON.stringify(op.value || op); - size += new TextEncoder().encode(typeStr).length; - size += new TextEncoder().encode(valueStr).length; - } - // Extensions: length of JSON strings - for (const ext of extensions) { - const extStr = JSON.stringify(ext); - size += new TextEncoder().encode(extStr).length; - } - //signatures - for (const sig of signatures) { - const sigStr = sig || ""; - size += new TextEncoder().encode(sigStr).length; - } - return size; + return binary.length; } -- GitLab