A couple of years ago Jed wrote about the possibility of using Stellar to issue Bonds (http://jedmccaleb.com/blog/bonds-on-stellar/). The example is clear, however I would like to know what is the best way to trade bonds using the Stellar Distributed Exchange. I currently see two options:

  1. Follow the approach written in Jed's article and trade accounts as assets in the Stellar Distributed Exchange. That would require to figure out how to make an offer for a Stellar account. This approach is simpler since the issuer would only need to make the periodic payments to a single account.

  2. Issue tokens (in the standard way) representing bonds. These bonds could be easily trade in the Stellar Distributed Exchange. But this would require the bond issuer to first find out all the accounts that hold the bond tokens, and then distribute the period payments to those accounts based on the amount of tokens that a particular account holds.

I am fan of option 1, and would appreciate any light on how this could be implemented.

If not, how could I use horizon to figure out all the accounts that hold a particular asset issued by a specific issuer/anchor?

3 Answers 3


To trade accounts practically, buyer and seller have to either

  • directly send each other XDR-ed and base64-ed partly signed transactions, then unpack it, sign in and commit. Quite a hassle to be honest, especially if more than 2 signers in total.
  • or user Stellar signature aggregator service (i.e. Constellation)

I would not recommend first option. Even if you go with account trading strategy, presigning 12 transactions add no value because issuer can easily default on bond by removing "keyA" from his account or just using another account. It even adds unnecessary friction, for example is it impossible to prepay bond in a meaningful way. It servers only as terms of contract, but for that matter a more easy and flexible way is to add statement such contract terms like "I will pay 1,000$ monthly until X" as a data field.

You are right that it's hard to find owners of bond-assets and distribute proportional payments to them. It is a big hurdle in best case, and straight-forward impossible in various corner cases (rounding problems due low amounts, assets being in escrow account, etc.).

There's a third way that combines the best of both approaches. In a nutshell, you create bondAccount that issue bondAssets that are sold. But those bondAssets are unique, numbered and repaid in sequence instead of repaid proportionally.

  • For issuer it is super easy - just pay money to bond account whenever you can and do your best to fit in previously agreed schedule.
  • For buyers it has all the features - you always know when and how many you are supposed to receive, trade bondAssets as easy as any asset on Stellar, and there's no risk to put those bondAssets into other smart contracts.

More details are in a whitepaper by startup FIC Network on page 34 (disclaimer: I am developer there).


You could make a .0000012 of a bond token (one stroop per month, not fungible). Instead of the operation of the presigned transaction from Yoyodyne to the bond account being a payment of $1000, it could be a makeoffer operation where Yoyodyne places an offer to buy one stroop of the bond token for $1000. The bond token could then be bought and sold, and only redeemed each month like in the example.


You should use option 2, it's the better approach since it fits more closely to the Stellar model and lets you maintain your original Stellar account.

Horizon offers the all assets endpoint to find the list of assets by code and issuer

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.