自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 uniswap - V3技术白皮书导读

uniswap V3一公布就引发广泛关注。相对V2来说,逻辑和代码都复杂一些。V3的核心是通过盘口区间提供流动性(集中式流动性),解决LP提供流动性时的资金利用率的问题。什么是资金利用率?V3如何推导区间流动性的计算公式?如何理解流动性?如何计算swap费用?本文先从V3技术白皮书详细分析开始。先给出一些uniswap官方有关V3的资料:V3官方介绍https://uniswap.org/blog/uniswap-v3/技术白皮书https://uniswap.org/whitepaper-v3.

2021-06-05 12:24:12 435

原创 Uniswap - 智能合约V2代码导读

区块链技术是非常有趣的。更有趣的是,区块链技术让交易变得更丰富多彩。从中心化交易,到去中心化交易,再到去中心化AMM。每一种改变都尝试解决之前的问题,但本身也不是完美的。也值得一提的,每一点点进步都非常不容易。有种不积跬步,无以至千里的感觉。很久之前,就看了Uniswap协议,当时理论分析,流动性提供者在价格波动的情况下,收入微薄。在这样的协议下,流动性是否充足,交易是否足够多,交易费是否有足够的吸引力等等,我觉得都是问题。区块链 - 深入理解Uniswap协议没想到,Uniswap今年成了热点。在流

2021-06-05 12:19:56 10062

原创 Filecoin - Precommit2计算介绍

Sector计算的部分分为Precommit1和Precommit2两部分。两部分合在一起,称为SDR算法。整个SDR算法的相关计算在之前的文章介绍过。本文着重介绍一下Precommit2的计算逻辑。Precommit2计算分为两部分:1/ Column Hash计算以及Merkle树构造 2/ Replica计算以及Merkle树的构造。相关的逻辑请查看rust-fil-proofs/storage-proofs/porep/src/stacked/vanilla/proof.rs中的transform

2021-05-16 16:28:28 896

原创 Filecoin - Trapdoor团队发现PoREP漏洞

Trapdoor团队发现PoREP电路V25版本存在严重漏洞。利用该漏洞,SDR(Precommit1)的计算可以直接省略。所有Sector的Replica的数据也只要存储一份。Trapdoor团队在第一时间和官方沟通后,官方已经快速提交补丁:PoREP电路也从V25版本,升级到V26。本文仔细讲讲该严重漏洞的攻击原理。众所周知,Sector数据会经过Labeling, Column Hash以及Encoding计算生成最后的Replica数据(Precommit1和Precommit2阶段)。整个计

2021-05-16 16:12:43 412

原创 Filecoin - Sector状态管理逻辑

好久不看go语言的代码了,最近有空换换脑子,看看Sector的状态管理,纯go语言实现。看看大型项目的代码设计,对代码以及项目的设计开发有莫大的好处。Lotus的go语言部分的最新的代码,采用模块化设计。Lotus的代码也是一步步演进的,第一版的代码也是所有的逻辑耦合在一起,后面才逐步的模块化。Lotus Miner将用户需要存储的数据“打包”成一个个Sector,并对Sector进行处理。本文就讲讲Sector的状态管理。模块框架Sector状态管理相关的模块如下:Sector的状态管理基于状态

2021-05-16 16:05:53 1038 2

原创 Filecoin - 深入理解WindowPoSt

Lotus的PoSt算法,分成两个场景:Winning PoSt和Window PoSt。Winning PoSt是在出块时,对已经提交的Sector数据进行证明。Window PoSt,每隔一段时间对提交的Sector的数据进行证明,证明Sector数据依然正确保存。Winning PoSt的逻辑,可以查看之前文章:https://blog.csdn.net/StarLi2020/article/details/108816235?spm=1001.2014.3001.5502本文详细介绍Window

2021-04-18 10:37:23 2949

原创 uniswap - V3技术白皮书导读

uniswap V3一公布就引发广泛关注。相对V2来说,逻辑和代码都复杂一些。V3的核心是通过盘口区间提供流动性(集中式流动性),解决LP提供流动性时的资金利用率的问题。什么是资金利用率?V3如何推导区间流动性的计算公式?如何理解流动性?如何计算swap费用?本文先从V3技术白皮书详细分析开始。先给出一些uniswap官方有关V3的资料:V3官方介绍https://uniswap.org/blog/uniswap-v3/技术白皮书https://uniswap.org/whitepaper-v3.

2021-04-18 10:27:06 1781 1

原创 Filecoin - winningPoSt逻辑介绍

