From 79af12e526f3d5ae47950f8e3b33043f2a907173 Mon Sep 17 00:00:00 2001 From: alikia2x Date: Mon, 31 Mar 2025 06:35:44 +0800 Subject: [PATCH 01/13] update: README --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6a46cde..45c62b0 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,11 @@ 「中V档案馆」是一个旨在收录与展示「中文歌声合成作品」及有关信息的网站。 +## 新闻 - 测试版本上线 + +目前,中V档案馆上线了用于测试的前端网页和API接口,它们分别位于[projectcvsa.com](https://projectcvsa.com)和[api.projectcvsa.com](https://api.projectcvsa.com)。 +API调用方法请参见[接口文档](https://docs.projectcvsa.com/api-doc/)。 + ## 创建背景与关联工作 纵观整个互联网,对于「中文歌声合成」或「中文虚拟歌手」(常简称为中V或VC)相关信息进行较为系统、全面地整理收集的主要有以下几个网站: @@ -31,7 +36,7 @@ ## 技术架构 -参见[CVSA文档](https://cvsa.gitbook.io/)。 +参见[CVSA文档](https://docs.projectcvsa.com/)。 ## 开放许可 From 2aead46b51b47e02e7dc1b20fd80045c72c37c5b Mon Sep 17 00:00:00 2001 From: alikia2x Date: Mon, 31 Mar 2025 06:36:36 +0800 Subject: [PATCH 02/13] update: title for frontend page --- packages/frontend/main.ts | 2 +- packages/frontend/src/layouts/Layout.astro | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/frontend/main.ts b/packages/frontend/main.ts index 3f50c75..88db725 100644 --- a/packages/frontend/main.ts +++ b/packages/frontend/main.ts @@ -1 +1 @@ -export const VERSION = "1.2.6"; +export const VERSION = "1.2.7"; diff --git a/packages/frontend/src/layouts/Layout.astro b/packages/frontend/src/layouts/Layout.astro index e33cf4b..c654353 100644 --- a/packages/frontend/src/layouts/Layout.astro +++ b/packages/frontend/src/layouts/Layout.astro @@ -7,7 +7,7 @@ import "../styles/global.css"; - CVSA 前端 + 中V档案馆 From 8d4edd43bf641ee0f913328e2c336d0697bdaad3 Mon Sep 17 00:00:00 2001 From: alikia2x Date: Mon, 31 Mar 2025 06:39:52 +0800 Subject: [PATCH 03/13] update: link in about content --- packages/frontend/src/content/about.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/frontend/src/content/about.md b/packages/frontend/src/content/about.md index 8c2506a..221879b 100644 --- a/packages/frontend/src/content/about.md +++ b/packages/frontend/src/content/about.md @@ -31,7 +31,8 @@ ## 技术架构 -参见[CVSA文档](https://cvsa.gitbook.io/)。 +参见[CVSA文档](https://docs.projectcvsa.com/)。 + ## 开放许可 From dd829b203d09d5a2a2cb88ae9bc91ba99df05aaf Mon Sep 17 00:00:00 2001 From: alikia2x Date: Wed, 2 Apr 2025 21:28:23 +0800 Subject: [PATCH 04/13] test: argon2id tester --- packages/frontend/astro.config.mjs | 8 + packages/frontend/bun.lockb | Bin 0 -> 178251 bytes packages/frontend/package.json | 44 ++-- packages/frontend/public/no-simd.wasm | Bin 0 -> 3667 bytes packages/frontend/public/simd.wasm | Bin 0 -> 4416 bytes .../src/components/Argon2idTester.svelte | 230 ++++++++++++++++++ packages/frontend/src/pages/test.astro | 8 + 7 files changed, 269 insertions(+), 21 deletions(-) create mode 100755 packages/frontend/bun.lockb create mode 100755 packages/frontend/public/no-simd.wasm create mode 100755 packages/frontend/public/simd.wasm create mode 100644 packages/frontend/src/components/Argon2idTester.svelte create mode 100644 packages/frontend/src/pages/test.astro diff --git a/packages/frontend/astro.config.mjs b/packages/frontend/astro.config.mjs index 79ca8e0..de0bad5 100644 --- a/packages/frontend/astro.config.mjs +++ b/packages/frontend/astro.config.mjs @@ -20,5 +20,13 @@ export default defineConfig({ }, }, plugins: [tsconfigPaths()], + build: { + rollupOptions: { + output: { + assetFileNames: "assets/[name].[ext]", // Ensure .wasm files are copied + }, + }, + }, + assetsInclude: ["**/*.wasm"], }, }); diff --git a/packages/frontend/bun.lockb b/packages/frontend/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..fa83ace7304d5f6911dd690f40244df4366476a3 GIT binary patch literal 178251 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

