const createSmartTransferTicket = async (
assetIdToSend: string,
assetIdToRecieve: string,
amountToSend: number,
amountToRecieve: number,
fromNetworkId: string,
toNetworkId: string,
externalRefId?: string,
): Promise<SmartTransferTicket | undefined> => {
try {
const ticket = await fireblocks.smartTransfer.createTicket({
smartTransferCreateTicket: {
createdByNetworkId: fromNetworkId,
type: SmartTransferCreateTicketTypeEnum.Async,
expiresIn: 24,
terms: [
{
asset: assetIdToSend,
amount: amountToSend,
fromNetworkId,
toNetworkId,
},
{
asset: assetIdToRecieve,
amount: amountToRecieve,
fromNetworkId,
toNetworkId,
},
],
externalRefId,
note: "Custom Smart Transfer note",
submit: true,
},
});
console.log(JSON.stringify(ticket.data, null, 2));
return ticket.data.data;
} catch (error: any) {
console.error(error);
}
};
const fundSmartTransferTicket = async (
smartTransferTicket: SmartTransferTicket,
networkConnectionId: string, // connectionId between networks "e41bd5cb-088c-41f2-bb6c-9fb027075e5a" and "798ac350-8aec-459f-96f5-505481933f98"
fundingSourceType: TransferPeerPathType,
fundingSourceId: string,
): Promise<SmartTransferTicketTermResponse> => {
try {
const fundedTicketTerm = await fireblocks.smartTransfer.fundTicketTerm({
ticketId: smartTransferTicket.id,
termId: smartTransferTicket.terms[0].id,
smartTransferFundTerm: {
asset: smartTransferTicket.terms[0].asset,
amount: smartTransferTicket.terms[0].amount,
networkConnectionId,
srcType: fundingSourceType,
srcId: fundingSourceId,
},
});
console.log(JSON.stringify(fundedTicketTerm.data, null, 2));
return fundedTicketTerm.data;
} catch (error) {
console.error(error);
}
};
const main = async () => {
const smartTransferTicket = await createSmartTransferTicket(
"BTC",
"ETH",
1.23,
23.213,
"e41bd5cb-088c-41f2-bb6c-9fb027075e5a",
"798ac350-8aec-459f-96f5-505481933f98",
"SomeExternalReferenceIdentifie",
);
await fundSmartTransferTicket(
smartTransferTicket,
"db33d21c-18e2-40d2-88c0-67541b61aff3",
TransferPeerPathType.VaultAccount,
"1",
);
};
main();