Lotus的PoSt的部分从electionPoSt变成两种新的PoSt,一种是winningPoSt,一种是windowPoSt。先讲讲winningPoSt吧。winningPoSt,顾名思义,在winning的时候进行的PoSt。所谓的winning,也就是获取出块权。简单的说,winningPoSt,随机抽查的一个sector,该sector中的66条随机抽查的merkle path都能正确。接着讲讲代码逻辑。从Lotus的go的代码说起。一切从出块开始 - lotus/miner/miner.g

2020-09-26 19:56:54 2317 1

原创 Filecoin - 深入理解NSE算法

PoREP算法,从window SDR改成SDR,时间并不长。新的PoREP算法NSE已经在酝酿中。NSE算法的全称:Narrow Stacked Expander PoRep。在rust-fil-proofs的feat/nse分支,可以查看NSE算法的实现。文章使用的源代码的最后一个提交信息如下:commit af4bdcb6da4b371230eed441218c459e99d32068 (HEAD -> feat/nse, origin/feat/nse)Merge: 7e7eab2 57

2020-09-26 19:54:09 1253

原创 Filecoin - 深入理解SDR算法

Lotus的Sector处理的算法,从window SDR切换到了SDR。所谓的SDR,就是Stacked DRG (Depth Robust Graph,深度鲁棒图)。重点,就在于算法去掉了“window”。切换算法后,在intel的CPU上,Sector处理(Precommit phase1)阶段的时间非常长,超过了30个小时。Filecoin官方,推荐AMD的RX 3970x,Sector处理时间在4个小时左右。本文深入SDR的逻辑,分析Sector处理慢的原因。相关的逻辑实现在rust-fil-pr

2020-07-25 12:14:02 5257

原创 零知识证明 - 深入理解ZoKrates

2018年 Jacob Eberhardt和Stefan Tai两位德国柏林工业大学博士生,提出了链下计算/链上验证的处理框架,并提供了在以太坊上的整个框架的工具链。链下计算/链上验证的思想很早就有,但是能提供比较完善的工具链的实属难得。目前ZoKrates使用zk-SNARK算法实现零知识证明。https://www.ise.tu-berlin.de/fileadmin/fg308/publications/2018/2018_eberhardt_ZoKrates.pdf本文介绍ZoKrates的思想

2020-07-25 12:05:33 1398

原创 零知识证明 - ethsnarks源代码导读

ethsnarks在libsnark的基础上,实现了以太坊上与zkSNARK相关的智能合约和电路。ethsnarks本身也是libsnark应用很好的学习示例。ethsnarks的源代码地址:https://github.com/HarryR/ethsnarks.git本文中使用的ethsnarks源代码的最后一个commit如下:commit 9adc64355adb9154ba5042c0fadf84c438b8a08aAuthor: Wanseob Lim <email@wanseob

2020-07-15 00:09:08 1207

原创 零知识证明 - bellman源码分析

bellman是Zcash团队用Rust语言开发的一个zk-SNARK软件库,实现了Groth16算法。项目地址:https://github.com/zcash/librustzcash/tree/master/bellman1. 总体流程总体流程大致可以分为以下几个步骤:1.将问题多项式拍平(flatten),构建对应的电路(Circuit)。这一步是由上层应用程序配置的。2.根据电路生成R1CS(Rank 1 Constraint System)3.将R1CS转化为QAP(Quadrat

2020-07-15 00:03:43 2190 3

原创 零知识证明 - libsnark源代码分析

libsnark源代码,建议想深入零知识证明的小伙伴都读一读。Bellman库主要围绕Groth16算法,libsnark给出了SNARK相关算法的全貌,各种Relation,Language,Proof System。为了更好的生成R1CS电路,libsnark抽象出protoboard和gadget,方便开发者快速搭建电路。本文中使用的libsnark源代码的最后一个commit如下:commit 477c9dfd07b280e42369f82f89c08416319e24aeAuthor: Ma

2020-05-31 17:48:29 2515 3

原创 零知识证明 - 一种新型的Merkle树(Shrubs)

这几天在日本大阪正在举办Devcon 5。议题中有个topic吸引我的眼球:Shrubs - A New Gas Efficient Privacy Protocol在以太坊上,传统的Merkle树(深度为33)添加一个叶子节点,除了计算33次Hash函数外,还需要更新33个节点(也就是需要读并且更新33个存储空间)。而更新一个节点的存储费用是昂贵的。更新33个256bit的存储,大约需要180w的GAS费用。Shrubs就提出了一种Merkle树的变种,每次添加一个叶子节点,只需要O(1)次存储更

