Hello,
Stellar is built for regulatory-compliant assets, and stocks are built directly in as a core asset type, yet there is not as of yet a txn operation for stock splits
What are stock splits?
Stock splits occur in the ordinary and necessary business of securities trading and recordkeeping at the whim of stock issuers who deem, at their own disposition, the need to artificially increase or decrease the number of shares held by issue securityholders. For instance, an issuer with 100mm outstanding shares may execute a 1:3 forward split wherein each securityholder at the time of the split received three shares for each share held, resulting in 300mm outstanding shares after the split at which point such issue generally trades at a third the pre-split price. Presume the same logic for reverse splits which tend to increase trading price at the cost of security float. See
"Does a split or a reverse split change the value of your investment?" for more implications of splits.
Why should we implement specific split operation(s)?
Stock splits are naturally simple—just multiply or divide everyone's balance by a certain number. Current clawback
provisions allow for the adequate implementation of stock splits by (1) freezing
all trustlines and revoking all open orders at some ungodly hour over the
weekend prior (2) distributing new assets [forward]/revoking old assets [reverse] on an account-by-account basis based on
their current balances.
Alternatively, an anchor can deprecate an asset, issuing a new one adopting the stock split, and then distribute such asset according to the state of some ledger backup created prior after freezing all trustlines as before.
Both methods work, but require iterating through every single assetholder, up to O(3n), and burning up valuable network compute time, storage resources for repetitive txns, and fee congestion rates for particularly large securityholder ledgers.
How does this align with the Stellar Development Foundation vision?
Security recordkeepers must implement stock splits should an issuer desire them to stay competitive in the market. Particularly for anchors basing network balances as material securityholder truth, a UI-level implementation of stocks splits is insufficient for compliance, especially for larger securities like $GE which execute many stock splits over their existence. By making securities recordkeeping easier for Stellar anchors, the network can open stock ownership to billions of global investors traditionally disenfranchised from owning in quality equity investments.
Backwards incompatibilities, technical implementation details...
The general idea is just adding a forward split and reverse split operation executable by issuers for a given asset. The op would take one parameter, similar to the implementation in
lines 149–170 here but obviously over the entirety of network assetholders and any posted offers held on the order book. This last detail is key, as, in the instance of a reverse split, unaltered open orders on a 10:1 reverse split could leave uncancelled orders willing to sell at 10X below the going market rate post-split.
Forward splits have little compatibility issues so long as no split increases balances over the largest int64. You can multiply as small a number by any factor and not worry about loss of value. However, reverse splits, in the opinion of the authors, ought round the lowest cut-off value rather than truncate it. For instance, if Alice owns 88.0000255 shares of $PRLP before a 10:1 reverse split (resulting in 8.80000255 shares), then her Stellar account ought resolve to 8.8000026 shares, whereas 8.80000254 shares would round down to 8.8000025 shares post-split.
We forsee no other compatibility issues so long as this rounding/worst-case a truncation operation on reverse splits does not materially impact any memory states when executed on collective assetholder balances or otherwise overflow other states.
Thus, we post and attest to this pre-SEP initial discussion and grant any observant total and complete authority to redistribute this message in its unaltered entirety, namely to other community forums dedicated to Stellar.
Comments encouraged. This will probably very slightly alter total_coins per the rounding of micro-decimals, and we think that's OK.