Skip to main content
fn accept_migration(env: Env, subscriber: Address, sub_id: u64) -> u64
Accepts a pending migration for a subscription. This cancels the old subscription, creates a new subscription on the target plan, and sets a fresh token allowance for the new plan’s terms. Returns the new subscription ID.

Parameters

NameTypeDescription
subscriberAddressThe subscriber’s Stellar address. Must sign the transaction.
sub_idu64The old subscription ID with a pending migration.

Authorization

subscriber.require_auth();
Only the subscriber on the subscription can accept the migration. The subscriber’s signature covers the accept_migration() call, the old subscription cancellation, and the new token.approve() for the target plan.

Return value

u64 - the new subscription ID on the target plan.

Events emitted

EventTopicsData
mig_acceptsubscriber, old_sub_id, new_sub_idMigration details

Error cases

CodeNameDescription
9UnauthorizedCaller is not the subscriber on this subscription.
12NoMigrationPendingNo migration has been requested for this subscription.

Examples

import { VowenaClient, NETWORKS } from "vowena";

const client = new VowenaClient({
  contractId: NETWORKS.testnet.contractId,
  rpcUrl: NETWORKS.testnet.rpcUrl,
  networkPassphrase: NETWORKS.testnet.networkPassphrase,
});

// Accept the pending migration
const tx = await client.buildAcceptMigration(
  "GSUBSCRIBER...ADDR",   // Subscriber's address
  oldSubscriptionId        // Old subscription ID
);

const signedXdr = await signTransaction(tx);
const result = await client.submitTransaction(signedXdr);
console.log("New subscription ID:", result.subscriptionId);
The new subscription inherits the subscriber’s billing history context but starts fresh on the new plan’s terms. The old subscription is permanently cancelled. The new allowance is calculated based on the new plan’s price_ceiling and max_periods.