All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
BasicOrdertrigger-order fields fromfrontendOpenOrders:is_trigger,trigger_px,trigger_condition,is_position_tpslOrderResponseStatus::WaitingForTriggerandWaitingForFillorder response variants- Exchange actions
sendToEvmWithData,topUpIsolatedOnlyMargin,claimRewards,authorizeAqav2Role, andvalidatorL1Stream, withHttpClientmethods for each - Deployer actions in the new
hypercore::types::deploymodule: HIP-1/HIP-2spotDeploy, HIP-3perpDeploy, and HIP-4 outcome deployment and settlement, reachable viaHttpClient::spot_deploy,perp_deploy, andactivate_outcome_deployer - WebSocket post requests:
Connection::postandConnectionHandle::postsend info requests and signed actions over an open socket, with replies arriving asIncoming::Post - Info requests
userDexAbstractionandoutcomeTemplates, viaHttpClient::user_dex_abstractionandoutcome_templates fastflag onBatchCancelandBatchCancelCloid, serialized asfand omitted when false- Optional
destinationon thereserveRequestWeightaction, to credit reserved capacity to another account - New example:
examples/hypercore/websocket_post.rs - Two ignored live-audit tests,
info_requests_are_still_answeredanddeployer_action_shapes_are_still_accepted, that walk the SDK's surface against the real API - Single-order
modifyaction, asAction::ModifyandHttpClient::modify_order.batchModifywas the only form covered before always_placeonModifyandBatchModify, serialized asaand omitted when false, which places the replacement order even if the cancel failedspotDeployvariantssetTokenAnnotationandsetDeployerLabeloutcomeDeployvariantsetSubDeployers, which grants a sub-deployer one HIP-4 action- Eighteen undocumented exchange actions the exchange accepts but the docs do not mention, each with an
HttpClientmethod:borrowLend,createSubAccount,subAccountModify,subAccountTransfer,subAccountSpotTransfer,createVault,vaultModify,vaultDistribute,setDisplayName,setReferrer,registerReferrer,spotUser,finalizeEvmContract,CSignerAction,CValidatorAction,linkStakingUser,stakingLinkDisableTradingUser, anduserPortfolioMargin - Nineteen undocumented info requests, each with an
HttpClientmethod:exchangeStatus,gossipRootIps,isVip,leadingVaults,legalCheck,liquidatable,marginTable,maxMarketOrderNtls,preTransferCheck,recentTrades,subAccounts2,twapHistory,usdcRouting,userBorrowLendInterest,userTwapSliceFillsByTime,validatorL1Votes,validatorSummaries,vaultSummaries, andwebData2 - WS subscriptions
assetCtxs,spotAssetCtxs, anduserHistoricalOrders Incoming::Error, carrying theerrorchannel. A rejected subscription used to be logged and dropped, so a removed subscription looked like a feed that never sent anything- Live-audit tests
subscriptions_are_still_acceptedandundocumented_action_shapes_are_accepted, covering the two surfaces the existing audits missed PredictedFundingVenue::funding_interval_hours, the funding interval the exchange reports per venue. Optional: 19 of 627 venue payloads on mainnet omit it
HttpClient::aligned_quote_token_infoandInfoRequest::AlignedQuoteTokenInfo. The endpoint no longer exists: mainnet and testnet both reject it with the same error they give an unknown request type, and it is absent from the docs- Breaking:
Subscription::WebData2andIncoming::WebData2. The exchange rejects the subscription;webData3replaces it. ThewebData2info request still works and is now available asHttpClient::web_data2
- Breaking:
HttpClient::predicted_fundingsnow returnsOption<PredictedFundingVenue>for each venue. The exchange sendsnullwhen a coin is not listed on a venue, which failed to deserialize withinvalid type: null, expected struct PredictedFundingVenue. On mainnet 69 of 696 venue slots are null, so the endpoint was unusable.Nonemeans the coin is not listed there, not a zero funding rate - Breaking:
BatchCancelandBatchCancelCloidgained afastfield, so struct literals needfast: false - Breaking:
BatchModifygained analways_placefield, so struct literals needalways_place: false - Breaking: HIP-4 outcome deployment moved from
SpotDeployAction::Outcometo its ownAction::OutcomeDeploy, sent as{"type": "outcomeDeploy", ...}. The exchange stopped parsing the old nesting. UseHttpClient::outcome_deploy - Breaking:
HttpClient::reserve_request_weighttakes adestination: Option<Address>argument Response,OkResponse,OrderResponseStatus, andActionRequestnow deriveClone;Response,OkResponse, andOrderResponseStatusalso deriveSerializeOkResponsegainedCreateSubAccountandCreateVault, which carry the address the exchange assigns- All three signing paths (
sign,sign_sync,prehash) now share one exhaustive match overAction, so adding an action is one edit instead of three
- Refreshed every dependency to its latest release.
base640.22 -> 0.23 andhex-literal0.4 -> 1 in the SDK,iroh-mdns-address-lookup0.4 -> 0.5 in hypecli, plus a full lockfile update - Breaking: MSRV raised to 1.94.1 on both crates.
alloy2.4 already required it, so the declared 1.85.0 had not been buildable for a while and was holding back updates toserde_with,ruint,icu_*and theaws-*tree
- Optional
nSigFigsandmantissaparameters on theL2BookWS subscription for price-level aggregation - Outcome (prediction) market support:
OutcomeMeta,OutcomeInfo,OutcomeQuestion,OutcomeSideSpectypes HttpClient::outcome_meta()and standalonehypercore::outcome_meta()for querying HIP-4 markets- HyperCore WS subscriptions for
userEvents,userTwapSliceFills,userTwapHistory,activeAssetData, andwebData2 - New typed WS payloads for user events, TWAP slice/history streams, and active asset data
- Forward-compatible fallback parsing for unknown
userEventspayload variants - New example:
examples/hypercore/websocket-user-events.rs
- Parse channel "user" fill notifications as
UserEventson WebSocket - Fix
OutcomeMarket::marketto store full asset ID (including 100_000_000 offset) - Consolidate
AbstractionModeintotypes/api.rs, remove wrapper type
- Extended WebSocket docs/snippets in README and crate docs to include advanced user streams
- Added serde test coverage for the new WS channels and payload schemas
- Agent-signed send asset (
AgentSendAsset) action type with L1/RMP signing - Order write priority support via
BatchOrder.grouping = OrderGrouping::PriorityRate(bps)
GossipPriorityBid.max_gasserialization fixed to use decimal string format- Dynamic HYPE decimals used for priority bid conversions in CLI and examples
- Gossip priority auction support: Dutch auction bids for read-priority gossip data
GossipPriorityBidaction type with RMP-based signingGossipPriorityAuctionStatusresponse type and info requestHttpClient::gossip_priority_bid()andHttpClient::gossip_priority_auction_status()methods- Example:
examples/hypercore/priority-fee-bid.rs hypecli prio bidcommand for CLI priority bidding
- Improved HTTP error handling and response parsing
- Morpho vault APY: avoid panic on insufficient data; added
get_pool_addressfor Uniswap pools - Support spot asset in order/position listings
- Vault deposit and withdraw:
HttpClient::vault_transfer(),VaultTransferaction type - Refactored vault CLI to use subcommands (deposit/withdraw)
- Use max timestamp for TVL in vault details to prevent incorrect calculations
- Updated
http.rsdoc comments for improved accuracy
dexparameter toWebData2subscription and incoming types for multi-DEX WebSocket dataOrderUpdateis now generic over the order type for flexible deserialization- Aligned quote token and deployer fee fields on perpetual markets
- Growth mode field on perpetual markets
- Handle panics when metadata references indices beyond array bounds
- Serialize
OidOrCloid::Rightas hex string for correct action hash computation - Skip serializing zero cloid in
OrderRequestto match server hashing behavior
- Refactored
PriceTickto provide public constructors (for_perp(),for_spot())
HttpClient::user_fills_by_time()— query fills within a time range- Advanced WebSocket user stream subscriptions:
UserEvents,UserFills,UserTwapSliceFills,UserTwapHistory,ActiveAssetCtx,WebData2 - Tolerate missing TWAP history descriptions gracefully
- Filter out non-text WebSocket frames (binary frames are logged as warnings instead of causing errors)
usersfield,taker_address(), andmaker_address()onTradestruct for identifying trade participants
- CLOID serialization fix for correct action hash matching between client and server
- Outcome market support:
OutcomeMeta,OutcomeInfo,OutcomeQuestion,OutcomeSideSpectypes HttpClient::outcome_meta()and standalonehypercore::outcome_meta()for querying outcome markets
update_leverageaction andHttpClient::update_leverage()client methodNoopaction for nonce invalidation- EVM user modify (
EvmUserModify) action for toggling big blocks - Account abstraction mode:
AbstractionModequery and set via agent-signed and user-signed actions - Subaccount, vault details, user vault equities, and user role info calls
ClearinghouseStateandfunding_historyendpointsUpdateIsolatedMarginaction type with signature recovery supportUserRoleenum replacing string-based role responses- WebSocket connection status events:
Event::Connected,Event::Disconnected,Event::Message NonceHandlerconcurrency fix for atomic nonce generationNoCrossmargin mode added to perpetual universe items- Reply to server pings on WebSocket; force reconnect after missed pongs
- Added AI agent instructions pointing to skills folder
- Added curl install command to README
- Enhanced trading skill with HIP-3 DEX listing and trading guidance
- Unified asset format for subscribe commands in hypecli
- Use
FromStrfor CLOID parsing instead of manual hex decode - Simplified
hypecli sendcommand - Added
--skip-hip3flag to balance command - Made user a positional argument in balance command
- Morpho deposits: fix
totalAssets = depositscalculation - Fix yawc dependency version
- Multi-signature transaction support in hypersdk
Action::sign(),sign_sync(),prehash(), andrecover()directly onAction- Split
types.rsinto modular structure:types/mod.rs,types/api.rs,types/solidity.rs - Signature recovery and prehash functionality
multi_sig_config()andapi_agents()HTTP client methods
- Breaking: Removed
Signabletrait; moved signing logic toActionenum - Refactored signing module from 700+ lines to ~26 lines
- Breaking: Morpho APY calculations now use generic types for high precision arithmetic
PoolApyandVaultApyare generic overT128type parameterapy()methods require conversion functions
- Added
Cancelvariant toOkResponseenum
- Force rustls as TLS backend across the project
- Updated reqwest to v0.13
- Added
Cancelvariant toOkResponseenum for order cancellation responses - Added test case for cancel response deserialization
- Added credentials example showing common argument patterns across examples
- Made signing module public (
pub mod signing)
- Breaking: Morpho APY calculations now use generic types for high precision arithmetic
PoolApyandVaultApyare now generic overT128type parameterapy()methods require conversion functions to handle custom numeric types (f64, Decimal, etc.)- Enables arbitrary precision calculations for financial computations
- Refactored examples to use common credential and argument handling patterns
- Updated morpho examples to use new generic APY API with explicit conversions
- Fixed API type structs for cancellation and modification responses
- hypecli v0.1.3: Updated dependencies including alloy and hypersdk versions
Files Changed: 24 files, +556 insertions, -249 deletions
- Created new
types/api.rsmodule with core API request/response types (788 lines) - Added
types/solidity.rsmodule for Solidity type conversions - Added signature recovery functionality to
Actionenum (recover()method) - Added
prehash()method toActionfor obtaining signing hashes without signing - Added methods to
HttpClient:multi_sig_config(),api_agents()
- Breaking: Removed
Signabletrait in favor of methods directly onActionenum- Actions now implement
sign(),sign_sync(),prehash(), andrecover()directly - Simplified signing API with unified interface through
Actionenum
- Actions now implement
- Breaking: Split
types.rsinto modular structure:types/mod.rs,types/api.rs,types/solidity.rs - Reorganized HTTP client to use new type organization
- Refactored signing module, reducing from 700+ lines to ~26 lines by moving logic to
Action - hypecli: Switched to simple P2P connections instead of gossip protocol in iroh integration
- hypecli: Enhanced multisig handling with improved error handling and flow
- Added comprehensive module-level documentation for
types/api.rs - Improved signing module documentation explaining new architecture
- Updated README with 33 lines of new content
- hypecli: Upgraded to hypersdk 0.1.3
- hypecli: Force rustls for TLS (added
reqwest-rustls-tlsfeature) - hypecli: Updated dependency versions in Cargo.lock (344 fewer lines after optimization)
Files Changed: 14 files, +1477 insertions, -2072 deletions
- Forced rustls as TLS backend across the project
- Updated reqwest to v0.13
- Updated hypecli README (288 lines reduced, streamlined documentation)
- Refactored multisig module in hypecli (266 lines changed)
- Removed musl target from release workflow
- hypecli: Force connection to endpoint during signing operations
- Updated various dependency versions in hypecli Cargo.lock
Files Changed: 9 files, +290 insertions, -459 deletions
- hypecli: New command-line tool for Hyperliquid interactions
- Added balances, markets, morpho, and multisig modules
- P2P multisig coordination using iroh-gossip
- Support for converting accounts to/from multisig
- User and multisig conversion commands
- HTTP Client: New multisig-related functionality
multi_sig_config()- Query multisig configurationapi_agents()- Retrieve API agents for a user
- Signing: Support for multisig actions and agent approvals
ApproveAgentaction typeConvertToMultiSigUseraction type- Enhanced
MultiSigActionhandling
- Exposed additional types and functions in hypercore module for public API
- Updated function signatures for improved API clarity
- Enhanced HTTP client methods with better error handling
- Fixed multisig signing flow for mainnet deployment
- Resolved test failures and compiler warnings
- Added iroh-gossip, iroh-tickets for P2P coordination
- Added various CLI dependencies (clap, rpassword, indicatif)
Files Changed: 20 files, +5632 insertions, -1163 deletions
- WebSocket Candle Feed: Real-time candlestick data streaming
candle_snapshot()- Get historical candle data- WebSocket subscription for live candle updates
- Example:
examples/hypercore/websocket-candles.rs
- NonceHandler: Thread-safe nonce generation utility
- Atomic timestamp-based nonce generation
- Prevents replay attacks with monotonic increasing nonces
- Comprehensive documentation with usage examples
- Examples: Added market listing example (
examples/hypercore/list-markets.rs)
- Improved WebSocket connection handling and reconnection logic
- Fixed issues in example code
- Comprehensive NonceHandler documentation with thread-safety guarantees
- Improved crate-level documentation for docs.rs
- Added "Design choices" section to README
- Enhanced example documentation
- Fixed README examples
- Removed Cargo.lock from version control (added to .gitignore)
- Updated CI workflow
Files Changed: 25 files, +1377 insertions, -6157 deletions (large reduction due to Cargo.lock removal)