您正在查看: OtherChain-优秀转载 分类下的文章

什么是 zk-SNARK?

Zcash 是 zk-SNARKs 的第一个广泛应用,zk-SNARKs 是一种新颖的零知识密码学形式。Zcash 强大的隐私保证源于这样一个事实,即 Zcash 中的屏蔽交易可以在区块链上完全加密,但仍然可以通过使用 zk-SNARK 证明在网络的共识规则下验证其有效性。

首字母缩略词 zk-SNARK 代表“零知识简洁的非交互式知识论证”,指的是一种证明结构,在这种结构中,人们可以证明拥有某些信息,例如一个秘密密钥,而无需透露该信息,并且之间没有任何交互证明者和验证者。

“零知识”证明允许一方(证明者)向另一方(验证者)证明一个陈述是真实的,而不会透露超出陈述本身有效性的任何信息。例如,给定一个随机数的散列,证明者可以说服验证者确实存在一个具有该散列值的数字,而无需透露它是什么。

在零知识“知识证明”中,证明者不仅可以说服验证者该数字存在,而且他们实际上知道这样一个数字——同样,无需透露有关该数字的任何信息。“Proof”和“Argument”之间的区别是非常技术性的,我们不在这里讨论。

“简洁”的零知识证明可以在几毫秒内得到验证,即使是关于非常大的程序的语句,证明长度也只有几百字节。在第一个零知识协议中,证明者和验证者必须来回通信多轮,但在“非交互式”结构中,证明由从证明者发送到验证者的单个消息组成。目前,生成非交互式且足够短以发布到区块链的零知识证明的最有效的已知方法是具有初始设置阶段,该阶段生成在证明者和验证者之间共享的公共参考字符串。我们将这个公共引用字符串称为系统的公共参数。

如果有人可以访问用于生成这些参数的秘密随机性,他们将能够创建对验证者来说看起来有效的虚假证明。对于 Zcash,这意味着恶意方可以制造假币。为了防止这种情况发生,Zcash 通过精心设计的多方仪式生成了公共参数。要了解有关我们的参数生成仪式的更多信息,并查看我们为防止暴露 Zcash 所必需的秘密随机性(例如,计算机被喷灯)而采取的预防措施,请访问我们的Paramgen 页面。要了解有关参数生成协议背后的数学原理的更多信息,请阅读我们关于该主题的博客文章或白皮书 ( 1 , 2 )。

如何在 Zcash 中构建 zk-SNARK

为了在 Zcash 中实现零知识隐私,根据网络的共识规则确定交易有效性的函数必须返回交易是否有效的答案,而不会泄露其执行计算的任何信息。这是通过在 zk-SNARKs 中编码一些网络的共识规则来完成的。在高层次上,zk-SNARK 的工作原理是首先将您想要证明的内容转换为关于了解某些代数方程的解的等效形式。在下一节中,我们简要概述了如何将确定有效交易的规则转换为方程,然后可以对候选解决方案进行评估,而无需向验证方程的各方透露任何敏感信息。

Computation → Arithmetic Circuit → R1CS → QAP → zk-SNARK

将我们的交易有效性函数转化为数学表示的第一步是将逻辑步骤分解为尽可能小的操作,从而创建一个“算术电路”。类似于布尔电路,其中程序被编译成离散的单步,如 AND、OR、NOT,当程序被转换为算术电路时,它被分解为由加法、减法等基本算术运算组成的单步,乘法和除法(尽管在我们的特殊情况下,我们将避免使用除法)。

以下是用于计算表达式 (a+b)(bc) 的算术电路的示例:

看看这样的电路,我们可以将输入值 a、b、c 视为在电线上从左到右“行进”到输出电线。我们的下一步是构建所谓的 1 级约束系统或 R1CS,以检查值是否“正确移动”。在这个例子中,R1CS 将确认,例如,从 b 和 c 进入的乘法门出来的值是 b*c。

在这个 R1CS 表示中,验证器必须检查许多约束——几乎电路的每条线路都有一个约束。(由于技术原因,事实证明我们只对来自乘法门的电线有约束。)在 2012 年关于该主题的论文中,Gennaro、Gentry、Parno 和 Raykova 提出了一种“将所有这些约束捆绑在一起”的好方法. 此方法使用称为二次算术程序 (QAP) 的电路表示。需要检查的单个约束现在在多项式之间而不是在数字之间。多项式可能非常大,但这没关系,因为当多项式之间不存在同一性时,它在大多数情况下都不会成立。因此,您只需检查两个多项式是否在随机选择的一个点上匹配 以便以高概率正确验证证明。

