diff --git a/i18n/ar.json b/i18n/ar.json index 08a92e880c2c299974154319a0ca2469f0ec65b6..7642155607a0a9e21b703cecea792452e9362a0f 100644 --- a/i18n/ar.json +++ b/i18n/ar.json @@ -391,6 +391,8 @@ "transactionPage.refBlockPrefix": "بادئة البلوك المرجعية", "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 64789ee13acd5ab508f292be56d054b39860da7b..f03630aa894478546b734259ca34340e5d2f429a 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -384,6 +384,8 @@ "transactionPage.refBlockPrefix": "Ref-Block-Präfix", "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 a45b7b907bfab0445220a66abdde4a66e39d6d22..fe40b848191db6210b35f874de09a13bd63c45be 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,8 @@ "transactionPage.refBlockPrefix": "Ref Block Prefix", "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 51d703ccd588fe4c7d987d19728540853461f875..4f901e83f629a794e3ba2ca43e4fd72a81c3425f 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -382,6 +382,8 @@ "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", + "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 42f2bf3e44e36fee421f36b1a1f4d0892ed92ed9..6fe2b8b4ee09ce4242456e83084ccd012dd3dd89 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -383,6 +383,8 @@ "transactionPage.refBlockPrefix": "Préfixe Bloc Réf.", "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 b8c0a42ac15ab55f35bf18241d4a455f85a7e3db..5c69528d37c831fdf555d8563134355f0e7aca2d 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -383,6 +383,8 @@ "transactionPage.refBlockPrefix": "Prefisso Blocco Rif.", "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 da86d0065d1e28b1fedaee60f43a033ee0b1a0bf..58e2f1423158f8ddd090d15067161e6872a24e52 100644 --- a/i18n/ja.json +++ b/i18n/ja.json @@ -384,6 +384,8 @@ "transactionPage.refBlockPrefix": "参照ブロックプレフィックス", "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 37b951f8ceb1c709fe87657a80d6a35ee8d2c2b8..eaee1ef31a2881d844794cb8c839795f538a5e99 100644 --- a/i18n/ko.json +++ b/i18n/ko.json @@ -383,6 +383,8 @@ "transactionPage.refBlockPrefix": "참조 블록 접두사", "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 727f6929c165391c780c92bcc413d96bf02d3b6b..4d0221fb0ca46697fbf741ac15d1eae34836f152 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -384,6 +384,8 @@ "transactionPage.refBlockPrefix": "Prefiks Bloku Ref.", "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 7e3a6e2077e90fb64912c22b1c055f963f699ef1..a67baca71351482dda840b0463e26d7cc7aa6df3 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -384,6 +384,8 @@ "transactionPage.refBlockPrefix": "Prefixo Bloco Ref.", "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 6d63d351949d778b1629b41ccae05c4616bdcbde..53e544a3ada25b3fe5dc1da164e9c2d0fe038ccb 100644 --- a/i18n/ro.json +++ b/i18n/ro.json @@ -383,6 +383,8 @@ "transactionPage.refBlockPrefix": "Prefix Bloc Ref.", "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 69c1bb939462a2dfba361854e0873d4b19c1314c..59202f364cbb824393a0a13a410904ff1e91bfe5 100644 --- a/i18n/zh.json +++ b/i18n/zh.json @@ -384,6 +384,8 @@ "transactionPage.refBlockPrefix": "引用区块前缀", "transactionPage.expiration": "过期", "transactionPage.transactionNumber": "交易号", + "transactionPage.transactionSize": "交易大小", + "transactionPage.bytes": "字节", "pageTitle.informationAboutTitle": "关于标题的信息", "pageTitle.hiveWitnesses": "Hive见证人", "pageTitle.hiveBlocks": "Hive区块", diff --git a/package-lock.json b/package-lock.json index 84d1a2ac3dffb077ed6a462793df66472e41a212..30de42e17c76421707c515c7e0f67a4a67992a36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -227,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", @@ -246,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" }, @@ -3301,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", @@ -5954,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", @@ -6227,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" } @@ -7053,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" } @@ -7146,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" }, @@ -7158,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" } @@ -8018,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" }, @@ -8257,11 +8241,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", @@ -8269,11 +8248,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" } @@ -9973,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", @@ -11826,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", @@ -12016,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", @@ -12536,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", @@ -12607,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" } @@ -12615,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", @@ -13198,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 675a2354a4ae98ed441e2b3dd40076a1f3f1bdee..3beeed7da938e774abd611719c5b1727c7ffbca7 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 7d65ea1937bb97bf07e2335522b1d0ca2c52a5bc..bbf5778af4e3942955ffbf2708db50b21fb2a65b 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 { getTransactionSizeFromJson } from "@/utils/TransactionSize"; import { useUserSettingsContext } from "@/contexts/UserSettingsContext"; import { convertTransactionResponseToTableOperations } from "@/lib/utils"; import { formatAndDelocalizeTime } from "@/utils/TimeUtils"; @@ -69,8 +70,24 @@ export default function Transaction() { if (trxError) { return ; } + // Calculate transaction size in bytes + +const [transactionSize, setTransactionSize] = useState(0); - return ( +// 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( <> {trxData?.transaction_id?.slice(0, 10)} - Hive Explorer @@ -188,6 +205,12 @@ export default function Transaction() { dataTestId="transaction-number" hasBorder /> + - ); + ); } diff --git a/utils/TransactionSize.ts b/utils/TransactionSize.ts new file mode 100644 index 0000000000000000000000000000000000000000..5d0b44ab3e261db55ad654f3edd07c0ac39c77e2 --- /dev/null +++ b/utils/TransactionSize.ts @@ -0,0 +1,35 @@ +import { createHiveChain, type ITransaction } from "@hiveio/wax/vite"; + +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; +} + +/** + * transaction size in bytes using Wax library + * @param trxJson Hive transaction JSON + * @returns number of bytes + */ +export async function getTransactionSizeFromJson(trxJson: any): Promise { + const hiveChain = await getChain(); + + // Create transaction object from JSON + const tx: ITransaction & { + binaryViewMetadata: { binary: Uint8Array }; + } = hiveChain.createTransactionFromJson(trxJson); + + //full binary serialization + const binary: Uint8Array = tx.binaryViewMetadata.binary; + + + + return binary.length; +}