From 6286918192d939ff237db4a074a031af7b6cd30f Mon Sep 17 00:00:00 2001 From: 0xKurt Date: Fri, 29 Nov 2024 16:55:25 +0100 Subject: [PATCH 1/3] fix hash --- package-lock.json | 29 ++++++++++------------------- package.json | 2 +- src/ext/openai/openai.ts | 2 ++ src/utils.ts | 14 +++++++------- 4 files changed, 20 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5bda647..32265fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,11 +18,11 @@ "bcrypt": "^5.1.1", "concurrently": "^9.0.1", "cors": "^2.8.5", - "deterministic-object-hash": "^2.0.2", "dotenv": "^16.4.5", "express": "^4.21.1", "express-validator": "^7.2.0", "graphql-request": "6.1.0", + "json-stringify-deterministic": "^1.0.12", "jsonwebtoken": "^9.0.2", "memory-cache": "^0.2.0", "openai": "^4.71.1", @@ -1528,12 +1528,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, - "node_modules/base-64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", - "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", - "license": "MIT" - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -2399,18 +2393,6 @@ "node": ">=8" } }, - "node_modules/deterministic-object-hash": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", - "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", - "license": "MIT", - "dependencies": { - "base-64": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -5039,6 +5021,15 @@ "dev": true, "license": "MIT" }, + "node_modules/json-stringify-deterministic": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/json-stringify-deterministic/-/json-stringify-deterministic-1.0.12.tgz", + "integrity": "sha512-q3PN0lbUdv0pmurkBNdJH3pfFvOTL/Zp0lquqpvcjfKzt6Y0j49EPHAmVHCAS4Ceq/Y+PejWTzyiVpoY71+D6g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", diff --git a/package.json b/package.json index 2c1efee..0aa06fb 100644 --- a/package.json +++ b/package.json @@ -31,11 +31,11 @@ "bcrypt": "^5.1.1", "concurrently": "^9.0.1", "cors": "^2.8.5", - "deterministic-object-hash": "^2.0.2", "dotenv": "^16.4.5", "express": "^4.21.1", "express-validator": "^7.2.0", "graphql-request": "6.1.0", + "json-stringify-deterministic": "^1.0.12", "jsonwebtoken": "^9.0.2", "memory-cache": "^0.2.0", "openai": "^4.71.1", diff --git a/src/ext/openai/openai.ts b/src/ext/openai/openai.ts index f89453c..c2ea442 100644 --- a/src/ext/openai/openai.ts +++ b/src/ext/openai/openai.ts @@ -47,6 +47,7 @@ export const requestEvaluation = async ( applicationMetadata: ApplicationMetadata, questions: PromptEvaluationQuestions ): Promise => { + console.log(applicationMetadata.application.project.title); const prompt: string = createAiEvaluationPrompt( roundMetadata, applicationMetadata, @@ -54,6 +55,7 @@ export const requestEvaluation = async ( ); const result = await queryOpenAI(prompt); logger.info('Application evaluation complete', { result }); + console.log('result', result); return JSON.parse(removeJsonCodeBlocks(result)); }; diff --git a/src/utils.ts b/src/utils.ts index f2ad012..0b2c5d4 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,10 +1,10 @@ import { createLogger } from '@/logger'; import { type Request, type Response } from 'express'; import { validationResult } from 'express-validator'; -import deterministicHash from 'deterministic-object-hash'; -import { type Hex, keccak256, recoverAddress, toHex } from 'viem'; +import { type Hex, keccak256, recoverMessageAddress, toHex } from 'viem'; import { indexerClient } from './ext/indexer'; import { env } from './env'; +import stringify from 'json-stringify-deterministic'; const logger = createLogger(); @@ -38,17 +38,17 @@ export const addressFrom = (index: number): string => { return `0x${address}`; }; -async function deterministicKeccakHash(obj: T): Promise { - const hash = await deterministicHash(obj); - return keccak256(toHex(hash)); +export async function deterministicKeccakHash(obj: T): Promise { + const deterministicString = stringify(obj); + return keccak256(toHex(deterministicString)); } export async function recoverSignerAddress( obj: T, signature: Hex ): Promise { - return await recoverAddress({ - hash: await deterministicKeccakHash(obj), + return await recoverMessageAddress({ + message: await deterministicKeccakHash(obj), signature, }); } From b0bbe16faa4acdf6dfa750de924714781113143c Mon Sep 17 00:00:00 2001 From: Kurt Date: Fri, 29 Nov 2024 16:56:06 +0100 Subject: [PATCH 2/3] Update src/ext/openai/openai.ts --- src/ext/openai/openai.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ext/openai/openai.ts b/src/ext/openai/openai.ts index c2ea442..2c8a2bb 100644 --- a/src/ext/openai/openai.ts +++ b/src/ext/openai/openai.ts @@ -47,7 +47,6 @@ export const requestEvaluation = async ( applicationMetadata: ApplicationMetadata, questions: PromptEvaluationQuestions ): Promise => { - console.log(applicationMetadata.application.project.title); const prompt: string = createAiEvaluationPrompt( roundMetadata, applicationMetadata, From f5e82b1b966ee0e3e549dadbad39674f3742cb1e Mon Sep 17 00:00:00 2001 From: Kurt Date: Fri, 29 Nov 2024 16:56:24 +0100 Subject: [PATCH 3/3] Update src/ext/openai/openai.ts --- src/ext/openai/openai.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ext/openai/openai.ts b/src/ext/openai/openai.ts index 2c8a2bb..f89453c 100644 --- a/src/ext/openai/openai.ts +++ b/src/ext/openai/openai.ts @@ -54,7 +54,6 @@ export const requestEvaluation = async ( ); const result = await queryOpenAI(prompt); logger.info('Application evaluation complete', { result }); - console.log('result', result); return JSON.parse(removeJsonCodeBlocks(result)); };