如果证明者事先知道验证者会选择检查哪一点,他们可能能够制作无效的多项式,但仍然满足该点的身份。与ZK-SNARKs,复杂的数学技术,如同态加密配对的椭圆曲线的用于评价多项式“盲目地” -即在不知道哪个点正被评估。上面描述的公共参数用于确定将检查哪个点,但采用加密形式,以便证明者和验证者都不知道它是什么。

到目前为止的描述主要解决了如何获得“SNARKs”中的 S 和 N——如何获得一个简短的、非交互式的、单消息证明——但没有解决“zk”(零知识)部分,它允许证明者维护其秘密输入的机密性。事实证明,在这个阶段,通过让证明者使用仍然满足所需身份的原始多项式的“随机移位”,可以轻松添加“zk”部分。

有关 Zcash 中 zk-SNARKs 背后关键概念的分步深入解释,请参阅我们的 SNARKs 解释器系列,其中包含以下帖子:

  1. 同态隐藏
  2. 多项式的盲评估
  3. 系数检验与假设的知识
  4. 如何使多项式的盲评估可验证
  5. 从计算到多项式
  6. 匹诺曹协议
  7. 椭圆曲线的配对

Zcash 使用bellman,这是一个用于 zk-SNARK 的 Rust 语言库。在 Sapling 升级之前,Zcash 使用了 C++ 库libsnark 的一个分支。要更深入地了解用于 Zcash 的 zk-SNARK 的协议,请参阅有关Pinocchio 协议的论文,该协议一直使用到 Sapling 升级,以及目前使用的Jens Groth 的 zk-SNARK。

如何应用 zk-SNARKs 来创建屏蔽交易

在比特币中,交易通过将发送者地址、接收者地址以及公共区块链上的输入和输出值链接起来来验证。Zcash 使用 zk-SNARKs 来证明有效交易的条件已得到满足,而无需透露有关所涉及的地址或价值的任何关键信息。屏蔽交易的发送者构建了一个证明来证明,很有可能:

  • 输入值总和为每个屏蔽传输的输出值。
  • 发件人证明他们拥有输入票据的私人消费密钥,从而赋予他们消费的权力。
  • 输入票据的私人支出密钥以加密方式链接到整个交易的签名,这样交易就不能被不知道这些私人密钥的一方修改。

此外,屏蔽交易必须满足下面描述的一些其他条件。
比特币跟踪未花费的交易输出 (UTXO) 以确定哪些交易是可以花费的。在 Zcash 中,UTXO 的屏蔽等价物称为“承诺”,花费承诺涉及揭示“无效者”。Zcash 节点保存所有已创建承诺的列表,以及已披露的所有无效者。承诺和无效符存储为哈希,以避免披露有关承诺的任何信息,或哪些无效符与哪些承诺相关。
对于由屏蔽支付创建的每个新票据,都会发布一个承诺,其中包含以下各项的散列:票据发送到的地址、发送的金额、该票据唯一的数字“rho”(后来用于派生无效符)和一个随机随机数。

Commitment = HASH(收件人地址,金额,rho,r)

当一个受保护的交易被花费时,发送者使用他们的花费密钥来发布一个无效符,它是来自尚未花费的现有承诺的秘密唯一编号(“rho”)的散列,并提供零知识证明证明他们被授权消费。该散列不能已经在跟踪区块链中每个节点保存的已用交易的无效符集合中。

Nullifier = HASH(支出密钥,rho)

屏蔽交易的零知识证明验证了,除了上面列出的条件外,以下断言也是正确的:

  • 对于每个输入注释,都存在显露的承诺。
  • 无效符和票据承诺计算正确。
  • 输出音符的无效符与任何其他音符的​​无效符发生冲突是不可行的。

