Erasure Coding 纠删码原理( Near Protocol )
Erasure Code 是什么1、Erasure Code是一种编码技术,它可以将 n 份原始数据,增加 m 份数据,并能通过n+m份中的任意 n 份数据,还原为原始数据。即如果有任意小于等于 m 份的数据失效,仍然能通过剩下的数据还原出来。 2、纠删码技术在分布式存储系统中的应用主要有三类 (1)RS( Reed-Solomon )里德-所罗门纠删码 (2)AC( Array Code: RAID5、RAID6等)阵列纠删码 (3)LDPC( LowDensity Parity Check Code )低密度奇偶校验纠删码( LDPC 目前主要用于通信、视频和音频编码等领域 )Erasure Code 的优势副本策略和纠删码是存储领域常见的两种数据冗余技术。相比于副本策略,纠删码具有更高的磁盘利用率:RS码原理Reed-Solomon(RS)码是存储系统较为常用的一种纠删码,它有两个参数n和m,记为RS(n ,m)。n 代表原始数据块个数。m代表校验块个数。以n=5,m=3为例 : 1、encoding 编码过程(D是原始数据块,得到的C为校验块,构建 Bi 有专门的数学方法...
零知识证明之zk-STARK
zk-STARK(零知识的可扩展的透明知识论证)zero knowledge - Scalable Transparent ARgument of Knowledge zero knowledge(零知识):Private input(秘密的输入)将会被隐藏,除了 Prover 以外的任何人都不知道 Private input 的内容,在知识论证的过程中也不能反推出 Private input。 Scalable(扩展性):与 Replay Computation 的验证耗时相比,zk-STARK 生成 Proof 的时间复杂度近似于计算的复杂度 (O(n)),而 Verify Proof 的时间复杂度远小于计算的复杂度 (O(log))。 假设区块链网络中 Verifier 的 VerifyTime = Transcation 交易数量的对数的平方。当一个区块包含 10000 Transcation 时,验证者的 VerifyTime = (log₂ 10000)² ~ (13.2)² ~ 177 ms;当一个区块包含 100 0000 Transcation 时,验证者的 V...
Curve War(流动性战争)
一、Stablecoin(稳定币之争)加密稳定币的发展主要历程了三个阶段,这些稳定币各有各的优势与问题:在目前百花齐放的 DeFi 协议中,去中心化的算法稳定币的市场份额一直在攀升。 而流动性战争的核心是:解决算法稳定币的价值锚定和提供代币使用场景。 如何锚定算法稳定币的价值呢?二、Curve 的探索之路在众多的 AMM 之间大家最终选择了 Curve:Curve 优点一如上图所示:曲线1(Uniswap)的兑换会随着交易额增大而出现更大的交易滑点在;曲线2(Constant price 是理想中的1:1刚性兑换;曲线3(Curve)池子深度足够大时几乎和曲线2重合。 Curve 提供的 Stableswap 算法使得其在同样盘口深度下比 Uniswap V1 的滑点更低。这一算法优势使得其可以满足:稳定币大额低滑点交易的需求。因此围绕 Curve 逐渐建立起稳定币兑换的生态。 本质上讲,Curve 是稳定币价值锚定的 DeFi 基础组件,Uniswap 是新币价值发现的 DeFi 基础组件。两者并不是直接竞争的关系。 如何让 Curve Pool 的深度足够大,便成了下一个亟待...
Erasure Coding 纠删码原理( Near Protocol )
Erasure Code 是什么1、Erasure Code是一种编码技术,它可以将 n 份原始数据,增加 m 份数据,并能通过n+m份中的任意 n 份数据,还原为原始数据。即如果有任意小于等于 m 份的数据失效,仍然能通过剩下的数据还原出来。 2、纠删码技术在分布式存储系统中的应用主要有三类 (1)RS( Reed-Solomon )里德-所罗门纠删码 (2)AC( Array Code: RAID5、RAID6等)阵列纠删码 (3)LDPC( LowDensity Parity Check Code )低密度奇偶校验纠删码( LDPC 目前主要用于通信、视频和音频编码等领域 )Erasure Code 的优势副本策略和纠删码是存储领域常见的两种数据冗余技术。相比于副本策略,纠删码具有更高的磁盘利用率:RS码原理Reed-Solomon(RS)码是存储系统较为常用的一种纠删码,它有两个参数n和m,记为RS(n ,m)。n 代表原始数据块个数。m代表校验块个数。以n=5,m=3为例 : 1、encoding 编码过程(D是原始数据块,得到的C为校验块,构建 Bi 有专门的数学方法...
零知识证明之zk-STARK
zk-STARK(零知识的可扩展的透明知识论证)zero knowledge - Scalable Transparent ARgument of Knowledge zero knowledge(零知识):Private input(秘密的输入)将会被隐藏,除了 Prover 以外的任何人都不知道 Private input 的内容,在知识论证的过程中也不能反推出 Private input。 Scalable(扩展性):与 Replay Computation 的验证耗时相比,zk-STARK 生成 Proof 的时间复杂度近似于计算的复杂度 (O(n)),而 Verify Proof 的时间复杂度远小于计算的复杂度 (O(log))。 假设区块链网络中 Verifier 的 VerifyTime = Transcation 交易数量的对数的平方。当一个区块包含 10000 Transcation 时,验证者的 VerifyTime = (log₂ 10000)² ~ (13.2)² ~ 177 ms;当一个区块包含 100 0000 Transcation 时,验证者的 V...
Curve War(流动性战争)
一、Stablecoin(稳定币之争)加密稳定币的发展主要历程了三个阶段,这些稳定币各有各的优势与问题:在目前百花齐放的 DeFi 协议中,去中心化的算法稳定币的市场份额一直在攀升。 而流动性战争的核心是:解决算法稳定币的价值锚定和提供代币使用场景。 如何锚定算法稳定币的价值呢?二、Curve 的探索之路在众多的 AMM 之间大家最终选择了 Curve:Curve 优点一如上图所示:曲线1(Uniswap)的兑换会随着交易额增大而出现更大的交易滑点在;曲线2(Constant price 是理想中的1:1刚性兑换;曲线3(Curve)池子深度足够大时几乎和曲线2重合。 Curve 提供的 Stableswap 算法使得其在同样盘口深度下比 Uniswap V1 的滑点更低。这一算法优势使得其可以满足:稳定币大额低滑点交易的需求。因此围绕 Curve 逐渐建立起稳定币兑换的生态。 本质上讲,Curve 是稳定币价值锚定的 DeFi 基础组件,Uniswap 是新币价值发现的 DeFi 基础组件。两者并不是直接竞争的关系。 如何让 Curve Pool 的深度足够大,便成了下一个亟待...

Subscribe to Ethan - if(DAO)

Subscribe to Ethan - if(DAO)
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers
Tornado(https://tornado.cash/)是以太坊隐私赛道著名的混币项目,其混币技术主要使用了 zk-SNARK 零知识证明。
1、关于 zk-SNARK 零知识证明的原理可以参见 if(DAO) 之前的文章:
2、混币的意思是混币者通过 Tornado 合约将混币者的以太坊地址和资金去向地址失去关联,从而达到隐匿资金去向的目的。
1、Bob 是第 3 个将自己的代币 Deposit 存入龙卷风合约进行混币的客户。
2、Alice 是第 4 个将自己的代币 Deposit 存入龙卷风合约进行混币的客户。
3、Alice 在 Deposit 时

(1)Alice random k4 ,r4。k4 和 r4 in { 0 ,1 } ^ 256。( k4 ,r4 ) 也是 Alice 未来的取款凭证 note4。
(2)Alice 计算得到 C4 = Hash1( k4 ,r4 )。
(3)Alice 将 Deposit 的金额 100 DAI + C4 + MerkleProof(C4) 发送至 Tornado 合约。
(4)Tornado 合约 verify MerkleProof(C4) :通过梅克尔证明验证 C4 账户状态的正确性。
(5)通过 C4 + MerkleProof(C4) update Tornado 合约内存储的与 Tornado 业务相关的全局状态 MerkleRoot。
(6)nf 在下面的 Withdraw 操作时才会用到,暂时不表。
4、Bob 在 Withdraw 时

(1)Bob random k3 ,r3。k3 和 r3 in { 0 ,1 } ^ 256。
(2)Bob 计算得到 C3 = Hash1( k3 ,r3 )。
(3)Bob 计算得到 nf3 = Hash2( k3 )。
(4)Bob 指定 Bob 混币后的收款地址 A。注意:Bob 必须在 statement 中指定收款地址 A,这样可以防止 Miner 矿工将 Bob 的收款地址更换成自己的地址从而盗取混币后的资金。
(5)Bob 构建 zk-SNARK Proof,即在不泄露自己账户信息的情况下证明自己曾经存入合约 100 DAI。具体做法是通过 :
public statement x = ( MerkleRoot ,nf3 ,A )
secret witness w = ( k3 ,r3 ,C3 ,MerkleProof(C3) )
从而构建 zk-SNARK Proof π。这个过程和我们之前学习的零知识证明匹诺曹协议是吻合的:
1)TrustSetup :S ( C ) => ( Sp ,Sv)。(本篇省略了:通过电路 C 构建可信设置并分别生成 Sp 和 Sv,其中 Sp 给 Prover 生成零知识证明 π,Sv 给 Verifier 验证零知识证明 π 的正确性)。
2)P ( Sp ,x ,w ) => Proof π。(Prover 证明者构建零知识证明 π)。
3)V ( Sv ,x ,π ) 是否正确。(Verifier 验证者验证零知识证明 π)。
(6)Tornado 合约将 Bob 提交的 nf3 增加至 nullifier 中存储,用以保证 Bob 的这笔 100 DAI 的混币存款不能被再次 Withdraw。即当 Bob 想再次 Withdraw 此笔存款时,Tornado 合约会检查此笔存款对应的 nf3 是否存在记录,如果存在则拒绝提款。
(7)Tornado 合约返回给 Bob 指定的资金去向地址 A ,金额 100 DAI(因为示例中使用的是 Tornado 100 DAI Pool),完成最终的混币。
一般的资金转移过程中,Bob 必须向区块链网络提交 From 转出账户 + To 转入账户 + Amount 转账金额。而通过 Tornado 合约,Bob 在取款过程中,只向区块链网络提交了 3 项数据:为了防止 Bob 或攻击者重复 Withdraw 的一个由随机数生成的哈希值 nf + 没有透露任何与 Bob 秘密相关的零知识证明 π + 以太坊公开地址 A 但没人知道这是 Bob 的地址。Bob 最终达到了隐匿取款人和资金去向的目的。
上面的分析过程中,我们忽略了一件重要的事:以太坊等主流区块链的协议中一般都是谁发起交易谁承担 gas。在上面的流程中,Bob 在 Withdraw 取款过程中花费了无法隐匿的 gas,数据分析人员可以关联 Bob 的地址和最终货币的去向地址 A,从而暴露了 Bob 的身份。
Tornado 的解决方案是让 Bob 、Alice 等使用 Tornado 合约的客户不直接向 Tornado 合约发起 Withdraw 交易,而是让 Relay 这样一个中心化服务器中继 Withdraw 交易,花费 gas:

1、这样做的好处是:所有向 Tornado 合约发起提款交易的地址都是 Relay Address 并由该地址承担 gas,隐匿了 Bob 、Alice 的地址信息。
2、这样做的缺点是:Relay 服务器是中心化的,这也是龙卷风经常被人诟病的一个痛点。
================================
================================
欢迎大佬们的探讨指正~
您可以在这里找到作者 twitter:@ethan_ifdao
Tornado(https://tornado.cash/)是以太坊隐私赛道著名的混币项目,其混币技术主要使用了 zk-SNARK 零知识证明。
1、关于 zk-SNARK 零知识证明的原理可以参见 if(DAO) 之前的文章:
2、混币的意思是混币者通过 Tornado 合约将混币者的以太坊地址和资金去向地址失去关联,从而达到隐匿资金去向的目的。
1、Bob 是第 3 个将自己的代币 Deposit 存入龙卷风合约进行混币的客户。
2、Alice 是第 4 个将自己的代币 Deposit 存入龙卷风合约进行混币的客户。
3、Alice 在 Deposit 时

(1)Alice random k4 ,r4。k4 和 r4 in { 0 ,1 } ^ 256。( k4 ,r4 ) 也是 Alice 未来的取款凭证 note4。
(2)Alice 计算得到 C4 = Hash1( k4 ,r4 )。
(3)Alice 将 Deposit 的金额 100 DAI + C4 + MerkleProof(C4) 发送至 Tornado 合约。
(4)Tornado 合约 verify MerkleProof(C4) :通过梅克尔证明验证 C4 账户状态的正确性。
(5)通过 C4 + MerkleProof(C4) update Tornado 合约内存储的与 Tornado 业务相关的全局状态 MerkleRoot。
(6)nf 在下面的 Withdraw 操作时才会用到,暂时不表。
4、Bob 在 Withdraw 时

(1)Bob random k3 ,r3。k3 和 r3 in { 0 ,1 } ^ 256。
(2)Bob 计算得到 C3 = Hash1( k3 ,r3 )。
(3)Bob 计算得到 nf3 = Hash2( k3 )。
(4)Bob 指定 Bob 混币后的收款地址 A。注意:Bob 必须在 statement 中指定收款地址 A,这样可以防止 Miner 矿工将 Bob 的收款地址更换成自己的地址从而盗取混币后的资金。
(5)Bob 构建 zk-SNARK Proof,即在不泄露自己账户信息的情况下证明自己曾经存入合约 100 DAI。具体做法是通过 :
public statement x = ( MerkleRoot ,nf3 ,A )
secret witness w = ( k3 ,r3 ,C3 ,MerkleProof(C3) )
从而构建 zk-SNARK Proof π。这个过程和我们之前学习的零知识证明匹诺曹协议是吻合的:
1)TrustSetup :S ( C ) => ( Sp ,Sv)。(本篇省略了:通过电路 C 构建可信设置并分别生成 Sp 和 Sv,其中 Sp 给 Prover 生成零知识证明 π,Sv 给 Verifier 验证零知识证明 π 的正确性)。
2)P ( Sp ,x ,w ) => Proof π。(Prover 证明者构建零知识证明 π)。
3)V ( Sv ,x ,π ) 是否正确。(Verifier 验证者验证零知识证明 π)。
(6)Tornado 合约将 Bob 提交的 nf3 增加至 nullifier 中存储,用以保证 Bob 的这笔 100 DAI 的混币存款不能被再次 Withdraw。即当 Bob 想再次 Withdraw 此笔存款时,Tornado 合约会检查此笔存款对应的 nf3 是否存在记录,如果存在则拒绝提款。
(7)Tornado 合约返回给 Bob 指定的资金去向地址 A ,金额 100 DAI(因为示例中使用的是 Tornado 100 DAI Pool),完成最终的混币。
一般的资金转移过程中,Bob 必须向区块链网络提交 From 转出账户 + To 转入账户 + Amount 转账金额。而通过 Tornado 合约,Bob 在取款过程中,只向区块链网络提交了 3 项数据:为了防止 Bob 或攻击者重复 Withdraw 的一个由随机数生成的哈希值 nf + 没有透露任何与 Bob 秘密相关的零知识证明 π + 以太坊公开地址 A 但没人知道这是 Bob 的地址。Bob 最终达到了隐匿取款人和资金去向的目的。
上面的分析过程中,我们忽略了一件重要的事:以太坊等主流区块链的协议中一般都是谁发起交易谁承担 gas。在上面的流程中,Bob 在 Withdraw 取款过程中花费了无法隐匿的 gas,数据分析人员可以关联 Bob 的地址和最终货币的去向地址 A,从而暴露了 Bob 的身份。
Tornado 的解决方案是让 Bob 、Alice 等使用 Tornado 合约的客户不直接向 Tornado 合约发起 Withdraw 交易,而是让 Relay 这样一个中心化服务器中继 Withdraw 交易,花费 gas:

1、这样做的好处是:所有向 Tornado 合约发起提款交易的地址都是 Relay Address 并由该地址承担 gas,隐匿了 Bob 、Alice 的地址信息。
2、这样做的缺点是:Relay 服务器是中心化的,这也是龙卷风经常被人诟病的一个痛点。
================================
================================
欢迎大佬们的探讨指正~
您可以在这里找到作者 twitter:@ethan_ifdao
No activity yet