@fairmint/canton-node-sdk
Version:
Canton Node SDK
70 lines • 3.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createTransferOffer = createTransferOffer;
exports.acceptTransferOffer = acceptTransferOffer;
const EnvLoader_1 = require("../../core/config/EnvLoader");
/**
* Creates a transfer offer using WalletAppInstall_CreateTransferOffer
*
* @param params - Parameters for creating the transfer offer
* @returns Promise resolving to the transfer offer contract ID
*/
async function createTransferOffer(params) {
const { ledgerClient, receiverPartyId, amount, description, expiresAt } = params;
// Get template IDs and contract IDs from the client's network
const network = ledgerClient.getNetwork();
const walletAppInstallCid = EnvLoader_1.EnvLoader.getInstance().getValidatorWalletAppInstallContractId(network);
const validatorParty = ledgerClient.getPartyId();
const trackingId = `transfer-offer-${Date.now()}`;
const defaultExpiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000);
const transferOfferCid = await ledgerClient.submitAndWaitForTransactionTree({
commands: [
{
ExerciseCommand: {
templateId: '#splice-wallet:Splice.Wallet.Install:WalletAppInstall',
contractId: walletAppInstallCid,
choice: 'WalletAppInstall_CreateTransferOffer',
choiceArgument: {
receiver: receiverPartyId,
amount: { amount, unit: 'AmuletUnit' },
description,
expiresAt: (expiresAt ?? defaultExpiresAt).toISOString(),
trackingId,
},
},
},
],
commandId: `transfer-offer-${Date.now()}`,
actAs: [validatorParty],
});
const transferOfferEvent = transferOfferCid.transactionTree.eventsById['1'];
if (!transferOfferEvent || !('CreatedTreeEvent' in transferOfferEvent)) {
const firstKey = transferOfferEvent ? Object.keys(transferOfferEvent)[0] : 'undefined';
throw new Error(`Expected CreatedTreeEvent but got ${firstKey}`);
}
return transferOfferEvent.CreatedTreeEvent.value.contractId;
}
/**
* Accepts a transfer offer using TransferOffer_Accept
*
* @param params - Parameters for accepting the transfer offer
* @returns Promise resolving when the offer is accepted
*/
async function acceptTransferOffer(params) {
const { ledgerClient, transferOfferContractId, acceptingPartyId } = params;
return ledgerClient.submitAndWaitForTransactionTree({
commands: [
{
ExerciseCommand: {
templateId: '#splice-wallet:Splice.Wallet.TransferOffer:TransferOffer',
contractId: transferOfferContractId,
choice: 'TransferOffer_Accept',
choiceArgument: {},
},
},
],
commandId: `accept-transfer-${Date.now()}`,
actAs: [acceptingPartyId],
});
}
//# sourceMappingURL=offers.js.map