除了用于控制地址的支出密钥之外,Zcash 还使用一组证明和验证密钥来创建和检查证明。这些密钥在上面讨论的公共参数仪式中生成,并在 Zcash 网络中的所有参与者之间共享。对于每个受保护的交易,发送方使用他们的证明密钥来生成他们输入有效的证明。矿工通过使用验证密钥检查证明者的计算来检查受保护的交易是否遵循共识规则。Zcash 的证明生成方式需要证明者预先做更多的工作,但它简化了验证,从而将主要的计算工作卸载给交易的创建者(这就是为什么创建屏蔽的 Zcash 交易可能需要几个秒,

Zcash 的屏蔽交易的隐私依赖于标准的、久经考验的密码学(散列函数和流密码),但它是 zk-SNARKs 的添加,与承诺和无效系统一起应用,允许屏蔽交易的发送者和接收者证明加密交易是有效的。为加密货币提供隐私的其他方法依赖于模糊交易之间的联系,但 Zcash 交易可以存储在完全加密的区块链上这一事实为加密货币应用开辟了新的可能性. 加密交易允许各方享受公共区块链的好处,同时仍然保护他们的隐私。计划中的未来升级将允许用户自行决定有选择地披露有关屏蔽交易的信息。有关Zcash 的未来计划,请参阅我们的 Zcash 近期博客文章。

有关如何在 Zcash 中构建屏蔽交易的更深入解释,请参阅我们关于屏蔽地址之间的交易如何工作的博客文章。有关当前 Zcash 协议的完整详细信息,请参阅我们的协议规范

zk-SNARKs 的未来应用

在 Zcash 中创建屏蔽交易只是 zk-SNARK 的许多可能应用中的一个例子。理论上,您可以使用 zk-SNARK 来验证任何关系,而不会泄露输入或泄漏信息。为复杂函数生成证明仍然是计算密集型的,对于许多应用程序来说不实用,但Zcash 团队正在推动优化 zk-SNARKs 的边界,并且已经通过更有效的实现开辟了新天地。

就目前而言,Zcash 的 zk-SNARK 实现可以添加到任何现有的分布式账本解决方案中,作为企业用例的零知识安全层Zcash 团队的科学家是世界上最博学的 zk-SNARKs 研究人员之一,并不断致力于提出新的应用程序并提高零知识协议的效率。如果你的业务需要,可以从零知识证明或具有强大的隐私blockchain应用的解决方案中受益,取得联系我们的业务发展团队。

原文:https://z.cash/technology/zksnarks/

Chia(奇亚)相关技术调研

P盘配置需求

CPU线程数>=P盘任务数2 (主频越高线程越多越快)
内存大小>=P盘任务数
4.5G
NVME固态硬盘(缓存盘)>=P盘任务数*332G (读写速度越大越快)
要加快P盘速度可以堆配置增加同时P盘任务数,或者用多台电脑。
P盘目录不能为中文,过程中日志内没有error报错就是正常的,等待即可

Chia(奇亚)资料库

Chia(奇亚)官网 https://www.chia.net/
区块浏览器 https://www.chiaexplorer.com/
Github源码库 https://github.com/Chia-Network
Chia(奇亚)商业白皮书中文版 https://www.kuangjiwan.com/news/news-2883.html
技术绿皮书 https://www.chia.net/assets/ChiaGreenPaper.pdf
Chia挖矿教程 https://www.kuangjiwan.com/news/news-2882.html
Chia(奇亚)常见问题解答 https://www.kuangjiwan.com/news/news-2884.html
Chia(奇亚)命令行参数 https://www.kuangjiwan.com/news/news-2886.html
Chia(奇亚)plot文件规格大小 https://www.kuangjiwan.com/news/news-2887.html
Chia减半计划表 https://www.kuangjiwan.com/news/news-2889.html
Chia多机集群教程 https://www.kuangjiwan.com/news/news-2891.htm
https://www.kuangjiwan.com/news/news-2882.html
https://www.kuangjiwan.com/news/news-2887.html
https://www.kuangjiwan.com/news/news-2891.html

基于Python的开源量化交易系统开发框架

开源地址: https://github.com/vnpy/vnpy

功能特点

  1. 全功能量化交易平台(vnpy.trader),整合了多种交易接口,并针对具体策略算法和功能开发提供了简洁易用的API,用于快速构建交易员所需的量化交易应用。

  2. 覆盖国内外所有交易品种的交易接口(vnpy.gateway):

    • 国内市场

      • CTP(ctp):国内期货、期权

      • CTP Mini(mini):国内期货、期权

      • CTP证券(sopt):ETF期权

      • 飞马(femas):国内期货

      • 恒生UFT(uft):国内期货、ETF期权

      • 飞创证券(sec):ETF期权

      • 宽睿(oes):国内证券(A股)、ETF期权

      • 中泰XTP(xtp):国内证券(A股)、ETF期权

      • 恒生期权(hsoption):ETF期权

      • 华鑫奇点(tora):国内证券(A股)、ETF期权

      • 飞鼠(sgit):黄金TD、国内期货

      • 金仕达黄金(ksgold):黄金TD

      • 鑫管家(xgj):期货资管

      • 融航(rohon):期货资管

      • 中汇亿达(comstar):银行间市场

    • 海外市场

      • 富途证券(futu):港股、美股

      • 老虎证券(tiger):全球证券、期货、期权、外汇等

      • Interactive Brokers(ib):全球证券、期货、期权、外汇等

      • 易盛9.0外盘(tap):全球期货

      • 直达期货(da):全球期货

      • MetaTrader 5(mt5):外汇、CFD、期货、股票

      • Alpaca(alpaca):美股(零佣金)

      • 佳兆业投资(kasia):港股

    • 数字货币

      • BitMEX(bitmex):数字货币期货、期权、永续合约

      • Bybit(bybit):数字货币永续合约

      • 币安(binance):数字货币现货

      • 币安永续(binances):数字货币永续合约

      • OKEX(okex):数字货币现货

      • OKEX永续(okexs):数字货币永续合约

      • OKEX期货(okexf):数字货币期货

      • OKEX期权(okexo):数字货币期权

      • 火币(huobi):数字货币现货

      • 火币期货(huobif):数字货币期货

      • 火币永续(huobis):数字货币永续

      • 火币期权(huobio):数字货币期权

      • Gate.io永续(gateios):数字货币永续合约

      • Deribit(deribit),数字货币期权、永续合约

      • Bitfinex(bitfinex):数字货币现货

      • Coinbase(coinbase):数字货币现货

      • Bitstamp(bitstamp):数字货币现货

      • 1Token(onetoken):数字货币券商(现货、期货)

    • 特殊应用

      • RPC服务(rpc):跨进程通讯接口,用于分布式架构
  3. 开箱即用的各类量化策略交易应用(vnpy.app):

    • cta_strategy:CTA策略引擎模块,在保持易用性的同时,允许用户针对CTA类策略运行过程中委托的报撤行为进行细粒度控制(降低交易滑点、实现高频策略)

    • cta_backtester:CTA策略回测模块,无需使用Jupyter Notebook,直接使用图形界面直接进行策略回测分析、参数优化等相关工作

    • spread_trading:价差交易模块,支持自定义价差,实时计算价差行情和持仓,支持半自动价差算法交易以及全自动价差策略交易两种模式

    • option_master:期权交易模块,针对国内期权市场设计,支持多种期权定价模型、隐含波动率曲面计算、希腊值风险跟踪等功能

    • portfolio_strategy:组合策略模块,面向同时交易多合约的量化策略(Alpha、期权套利等),提供历史数据回测和实盘自动交易功能

    • algo_trading:算法交易模块,提供多种常用的智能交易算法:TWAP、Sniper、Iceberg、BestLimit等,支持对接外部智能算法交易服务(如金纳算法)

    • script_trader:脚本策略模块,针对多标的组合类交易策略设计,同时也可以直接在命令行中实现REPL指令形式的交易,不支持回测功能

    • market_radar:市场雷达模块,允许用户基于自定义的公式实时计算任意合约组合数据,公式支持标准Python运算语法以及内置函数

    • paper_account:模拟交易模块,纯本地化实现的模拟交易功能,基于交易接口获取的实时行情进行委托撮合,提供委托成交推送以及持仓记录

    • chart_wizard:K线图表模块,基于RQData数据服务(期货)或者交易接口(数字货币)获取历史数据,并结合Tick推送显示实时行情变化

    • portfolio_manager:投资组合模块,面向各类基本面交易策略,以独立的策略子账户为基础,提供交易仓位的自动跟踪以及盈亏实时统计功能

    • rpc_service:RPC服务模块,允许将某一VN Trader进程启动为服务端,作为统一的行情和交易路由通道,允许多客户端同时连接,实现多进程分布式系统

    • data_manager:历史数据管理模块,通过树形目录查看数据库中已有的数据概况,选择任意时间段数据查看字段细节,支持CSV文件的数据导入和导出

    • data_recorder:行情记录模块,基于图形界面进行配置,根据需求实时录制Tick或者K线行情到数据库中,用于策略回测或者实盘初始化

    • excel_rtd:Excel RTD(Real Time Data)实时数据服务,基于pyxll模块实现在Excel中获取各类数据(行情、合约、持仓等)的实时推送更新

    • risk_manager:风险管理模块,提供包括交易流控、下单数量、活动委托、撤单总数等规则的统计和限制,有效实现前端风控功能