|
| 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 | +以下是一个简单的 Cairo 程序,用于验证输入是否是某个数的平方。 |
| 46 | + |
| 47 | +```cairo |
| 48 | +%builtins output |
| 49 | +
|
| 50 | +func main{output_ptr : felt*}(): |
| 51 | + let x = 3 |
| 52 | + let y = 9 |
| 53 | + assert x * x = y # 验证 y 是否为 x 的平方 |
| 54 | + return () |
| 55 | +end |
| 56 | +``` |
| 57 | + |
| 58 | +### **代码解释**: |
| 59 | +- **%builtins output**: 声明 Cairo 程序所需的内建组件。 |
| 60 | +- **assert 语句**: 验证 `x` 的平方是否等于 `y`。 |
| 61 | + |
| 62 | +--- |
| 63 | + |
| 64 | +### **批量验证逻辑** |
| 65 | + |
| 66 | +以下展示了一个批量处理交易验证的 Cairo 示例: |
| 67 | + |
| 68 | +```cairo |
| 69 | +%builtins range_check |
| 70 | +
|
| 71 | +from starkware.cairo.common.serialize import serialize_word |
| 72 | +
|
| 73 | +func validate_transactions{range_check_ptr}(transactions: felt*, n: felt) -> (result: felt): |
| 74 | + alloc_locals |
| 75 | + local sum = 0 |
| 76 | + for i in range(n): |
| 77 | + let transaction = [transactions + i] |
| 78 | + assert transaction > 0 # 确保交易金额为正 |
| 79 | + let sum = sum + transaction |
| 80 | + end |
| 81 | + return (sum) |
| 82 | +end |
| 83 | +
|
| 84 | +func main{range_check_ptr}(): |
| 85 | + let (result) = validate_transactions([5, 10, 15], 3) |
| 86 | + serialize_word(result) # 输出验证结果 |
| 87 | + return () |
| 88 | +end |
| 89 | +``` |
| 90 | + |
| 91 | +### **代码解释**: |
| 92 | +- **validate_transactions**: 验证多个交易并计算总和。 |
| 93 | +- **assert 语句**: 确保每笔交易的金额为正。 |
| 94 | +- **serialize_word**: 序列化输出验证结果。 |
| 95 | + |
| 96 | +--- |
| 97 | + |
| 98 | +## **Solidity 合约示例** |
| 99 | + |
| 100 | +以下是与 StarkEx 系统交互的 Solidity 合约,用于验证 STARK 证明。 |
| 101 | + |
| 102 | +```solidity |
| 103 | +// SPDX-License-Identifier: MIT |
| 104 | +pragma solidity ^0.8.0; |
| 105 | +
|
| 106 | +interface IStarkVerifier { |
| 107 | + function verifyProof(bytes calldata proof, uint256[] calldata publicInputs) external returns (bool); |
| 108 | +} |
| 109 | +
|
| 110 | +contract StarkProofVerifier { |
| 111 | + IStarkVerifier public starkVerifier; |
| 112 | +
|
| 113 | + constructor(address _verifier) { |
| 114 | + starkVerifier = IStarkVerifier(_verifier); |
| 115 | + } |
| 116 | +
|
| 117 | + function verifyTransactionProof(bytes memory proof, uint256[] memory inputs) public view returns (bool) { |
| 118 | + return starkVerifier.verifyProof(proof, inputs); |
| 119 | + } |
| 120 | +} |
| 121 | +``` |
| 122 | + |
| 123 | +### **代码解释**: |
| 124 | +- **IStarkVerifier**: 定义了 Stark 验证接口。 |
| 125 | +- **verifyTransactionProof**: 接收 STARK 证明和公共输入,并调用验证器验证其有效性。 |
| 126 | + |
| 127 | +--- |
| 128 | + |
| 129 | +## **总结** |
| 130 | + |
| 131 | +- **Cairo** 提供了灵活的编程能力,用于编写高效的验证逻辑。 |
| 132 | +- **Solidity 合约** 负责在链上验证 SHARP 生成的 STARK 证明。 |
| 133 | + |
| 134 | +SHARP 是一个强大的共享证明工具,为区块链应用提供了高效、安全的扩展能力。 |
0 commit comments