What is a zero-coupon bond?
Zero-coupon bond
A zero-coupon bond pays no periodic interest. It is sold below face value and redeemed at par. The gap between the purchase price and par is the return. That return is still interest. It just arrives as one amount at the end, or as accretion along the way.
How does a zero-coupon bond work?
An issuer sells a claim on 100 in five years for something less than 100 today. There is no coupon date. At maturity the holder presents the bond and receives par. The buyer’s yield is the rate that grows the purchase price to that par.
Accounts that hold the bond to maturity usually accrete the discount. Each period the book value steps up and interest income is recognized, even though no cash arrived. Selling before maturity locks in whatever price the market will pay that day.
Zero-coupon vs coupon bond
A coupon bond pays interest on a schedule and returns par at the end. A zero pays only par. Duration is longer on the zero because all of the cash sits at maturity. Price moves harder when yields move. That is why zeros show up as curve-building instruments and as long-dated hedges.
What you must not do in the book
Do not record the purchase at par and wait. The cash that left is the cost. If you credit the asset at 100 and ignore the 20 you did not pay, the book is already wrong. Par is the maturity amount. Cost is the amount you posted on day one.
How it works with Blnk
Record the purchase at the price you paid. Put the bond on a named asset balance. Compute each accretion in your app, then post that day’s increase. At maturity the asset should equal par before you move it to cash.
A purchase is a transfer from @CashUSD to @BondAssetUSD. Keep face value, purchase price, maturity, and the yield you used in metadata. See internal balances.
await blnk.Transactions.create({
precise_amount: 8000,
precision: 100,
reference: 'zero_buy_20260816_001',
currency: 'USD',
source: '@CashUSD',
destination: '@BondAssetUSD',
description: 'Buy zero-coupon bond at cost',
meta_data: {
face_value: 10000,
maturity: '2031-08-16',
yield_to_maturity: 0.045,
},
});