|mZE+57CC+uALgA-n$vq&q|k!&qCtsJ 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 Y1vb2nk}5w-n#Alb#jgzdgoQBqAKN5#F8}}l literal 0 HcmV?d00001 diff --git a/packages/frontend/public/simd.wasm b/packages/frontend/public/simd.wasm new file mode 100755 index 0000000000000000000000000000000000000000..fe5effacfbc856931c77439c7e0874a6644913e7 GIT binary patch literal 4416 zcmeHLOOG2x5UzgAv+eb45<-F@)DAgB%4LN_uG!|mUO24bg1FdbnIO-4ZR2$!AR?Y) zj`_5rCYuNf1+1YG7&A^XsQx9n{1W~|1 zGsPf&g^>WJzG8eX4iHdkIZH*397SG&1Y}jE?39X{fI=tJi$+Mz^Hl1WaM%Q;e!Iif zQ(>?L?i%b?PLM5!4OOM=q@G3R)Pb%luw@KwJABtz-L0%zYl#kKc?vqo5ojh8`@5fd zwoFo4{=v{AV@+UOgi)*(B}$a5z2%=wv+{RFuhF}mG}1^dG{q}c9;K1RJxYCp8)3AH zfIj-Gz00^hxkFUwdj{Flw;Xav?hs~(;p*F)eT^|DXAJ7TLrom2N6xHeV56rIIn$w4 zHjGfrJam{1%R$fnVk&J3j*(hUw_t>9K;uu9l6-2oA6 zCSmE83%ZpfMxk1LdkcpvVl3HGS7b|ag~+ZaVWXcRxzb4kM|Q9vyNONbp!ED8*}ZoC z#ydCPEt@8i8_k{8t=sRl-~ZswhmN6I8x$Gw>KvCDipk~kJ#w)f@=&>jGKF0zMO@IV z>zS+#=VjX=ab{+1S0`AkPCzab=4;Mpr#i!YY+?f&Tk&V@)iSkBGO9@RfRc1{Tq5EW z9qMLN*(j^uTN|TnF{3x+ns_;~zMGi!+)nitJC(4jwfN_8dG7K?UhtB<>|>%?o+dgp zBCKIAsU%TaNi0~7MiYy`6{1qb!bscNh&y+8SuB?$ZoMoP-jy!O!gp-*x2cR~Rppf` za&hsVx>CiZ>+F>({=Zex92}RDMRTtI2fA3$4W6!lZ*&PEVJs-+B5&S~G8X)@+=x1D z_v)3M-RApol=GqT0q&xaELxNH0U|{ zZNiE^Yn!>!RVAl~nii-{iTST4C3yBJJ~!WA^!zNRn|3&yJRoeK^#3DJJ^|kal~5hw QL{Gj?sYwq#&_$^J0 + import { type computeHash } from "argon2id"; + import setupWasm from "argon2id/lib/setup.js"; + + let totalHashes = 0; + let argon2id: null | computeHash = null; + let memorySize = 2560; + let passes = 1; + + function startsWithZeros(uint8Array: Uint8Array, numZeros: number) { + if (numZeros > uint8Array.length * 8) { + return false; // More zeros requested than possible in the array + } + + let zeroCount = 0; + for (let i = 0; i < uint8Array.length; i++) { + const byte = uint8Array[i]; + for (let j = 7; j >= 0; j--) { + if ((byte >> j) & 1) { + // Found a '1' bit, so the leading zeros sequence ends + return zeroCount >= numZeros; + } + zeroCount++; + if (zeroCount === numZeros) { + return true; + } + } + } + + // Reached the end of the array and the required number of zeros were found + return zeroCount >= numZeros; + } + + async function init() { + const SIMD_FILENAME = "/simd.wasm"; + const NON_SIMD_FILENAME = "/non-simd.wasm"; + + const setupWasmWithFetch = async ( + wasmUrl: string, + importObject: WebAssembly.Imports + ): Promise => { + try { + const response = await fetch(wasmUrl); + if (!response.ok) { + throw new Error(`Failed to fetch WASM module from ${wasmUrl}: ${response.status}`); + } + const wasmBytes = await response.arrayBuffer(); + const result = await WebAssembly.instantiate(wasmBytes, importObject); + return result; + } catch (error) { + console.error(`Error initializing WASM from ${wasmUrl}:`, error); + throw error; // Re-throw the error to be caught by the caller + } + }; + + argon2id = await setupWasm( + (importObject) => setupWasmWithFetch(SIMD_FILENAME, importObject), + (importObject) => setupWasmWithFetch(NON_SIMD_FILENAME, importObject) + ); + } + + // Simple PoW function (very basic for demonstration) + async function proofOfWork(message: string, difficulty: number) { + if (argon2id === null) { + await init(); + } + let nonce = 0; + const h = argon2id!; + while (true) { + const p = new TextEncoder().encode(`${message}-${nonce}`); + const hash = h({ + password: new Uint8Array(p), + salt: crypto.getRandomValues(new Uint8Array(32)), + memorySize: memorySize, + parallelism: 1, + passes: passes, + tagLength: 32, + }); + totalHashes++; + if (startsWithZeros(hash, difficulty)) { + return nonce; + } + nonce++; + if (nonce > 100000) { + throw new Error( + "Could not find a valid nonce within a reasonable number of attempts. Try a lower difficulty." + ); + } + await new Promise((resolve) => setTimeout(resolve, 0)); // Yield control for responsiveness + } + } + const challenge = "challenge"; + let difficulty = 4; + let tries = 10; + let solution = ""; + let isSolving = false; + let errorMessage = ""; + let solveTime = ""; + + async function solveChallenge() { + totalHashes = 0; + isSolving = true; + errorMessage = ""; + solution = ""; + solveTime = ""; + const startTime = performance.now(); + + try { + const flooredDifficulty = Math.floor(difficulty); + const percentage = difficulty - flooredDifficulty; + const numberOfHiggerDifficultyTries = Math.floor(tries * percentage); + const numberOfLowerDifficultyTries = tries - numberOfHiggerDifficultyTries; + for (let i = 0; i < numberOfLowerDifficultyTries; i++) { + const nonce = await proofOfWork(challenge, flooredDifficulty); + solution = `${challenge}-${nonce}`; + } + for (let i = 0; i < numberOfHiggerDifficultyTries; i++) { + const nonce = await proofOfWork(challenge, flooredDifficulty + 1); + solution = `${challenge}-${nonce}`; + } + const endTime = performance.now(); + solveTime = (endTime - startTime).toFixed(2); + } catch (error) { + console.error("Error solving challenge:", error); + const e = error as Error; + errorMessage = e.message || "An error occurred while solving the challenge."; + } finally { + isSolving = false; + } + } + + +

