Skip to content

Commit

Permalink
Merge pull request #87 from tonkeeper/feature/signer-update
Browse files Browse the repository at this point in the history
Update signer protocol
  • Loading branch information
KuznetsovNikita authored May 24, 2024
2 parents 958edfd + a4040aa commit f59106c
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 26 deletions.
22 changes: 10 additions & 12 deletions packages/core/src/service/signerService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,19 @@ export const parseSignerSignature = (payload: string): Buffer => {
}

const {
query: { boc }
query: { sign }
} = queryString.parseUrl(payload);

if (typeof boc != 'string') {
throw new Error('Unexpected QR code, missing boc parameter');
if (typeof sign != 'string') {
throw new Error('Unexpected QR code, missing sign parameter');
}

return Buffer.from(boc, 'base64');
return Buffer.from(sign, 'hex');
};

export const createTransferQr = (publicKey: string, boc: string) => {
const pk = encodeURIComponent(Buffer.from(publicKey, 'hex').toString('base64'));
const body = encodeURIComponent(boc);
return `tonsign://?network=ton&pk=${pk}&body=${body}`;
const body = Buffer.from(boc, 'base64').toString('hex');
return `tonsign://v1/?network=ton&pk=${publicKey}&body=${body}`;
};

export const storeTransactionAndCreateDeepLink = async (
Expand All @@ -39,25 +38,24 @@ export const storeTransactionAndCreateDeepLink = async (
) => {
await sdk.storage.set(AppKey.SIGNER_MESSAGE, messageBase64);

const pk = encodeURIComponent(Buffer.from(publicKey, 'hex').toString('base64'));
const body = encodeURIComponent(messageBase64);
const body = Buffer.from(messageBase64, 'base64').toString('hex');
const back = encodeURIComponent('https://wallet.tonkeeper.com/');
return `tonsign://?network=ton&pk=${pk}&body=${body}&return=${back}`;
return `tonsign://v1/?network=ton&pk=${publicKey}&body=${body}&return=${back}`;
};

export const publishSignerMessage = async (
sdk: IAppSdk,
api: APIConfig,
walletState: WalletState,
signatureBase64: string
signatureHex: string
) => {
const messageBase64 = await sdk.storage.get<string>(AppKey.SIGNER_MESSAGE);
if (!messageBase64) {
throw new Error('missing message');
}
const contract = walletContractFromState(walletState);
const seqno = await getWalletSeqNo(api, walletState.active.rawAddress);
const signature = Buffer.from(decodeURIComponent(signatureBase64), 'base64');
const signature = Buffer.from(signatureHex, 'hex');
const message = Cell.fromBase64(messageBase64).asBuilder();

const transfer = beginCell();
Expand Down
25 changes: 11 additions & 14 deletions packages/uikit/src/pages/signer/PublishNotification.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,18 @@ import { useAppSdk } from '../../hooks/appSdk';
import { useTranslation } from '../../hooks/translation';
import { AppRoute } from '../../libs/routes';

const usePublishMessage = (signatureBase64: string) => {
const usePublishMessage = (signatureHex: string) => {
const sdk = useAppSdk();
const { api } = useAppContext();
const wallet = useWalletContext();
return useQuery([signatureBase64], async () => {
return await publishSignerMessage(sdk, api, wallet, signatureBase64);
return useQuery([signatureHex], async () => {
return await publishSignerMessage(sdk, api, wallet, signatureHex);
});
};

const Confirm: FC<{ signatureBase64: string; onClose: () => void }> = ({
signatureBase64,
onClose
}) => {
const Confirm: FC<{ signatureHex: string; onClose: () => void }> = ({ signatureHex, onClose }) => {
const { t } = useTranslation();
const { isFetched, isError } = usePublishMessage(signatureBase64);
const { isFetched, isError } = usePublishMessage(signatureHex);
const navigate = useNavigate();

useEffect(() => {
Expand Down Expand Up @@ -69,21 +66,21 @@ const SignerPublishNotification = () => {
const { t } = useTranslation();
let [searchParams, setParams] = useSearchParams();

const signatureBase64 = searchParams.get('boc');
const signatureHex = searchParams.get('sign');

const onClose = useCallback(() => {
searchParams.delete('boc');
searchParams.delete('sign');
setParams(searchParams);
}, [searchParams, setParams]);

const Content = useCallback(() => {
if (!signatureBase64) return <></>;
return <Confirm signatureBase64={signatureBase64} onClose={onClose} />;
}, [signatureBase64, onClose]);
if (!signatureHex) return <></>;
return <Confirm signatureHex={signatureHex} onClose={onClose} />;
}, [signatureHex, onClose]);

return (
<Notification
isOpen={signatureBase64 != null}
isOpen={signatureHex != null}
handleClose={onClose}
title={t('publish_message')}
>
Expand Down

0 comments on commit f59106c

Please sign in to comment.