UNPKG

@robertprp/intents-sdk

Version:

Shogun Network Intent-based cross-chain swaps SDK

32 lines (26 loc) 1.04 kB
import BN from 'bn.js'; import type { SingleChainOrder } from '../orders/single-chain.js'; import { PublicKey } from '@solana/web3.js'; import jsUtilities from 'js-sha3'; export function genSecretHashAndNumber(order: SingleChainOrder): { secretHash: number[]; secretNumber: string; } { const tokenOut = new PublicKey(order.tokenOut); const receiver = new PublicKey(order.destinationAddress); const extraTransfers = order.extraTransfers ?? []; const secretNumber = new BN(crypto.getRandomValues(new Uint8Array(8))); const fullArray = [ ...tokenOut.toBuffer(), ...receiver.toBuffer(), ...Buffer.concat( extraTransfers.map((t) => Buffer.concat([new PublicKey(t.token).toBuffer(), new PublicKey(t.receiver).toBuffer()]), ), ), ...secretNumber.toArrayLike(Buffer, 'le', 8), ]; const value = jsUtilities.keccak256(Uint8Array.from(fullArray)); const secretHash = [...Uint8Array.from(Buffer.from(value, 'hex'))]; return { secretHash, secretNumber: secretNumber.toString() }; }