+

The Challenge

+ +
+ + +

Memory cost (KiB) in argon2id config.

+
+ +
+ + +

Number of passes in argon2id config.

+
+ +
+ + +

Higher difficulty requires more computation.

+
+ +
+ + +

The number of consecutive successes required to pass the verification.

+
+ + + + {#if errorMessage} +

{errorMessage}

+ {/if} + +

Total hashes calculated: {totalHashes}

+ + {#if solution} +
+

Solution Found!

+

+ The solution (challenge + nonce) is: + {solution} +

+ {#if solveTime} +

+ Time to solve: {solveTime} ms +

+ {/if} +
+ {/if} +
diff --git a/packages/frontend/src/pages/test.astro b/packages/frontend/src/pages/test.astro new file mode 100644 index 0000000..08524d0 --- /dev/null +++ b/packages/frontend/src/pages/test.astro @@ -0,0 +1,8 @@ +--- +import Argon2idTester from '@components/Argon2idTester.svelte'; +import Layout from '@layouts/Layout.astro'; +--- + + + + \ No newline at end of file From c3f13cc6e3bb284446c8b8720dd2a10fbdebc618 Mon Sep 17 00:00:00 2001 From: alikia2x Date: Wed, 2 Apr 2025 22:14:32 +0800 Subject: [PATCH 05/13] update: VDF benchmark --- .../frontend/src/components/VDFtester.svelte | 172 ++++++++++++++++++ packages/frontend/src/const.ts | 13 ++ packages/frontend/src/pages/test-vdf.astro | 8 + packages/frontend/src/pages/test.astro | 8 - 4 files changed, 193 insertions(+), 8 deletions(-) create mode 100644 packages/frontend/src/components/VDFtester.svelte create mode 100644 packages/frontend/src/const.ts create mode 100644 packages/frontend/src/pages/test-vdf.astro delete mode 100644 packages/frontend/src/pages/test.astro diff --git a/packages/frontend/src/components/VDFtester.svelte b/packages/frontend/src/components/VDFtester.svelte new file mode 100644 index 0000000..2c45958 --- /dev/null +++ b/packages/frontend/src/components/VDFtester.svelte @@ -0,0 +1,172 @@ + + +
+

VDF Benchmark

+ + {#if !isBenchmarking} + + {/if} + + {#if isBenchmarking} +

Benchmarking in progress... ({currentTestIndex + 1}/{testCombinations.length})

+ {#if currentN !== null && currentDifficulty !== null} +

N Bits: {currentN.toString(2).length}

+

Difficulty: {currentDifficulty}

+
+
+
+
+ {/if} + {/if} + + {#if benchmarkResults.length > 0 && !isBenchmarking} +

Benchmark Results

+
    + {#each benchmarkResults as result} +
  • + N Bits: {result.N.toString(2).length}, Difficulty: {result.difficulty}, Time: {result.time.toFixed(2)} ms +
  • + {/each} +
+ {/if} +
\ No newline at end of file diff --git a/packages/frontend/src/const.ts b/packages/frontend/src/const.ts new file mode 100644 index 0000000..d478815 --- /dev/null +++ b/packages/frontend/src/const.ts @@ -0,0 +1,13 @@ +const N_1024 = BigInt("129023318876534346704360951712586568674758913224876821534686030409476129469193481910786173836188085930974906857867802234113909470848523288588793477904039083513378341278558405407018889387577114155572311708428733260891448259786041525189132461448841652472631435226032063278124857443496954605482776113964107326943") + +const N_2048 = BigInt("23987552118069940970878653610463005981599204778388399885550631951871084945075866571231062435627294546200946516668493107358732376187241747090707087544153108117326163500579370560400058549184722138636116585329496684877258304519458316233517215780035360354808658620079068489084797380781488445517430961701007542207001544091884001098497324624368085682074645221148086075871342544591022944384890014176612259729018968864426602901247715051556212559854689574013699665035317257438297910516976812428036717668766321871780963854649899276251822244719887233041422346429752896925499321431273560130952088238625622570366815755926694833109") + +const N_1792 = BigInt("23987552118069940970878653610463005981599204778388399885550631951871084945075866571231062435627294546200946516668493107358732376187241747090707087544153108117326163500579370560400058549184722138636116585329496684877258304519458316233517215780035360354808658620079068489084797380781488445517430961701007542207001544091884001098497324624368085682074645221148086075871342544591022944384890014176612259729018968864426602901247715051556212559854689574013699665035317257438297910516976812428036717668766321871780963854649899276251822244719887233041422346429752896925499321431273560130952088238625622570366815755926694833109") + +const N_1536 = BigInt("1694330250214463438908848400950857073137355630337290254958754184668036770489801447652464038218330711288158361242955860326168191830448553710492926795708495297280933502917598985378231124113971732841791156356676046934277122699383776036675381503510992810963611269045078440132744168908318454891211962146563551929591147663448816841024591820348784855441153716551049843185172472891407933214238000452095646085222944171689449292644270516031799660928056315886939284985905227") + +const N_3072 = BigInt("4432919939296042464443862503456460073874727648022810391370558006281079088795179408238989283371442564716849343712703672836423961818025813387453469700639513190304802553045342607888612037304066433501317127429264242784608682213025490491212489901736408833027611579294436675682774458141490718959615677971745638214649336218217578937534746160749039668886450447773018369168258067682196337978245372237157696236362344796867228581553446331915147012787367438751646936429739232247148712001806846526947508445039707404287951727838234648917450736371192435665040644040487427986702098273581288935278964444790007953559851323281510927332862225214878776790605026472021669614552481167977412450477230442015077669503312683966631454347169703030544483487968842349634064181183599641180349414682042575010303056241481622837185325228233789954078775053744988023738762706404546546146837242590884760044438874357295029411988267287001033032827035809135092270843") + +const N_4096 = BigInt("703671044356805218391078271512201582198770553281951369783674142891088501340774249238173262580562112786670043634665390581120113644316651934154746357220932310140476300088580654571796404198410555061275065442553506658401183560336140989074165998202690496991174269748740565700402715364422506782445179963440819952745241176450402011121226863984008975377353558155910994380700267903933205531681076494639818328879475919332604951949178075254600102192323286738973253864238076198710173840170988339024438220034106150475640983877458155141500313471699516670799821379238743709125064098477109094533426340852518505385314780319279862586851512004686798362431227795743253799490998475141728082088984359237540124375439664236138519644100625154580910233437864328111620708697941949936338367445851449766581651338876219676721272448769082914348242483068204896479076062102236087066428603930888978596966798402915747531679758905013008059396214343112694563043918465373870648649652122703709658068801764236979191262744515840224548957285182453209028157886219424802426566456408109642062498413592155064289314088837031184200671561102160059065729282902863248815224399131391716503171191977463328439766546574118092303414702384104112719959325482439604572518549918705623086363111") + +export const N_ARRAY = [N_1024, N_1536, N_1792, N_2048, N_3072, N_4096]; \ No newline at end of file diff --git a/packages/frontend/src/pages/test-vdf.astro b/packages/frontend/src/pages/test-vdf.astro new file mode 100644 index 0000000..2970f88 --- /dev/null +++ b/packages/frontend/src/pages/test-vdf.astro @@ -0,0 +1,8 @@ +--- +import VDFtester from "@components/VDFtester.svelte"; +import Layout from "@layouts/Layout.astro"; +--- + + + + diff --git a/packages/frontend/src/pages/test.astro b/packages/frontend/src/pages/test.astro deleted file mode 100644 index 08524d0..0000000 --- a/packages/frontend/src/pages/test.astro +++ /dev/null @@ -1,8 +0,0 @@ ---- -import Argon2idTester from '@components/Argon2idTester.svelte'; -import Layout from '@layouts/Layout.astro'; ---- - - - - \ No newline at end of file From b1e071930c66bedc2ac74721b3e77f05b6404813 Mon Sep 17 00:00:00 2001 From: alikia2x Date: Wed, 2 Apr 2025 22:48:19 +0800 Subject: [PATCH 06/13] fix: incorrect build config --- packages/frontend/astro.config.mjs | 10 +--------- packages/frontend/bun.lockb | Bin 178251 -> 0 bytes 2 files changed, 1 insertion(+), 9 deletions(-) delete mode 100755 packages/frontend/bun.lockb diff --git a/packages/frontend/astro.config.mjs b/packages/frontend/astro.config.mjs index de0bad5..2c35862 100644 --- a/packages/frontend/astro.config.mjs +++ b/packages/frontend/astro.config.mjs @@ -19,14 +19,6 @@ export default defineConfig({ allow: [".", "../../"], }, }, - plugins: [tsconfigPaths()], - build: { - rollupOptions: { - output: { - assetFileNames: "assets/[name].[ext]", // Ensure .wasm files are copied - }, - }, - }, - assetsInclude: ["**/*.wasm"], + plugins: [tsconfigPaths()] }, }); diff --git a/packages/frontend/bun.lockb b/packages/frontend/bun.lockb deleted file mode 100755 index fa83ace7304d5f6911dd690f40244df4366476a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178251 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

|mZE+57CC+uALgA-n$vq&q|k!&qCtsJ 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 b>u8UE*$Jo-C;`zfL0!7OQ Date: Wed, 2 Apr 2025 22:55:55 +0800 Subject: [PATCH 07/13] improve: UI of VDF benchmark --- .../src/components/Argon2idTester.svelte | 230 ------------------ .../frontend/src/components/VDFtester.svelte | 7 +- 2 files changed, 4 insertions(+), 233 deletions(-) delete mode 100644 packages/frontend/src/components/Argon2idTester.svelte diff --git a/packages/frontend/src/components/Argon2idTester.svelte b/packages/frontend/src/components/Argon2idTester.svelte deleted file mode 100644 index 6fee60f..0000000 --- a/packages/frontend/src/components/Argon2idTester.svelte +++ /dev/null @@ -1,230 +0,0 @@ - - -

-

The Challenge

- -
- - -

Memory cost (KiB) in argon2id config.

-
- -
- - -

Number of passes in argon2id config.

-
- -
- - -

Higher difficulty requires more computation.

-
- -
- - -

The number of consecutive successes required to pass the verification.

-
- - - - {#if errorMessage} -

{errorMessage}

- {/if} - -

Total hashes calculated: {totalHashes}

- - {#if solution} -
-

Solution Found!

-

- The solution (challenge + nonce) is: - {solution} -

- {#if solveTime} -

- Time to solve: {solveTime} ms -

- {/if} -
- {/if} -
diff --git a/packages/frontend/src/components/VDFtester.svelte b/packages/frontend/src/components/VDFtester.svelte index 2c45958..22d6869 100644 --- a/packages/frontend/src/components/VDFtester.svelte +++ b/packages/frontend/src/components/VDFtester.svelte @@ -46,10 +46,12 @@ } function computeVDFWithProgress(g, N, T, postProgress) { let result = g; + let latestTime = performance.now(); for (let i = 0n; i < T; i++) { result = (result * result) % N; - if (i % (T / 10000n) === 0n && T > 0n) { + if (performance.now() - latestTime > 16) { postProgress(Number(i * 100n) / Number(T)); + latestTime = performance.now(); } } postProgress(100); @@ -108,7 +110,6 @@ const resultDifficulty = BigInt(resultDifficultyStr); if (type === "progress") { - console.log(`N: ${resultN}, Difficulty: ${resultDifficulty}, Progress: ${progress}`); currentProgress = progress; currentN = resultN; currentDifficulty = resultDifficulty; @@ -138,7 +139,7 @@ } -
+

VDF Benchmark

{#if !isBenchmarking} From 2e702f23deb92027badb03b59c474b26b3349717 Mon Sep 17 00:00:00 2001 From: alikia2x Date: Wed, 2 Apr 2025 23:13:53 +0800 Subject: [PATCH 08/13] improve: UI of showing benchmark result --- .../frontend/src/components/VDFtester.svelte | 60 ++++++++++++------- 1 file changed, 40 insertions(+), 20 deletions(-) diff --git a/packages/frontend/src/components/VDFtester.svelte b/packages/frontend/src/components/VDFtester.svelte index 22d6869..eeead88 100644 --- a/packages/frontend/src/components/VDFtester.svelte +++ b/packages/frontend/src/components/VDFtester.svelte @@ -79,12 +79,12 @@ let currentDifficulty: bigint | null = null; let worker: Worker | null = null; let currentTestIndex = 0; - const difficulties = [BigInt(100000), BigInt(1000000)]; + const difficulties = [BigInt(100), BigInt(1000)]; const testCombinations: { N: bigint; difficulty: bigint }[] = []; // 创建需要测试的 N 和难度的组合 - N_ARRAY.forEach(n => { - difficulties.forEach(difficulty => { + N_ARRAY.forEach((n) => { + difficulties.forEach((difficulty) => { testCombinations.push({ N: n, difficulty }); }); }); @@ -139,35 +139,55 @@ } -
-

VDF Benchmark

+
+

VDF Benchmark

{#if !isBenchmarking} - {/if} {#if isBenchmarking} -

Benchmarking in progress... ({currentTestIndex + 1}/{testCombinations.length})

+

+ Benchmarking in progress... ({currentTestIndex + 1}/{testCombinations.length}) +

{#if currentN !== null && currentDifficulty !== null} -

N Bits: {currentN.toString(2).length}

-

Difficulty: {currentDifficulty}

+

N Bits: {currentN.toString(2).length}

+

Difficulty: {currentDifficulty}

-
-
+
{/if} {/if} {#if benchmarkResults.length > 0 && !isBenchmarking} -

Benchmark Results

-
    - {#each benchmarkResults as result} -
  • - N Bits: {result.N.toString(2).length}, Difficulty: {result.difficulty}, Time: {result.time.toFixed(2)} ms -
  • - {/each} -
+

Benchmark Results

+ + + + + + + + + + {#each benchmarkResults as result} + + + + + + {/each} + +
Time (ms)N (bits)T (log10)
{result.time.toFixed(2)}{result.N.toString(2).length}{Math.log10(Number(result.difficulty))}
{/if} -
\ No newline at end of file +
From 704b5106c6c54f089b1746f0a11315cff64e9a19 Mon Sep 17 00:00:00 2001 From: alikia2x Date: Wed, 2 Apr 2025 23:15:45 +0800 Subject: [PATCH 09/13] fix: difficulty too low in benchmark --- packages/frontend/src/components/VDFtester.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/components/VDFtester.svelte b/packages/frontend/src/components/VDFtester.svelte index eeead88..fa36b87 100644 --- a/packages/frontend/src/components/VDFtester.svelte +++ b/packages/frontend/src/components/VDFtester.svelte @@ -79,7 +79,7 @@ let currentDifficulty: bigint | null = null; let worker: Worker | null = null; let currentTestIndex = 0; - const difficulties = [BigInt(100), BigInt(1000)]; + const difficulties = [BigInt(100000), BigInt(1000000)]; const testCombinations: { N: bigint; difficulty: bigint }[] = []; // 创建需要测试的 N 和难度的组合 From 46578db3e6bc21a23e49936f3b61813838f013ee Mon Sep 17 00:00:00 2001 From: alikia2x Date: Wed, 2 Apr 2025 23:24:52 +0800 Subject: [PATCH 10/13] update: lower the difficulty of benchmark --- packages/frontend/src/components/VDFtester.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/components/VDFtester.svelte b/packages/frontend/src/components/VDFtester.svelte index fa36b87..cfda9c1 100644 --- a/packages/frontend/src/components/VDFtester.svelte +++ b/packages/frontend/src/components/VDFtester.svelte @@ -79,7 +79,7 @@ let currentDifficulty: bigint | null = null; let worker: Worker | null = null; let currentTestIndex = 0; - const difficulties = [BigInt(100000), BigInt(1000000)]; + const difficulties = [BigInt(20000), BigInt(200000)]; const testCombinations: { N: bigint; difficulty: bigint }[] = []; // 创建需要测试的 N 和难度的组合 From 984484cc3fe3990767673f7b5e1baf13b88b7e4e Mon Sep 17 00:00:00 2001 From: alikia2x Date: Wed, 2 Apr 2025 23:30:49 +0800 Subject: [PATCH 11/13] improve: eliminate UI flickering between tests --- .../frontend/src/components/VDFtester.svelte | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/frontend/src/components/VDFtester.svelte b/packages/frontend/src/components/VDFtester.svelte index cfda9c1..5fee0ff 100644 --- a/packages/frontend/src/components/VDFtester.svelte +++ b/packages/frontend/src/components/VDFtester.svelte @@ -116,8 +116,6 @@ } else if (type === "result") { benchmarkResults = [...benchmarkResults, { N: resultN, difficulty: resultDifficulty, time }]; currentProgress = 0; - currentN = null; - currentDifficulty = null; currentTestIndex++; if (currentTestIndex < testCombinations.length) { @@ -130,6 +128,8 @@ isBenchmarking = false; worker?.terminate(); worker = null; + currentN = null; + currentDifficulty = null; } } }; @@ -172,7 +172,9 @@ {#if benchmarkResults.length > 0 && !isBenchmarking}

Benchmark Results

- + @@ -182,9 +184,15 @@ {#each benchmarkResults as result} - - - + + + {/each} From d808f36c58543daa444d6fd36b139557217000c6 Mon Sep 17 00:00:00 2001 From: alikia2x Date: Wed, 2 Apr 2025 23:32:26 +0800 Subject: [PATCH 12/13] improve: number display in benchmark result --- packages/frontend/src/components/VDFtester.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/components/VDFtester.svelte b/packages/frontend/src/components/VDFtester.svelte index 5fee0ff..308f6df 100644 --- a/packages/frontend/src/components/VDFtester.svelte +++ b/packages/frontend/src/components/VDFtester.svelte @@ -191,7 +191,7 @@ >{result.N.toString(2).length} {Math.log10(Number(result.difficulty)).toFixed(2)} {/each} From 99c7a348337da49b4c83c4b797b015d5da58e8cd Mon Sep 17 00:00:00 2001 From: alikia2x Date: Wed, 2 Apr 2025 23:37:43 +0800 Subject: [PATCH 13/13] add: speed in benchmark result --- .../frontend/src/components/VDFtester.svelte | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/frontend/src/components/VDFtester.svelte b/packages/frontend/src/components/VDFtester.svelte index 308f6df..e6bca8a 100644 --- a/packages/frontend/src/components/VDFtester.svelte +++ b/packages/frontend/src/components/VDFtester.svelte @@ -137,6 +137,18 @@ // 开始第一个测试 worker.postMessage({ g, N, difficulty }); } + + function getAccumulatedTime() { + return benchmarkResults.reduce((acc, result) => acc + result.time, 0); + } + + function getAccumulatedDifficulty() { + return benchmarkResults.reduce((acc, result) => acc + Number(result.difficulty), 0); + } + + function getSpeed() { + return (getAccumulatedDifficulty() / getAccumulatedTime()) * 1000; + }
0 && !isBenchmarking}

Benchmark Results

+

+ Summary: + {getAccumulatedDifficulty()} + calculations done in {getAccumulatedTime().toFixed(1)}ms, + speed: {getSpeed().toFixed(2)} op/s +

Time (ms) N (bits)
{result.time.toFixed(2)}{result.N.toString(2).length}{Math.log10(Number(result.difficulty))}{result.time.toFixed(2)}{result.N.toString(2).length}{Math.log10(Number(result.difficulty))}
{Math.log10(Number(result.difficulty))}