Docs/Products/Silicon markets
Memory index
kMEMORY: MU and SNDK at equal dollar weights from $100, priced by Chainlink.
- Synthetic
- kMEMORY
- Basket
- MU, SNDK
- Start
- $100
- Mint window
- Mon to Fri, 14:30 to 20:00 UTC
#The basket is fixed
The Memory index prices the memory stage of the chip supply chain from MU and SNDK, each read from its Chainlink feed on Robinhood Chain. Its synthetic, kMEMORY, holds no stock and does not redeem for stock tokens.
| Stock token | Component | Chainlink feed | Weight at deployment |
|---|---|---|---|
| MU | 0 | 0x425EEF·a6d596 | 50.0% |
| SNDK | 1 | 0xfb133F·7109A3 | 50.0% |
Each weight is set once, at deployment: equal dollar amounts that start the index at $100. The basket never rebalances, so the weights drift with prices. The index values each token at its feed’s per-token price, which reflects the token’s multiplier for corporate actions as the issuer sets it. The index adds nothing to the feeds.
quantity = ($100 ÷ 2) ÷ price at deployment
- price at deployment
- The stock’s Chainlink answer in its feed’s deployment round, the reference price
- rounding
- Down, to 18 decimals
index = Σ quantity × latest price
- latest price
- Each stock’s latest Chainlink answer, in 18 decimals
- rounding
- Each term up, to 18 decimals, against the minter
- update time
- The oldest of the stocks’ update times
The deployment round of each feed is the reference: its price sets the quantity, and the breaker measures from it. The feed records both at deployment in its ComponentAdded events, and component(i) reads a component’s feed, decimals and quantity. A round that cannot be read, an answer of zero or below, or an update time in the future leaves the index without a price.
- MU and SNDK at deployment
- $200.00 and $100.00
- Quantities
- 0.25 MU and 0.5 SNDK: $50.00 of each
- MU rises 10%
- 0.25 × $220.00 + 0.5 × $100.00 = $105.00
- Weights then
- MU 52.4%, SNDK 47.6%
Example prices. The quantities are set once, from each feed’s price in its deployment round. A split leaves them unchanged.
The stock tokens and their stages: Holdings by stage.
#Mints follow market hours
A mint, and a withdrawal from a position with debt, needs the index fresh for mints: every rule below holds at the moment of the transaction. Repaying and adding collateral read no price and work at any time.
| Rule | Value |
|---|---|
| Days | Monday to Friday, except exchange holidays |
| Hours | 14:30 to 20:00 UTC; 14:30 to 17:00 UTC on early-close days |
| Prices | Every stock’s latest Chainlink answer at most 24 hours old |
| Breaker | No component stopped (A jump stops the index) |
| Pause | The index not paused by its guardian |
The window sits inside the regular US session in both summer (13:30 to 20:00 UTC) and winter (14:30 to 21:00 UTC), so a mint never prices off a close while after-hours trading moves a stock.
The stock feeds on Robinhood Chain update when prices move, not on a schedule, so a feed’s age cannot tell a closed market from a quiet one: the window and the calendar do. On a Monday, mints wait for each stock’s first update, since Friday’s prices are more than 24 hours old.
The market calendar is a contract its owner sets: it closes exchange holidays and ends the window at 17:00 UTC on early-close days. A change that restricts a day takes effect at once. A change that relaxes one applies only to a day that starts at least 24 hours later.
#Liquidations run any hour
Starting an auction, and restarting one that ended unsold, needs the index fresh for liquidations: every stock’s latest answer at most 96 hours old and no component stopped, on any day and at any hour. The guardian’s pause does not stop them.
96 hours covers the longest regular closure, about 92.5 hours from an early close on a Thursday to the open after a holiday Friday, so a weekend fall in $KYZN can be liquidated at Friday’s prices.
The auction’s terms, the collateral rules and the levels apply to every Silicon market: Liquidation is a Dutch auction.
#A jump stops the index
Each component keeps a checked round, the last round accepted: its deployment round at first. A component stops when a later round moves more than 30% from the round before it, answers zero or below, or cannot be read. One stopped component stops the index for mints and liquidations alike.
| Rule | Value |
|---|---|
| Jump | A round more than 30% from the round before it; a move of exactly 30% is not a jump |
| Unreadable | A round that cannot be read or follows one that cannot, or an answer of zero or below |
| Checked round | sync() moves it forward over rounds each within 30% of the one before; anyone can call it, and the vault calls it before it reads prices |
| Backlog | At most 16 rounds past the checked round per call and per check; a longer backlog stops the index until sync() catches up |
| Clear | The guardian only, with clearJump(i, roundId) naming the feed’s current round |
The stop latches: later rounds within 30% do not lift it. The guardian checks any move of more than 30%, such as a large earnings gap or a bad print, before it clears the round. It clears exactly the round it checked, so a newer print that lands first is not accepted unseen.
The server’s worker calls sync() when a stock’s feed has new rounds. It alerts the owner when a component stops for any reason: a move of more than 30%, an unreadable round, or a quantity change waiting for the guardian. It starts auctions for positions below 150% and restarts those that end unsold. Anyone may bid.
#Splits leave quantities unchanged
Each stock token carries a multiplier that its issuer updates for corporate actions, such as a split. Each stock’s Chainlink feed prices one token, and its answer already includes the multiplier. A split or another corporate action therefore does not change a quantity. The feed holds its last price through the action and resumes at a continuous per-token price. A held price ages like any other, under the 24-hour and 96-hour rules above.
A quantity changes only as a correction, if a feed’s per-token price ever stops tracking its token, for example after a feed or token migration. A correction waits 24 hours, in public.
| Step | Rule |
|---|---|
| Queue | The owner calls queueQuantity(i, quantity); a second call replaces the first and restarts the 24 hours |
| Apply | Anyone calls applyQuantity(i) from 24 hours after the queue; the component then stops until the guardian clears it |
| Clear | The guardian cannot clear a component while a quantity is queued for it |
| Cancel | The owner or the guardian can cancel a queued quantity |
A correction is accepted once, by a guardian who has seen the feed’s price against the new quantity.
#The guardian can pause
The guardian, an address the owner names, can pause the index. A pause stops mints and withdrawals from a position with debt. Liquidations, repaying and adding collateral continue.
The vault’s owner can also stop new mints in the market, for a USDG depeg or a feed incident (Positions hold 150% collateral). The vault opens the market only once the index has a guardian and a methodology hash.
#Methodology text and hash
The Memory index’s methodology is a plain text file that states the rules on this page. The owner records the keccak-256 hash of its exact bytes in the index’s feed as methodologyHash (setMethodology).
| Detail | Value |
|---|---|
| Text | docs.kyzen.network/methodology/kmemory.txt |
| Format | Plain ASCII text, LF line endings, 6,634 bytes |
| keccak-256 | 0x79ca695059f495b8b688a00c56d88bb0a8a1f4fdbd18d39fd01553a04fa53338 |
| Recorded as | methodologyHash in the index’s feed |
Any change to the text, even a space or the final newline, changes its hash. Hash the file as served, as bytes, with one of these commands, and compare the result with the feed’s methodologyHash.
curl -s https://docs.kyzen.network/methodology/kmemory.txt -o kmemory.txt
cast keccak "0x$(xxd -p kmemory.txt | tr -d '\n')"
# 0x79ca695059f495b8b688a00c56d88bb0a8a1f4fdbd18d39fd01553a04fa53338
cast call <index feed> "methodologyHash()(bytes32)" --rpc-url https://rpc.mainnet.chain.robinhood.com