XSC-0003: Streaming Token
XSC-0003 extends the XSC-0001 fungible-token interface with time-based payment streams. A conforming contract keeps balances, allowances, and streams in the same token contract.
Required Token Surface
An XSC-0003 token preserves the XSC-0001 functions:
change_metadata(key, value)transfer(amount, to)approve(amount, to)transfer_from(amount, to, main_account)balance_of(address)
It also exposes:
create_stream(receiver, rate, begins, closes)
balance_stream(stream_id)
change_close_time(stream_id, new_close_time)
finalize_stream(stream_id)
close_balance_finalize(stream_id)
balance_finalize(stream_id)
forfeit_stream(stream_id)Stream Model
Each stream records its sender, receiver, start and close times, payment rate, claimed amount, and status. The stream identifier is derived deterministically from the stream parameters.
Accrual is lazy: the contract calculates and transfers the amount due when a stream function runs in a later block. Nothing executes between blocks.
Events
In addition to XSC-0001 Transfer and Approve events, the reference contract emits:
StreamCreatedStreamBalanceStreamCloseChangeStreamForfeitStreamFinalized
Compatibility Notes
- Keep function and argument names stable.
- Parse
begins,closes, and close-time updates asYYYY-MM-DD HH:MM:SS, and base accrual on finalized block time. - XSC-0003 does not define permit signatures. Pair it with XSC-0002 when signature-based approvals are needed.
- The maintained reference implementation is
xian-xips/XSC003_streaming_token.
The separate con_stream_payments package streams arbitrary external tokens through escrow. It is an application contract, not the XSC-0003 token interface. See Streaming Payments.