Stock Functions
Every lifecycle write follows the same shape: validate an active security, mutate active positions, encode the transaction, and emit an event for the poller. Partial operations may also create a new balance security.
StockLib is chain/src/lib/Stock.sol. CapTable calls it for stock lifecycle writes.
Library functions
| Function | Called by | Checks | Changes | Tx |
|---|---|---|---|---|
createIssuance | issueStock | Quantity and price. | Adds position; increments issued shares. | STOCK_ISSUANCE |
createTransfer | transferStock | Buyer verified; enough stock. | Moves shares; may create balance/resulting issuances. | STOCK_TRANSFER |
createCancellation | cancelStock | Position exists; enough quantity. | Removes original; may create balance; subtracts issued shares. | STOCK_CANCELLATION |
createReissuance | reissueStock | Position exists. | Records reissue; removes original. | STOCK_REISSUANCE |
createRepurchase | repurchaseStock | Position exists; enough quantity. | Records repurchase; may create balance; subtracts issued shares. | STOCK_REPURCHASE |
createRetraction | retractStockIssuance | Position exists. | Records retraction; removes original. | STOCK_RETRACTION |
createAcceptance | acceptStock | Checked by CapTable. | Records acceptance only. | STOCK_ACCEPTANCE |
Helpers
| Helper | Purpose |
|---|---|
_updateContext | Write position, track security ID, record issuance, update issued shares. |
_safeNow | Cast block.timestamp to uint40. |
_subtractSharesIssued | Decrement issuer and class issued shares. |
_transferSingleStock | Move one active security. |
_checkInvalidQuantityOrPrice | Reject zero quantity or price. |
_checkInsuffientAmount | Reject insufficient shares. |
_checkActivePositionExists | Reject zero-quantity position. |
_checkBuyerVerified | Reject unverified transfer buyer. |
Errors
| Error | Trigger |
|---|---|
InsufficientShares | Requested quantity exceeds active shares. |
InvalidQuantityOrPrice | Quantity or price is zero. |
UnverifiedBuyer | Transfer buyer is unverified. |
ActivePositionNotFound | Active position has no quantity. |
Balance securities
| Action | Behavior |
|---|---|
| Transfer | Partial transfer creates transferor balance issuance. |
| Cancellation | Partial cancellation creates balance issuance. |
| Repurchase | Partial repurchase creates balance issuance. |
| Retraction/reissuance | Original position is removed. |
Server-side controllers convert UUIDs to bytes16 (convertUUIDToBytes16) and scale quantities/prices (toScaledBigNumber) before calling these functions. Raw onchain values are scaled by 1e10 (10,000,000,000) — divide by 1e10 to get human values. The poller unscales automatically before writing to MongoDB.