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 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