diff --git a/context/P2PClient.ts b/context/P2PClient.ts index 0226ac08..7776f7d6 100644 --- a/context/P2PClient.ts +++ b/context/P2PClient.ts @@ -9,10 +9,10 @@ import { WalletClientOptions, SigningType, BeaconResponseInputMessage, + encodePoeChallengePayload, } from "@airgap/beacon-sdk"; import { PreapplyParams } from "@taquito/rpc"; import { TinyEmitter } from "tiny-emitter"; -import { generatePoEPayloadHash } from "../utils/hash"; export enum Event { PERMISSION_REQUEST = "PERMISSION_REQUEST", @@ -96,7 +96,8 @@ class P2PClient extends WalletClient { ...this.proofOfEvent.message, type: BeaconMessageType.ProofOfEventChallengeResponse, isAccepted: true, - payloadHash: generatePoEPayloadHash(this.proofOfEvent.message.payload), + payloadHash: encodePoeChallengePayload(this.proofOfEvent.message.payload), + payload: undefined, }; this.proofOfEvent = { message: undefined, data: undefined }; @@ -107,12 +108,17 @@ class P2PClient extends WalletClient { async refusePoeChallenge() { if (!this.proofOfEvent.message) throw new Error("Poe not received"); - return this.respond({ + const payload = { ...this.proofOfEvent.message, type: BeaconMessageType.ProofOfEventChallengeResponse, isAccepted: false, - payloadHash: generatePoEPayloadHash(this.proofOfEvent.message.payload), - }); + payloadHash: encodePoeChallengePayload(this.proofOfEvent.message.payload), + payload: undefined, + }; + + this.proofOfEvent = { message: undefined, data: undefined }; + + return this.respond(payload as BeaconResponseInputMessage); } handleMessages = async ( diff --git a/package-lock.json b/package-lock.json index 996ea607..ab18ce67 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@radix-ui/react-select": "^1.2.0", "@radix-ui/react-switch": "^1.0.3", "@radix-ui/react-tooltip": "^1.0.3", + "@stablelib/blake2b": "^1.0.1", "@taquito/beacon-wallet": "^17.2.0", "@taquito/taquito": "^17.2.0", "@taquito/tzip12": "^17.5.2", @@ -27,7 +28,6 @@ "assert-never": "^1.2.1", "axios": "^1.6.5", "bignumber.js": "^9.1.1", - "blakejs": "^1.2.1", "bs58check": "^3", "env-cmd": "^10.1.0", "eslint": "8.28.0", @@ -2879,7 +2879,8 @@ }, "node_modules/@stablelib/blake2b": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@stablelib/blake2b/-/blake2b-1.0.1.tgz", + "integrity": "sha512-B3KyKoBAjkIFeH7romcF96i+pVFYk7K2SBQ1pZvaxV+epSBXJ+n0C66esUhyz6FF+5FbdQVm77C5fzGFcEZpKA==", "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/hash": "^1.0.1", diff --git a/package.json b/package.json index 7def3467..83e7c3e2 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "@radix-ui/react-select": "^1.2.0", "@radix-ui/react-switch": "^1.0.3", "@radix-ui/react-tooltip": "^1.0.3", + "@stablelib/blake2b": "^1.0.1", "@taquito/beacon-wallet": "^17.2.0", "@taquito/taquito": "^17.2.0", "@taquito/tzip12": "^17.5.2", @@ -38,7 +39,6 @@ "assert-never": "^1.2.1", "axios": "^1.6.5", "bignumber.js": "^9.1.1", - "blakejs": "^1.2.1", "bs58check": "^3", "env-cmd": "^10.1.0", "eslint": "8.28.0", diff --git a/utils/hash.ts b/utils/hash.ts deleted file mode 100644 index 0af85c73..00000000 --- a/utils/hash.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { b58cencode } from "@taquito/utils"; -import blake from "blakejs"; - -/** - * Generate a payload hash for PoE Challenge according TZIP-27. - * - * Quote: "The payloadHash should have a prefix starting with m, representing as message. It is generated by encoding, Base58CheckEncoding, the payload—resulting from the blake2b hashing with a digit size of 20 bytes—and the prefix in bytes \110" - * @param payload The payload of Proof of Event Challenge we want to hash according TZIP-27 - * - * @returns The payload's hash. - */ -export const generatePoEPayloadHash = (payload: string) => { - const blakeHash = blake.blake2b(payload, undefined, 20); - // Prefix is 'm' in bytes - return b58cencode(blakeHash, new Uint8Array([110])); -}; diff --git a/versioned/version0_3_4.ts b/versioned/version0_3_4.ts index d70f51af..0f4de60a 100644 --- a/versioned/version0_3_4.ts +++ b/versioned/version0_3_4.ts @@ -10,7 +10,6 @@ import { BigNumber } from "bignumber.js"; import { content, contractStorage as c1 } from "../types/Proposal0_3_4"; import { contractStorage } from "../types/app"; import { proposalContent } from "../types/display"; -import { generatePoEPayloadHash } from "../utils/hash"; import { toStorage } from "./apis"; import { proposals } from "./interface"; import Version0_3_3 from "./version0_3_3"; @@ -19,7 +18,7 @@ class Version0_3_4 extends Version0_3_3 { async generateSpoeOps(payload: string, cc: WalletContract, t: TezosToolkit) { const storage = toStorage(this.version, await cc.storage(), BigNumber(0)); const proposal_id = storage.proposal_counter.plus(1); - const encodedPayload = char2Bytes(payload); + const encodedPayload = stringToBytes(payload); const ops = [ cc.methods.proof_of_event_challenge(encodedPayload).toTransferParams(),