# StarkEx
## 数据结构
Account模型
- stark_key 签名交易
- amount
- token_id
- vault_id : is the account number in StarkEx that you are depositing to — this account must be an account that is associated with the specified stark_key
- type: describes the transaction type submitted, in this case, a DepositRequest.
```
{
"vault_id": 1654615998,
"token_id": "0x2dd48fd7a024204f7c1bd874da5e709d4713d60c8a70639eb1167b367a9c378",
"stark_key": "0x7c65c1e82e2e662f728b4fa42485e3a0a5d2f346baa9455e3e70682c2094cac",
"amount": "4029557120079369747",
"type": "DepositRequest"
}
```
### balancesTree
叶子结点是 Vaults
### orderTree
订单数是一个Patricia tree,比默克尔树更容易更新和搜索。
防止交易重放。
订单树中的一个叶子代表一个订单。每个叶子都有一个键和一个值,键是订单hash,值是value,0或1。订单树是用来跟踪以前铸造的资产的。
支持部分成交功能。
StarkEx智能合约存储了Balances树的根和Orders树的根,
layer2链下状态是一组根。当合约收到一个新的证明,即存在一组有效的交易,执行完成,可以将当前状态改变为新的状态。
#### Perpetual trading
- starkKey
- collateralAmount -vault的抵押物
- A list of synthetic assetId.
1. assetId
2. amount
3. cachedFundingIndex
**其他元素**
Global funding indices
Current system time
Current prices
限价单:
限价单包含用户交易资产(合成资产和抵押品)的 , 和 , 以及positionId订单assetId的
https://docs.starkware.co/starkex/in-perpetual.html#limit-order
#### order contract
https://github.com/starkware-libs/starkex-contracts/blob/master/scalable-dex/contracts/src/starkex/components/OrderRegistry.sol
#### state update
https://github.com/starkware-libs/starkex-contracts/blob/master/scalable-dex/contracts/src/starkex/interactions/UpdateState.sol
## 交易流程分析及starkex合约分析
starkex合约:https://github.com/starkware-libs/starkex-contracts
1. deposit
CurrencyConvertor: https://etherscan.io/address/0x8e8bd01b5a9eb272cc3892a2e40e64a716aa2a40#code
https://ethtx.info/mainnet/0x6f7baaa37932a0d868a14a1940ab91d01b665528468299054760bd624604044e/
主要调用了 PerpetualTokenAndRamping 合约的 registerUser 和 deposit 方法.

PerpetualTokenAndRamping
https://etherscan.io/address/0x3fed7bf5bf3e738bc30fbe61b048fdcb82368545#code
```
pendingDeposits[starkKey][assetId][vaultId] += quantizedAmount;
```