Skip to content

Commit 984d3a5

Browse files
authored
feat: add SHARP of starEX (Dapp-Learning-DAO#1224)
* wip: add starkEX process * wip: add sharp * feature: add BatchStarkProofVerifier example * docs: add example and dydx explorer
1 parent b41e56c commit 984d3a5

File tree

2 files changed

+269
-16
lines changed

2 files changed

+269
-16
lines changed

defi/DYDX/shard.md

+230
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
# SHARP(Shared Prover)技术概述
2+
3+
SHARP 是 StarkWare 开发的一种共享证明服务,旨在为多个应用生成有效性证明。它基于 STARK(Scalable Transparent Argument of Knowledge)技术,提供高效、安全的零矩矢证明。
4+
5+
## **工作原理**
6+
7+
SHARP 的主要功能是接收来自不同应用的证明请求,并生成相应的 STARK 证明。其工作流程如下:
8+
9+
1. **接收请求**:应用程序将交易数据和执行结果发送至 SHARP。
10+
2. **生成证明**:SHARP 使用 Cairo 语言编写的程序,对数据进行处理,生成 STARK 证明。
11+
3. **提交证明**:将生成的证明提交到以太坊主网,由链上合约验证其有效性。
12+
13+
## **技术细节**
14+
15+
### **Cairo 语言**
16+
SHARP 使用 Cairo 编写验证逻辑。Cairo 是一种图灵完备的编程语言,专为生成高效的 STARK 证明而设计。它允许开发者定义复杂的业务逻辑,同时保持高效的证明生成能力。
17+
18+
### **STARK 证明**
19+
- **高扩展性**:支持批量处理大量交易,显著提升吞吐量。
20+
- **透明性**:不需要可信设置,任何人都可以验证其有效性。
21+
- **量子安全**:对抗量子计算攻击提供更高的安全保障。
22+
23+
## **优势**
24+
25+
- **共享性**:SHARP 可同时为多个应用生成证明,提高计算资源利用率。
26+
- **高效性**:通过批量处理交易,显著降低单个应用的计算成本。
27+
- **安全性**:利用 STARK 技术,确保交易数据的隐私和完整性。
28+
29+
## **应用场景**
30+
31+
SHARP 广泛应用于高扩展性和高安全性需求的场景,包括:
32+
- 去中心化交易所
33+
- 支付系统
34+
- 区块链游戏
35+
36+
## **参考资料**
37+
38+
- [解析StarkWare的架构与生态:估值80亿美元的扩展潜力](https://zhuanlan.zhihu.com/p/530091142)
39+
- [万字拆解 StarkWare:80 亿美元的「以太坊扩展最佳团队」是否高估?](https://web3caff.com/zh/archives/18842)
40+
41+
---
42+
43+
## **Cairo 示例代码**
44+
45+
### 验证单个计算加密逻辑
46+
47+
以下是一个简单的 Cairo 程序,用于验证输入是否是某个数的平方。
48+
49+
```cairo
50+
%builtins output
51+
52+
func main{output_ptr : felt*}():
53+
let x = 3
54+
let y = 9
55+
assert x * x = y # 验证 y 是否为 x 的平方
56+
return ()
57+
end
58+
```
59+
60+
### **代码解释**
61+
- **%builtins output**: 声明 Cairo 程序所需的内容构件。
62+
- **assert 语句**: 验证 `x` 的平方是否等于 `y`
63+
64+
---
65+
66+
### 批量验证逻辑
67+
68+
以下展示了一个批量处理交易验证的 Cairo 示例:
69+
70+
```cairo
71+
%builtins range_check
72+
73+
from starkware.cairo.common.serialize import serialize_word
74+
75+
func validate_transactions{range_check_ptr}(transactions: felt*, n: felt) -> (result: felt):
76+
alloc_locals
77+
local sum = 0
78+
for i in range(n):
79+
let transaction = [transactions + i]
80+
assert transaction > 0 # 确保交易金额为正
81+
let sum = sum + transaction
82+
end
83+
return (sum)
84+
end
85+
86+
func main{range_check_ptr}():
87+
let (result) = validate_transactions([5, 10, 15], 3)
88+
serialize_word(result) # 输出验证结果
89+
return ()
90+
end
91+
```
92+
93+
### **代码解释**
94+
- **validate_transactions**:验证多个交易并计算总和。
95+
- **assert 语句**:确保每笔交易的金额为正。
96+
- **serialize_word**:序列化输出验证结果。
97+
98+
99+
### 批量验证并生成响应的加密哈希
100+
101+
以下示例显示如何为批量处理交易生成加密哈希:
102+
103+
```cairo
104+
%builtins range_check pedersen
105+
106+
from starkware.cairo.common.pedersen_hash import pedersen
107+
108+
func hash_transactions{range_check_ptr, pedersen_ptr}(transactions: felt*, n: felt) -> (hash: felt):
109+
alloc_locals
110+
local hash = 0
111+
for i in range(n):
112+
let transaction = [transactions + i]
113+
assert transaction > 0
114+
let hash = pedersen(hash, transaction) # 将交易金额加入哈希
115+
end
116+
return (hash)
117+
end
118+
119+
func main{range_check_ptr, pedersen_ptr}():
120+
let transactions = [5, 10, 15]
121+
let n = 3
122+
let (result) = hash_transactions(transactions, n)
123+
return ()
124+
end
125+
```
126+
127+
128+
## **Solidity 合约示例**
129+
130+
以下是与 StarkEx 系统交互的 Solidity 合约,用于验证 STARK 证明。
131+
132+
```solidity
133+
// SPDX-License-Identifier: MIT
134+
pragma solidity ^0.8.0;
135+
136+
interface IStarkVerifier {
137+
function verifyProof(bytes calldata proof, uint256[] calldata publicInputs) external returns (bool);
138+
}
139+
140+
contract StarkProofVerifier {
141+
IStarkVerifier public starkVerifier;
142+
143+
constructor(address _verifier) {
144+
starkVerifier = IStarkVerifier(_verifier);
145+
}
146+
147+
function verifyTransactionProof(bytes memory proof, uint256[] memory inputs) public view returns (bool) {
148+
return starkVerifier.verifyProof(proof, inputs);
149+
}
150+
}
151+
152+
### **批量验证交易的 Solidity 合约**
153+
154+
以下扩展了批量验证功能,允许验证多个 STARK 证明:
155+
156+
```solidity
157+
// SPDX-License-Identifier: MIT
158+
pragma solidity ^0.8.0;
159+
160+
interface IStarkVerifier {
161+
function verifyProof(bytes calldata proof, uint256[] calldata publicInputs) external returns (bool);
162+
}
163+
164+
contract BatchStarkProofVerifier {
165+
IStarkVerifier public starkVerifier;
166+
167+
constructor(address _verifier) {
168+
starkVerifier = IStarkVerifier(_verifier);
169+
}
170+
171+
function verifyBatchProofs(bytes[] memory proofs, uint256[][] memory inputs) public view returns (bool[] memory) {
172+
require(proofs.length == inputs.length, "Mismatched inputs and proofs length");
173+
174+
bool[] memory results = new bool[](proofs.length);
175+
for (uint256 i = 0; i < proofs.length; i++) {
176+
results[i] = starkVerifier.verifyProof(proofs[i], inputs[i]);
177+
}
178+
return results;
179+
}
180+
}
181+
```
182+
183+
### **代码解释**
184+
- **批量验证方法**`verifyBatchProofs` 接收多个证明和输入数组,依次验证每个证明。
185+
- **输入长度验证**:确保证明和输入的数组长度一致。
186+
- **返回值**:返回一个布尔数组,每个布尔值对应一个证明的验证结果。
187+
188+
---
189+
190+
## **链下与链上交互示例**
191+
192+
以下展示了如何将链下生成的 STARK 证明提交至链上验证。
193+
194+
### **链下 Python 示例**
195+
196+
```python
197+
from starkware.crypto.signature.fast_pedersen_hash import pedersen_hash
198+
from starkware.starknet.services.api.gateway.transaction import InvokeFunction
199+
200+
def generate_proof_and_inputs(transactions):
201+
# 计算交易的哈希值
202+
hash_value = 0
203+
for tx in transactions:
204+
assert tx > 0 # 验证交易金额
205+
hash_value = pedersen_hash(hash_value, tx)
206+
207+
# 模拟生成 STARK 证明(伪代码)
208+
proof = "mock_proof_data"
209+
public_inputs = [hash_value]
210+
return proof, public_inputs
211+
212+
# 示例交易数据
213+
transactions = [5, 10, 15]
214+
proof, public_inputs = generate_proof_and_inputs(transactions)
215+
216+
# 提交到链上的交易示例
217+
invoke_tx = InvokeFunction(
218+
contract_address="0xVerifierContractAddress",
219+
entry_point_selector="verifyTransactionProof",
220+
calldata=[proof, *public_inputs]
221+
)
222+
```
223+
224+
### **链上 Solidity 合约交互**
225+
226+
```solidity
227+
// 提交验证交易
228+
contractAddress.verifyTransactionProof(proof, publicInputs);
229+
```
230+

defi/DYDX/starkex.md

+39-16
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,39 @@
1-
## Starkex 合约
2-
dYdX: L2 Perpetual Smart Contract
3-
dYdX: L2 On-Chain Operator
4-
5-
https://github.com/starkware-libs/starkex-contracts/blob/StarkExchange-v4.5/scalable-dex/contracts/src/interactions/Deposits.sol
6-
https://github.com/starkware-libs/starkex-contracts/blob/StarkExchange-v4.5/scalable-dex/contracts/src/interactions/Withdrawals.sol
7-
Dydx页面显示
8-
https://dydx.l2beat.com/
9-
转账过程
10-
转账15USDT到 dYdX: L2 Perpetual Smart Contract(15-2022-11-15 12:10:59 PM)
11-
L2 Perpetual Smart Contract
12-
https://dashboard.tenderly.co/tx/mainnet/0x8ea3a15828fb5814091d3fc246920228c1c1480086f467978fe357f5bf3a2ac4?trace=0.8.1.1.0.7
13-
状态确认
14-
https://etherscan.io/tx/0x7985593db99c33fa851a196bd8b374221c6063fc654278c9d85d163c29dbcb06
15-
https://github.com/starkware-libs/starkex-contracts/blob/StarkExchange-v4.5/scalable-dex/contracts/src/starkex/interactions/UpdateState.sol performUpdateState
16-
updateState(uint256[] publicInput, uint256[] applicationData)
1+
dYdX 为了提升交易性能和降低成本,采用了 StarkWare 开发的 StarkEx 作为其二层扩展方案。StarkEx 提供了更高效的交易处理能力,与其他扩展方案相比,其利用零知识证明技术的独特优势包括更低的 gas 费用和更高的扩展性。
2+
3+
**StarkEx 技术架构**
4+
5+
StarkEx 利用 STARK(Scalable Transparent Argument of Knowledge)技术,为 dYdX 提供高效的交易处理能力。其核心组件包括:
6+
7+
- **StarkEx 服务(StarkEx Service)**:处理用户的交易请求,并将其打包成批次,提升交易吞吐量。
8+
- **SHARP(SHARed Prover)**:为每个交易批次生成有效性证明,确保交易的真实性和数据隐私。
9+
- **Stark 验证器(Stark Verifier)**:在以太坊主网上验证这些证明的有效性,确保链上状态的准确性。
10+
- **Stark 合约(Stark Contract)**:在链上管理状态更新,保障整个系统的安全性和一致性。
11+
12+
用户的交易首先由 StarkEx Service 处理,随后 SHARP 生成相应的有效性证明。Stark Verifier 验证该证明后,Stark Contract 在以太坊主网上更新状态,从而实现快速且安全的交易处理。
13+
14+
**StarkEx 合约**
15+
16+
StarkEx 的合约设计涵盖多个模块,用于处理存款、取款和状态更新:
17+
18+
- **Deposits.sol**:管理用户存款的合约模块,用于将资产从 L1 转移到 StarkEx 系统。
19+
[查看代码](https://github.com/starkware-libs/starkex-contracts/blob/StarkExchange-v4.5/scalable-dex/contracts/src/interactions/Deposits.sol)
20+
- **Withdrawals.sol**:负责处理用户从 StarkEx 系统提取资产到 L1 的逻辑。
21+
[查看代码](https://github.com/starkware-libs/starkex-contracts/blob/StarkExchange-v4.5/scalable-dex/contracts/src/interactions/Withdrawals.sol)
22+
- **UpdateState.sol**:核心合约模块之一,用于执行状态更新操作,支持高效的批量交易验证。
23+
[查看代码](https://github.com/starkware-libs/starkex-contracts/blob/StarkExchange-v4.5/scalable-dex/contracts/src/starkex/interactions/UpdateState.sol)
24+
25+
updateState 函数示例:
26+
```solidity
27+
updateState(uint256[] publicInput, uint256[] applicationData)
28+
```
29+
此函数通过接收公共输入和应用数据,完成系统状态的更新。
30+
31+
**实际应用示例**
32+
33+
- 在 dYdX 平台上执行交易时,用户资金被转入 **L2 Perpetual Smart Contract** 中。例如:
34+
[转账交易示例](https://dashboard.tenderly.co/tx/mainnet/0x8ea3a15828fb5814091d3fc246920228c1c1480086f467978fe357f5bf3a2ac4?trace=0.8.1.1.0.7)
35+
- 交易完成后,状态更新操作的执行记录可在以太坊区块链上验证:
36+
[状态确认交易](https://etherscan.io/tx/0x7985593db99c33fa851a196bd8b374221c6063fc654278c9d85d163c29dbcb06)
37+
38+
更多关于 dYdX 和 StarkEx 的细节可以参考其 [状态仪表盘](https://dydx.l2beat.com/),了解实时数据与合约交互记录。
39+

0 commit comments

Comments
 (0)