2020-05-31 17:43:18 1281 1

原创 零知识证明 - zkSNARK的Nullifier攻击

早上很多朋友@我,安比实验室公众号发表了一篇文章zkSNARK的“输入假名”的攻击。迅速看了看,很赞。这个攻击原理其实比较简单,但是,不深入理解zkSNARK以及使用场景的朋友确实很难发现和理解。本文讲讲我对这个攻击的分析和理解。源于三天前这种攻击方式一直潜伏着,没被发现。直到三天前:俄罗斯开发者poma,在项目semaphore提交了一个issue,公开了这个攻击方法。poma同时也在kovan测试网络验证了这种攻击方式。先从semaphore项目的代码开始:话说,semaphore是个很有

2020-05-23 22:40:51 648

原创 零知识证明 - Groth16计算详解

Groth16算法是zkSNARK的典型算法,目前在ZCash,Filecoin,Coda等项目中使用。本文从计算量的角度详细分析Groth16计算。Groth16计算分成三个部分:Setup针对电路生成Pk/Vk(证明/验证密钥),Prove针对电路,在给定witness/statement的情况下生成证明,Verify通过Vk验证证明是否正确。所有的术语和数学符号和Groth16论文保持一致(On the Size of Pairing-based Non-interactive Arguments,

2020-05-23 22:29:31 5424

原创 零知识证明 - Groth16算法介绍

看zk-SNARK的文章或者资料的时候,经常会碰到一些算法名称,比如Groth16,GGPR13等等。这些名称是由算法提出的作者名称或者名称首字母以及相应的年份组成。Groth16,是由Jens Groth在2016年提出的算法。GGPR13,是由Rosario Gennaro,Craig Gentry,Bryan Parno,Mariana Raykova在2013年提出的算法。零知识证明(z...

2020-04-19 11:31:06 2919 2

原创 零知识证明 - 基于多项式构造零知识证明

理解为什么以及如何基于多项式构造零知识证明,这篇文章讲的比较清楚。虽然文章只讲到了皮诺曹协议,但是足够理解基于多项式构造零知识证明的本质。想深入零知识证明的小伙伴都建议看看。http://petkus.info/papers/WhyAndHowZkSnarkWorks.pdf以下是我对这篇文章的理解和总结。原文由浅入深地从一个个简单版本,慢慢推导出实用的证明协议。协议0 - 直观版本随机抽...

2020-04-03 21:52:43 1637

原创 零知识证明 - 从QSP到QAP

前一段时间,介绍了零知识证明的入门知识,通过QSP问题证明来验证另外一个NP问题的解。最近在看QAP问题相关的文章和资料,这篇文章分享一下QAP问题的理解。0 背景介绍QSP/QAP问题的思想都是出自2012年一篇论文:Quadratic Span Programs and Succinct NIZKs without PCPs。论文的下载地址:https://eprint.iacr.org/...

2020-03-24 20:41:00 2991

原创 零知识证明 - zkSNARK入门

网络上讲解零知识证明的文章就不多,这些文章要不太浅显,要不太深入,很少有能给入门者整体框架上的认识。比如,阿里巴巴零知识证明就是一个非常好的通俗理解零知识证明的例子:阿里巴巴被强盗抓住,为了保命,他需要向强盗证明自己拥有打开石门的密码,同时又不能把密码告诉强盗。他想出一个解决办法,先让强盗离开自己一箭之地,距离足够远让强盗无法听到口令,足够近让阿里巴巴无法在强盗的弓箭下逃生。阿里巴巴就在这个距...

2020-03-21 19:59:37 1641

原创 零知识证明 - 椭圆曲线基础

对椭圆曲线的学习,个人推荐如下的链接,没有太多的术语,解释的比较清楚。https://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/https://andrea.corbellini.name/2015/05/23/elliptic-curve-cryptography-f...

2020-03-11 17:26:12 2511 2

原创 零知识证明 - Filecoin存储证明了什么?

2019年,Filecoin算是火热的区块链项目。3月份,Filecoin公开了相关的代码后,第一时间看了看Filecoin的代码。区块链部分的代码,比较简单,偏功能验证。个人对存储证明的部分比较感兴趣,也就是FPS。采用零知识证明技术,对存储进行证明是个大胆的尝试。Filecoin团队,在2019年下半年出了个Lotus(莲花)测试版本。测试网络的硬件配置比较高,256G内存 + Nvidi...

2020-02-29 00:25:27 3679 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除