// 1. S1 will sponsor a trustline for Account A.
let s1Account = await server.loadAccount(S1.publicKey()).catch(accountFail);
let tx = new sdk.TransactionBuilder(s1Account, {fee: sdk.BASE_FEE})
.addOperation(sdk.Operation.beginSponsoringFutureReserves({
sponsoredId: A.publicKey(),
.addOperation(sdk.Operation.changeTrust({
limit: "1000", // This limit can vary according with your application;
// if left empty, it defaults to the max limit.
.addOperation(sdk.Operation.endSponsoringFutureReserves({
.setNetworkPassphrase(sdk.Networks.TESTNET)
// Note that while either can submit this transaction, both must sign it.
let txResponse = await server.submitTransaction(tx).catch(txCheck);
if (!txResponse) { return; }
console.log("Sponsored a trustline of", A.publicKey());
// 2. Both S1 and S2 sponsor trustlines for Account A for different assets.
let aAccount = await server.loadAccount(A.publicKey()).catch(accountFail);
let tx = new sdk.TransactionBuilder(aAccount, {fee: sdk.BASE_FEE})
.addOperation(sdk.Operation.beginSponsoringFutureReserves({
sponsoredId: A.publicKey()
.addOperation(sdk.Operation.changeTrust({
.addOperation(sdk.Operation.endSponsoringFutureReserves())
.addOperation(sdk.Operation.beginSponsoringFutureReserves({
sponsoredId: A.publicKey()
.addOperation(sdk.Operation.changeTrust({
.addOperation(sdk.Operation.endSponsoringFutureReserves())
.setNetworkPassphrase(sdk.Networks.TESTNET)
// Note that all 3 accounts must approve/sign this transaction.
let txResponse = await server.submitTransaction(tx).catch(txCheck);
if (!txResponse) { return; }
console.log("Sponsored two trustlines of", A.publicKey());