Search for projects by name
dYdX v3 aims to build a powerful and professional exchange for trading crypto assets where users can truly own their trades and, eventually, the exchange itself.
dYdX v3 aims to build a powerful and professional exchange for trading crypto assets where users can truly own their trades and, eventually, the exchange itself.
dYdX v4 announcement
2022 Jun 22nd
dYdX V4 will be developed as a standalone blockchain based on the Cosmos SDK.
dYdX Foundation
2021 Aug 3rd
Independent foundation was created to participate in the Protocol governance.
STARKs are zero knowledge proofs that ensure state correctness.
There is no exit window. Upgrades have a 9d delay, (or 2d if shortened by the Priority Controller), but withdrawals can be censored for up to 14d.
Users are able to trustlessly exit by submitting a Merkle proof of funds. Positions will be closed using the average price from the last batch state update.
Each update to the system state must be accompanied by a ZK proof that ensures that the new state was derived by correctly applying a series of valid user transactions to the previous state. These proofs are then verified on Ethereum by a smart contract. The system state is represented using Merkle roots.
Despite their production use zkSTARKs proof systems are still relatively new, complex and they rely on the proper implementation of the polynomial constraints used to check validity of the Execution Trace.
Funds can be lost if the proof system is implemented incorrectly.
All the relevant data that is used to recover the balances Merkle Tree is published on-chain as calldata. This includes, in addition to the proven new state, the complete list of differences of the users’ balances from the previous state.
State can be independently derived from data (state updates) published on Ethereum by running an open-source StarkEx Explorer. The explorer, once fully synced, provides UI interface to perform forced actions, trigger rollup freeze and withdraw funds using escape hatch.
No compression is used, state updates and other metadata are simply serialized for L1
There is no genesis file for dYdX. By default, all accounts were empty at the beginning.
dYdX doesn’t publish transactions. Balances of user positions are stored in a Merkle Tree and updates to that tree are published on Ethereum, together with Merkle Root and a ZK proof. Deserialization of that data is implemented here. Generating Merkle Proof is implemented here.
The operator is the only entity that can propose blocks. A live and trustworthy operator is vital to the health of the system. Typically, the Operator is the hot wallet of the StarkEx service submitting state updates for which proofs have been already submitted and verified.
MEV can be extracted if the operator exploits their centralized position and frontruns user transactions.
Force exit allows the users to escape censorship by withdrawing their funds. The system allows users to force the withdrawal of funds by submitting a request directly to the contract on-chain. The request must be served within 14d. If this does not happen, the system will halt regular operation and permit trustless withdrawal of funds. Perpetual positions can also be force closed before withdrawing, however this requires the user to find the counterparty for the trade themselves.
Users can be censored if the operator refuses to include their transactions. However, there exists a mechanism to independently exit the system.
Funds can be lost if the user is unable to find the counterparty for the force trade.
If the user experiences censorship from the operator with regular exit they can submit their withdrawal requests directly on L1. The system is then obliged to service this request. Once the force operation is submitted and if the request is serviced, the operation follows the flow of a regular exit.
If the enough time deadline passes and the forced exit is still ignored the user can put the system into a frozen state, disallowing further state updates. In that case everybody can withdraw by submitting a merkle proof of their funds with their L1 transaction.
Can decrease the delay required for the Rollup upgrade to 2d.
Controlled by dYdX Governance. Owner of dYdX token. Can upgrade Treasury, Liquidity Module and Merkle Distributor. Currently there is 2d delay before the upgrade.
Controlled by dYdX Governance. Has the ability to update Governance Strategy resulting in different logic of votes counting. Can upgrade Safety Module. Currently there is 7d delay before the upgrade.
Controlled by dYdX Governance. The Merkle-pauser executor can freeze the Merkle root, which is updated periodically with each user cumulative reward balance, in case the proposed root is incorrect or malicious. It can also veto forced trade requests by any of the stark proxy contracts.Currently there is 0s delay before the upgrade.
Main contract of dYdX exchange. Updates dYdX state and verifies its integrity using STARK Verifier. Allows users to deposit and withdraw tokens via normal and emergency modes. This contract stores the following tokens: USDC.
Upgrade delay: 9d or 2d if overridden by Priority Controller
Contract storing CAIRO Program Output, in case of dYdX, it stores state diffs of dYdX Exchange.
Contract responsible for validating force withdrawal requests.
The Merkle Distributor smart contract distributes DYDX token rewards according to a Merkle tree of balances.
Upgrade delay: 2d
The Liquidity Module is a collection of smart contracts for staking and borrowing, which incentivize the allocation of USDC funds for market making purposes on the dYdX layer 2 exchange.
Upgrade delay: 2d
The Safety Module is a staking pool that offers DYDX rewards to users who stake DYDX towards the security of the Protocol.
Upgrade delay: 7d
Contract storing dYdX Governance logic.
Contract storing logic for votes counting in dYdX Governance.
Token used by the dYdX Governance for voting.
Upgrade delay: 9d or 2d if overridden by Priority Controller
The current deployment carries some associated risks:
Funds can be stolen if a contract receives a malicious code upgrade. There is a 9d delay on code upgrades.The delay can be decreased by the Priority Controller to 2d.