@robertprp/intents-sdk
Version:
Shogun Network Intent-based cross-chain swaps SDK
32 lines (26 loc) • 1.04 kB
text/typescript
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() };
}