@ledgerhq/coin-canton
Version:
50 lines (46 loc) • 1.52 kB
text/typescript
import { CryptoCurrency } from "@ledgerhq/ledger-wallet-framework/types";
import BigNumber from "bignumber.js";
import { prepareTransferRequest } from "../../network/gateway";
import type { PrepareTransferRequest, PrepareTransferResponse } from "../../types/gateway";
export async function craftTransaction(
currency: CryptoCurrency,
account: {
address: string;
nextSequenceNumber?: number;
publicKey?: string;
},
transaction: {
recipient?: string;
amount: BigNumber;
tokenId: string;
expireInSeconds: number;
memo?: string;
pickingStrategy?: PrepareTransferRequest["picking_strategy"];
instrumentAdmin?: string;
},
): Promise<{
nativeTransaction: PrepareTransferResponse["json"];
serializedTransaction: string;
hash: string;
}> {
const params: PrepareTransferRequest = {
type: "token-transfer-request",
recipient: transaction.recipient || "",
amount: transaction.amount.toFixed(),
execute_before_secs: transaction.expireInSeconds,
instrument_id: transaction.tokenId,
...(transaction.memo ? { reason: transaction.memo } : {}),
...(transaction.pickingStrategy ? { picking_strategy: transaction.pickingStrategy } : {}),
...(transaction.instrumentAdmin ? { instrument_admin: transaction.instrumentAdmin } : {}),
};
const { serialized, json, hash } = await prepareTransferRequest(
currency,
account.address,
params,
);
return {
nativeTransaction: json,
serializedTransaction: serialized,
hash,
};
}