diff --git a/defi/DYDX/shard.md b/defi/DYDX/shard.md new file mode 100644 index 000000000..98cf44125 --- /dev/null +++ b/defi/DYDX/shard.md @@ -0,0 +1,230 @@ +# SHARP(Shared Prover)技术概述 + +SHARP 是 StarkWare 开发的一种共享证明服务,旨在为多个应用生成有效性证明。它基于 STARK(Scalable Transparent Argument of Knowledge)技术,提供高效、安全的零矩矢证明。 + +## **工作原理** + +SHARP 的主要功能是接收来自不同应用的证明请求,并生成相应的 STARK 证明。其工作流程如下: + +1. **接收请求**:应用程序将交易数据和执行结果发送至 SHARP。 +2. **生成证明**:SHARP 使用 Cairo 语言编写的程序,对数据进行处理,生成 STARK 证明。 +3. **提交证明**:将生成的证明提交到以太坊主网,由链上合约验证其有效性。 + +## **技术细节** + +### **Cairo 语言** +SHARP 使用 Cairo 编写验证逻辑。Cairo 是一种图灵完备的编程语言,专为生成高效的 STARK 证明而设计。它允许开发者定义复杂的业务逻辑,同时保持高效的证明生成能力。 + +### **STARK 证明** +- **高扩展性**:支持批量处理大量交易,显著提升吞吐量。 +- **透明性**:不需要可信设置,任何人都可以验证其有效性。 +- **量子安全**:对抗量子计算攻击提供更高的安全保障。 + +## **优势** + +- **共享性**:SHARP 可同时为多个应用生成证明,提高计算资源利用率。 +- **高效性**:通过批量处理交易,显著降低单个应用的计算成本。 +- **安全性**:利用 STARK 技术,确保交易数据的隐私和完整性。 + +## **应用场景** + +SHARP 广泛应用于高扩展性和高安全性需求的场景,包括: +- 去中心化交易所 +- 支付系统 +- 区块链游戏 + +## **参考资料** + +- [解析StarkWare的架构与生态:估值80亿美元的扩展潜力](https://zhuanlan.zhihu.com/p/530091142) +- [万字拆解 StarkWare:80 亿美元的「以太坊扩展最佳团队」是否高估?](https://web3caff.com/zh/archives/18842) + +--- + +## **Cairo 示例代码** + +### 验证单个计算加密逻辑 + +以下是一个简单的 Cairo 程序,用于验证输入是否是某个数的平方。 + +```cairo +%builtins output + +func main{output_ptr : felt*}(): + let x = 3 + let y = 9 + assert x * x = y # 验证 y 是否为 x 的平方 + return () +end +``` + +### **代码解释**: +- **%builtins output**: 声明 Cairo 程序所需的内容构件。 +- **assert 语句**: 验证 `x` 的平方是否等于 `y`。 + +--- + +### 批量验证逻辑 + +以下展示了一个批量处理交易验证的 Cairo 示例: + +```cairo +%builtins range_check + +from starkware.cairo.common.serialize import serialize_word + +func validate_transactions{range_check_ptr}(transactions: felt*, n: felt) -> (result: felt): + alloc_locals + local sum = 0 + for i in range(n): + let transaction = [transactions + i] + assert transaction > 0 # 确保交易金额为正 + let sum = sum + transaction + end + return (sum) +end + +func main{range_check_ptr}(): + let (result) = validate_transactions([5, 10, 15], 3) + serialize_word(result) # 输出验证结果 + return () +end +``` + +### **代码解释**: +- **validate_transactions**:验证多个交易并计算总和。 +- **assert 语句**:确保每笔交易的金额为正。 +- **serialize_word**:序列化输出验证结果。 + + +### 批量验证并生成响应的加密哈希 + +以下示例显示如何为批量处理交易生成加密哈希: + +```cairo +%builtins range_check pedersen + +from starkware.cairo.common.pedersen_hash import pedersen + +func hash_transactions{range_check_ptr, pedersen_ptr}(transactions: felt*, n: felt) -> (hash: felt): + alloc_locals + local hash = 0 + for i in range(n): + let transaction = [transactions + i] + assert transaction > 0 + let hash = pedersen(hash, transaction) # 将交易金额加入哈希 + end + return (hash) +end + +func main{range_check_ptr, pedersen_ptr}(): + let transactions = [5, 10, 15] + let n = 3 + let (result) = hash_transactions(transactions, n) + return () +end +``` + + +## **Solidity 合约示例** + +以下是与 StarkEx 系统交互的 Solidity 合约,用于验证 STARK 证明。 + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IStarkVerifier { + function verifyProof(bytes calldata proof, uint256[] calldata publicInputs) external returns (bool); +} + +contract StarkProofVerifier { + IStarkVerifier public starkVerifier; + + constructor(address _verifier) { + starkVerifier = IStarkVerifier(_verifier); + } + + function verifyTransactionProof(bytes memory proof, uint256[] memory inputs) public view returns (bool) { + return starkVerifier.verifyProof(proof, inputs); + } +} + +### **批量验证交易的 Solidity 合约** + +以下扩展了批量验证功能,允许验证多个 STARK 证明: + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IStarkVerifier { + function verifyProof(bytes calldata proof, uint256[] calldata publicInputs) external returns (bool); +} + +contract BatchStarkProofVerifier { + IStarkVerifier public starkVerifier; + + constructor(address _verifier) { + starkVerifier = IStarkVerifier(_verifier); + } + + function verifyBatchProofs(bytes[] memory proofs, uint256[][] memory inputs) public view returns (bool[] memory) { + require(proofs.length == inputs.length, "Mismatched inputs and proofs length"); + + bool[] memory results = new bool[](proofs.length); + for (uint256 i = 0; i < proofs.length; i++) { + results[i] = starkVerifier.verifyProof(proofs[i], inputs[i]); + } + return results; + } +} +``` + +### **代码解释**: +- **批量验证方法**:`verifyBatchProofs` 接收多个证明和输入数组,依次验证每个证明。 +- **输入长度验证**:确保证明和输入的数组长度一致。 +- **返回值**:返回一个布尔数组,每个布尔值对应一个证明的验证结果。 + +--- + +## **链下与链上交互示例** + +以下展示了如何将链下生成的 STARK 证明提交至链上验证。 + +### **链下 Python 示例**: + +```python +from starkware.crypto.signature.fast_pedersen_hash import pedersen_hash +from starkware.starknet.services.api.gateway.transaction import InvokeFunction + +def generate_proof_and_inputs(transactions): + # 计算交易的哈希值 + hash_value = 0 + for tx in transactions: + assert tx > 0 # 验证交易金额 + hash_value = pedersen_hash(hash_value, tx) + + # 模拟生成 STARK 证明(伪代码) + proof = "mock_proof_data" + public_inputs = [hash_value] + return proof, public_inputs + +# 示例交易数据 +transactions = [5, 10, 15] +proof, public_inputs = generate_proof_and_inputs(transactions) + +# 提交到链上的交易示例 +invoke_tx = InvokeFunction( + contract_address="0xVerifierContractAddress", + entry_point_selector="verifyTransactionProof", + calldata=[proof, *public_inputs] +) +``` + +### **链上 Solidity 合约交互**: + +```solidity +// 提交验证交易 +contractAddress.verifyTransactionProof(proof, publicInputs); +``` + diff --git a/defi/DYDX/starkex.md b/defi/DYDX/starkex.md index 0822c32c0..0099a5dee 100644 --- a/defi/DYDX/starkex.md +++ b/defi/DYDX/starkex.md @@ -1,16 +1,39 @@ -## Starkex 合约 -dYdX: L2 Perpetual Smart Contract -dYdX: L2 On-Chain Operator - -https://github.com/starkware-libs/starkex-contracts/blob/StarkExchange-v4.5/scalable-dex/contracts/src/interactions/Deposits.sol -https://github.com/starkware-libs/starkex-contracts/blob/StarkExchange-v4.5/scalable-dex/contracts/src/interactions/Withdrawals.sol -Dydx页面显示 -https://dydx.l2beat.com/ -转账过程 -转账15USDT到 dYdX: L2 Perpetual Smart Contract(15-2022-11-15 12:10:59 PM) -L2 Perpetual Smart Contract -https://dashboard.tenderly.co/tx/mainnet/0x8ea3a15828fb5814091d3fc246920228c1c1480086f467978fe357f5bf3a2ac4?trace=0.8.1.1.0.7 -状态确认 -https://etherscan.io/tx/0x7985593db99c33fa851a196bd8b374221c6063fc654278c9d85d163c29dbcb06 -https://github.com/starkware-libs/starkex-contracts/blob/StarkExchange-v4.5/scalable-dex/contracts/src/starkex/interactions/UpdateState.sol performUpdateState -updateState(uint256[] publicInput, uint256[] applicationData) \ No newline at end of file +dYdX 为了提升交易性能和降低成本,采用了 StarkWare 开发的 StarkEx 作为其二层扩展方案。StarkEx 提供了更高效的交易处理能力,与其他扩展方案相比,其利用零知识证明技术的独特优势包括更低的 gas 费用和更高的扩展性。 + +**StarkEx 技术架构** + +StarkEx 利用 STARK(Scalable Transparent Argument of Knowledge)技术,为 dYdX 提供高效的交易处理能力。其核心组件包括: + +- **StarkEx 服务(StarkEx Service)**:处理用户的交易请求,并将其打包成批次,提升交易吞吐量。 +- **SHARP(SHARed Prover)**:为每个交易批次生成有效性证明,确保交易的真实性和数据隐私。 +- **Stark 验证器(Stark Verifier)**:在以太坊主网上验证这些证明的有效性,确保链上状态的准确性。 +- **Stark 合约(Stark Contract)**:在链上管理状态更新,保障整个系统的安全性和一致性。 + +用户的交易首先由 StarkEx Service 处理,随后 SHARP 生成相应的有效性证明。Stark Verifier 验证该证明后,Stark Contract 在以太坊主网上更新状态,从而实现快速且安全的交易处理。 + +**StarkEx 合约** + +StarkEx 的合约设计涵盖多个模块,用于处理存款、取款和状态更新: + +- **Deposits.sol**:管理用户存款的合约模块,用于将资产从 L1 转移到 StarkEx 系统。 + [查看代码](https://github.com/starkware-libs/starkex-contracts/blob/StarkExchange-v4.5/scalable-dex/contracts/src/interactions/Deposits.sol) +- **Withdrawals.sol**:负责处理用户从 StarkEx 系统提取资产到 L1 的逻辑。 + [查看代码](https://github.com/starkware-libs/starkex-contracts/blob/StarkExchange-v4.5/scalable-dex/contracts/src/interactions/Withdrawals.sol) +- **UpdateState.sol**:核心合约模块之一,用于执行状态更新操作,支持高效的批量交易验证。 + [查看代码](https://github.com/starkware-libs/starkex-contracts/blob/StarkExchange-v4.5/scalable-dex/contracts/src/starkex/interactions/UpdateState.sol) + +updateState 函数示例: +```solidity +updateState(uint256[] publicInput, uint256[] applicationData) +``` +此函数通过接收公共输入和应用数据,完成系统状态的更新。 + +**实际应用示例** + +- 在 dYdX 平台上执行交易时,用户资金被转入 **L2 Perpetual Smart Contract** 中。例如: + [转账交易示例](https://dashboard.tenderly.co/tx/mainnet/0x8ea3a15828fb5814091d3fc246920228c1c1480086f467978fe357f5bf3a2ac4?trace=0.8.1.1.0.7) +- 交易完成后,状态更新操作的执行记录可在以太坊区块链上验证: + [状态确认交易](https://etherscan.io/tx/0x7985593db99c33fa851a196bd8b374221c6063fc654278c9d85d163c29dbcb06) + +更多关于 dYdX 和 StarkEx 的细节可以参考其 [状态仪表盘](https://dydx.l2beat.com/),了解实时数据与合约交互记录。 +