From c3c34b496fc0b49a29d8a32fd37a4e3a328947b7 Mon Sep 17 00:00:00 2001 From: SpiderMan <2153968377@qq.com> Date: Thu, 7 Nov 2024 00:04:57 +0800 Subject: [PATCH 1/3] wip: enhance dydx perpetual --- defi/DYDX/perpetual.md | 81 +++++++++++++++++++++++++++++++++++------- 1 file changed, 68 insertions(+), 13 deletions(-) diff --git a/defi/DYDX/perpetual.md b/defi/DYDX/perpetual.md index 466cab52a..9b92771e4 100644 --- a/defi/DYDX/perpetual.md +++ b/defi/DYDX/perpetual.md @@ -1,18 +1,73 @@ -## DYDX +### DYDX 永续合约详解 -### 永续合约 -合约代码 -https://github.com/dydxprotocol/perpetual -文档: -https://docs.dydx.exchange/#general +#### **什么是永续合约?** +永续合约是一种没有到期日的衍生品,允许交易者持有多头或空头头寸,无需担心交割日期。DYDX 的永续合约特别适合需要灵活杠杆、持续交易并对标特定资产的交易者。 +#### **DYDX 永续合约的特点** +1. **无到期日**:用户可以无限期持有多头或空头头寸。 +2. **高效流动性**:基于 DYDX 的自动化做市商 (AMM) 提供深度流动性。 +3. **杠杆倍数灵活**:支持高达 20 倍的杠杆交易。 +4. **链上性能**:通过 StarkWare 的 Validium 技术,DYDX 实现了高吞吐量和低交易成本。 +--- +### **DYDX 永续合约 VS. 杠杆交易** +永续合约和杠杆交易在 DYDX 平台上具有不同的使用场景: -## 参考链接 -- https://help.dydx.exchange/en/articles/4320633-why-should-someone-use-the-perpetual-vs-margin 永续跟杠杆差别 -- https://docs.dydx.community/dydx-governance/jiao-yi-jiao-cheng/ru-he-zai-dydx-shang-kai-kong-dan-zuo-kong/ru-he-zai-dydx-shang-kai-duo-dan-zuo-duo 操作文档 -- https://www.chainnews.com/articles/669485806574.htm Validium介绍 -- https://www.chainnews.com/articles/906891466719.htm 全景式解读加密货币衍生品交易赛道 -- https://mp.weixin.qq.com/s/VF4JGW-XG3drUAelKbYySA 橙皮书dydx保证金交易原理介绍 -- https://www.chainnews.com/articles/609351382358.htm dydx保证金 +| 特性 | 永续合约 | 杠杆交易 | +|-----------------|---------------------------|-----------------------------| +| **到期日** | 无 | 有到期日或期限 | +| **杠杆灵活性** | 最高可达 20 倍 | 最高 5 倍 | +| **资金费用** | 资金费率(Funding Rate) | 借贷利息 | +| **用途** | 投机、对冲、套利 | 短期融资 | + +**参考链接**: +[永续跟杠杆差别](https://help.dydx.exchange/en/articles/4320633-why-should-someone-use-the-perpetual-vs-margin) + +--- + +### **技术架构:Validium** +DYDX 通过 StarkWare 的 Validium 技术提升链上交易性能: +- **Validium** 提供极高的交易吞吐量,同时将用户资产托管于以太坊链上,保证安全性。 +- **高效零知识证明**:大幅降低链上计算与存储需求,提高用户体验。 + +**扩展阅读**: +[Validium 介绍](https://www.chainnews.com/articles/669485806574.htm) + +--- + +### **DYDX 交易教程** +DYDX 提供详细的操作指南,包括如何进行多空操作、止盈止损设置等: +- **开多/开空**:如何根据市场预期进行多单或空单操作。 +- **止盈/止损**:为保护交易者资本,平台支持设置自动止损点位。 +- **资金费用**:永续合约中,每 8 小时结算一次资金费率。 + +**参考文档**: +- [多空操作教程](https://docs.dydx.community/dydx-governance/jiao-yi-jiao-cheng/ru-he-zai-dydx-shang-kai-kong-dan-zuo-kong/ru-he-zai-dydx-shang-kai-duo-dan-zuo-duo) + +--- + +### **DYDX 永续合约的优势** +1. **无需信任的去中心化交易** + DYDX 永续合约运行于链上,用户完全控制自己的资产。 + +2. **低手续费** + 相比中心化交易所,DYDX 提供极具竞争力的手续费,并支持高频交易。 + +3. **多样化资产支持** + 目前支持 BTC、ETH 等主流加密资产,用户可以根据市场需求选择不同交易对。 + +--- + +### **衍生品市场的竞争格局** +在加密货币衍生品市场,DYDX 是其中一个重要玩家,与其他平台(如 Binance Futures、FTX)相比,DYDX 专注于去中心化交易的透明性和安全性。 + +**延伸阅读**: +[加密货币衍生品交易赛道解读](https://www.chainnews.com/articles/906891466719.htm) + +--- + +### **参考链接** +- [DYDX 合约代码](https://github.com/dydxprotocol/perpetual) +- [DYDX 官方文档](https://docs.dydx.exchange/#general) +- [DYDX 杠杆交易原理介绍](https://mp.weixin.qq.com/s/VF4JGW-XG3drUAelKbYySA) From 509329a2f6466af444fa444131afe7077020d6a3 Mon Sep 17 00:00:00 2001 From: SpiderMan <2153968377@qq.com> Date: Thu, 7 Nov 2024 00:06:20 +0800 Subject: [PATCH 2/3] wip: add initial implementation for DYDX perpetual pricing and rate --- defi/DYDX/funding-rate.md | 107 +++++++++++++++++++++++++ defi/DYDX/market-price.md | 162 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 269 insertions(+) create mode 100644 defi/DYDX/funding-rate.md create mode 100644 defi/DYDX/market-price.md diff --git a/defi/DYDX/funding-rate.md b/defi/DYDX/funding-rate.md new file mode 100644 index 000000000..21b9fd5ac --- /dev/null +++ b/defi/DYDX/funding-rate.md @@ -0,0 +1,107 @@ +以下是关于 **DYDX 永续合约的资金费率 (Funding Rate)** 部分的 JS 实现分析,它是永续合约的重要机制,用于保持合约价格与现货市场价格一致。 + +### 资金费率 (Funding Rate) 简介 + +资金费率是多头和空头之间周期性交换的费用。 +它的计算基于以下公式: + +\[ +\text{Funding Rate} = \text{Index Price} - \text{Mark Price} +\] + +- **Mark Price**:交易所计算的当前合约价格。 +- **Index Price**:现货市场的参考价格。 + +资金费率正值时,多头支付空头;负值时,空头支付多头。 + +--- + +### 实现步骤 +以下是用 JavaScript 模拟资金费率的简单计算过程: + +#### 1. 数据初始化 + +```javascript +// 示例数据初始化 +const indexPrice = 1000; // 现货参考价格(美元) +const markPrice = 1005; // 永续合约标记价格(美元) +const positionSize = 10; // 持仓量(单位合约数) +const fundingInterval = 8; // 资金费率结算周期(每 8 小时一次) +``` + +#### 2. 计算资金费率 + +```javascript +function calculateFundingRate(indexPrice, markPrice) { + // 资金费率计算 + const fundingRate = (markPrice - indexPrice) / indexPrice; + return fundingRate; +} + +const fundingRate = calculateFundingRate(indexPrice, markPrice); +console.log(`Funding Rate: ${(fundingRate * 100).toFixed(2)}%`); +``` + +#### 3. 计算资金费用 + +```javascript +function calculateFundingPayment(fundingRate, positionSize, markPrice) { + // 资金费用 = 资金费率 * 持仓量 * 标记价格 + const fundingPayment = fundingRate * positionSize * markPrice; + return fundingPayment; +} + +const fundingPayment = calculateFundingPayment(fundingRate, positionSize, markPrice); +console.log(`Funding Payment: $${fundingPayment.toFixed(2)}`); +``` + +--- + +### **完整代码** + +```javascript +// 数据初始化 +const indexPrice = 1000; // 现货参考价格 +const markPrice = 1005; // 永续合约标记价格 +const positionSize = 10; // 持仓量 +const fundingInterval = 8; // 每8小时资金费率结算 + +// 计算资金费率 +function calculateFundingRate(indexPrice, markPrice) { + return (markPrice - indexPrice) / indexPrice; +} + +// 计算资金费用 +function calculateFundingPayment(fundingRate, positionSize, markPrice) { + return fundingRate * positionSize * markPrice; +} + +// 执行计算 +const fundingRate = calculateFundingRate(indexPrice, markPrice); +console.log(`Funding Rate: ${(fundingRate * 100).toFixed(2)}%`); + +const fundingPayment = calculateFundingPayment(fundingRate, positionSize, markPrice); +console.log(`Funding Payment: $${fundingPayment.toFixed(2)}`); +``` + +--- + +### **示例输出** + +假设: +- **Index Price** = $1000 +- **Mark Price** = $1005 +- **Position Size** = 10 + +运行结果: +``` +Funding Rate: 0.50% +Funding Payment: $50.25 +``` + +### **分析** +- 资金费率为 **0.5%**,意味着多头需要每 8 小时支付持仓价值的 0.5%。 +- 持仓者需支付 **$50.25** 的资金费用。 + +### **实际使用场景** +在 DYDX 平台上,类似计算通过链上合约自动执行,并根据市场条件动态调整。该机制能有效平衡多空双方的资金成本,确保合约价格与现货价格的紧密锚定。 \ No newline at end of file diff --git a/defi/DYDX/market-price.md b/defi/DYDX/market-price.md new file mode 100644 index 000000000..b091da652 --- /dev/null +++ b/defi/DYDX/market-price.md @@ -0,0 +1,162 @@ +在 DYDX 永续合约中,价格计算是基于 **标记价格(Mark Price)** 和 **指数价格(Index Price)**,它们是维护合约公平性的核心组件。 + +以下是如何通过 JavaScript 模拟 **DYDX 永续合约价格机制** 的分析和实现。 + +### 1. **核心概念** + +- **指数价格 (Index Price)**:从现货市场获取的加权平均价格,反映某资产的市场公平价格。 +- **标记价格 (Mark Price)**:合约的实际交易价格,用于计算未实现盈亏(PnL)和强制平仓。 +- **基差 (Basis)**:标记价格和指数价格之间的差异,通常受供需影响。 + +公式: +\[ +\text{Mark Price} = \text{Index Price} + \text{Basis} +\] + +### 2. **代码实现** + +以下是 JavaScript 模拟 DYDX 永续合约价格计算的代码示例。 + +#### **Step 1: 初始化数据** + +```javascript +// 初始化价格数据 +const indexPrice = 2000; // 指数价格,现货市场价格(USD) +let basis = 10; // 初始基差(USD) + +// 模拟标记价格计算 +function calculateMarkPrice(indexPrice, basis) { + return indexPrice + basis; +} + +const markPrice = calculateMarkPrice(indexPrice, basis); +console.log(`Mark Price: $${markPrice}`); +``` + +#### **Step 2: 模拟动态基差调整** + +基差会根据市场供需动态调整,以下代码演示如何实时计算新的标记价格。 + +```javascript +// 模拟基差动态调整 +function updateBasis(marketCondition) { + // 市场条件影响基差:市场多头占优,基差上升;空头占优,基差下降 + if (marketCondition === "bullish") { + basis += 5; // 多头主导,基差增加 + } else if (marketCondition === "bearish") { + basis -= 5; // 空头主导,基差减少 + } + return basis; +} + +// 模拟不同市场条件下的标记价格 +const marketConditions = ["bullish", "bearish", "neutral"]; +marketConditions.forEach((condition) => { + const updatedBasis = updateBasis(condition); + const updatedMarkPrice = calculateMarkPrice(indexPrice, updatedBasis); + console.log(`Market Condition: ${condition}`); + console.log(`Updated Mark Price: $${updatedMarkPrice}`); +}); +``` + +#### **Step 3: 实现未实现盈亏(PnL)计算** + +根据标记价格计算未实现盈亏,用于评估持仓的当前盈亏情况。 + +```javascript +// 计算未实现盈亏(PnL) +function calculatePnL(entryPrice, markPrice, positionSize) { + // PnL = (标记价格 - 入场价格) * 持仓量 + const pnl = (markPrice - entryPrice) * positionSize; + return pnl; +} + +// 示例数据 +const entryPrice = 1980; // 持仓的入场价格 +const positionSize = 2; // 持仓量(单位:合约) + +const pnl = calculatePnL(entryPrice, markPrice, positionSize); +console.log(`Unrealized PnL: $${pnl.toFixed(2)}`); +``` + +--- + +### **完整代码** + +```javascript +// 初始化 +const indexPrice = 2000; +let basis = 10; + +// 计算标记价格 +function calculateMarkPrice(indexPrice, basis) { + return indexPrice + basis; +} + +// 更新基差 +function updateBasis(marketCondition) { + if (marketCondition === "bullish") { + basis += 5; + } else if (marketCondition === "bearish") { + basis -= 5; + } + return basis; +} + +// 计算未实现盈亏 +function calculatePnL(entryPrice, markPrice, positionSize) { + return (markPrice - entryPrice) * positionSize; +} + +// 模拟 +const markPrice = calculateMarkPrice(indexPrice, basis); +console.log(`Initial Mark Price: $${markPrice}`); + +const marketConditions = ["bullish", "bearish", "neutral"]; +marketConditions.forEach((condition) => { + const updatedBasis = updateBasis(condition); + const updatedMarkPrice = calculateMarkPrice(indexPrice, updatedBasis); + console.log(`Market Condition: ${condition}`); + console.log(`Updated Mark Price: $${updatedMarkPrice}`); + + const pnl = calculatePnL(1980, updatedMarkPrice, 2); + console.log(`Unrealized PnL: $${pnl.toFixed(2)}\n`); +}); +``` + +--- + +### **示例输出** + +假设以下市场条件: +- **初始指数价格**:$2000 +- **初始基差**:$10 +- **入场价格**:$1980 +- **持仓量**:2 合约 + +运行结果: + +``` +Initial Mark Price: $2010 +Market Condition: bullish +Updated Mark Price: $2020 +Unrealized PnL: $80.00 + +Market Condition: bearish +Updated Mark Price: $2010 +Unrealized PnL: $60.00 + +Market Condition: neutral +Updated Mark Price: $2010 +Unrealized PnL: $60.00 +``` + +--- + +### **分析总结** + +1. **动态基差**:市场条件直接影响基差,从而影响标记价格。 +2. **未实现盈亏 (PnL)**:通过标记价格计算持仓的浮动盈亏,帮助用户实时评估风险。 +3. **链上计算**:在 DYDX 平台,这些计算由智能合约实时进行,确保透明性和公平性。 + +如果需要更复杂的分析(如多资产组合、自动强制平仓逻辑),可以扩展代码! \ No newline at end of file From 2a536ffe56f438933e7b346feda26c4972d07b98 Mon Sep 17 00:00:00 2001 From: SpiderMan <2153968377@qq.com> Date: Thu, 7 Nov 2024 00:22:28 +0800 Subject: [PATCH 3/3] wip: add Validium --- defi/DYDX/validium.md | 128 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 defi/DYDX/validium.md diff --git a/defi/DYDX/validium.md b/defi/DYDX/validium.md new file mode 100644 index 000000000..b26d052a1 --- /dev/null +++ b/defi/DYDX/validium.md @@ -0,0 +1,128 @@ +### **Validium 详解** + +**Validium** 是一种扩展解决方案,属于第二层(Layer 2)扩展技术,通过将大部分数据存储移出链,同时使用零知识证明(ZK-Proofs)保证安全性。Validium 旨在在不牺牲安全性的前提下,极大提高区块链网络的可扩展性和交易速度。 + +--- + +### **Validium 与 Rollup 的对比** + +| 特性 | Validium | Rollup | +|-----------------------|-------------------------------------------|------------------------------------------| +| **数据存储位置** | 链下(Off-Chain) | 链上(On-Chain) | +| **扩展性** | 更高,支持数千 TPS | 相对较低 | +| **安全性** | 基于零知识证明,信任模型取决于数据可用性 | 基于零知识或欺诈证明,完全链上验证 | +| **成本** | 更低,Gas 费用少 | 相对较高 | +| **主要用途** | 高频交易、支付网络 | DeFi 应用,如交易所、借贷协议 | + +--- + +### **Validium 的核心原理** + +1. **链下数据存储** + 在 Validium 中,交易数据存储在链下的服务器或分布式数据库中,而不是直接写入区块链。 + +2. **零知识证明(ZK-Proof)** + Validium 使用 zk-SNARK 或 zk-STARK 技术生成证明,链下数据的合法性由这些证明来验证。 + +3. **数据可用性保证** + 虽然数据存储在链下,但零知识证明确保数据的完整性和正确性,且数据可用性由多个节点维护。 + +--- + +### **JavaScript 实现零知识证明的示例** + +我们可以用 JavaScript 来模拟 Validium 的基本验证逻辑,假设交易数据存储在链下,同时生成和验证零知识证明。 + +#### **1. 安装 `snarkjs`** + +`snarkjs` 是一个流行的零知识证明库,支持 zk-SNARK 生成和验证。 + +```bash +npm install snarkjs +``` + +#### **2. 模拟交易验证过程** + +```javascript +const snarkjs = require("snarkjs"); + +(async () => { + // 链下交易数据 (模拟) + const offChainData = { + sender: "Alice", + receiver: "Bob", + amount: 100 + }; + + // 假设的零知识证明生成函数 + function generateProof(transaction) { + // 这里我们用简单逻辑模拟证明生成过程 + return { + proof: `proof-of-${transaction.sender}-to-${transaction.receiver}-${transaction.amount}`, + publicSignals: [transaction.sender, transaction.receiver, transaction.amount] + }; + } + + // 假设的验证函数 + function verifyProof(proof, expectedSignals) { + // 检查生成的 proof 和提供的 publicSignals 是否匹配 + const isValid = proof.publicSignals.every( + (value, index) => value === expectedSignals[index] + ); + + return isValid ? "Proof is valid" : "Proof is invalid"; + } + + // 生成零知识证明 + const proof = generateProof(offChainData); + + console.log("Generated Proof:", proof); + + // 验证零知识证明 + const result = verifyProof(proof, ["Alice", "Bob", 100]); + console.log("Verification Result:", result); +})(); +``` + +#### **输出结果** +```bash +Generated Proof: { proof: 'proof-of-Alice-to-Bob-100', publicSignals: [ 'Alice', 'Bob', 100 ] } +Verification Result: Proof is valid +``` + +--- + +### **Validium 在 DYDX 中的应用** + +DYDX 交易平台采用 Validium 技术,通过 StarkWare 的 StarkEx 系统实现: +- **链下存储用户账户余额和交易历史**,提高了吞吐量和交易速度。 +- **链上验证零知识证明**,确保交易数据的正确性和一致性。 + +--- + +### **Validium 的优势** + +1. **高扩展性** + Validium 支持每秒数千甚至数万笔交易,非常适合高频交易场景。 + +2. **低成本** + 由于链上存储和计算需求减少,交易成本显著降低。 + +3. **数据隐私** + 数据存储在链下,用户交易数据不会公开,提高隐私性。 + +--- + +### **适用场景** + +- **高频交易平台**:如 DYDX 等去中心化交易所。 +- **支付网络**:处理大量小额快速支付。 +- **NFT 市场**:高频铸造、交易和转移 NFT。 + +--- + +### **参考链接** + +- [Validium 技术介绍](https://www.chainnews.com/articles/669485806574.htm) +- [StarkWare 官网](https://starkware.co/) +- [snarkjs 官方文档](https://github.com/iden3/snarkjs) \ No newline at end of file