diff --git a/packages/snap/snap.manifest.json b/packages/snap/snap.manifest.json index fb21efc..ee9649d 100644 --- a/packages/snap/snap.manifest.json +++ b/packages/snap/snap.manifest.json @@ -7,7 +7,7 @@ "url": "https://github.com/ChainSafe/WebZjs.git" }, "source": { - "shasum": "gjWQCyynhkKtUwZ5PUNQq9zfnJRqy0Iwwb7G4hSLVic=", + "shasum": "QsvZB2xwdiLaYU2MudldcoEqXbq0VA89TvudQNDBUTY=", "location": { "npm": { "filePath": "dist/bundle.js", diff --git a/packages/snap/src/index.tsx b/packages/snap/src/index.tsx index 9f555b9..a819d10 100644 --- a/packages/snap/src/index.tsx +++ b/packages/snap/src/index.tsx @@ -26,7 +26,7 @@ let wasm: InitOutput; * @returns The ViewingKey * @throws If the request method is not valid for this snap. */ -export const onRpcRequest: OnRpcRequestHandler = async ({ request }) => { +export const onRpcRequest: OnRpcRequestHandler = async ({ request, origin }) => { if (!wasm) { wasm = initialiseWasm(); } @@ -35,8 +35,14 @@ export const onRpcRequest: OnRpcRequestHandler = async ({ request }) => { case 'getViewingKey': return await getViewingKey(); case 'signPczt': - assert(request.params, object({ pcztHexTring: string() })); - return await signPczt(request.params as SignPcztParams); + assert(request.params, object({ + pcztHexTring: string(), + signDetails: object({ + recipient: string(), + amount: string() + }), + })); + return await signPczt(request.params as SignPcztParams, origin); case 'getSeedFingerprint': return await getSeedFingerprint(); case 'setBirthdayBlock': diff --git a/packages/snap/src/rpc/signPczt.tsx b/packages/snap/src/rpc/signPczt.tsx index f17110a..8210e7a 100644 --- a/packages/snap/src/rpc/signPczt.tsx +++ b/packages/snap/src/rpc/signPczt.tsx @@ -1,4 +1,4 @@ -import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx'; +import { Box, Copyable, Divider, Heading, Text } from '@metamask/snaps-sdk/jsx'; import { SeedFingerprint, UnifiedSpendingKey, @@ -10,7 +10,7 @@ import { SignPcztParams } from 'src/types'; -export async function signPczt({ pcztHexTring }: SignPcztParams): Promise { +export async function signPczt({ pcztHexTring, signDetails }: SignPcztParams, origin: string): Promise { const result = await snap.request({ method: 'snap_dialog', @@ -18,8 +18,14 @@ export async function signPczt({ pcztHexTring }: SignPcztParams): Promise - Are you sure you want to sign this PCZT? - Description + Sing PCZT + + Origin: {origin} + Recipient: {signDetails.recipient} + Amount: {signDetails.amount} + + PCZT hex to sign + ), }, diff --git a/packages/snap/src/types.ts b/packages/snap/src/types.ts index 146b40d..310d5ed 100644 --- a/packages/snap/src/types.ts +++ b/packages/snap/src/types.ts @@ -2,7 +2,13 @@ import type { Json } from '@metamask/snaps-sdk'; export type SetBirthdayBlockParams = { latestBlock: number }; -export type SignPcztParams = { pcztHexTring: string }; +export type SignPcztParams = { + pcztHexTring: string; + signDetails: { + recipient: string; + amount: string; + }; +}; export interface SnapState extends Record { webWalletSyncStartBlock: string; diff --git a/packages/web-wallet/src/hooks/usePCZT.ts b/packages/web-wallet/src/hooks/usePCZT.ts index 68b4117..b10fbeb 100644 --- a/packages/web-wallet/src/hooks/usePCZT.ts +++ b/packages/web-wallet/src/hooks/usePCZT.ts @@ -4,6 +4,7 @@ import { useInvokeSnap } from './snaps/useInvokeSnap'; import { zecToZats } from '../utils'; import { useWebZjsActions } from './useWebzjsActions'; import { useState } from 'react'; +import { SignPcztDetails } from '../types/snap'; interface IUsePczt { handlePcztTransaction: ( @@ -56,15 +57,22 @@ export const usePczt = (): IUsePczt => { } }; - const signPczt = async (pczt: Pczt): Promise => { + const signPczt = async ( + pczt: Pczt, + signDetails: { recipient: string; amount: string }, + ): Promise => { try { const pcztBytes = pczt.serialize(); const pcztHexTring = Buffer.from(pcztBytes).toString('hex'); + const params: SignPcztDetails = { + pcztHexTring, + signDetails, + }; return (await invokeSnap({ method: 'signPczt', - params: { pcztHexTring }, + params, })) as string; } catch (error) { console.error('Error signing PCZT:', error); @@ -108,7 +116,10 @@ export const usePczt = (): IUsePczt => { //Signing PCZT setPcztTransferStatus(PcztTransferStatus.SIGNING_PCZT); - const pcztHexStringSigned = await signPczt(pczt); + const pcztHexStringSigned = await signPczt(pczt, { + recipient: toAddress, + amount: value, + }); const pcztBufferSigned = Buffer.from(pcztHexStringSigned, 'hex'); @@ -128,7 +139,7 @@ export const usePczt = (): IUsePczt => { await triggerRescan(); } catch (error) { console.error(error); - setPcztTransferStatus(PcztTransferStatus.SEND_ERROR) + setPcztTransferStatus(PcztTransferStatus.SEND_ERROR); } }; diff --git a/packages/web-wallet/src/types/snap.ts b/packages/web-wallet/src/types/snap.ts index 8f96603..2c86267 100644 --- a/packages/web-wallet/src/types/snap.ts +++ b/packages/web-wallet/src/types/snap.ts @@ -6,3 +6,11 @@ export type Snap = { version: string; initialPermissions: Record; }; + +export type SignPcztDetails = { + pcztHexTring: string; + signDetails: { + recipient: string; + amount: string; + }; +};