js-stellar-base/src/operations/begin_sponsoring_future_reserves.js

import xdr from '../xdr';
import { StrKey } from '../strkey';
import { Keypair } from '../keypair';

/**
 * Create a "begin sponsoring future reserves" operation.
 * @function
 * @alias Operation.beginSponsoringFutureReserves
 * @param {object} opts Options object
 * @param {string} opts.sponsoredId - The sponsored account id.
 * @param {string} [opts.source] - The source account for the operation. Defaults to the transaction's source account.
 * @returns {xdr.Operation} xdr operation
 *
 * @example
 * const op = Operation.beginSponsoringFutureReserves({
 *   sponsoredId: 'GDGU5OAPHNPU5UCLE5RDJHG7PXZFQYWKCFOEXSXNMR6KRQRI5T6XXCD7'
 * });
 *
 */
export function beginSponsoringFutureReserves(opts = {}) {
  if (!StrKey.isValidEd25519PublicKey(opts.sponsoredId)) {
    throw new Error('sponsoredId is invalid');
  }
  const op = new xdr.BeginSponsoringFutureReservesOp({
    sponsoredId: Keypair.fromPublicKey(opts.sponsoredId).xdrAccountId()
  });

  const opAttributes = {};
  opAttributes.body = xdr.OperationBody.beginSponsoringFutureReserves(op);
  this.setSourceAccount(opAttributes, opts);

  return new xdr.Operation(opAttributes);
}