Introduce Predict oracle lifecycle cap#1068
Open
pei-mysten wants to merge 1 commit into
Open
Conversation
3c4277b to
bc67a56
Compare
4b3bd9a to
07944bd
Compare
bc67a56 to
a79d571
Compare
a79d571 to
13d17bc
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
MarketOracleLifecycleCapfor lifecycle-only operations: expiry creation, explicit settlement, and settled-market compaction.registry::create_expiry_market,market_oracle::settle_if_possible, andexpiry_market::compact_storageto require the lifecycle cap instead of the high-privilege writer cap.Stack
MarketOracleCaptoMarketOracleWriterCapwithout changing behavior.Security rationale
Before this PR, a service holding the oracle cap for lifecycle work also had price-writing and oracle-config authority. That made a compromised lifecycle/market-management pod much more dangerous than its job required.
This split narrows the blast radius:
MarketOracleWriterCapand can continue to update prices, SVI, and oracle config for authorized markets.MarketOracleLifecycleCapand can create future expiries, explicitly settle from already-valid oracle data, and compact settled markets, but cannot write prices or tune oracle bounds.pyth_lazer_feed_id, preventing a lifecycle cap for one asset/feed from creating markets for another.writer_cap_id, so lifecycle can provision markets for HFT without holding the writer cap object.Tests
sui move test -p packages/predict -i 100000000 oracle_cap_testssui move test -p packages/predict -i 100000000 registry_create_testssui move test -p packages/predict -i 100000000 market_oracle_settlement_testssui move test -p packages/predict -i 100000000 compact_storagesui move test -p packages/predict -i 100000000 market_oracle_update_prices_testssui move test -p packages/predict -i 100000000 market_oracle_update_svi_testssui move test -p packages/predict -i 100000000 market_oracle_set_bounds_testsnpx --yes --package @mysten/prettier-plugin-move prettier-move -c $PWD/packages/predict/**/*.movegit diff --check./packages/predict/simulations/node_modules/.bin/tsc -p packages/predict/simulations/tsconfig.json --noEmit --types node