
交易所模式总结
交易所是市场的 DNA 。交易所的内部运行模式,决定了它下面所有的交易动态。 目前交易所提供流动性(liquidity)的方式,主要有四种:中央限价订单簿(CLOB, 即 central limit order books)联合曲线自动化做市(bonding curve automated market maker)询价单(RFQ,即 requests for quote)拍卖(auction)每种模式各有自己的优缺点,它们需要在以下这些特性优先级中做出权衡:价格发现(price discovery,匹配的买卖双方发现对方的难易程度)流动性(liquidity,资产买入和卖出的方便程度)滑点(slippage,订单请求水平和订单实际执行价格的差额)对价格波动的反应(responsiveness to volatility,对资产价格波动的响应速度)做市商的资本效率(capital efficiency for market makers,做市商的资本可否被最优化配置)可操作性(manipulability,影响资产价格的能力)可组合性(composability,组合资产的能力)...

以太坊黄皮书公式解析(上)
前言与版本笔者最近在结合以太坊黄皮书读以太坊源码,结合自己的理解解析下黄皮书内的公式,与大家共同学习进步,若大家在阅读以太坊黄皮书时,对公式产生理解上的困惑,可以参阅本文一起看。文章基于当前(2022/1/10)的黄皮书,版本号为 BERLIN VERSION fabef25 ,若有不准确之处,欢迎指出。由于该黄皮书内除附录外有 183 个公式,为了让文章篇幅不过长,该解析会由三部分组成一个系列,每个系列解析约 60 个公式,本文为上篇。公式解析(1)σ 为以太坊世界状态。Υ 为以太坊状态转换函数。T 为一个交易。上述公式阐述的是,以太坊是一个基于交易而改变状态的状态机。即每进来一个交易,都会改变一次以太坊的旧世界状态,从而进入一个新世界状态。(3)B 为一个区块。T0, T1, ... 为一组交易。在实际运作时,基于效率考量,以太坊是批量处理交易的,一个批次的交易,会被打包在一个区块中,这就是 (3) 公式的含义。(2)Π 表示区块层面上的状态转换函数。上述公式即是 (1) 的批量处理版本,以太坊的世界状态通过区块(即一组交易)批量更新。(4)Ω 为区块确定性状态转换函数,会奖...
[译]对于 zk-SNARKs 运行的简介
在过去十年中,普适的简洁零知识证明或许是密码学领域最有影响力的发展方向之一,通常简称为 zk-SNARKs(zero knowledge succinct arguments of knowledge)。zk-SNARKs 可以让你为执行的计算生成一些证明(proof),虽然这些证明的生成可能会耗费非常多的算力,但是却可以被很快地验证。并且这些证明还拥有“零知识”的特性,即证明中会隐藏计算中的输入信息。 举个例子,你可以给出一个关于你确实知道某个密码数字的证明:你会把这个数字加到字符 cow 后面,然后执行 100 万次 SHA256 哈希,最终结果会以 0x57d00485aa 开头。在 zk-SNARKs 的应用场景里,验证者可以以远比执行 100 万次哈希快的时间验证你是否确实知道你所说的密码数字,并且该数字不会暴露给验证者。 在区块链中,zk-SNARKs 有两个非常有用的应用场景:可扩展性(scalability):如果一个区块需要花很多时间才能被验证,那么某人可以预先为其生成证明,然后其他人只需要快速地验证生成的证明即可隐私性(Privacy):你可以在隐藏具体收到资...
Node.js core collaborator emeriti; LearningBooks && codingMonkey; NFT Collector;

交易所模式总结
交易所是市场的 DNA 。交易所的内部运行模式,决定了它下面所有的交易动态。 目前交易所提供流动性(liquidity)的方式,主要有四种:中央限价订单簿(CLOB, 即 central limit order books)联合曲线自动化做市(bonding curve automated market maker)询价单(RFQ,即 requests for quote)拍卖(auction)每种模式各有自己的优缺点,它们需要在以下这些特性优先级中做出权衡:价格发现(price discovery,匹配的买卖双方发现对方的难易程度)流动性(liquidity,资产买入和卖出的方便程度)滑点(slippage,订单请求水平和订单实际执行价格的差额)对价格波动的反应(responsiveness to volatility,对资产价格波动的响应速度)做市商的资本效率(capital efficiency for market makers,做市商的资本可否被最优化配置)可操作性(manipulability,影响资产价格的能力)可组合性(composability,组合资产的能力)...

以太坊黄皮书公式解析(上)
前言与版本笔者最近在结合以太坊黄皮书读以太坊源码,结合自己的理解解析下黄皮书内的公式,与大家共同学习进步,若大家在阅读以太坊黄皮书时,对公式产生理解上的困惑,可以参阅本文一起看。文章基于当前(2022/1/10)的黄皮书,版本号为 BERLIN VERSION fabef25 ,若有不准确之处,欢迎指出。由于该黄皮书内除附录外有 183 个公式,为了让文章篇幅不过长,该解析会由三部分组成一个系列,每个系列解析约 60 个公式,本文为上篇。公式解析(1)σ 为以太坊世界状态。Υ 为以太坊状态转换函数。T 为一个交易。上述公式阐述的是,以太坊是一个基于交易而改变状态的状态机。即每进来一个交易,都会改变一次以太坊的旧世界状态,从而进入一个新世界状态。(3)B 为一个区块。T0, T1, ... 为一组交易。在实际运作时,基于效率考量,以太坊是批量处理交易的,一个批次的交易,会被打包在一个区块中,这就是 (3) 公式的含义。(2)Π 表示区块层面上的状态转换函数。上述公式即是 (1) 的批量处理版本,以太坊的世界状态通过区块(即一组交易)批量更新。(4)Ω 为区块确定性状态转换函数,会奖...
[译]对于 zk-SNARKs 运行的简介
在过去十年中,普适的简洁零知识证明或许是密码学领域最有影响力的发展方向之一,通常简称为 zk-SNARKs(zero knowledge succinct arguments of knowledge)。zk-SNARKs 可以让你为执行的计算生成一些证明(proof),虽然这些证明的生成可能会耗费非常多的算力,但是却可以被很快地验证。并且这些证明还拥有“零知识”的特性,即证明中会隐藏计算中的输入信息。 举个例子,你可以给出一个关于你确实知道某个密码数字的证明:你会把这个数字加到字符 cow 后面,然后执行 100 万次 SHA256 哈希,最终结果会以 0x57d00485aa 开头。在 zk-SNARKs 的应用场景里,验证者可以以远比执行 100 万次哈希快的时间验证你是否确实知道你所说的密码数字,并且该数字不会暴露给验证者。 在区块链中,zk-SNARKs 有两个非常有用的应用场景:可扩展性(scalability):如果一个区块需要花很多时间才能被验证,那么某人可以预先为其生成证明,然后其他人只需要快速地验证生成的证明即可隐私性(Privacy):你可以在隐藏具体收到资...
Node.js core collaborator emeriti; LearningBooks && codingMonkey; NFT Collector;

Subscribe to DavidCai.eth

Subscribe to DavidCai.eth
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers


最近在看零知识证明,了解到了一个很有意思的问题,即《姚氏百万富翁问题》,该问题由图灵奖得主姚期智老师提出。算是对开始了解零知识证明的朋友起到抛砖引玉作用的经典问题。下面展开一下问题的描述,以及姚期智老师给出的一个答案。
假设有两个富翁甲,乙,他们的财产数量分别为 a, b ,且 1 ≤ a, b ≤ N 。甲,乙两者想知道他们两者的财产数量谁多,但是又不能透露他们具体的财产数量。
乙先生产自己的一对非对称加密(如 RSA)秘钥对,即公钥 E,私钥 C 。并像 TLS 通信中一样将公钥 E 发送给甲,然后是自己保留 C 。
甲再取一个大于 a 的数字 X(尽量取大),将 X 通过乙的公钥加密后得到 E(X) ,然后将 E(X) - a 发送给乙。
乙取得 E(X) - a 后,由于不知道 X 的具体值,所以也更无从知晓 a 。他将进行一组计算来对 E(X) 进行枚举(对所有 a 的可能范围,即1 到 N),然后使用私钥解密,使得枚举结果中有一项为 X:
C(E(X) - a + 1)
C(E(X) - a + 2)
...
C(E(X) - a + a) => 即 X
...
C(E(X) - a + N)
由于 1 ≤ a, b ≤ N 的前提,所以其中必有一项为 C(E(X) - a + a) ,即 X 。
乙取一个素数 P ,P 尽量比 X 小几个数量级(甲提前向乙透露 X 的数量级并不会有问题)。这时,将上述计算取得的一组结果全部与 P 取余,得:
C(E(X) - a + 1) mod P
C(E(X) - a + 2) mod P
...
C(E(X) - a + a) mod P => 即 X mod P
...
C(E(X) - a + N) mod P
在上述取余结果计算中,前 b 项不变,后 N 项全部 +1 ,即:
C(E(X) - a + 1) mod P
C(E(X) - a + 2) mod P
...
C(E(X) - a + b) mod P
C(E(X) - a + (b + 1)) mod P + 1
...
C(E(X) - a + N) mod P + 1
然后将这组结果与 P 全部发送给甲。由于第 a 项为:C(E(X) - a + a) mod P 即 X mod P,若 a < b,则第 a 项就不会被 +1 。
甲取得数据后,计算 X mod P ,若 X mod P 存在于乙发送的数据中,则 a < b ,否则 a ≥ b 。由于乙传输的结果经过了取余操作,且 P 比 X 小几个数量级,所以甲无法对原式子进行 100% 正确的还原。
所以这个解答的关键步骤就是第三步,即取余,是进行了一次同态加密(Homomorphic encryption),隐藏了原数据,但保持了结果正确。若不进行取余,而是单纯的让甲通过 X 是否在乙发送的结果中来判断的话,不管 a < b 还是 a ≥ b ,由于甲是知道 X,P,a 和 N 的,甲可以将乙的结果通过公钥再次加密,然后枚举试出乙是在哪一个位置开始进行 +1 操作的。
最近在看零知识证明,了解到了一个很有意思的问题,即《姚氏百万富翁问题》,该问题由图灵奖得主姚期智老师提出。算是对开始了解零知识证明的朋友起到抛砖引玉作用的经典问题。下面展开一下问题的描述,以及姚期智老师给出的一个答案。
假设有两个富翁甲,乙,他们的财产数量分别为 a, b ,且 1 ≤ a, b ≤ N 。甲,乙两者想知道他们两者的财产数量谁多,但是又不能透露他们具体的财产数量。
乙先生产自己的一对非对称加密(如 RSA)秘钥对,即公钥 E,私钥 C 。并像 TLS 通信中一样将公钥 E 发送给甲,然后是自己保留 C 。
甲再取一个大于 a 的数字 X(尽量取大),将 X 通过乙的公钥加密后得到 E(X) ,然后将 E(X) - a 发送给乙。
乙取得 E(X) - a 后,由于不知道 X 的具体值,所以也更无从知晓 a 。他将进行一组计算来对 E(X) 进行枚举(对所有 a 的可能范围,即1 到 N),然后使用私钥解密,使得枚举结果中有一项为 X:
C(E(X) - a + 1)
C(E(X) - a + 2)
...
C(E(X) - a + a) => 即 X
...
C(E(X) - a + N)
由于 1 ≤ a, b ≤ N 的前提,所以其中必有一项为 C(E(X) - a + a) ,即 X 。
乙取一个素数 P ,P 尽量比 X 小几个数量级(甲提前向乙透露 X 的数量级并不会有问题)。这时,将上述计算取得的一组结果全部与 P 取余,得:
C(E(X) - a + 1) mod P
C(E(X) - a + 2) mod P
...
C(E(X) - a + a) mod P => 即 X mod P
...
C(E(X) - a + N) mod P
在上述取余结果计算中,前 b 项不变,后 N 项全部 +1 ,即:
C(E(X) - a + 1) mod P
C(E(X) - a + 2) mod P
...
C(E(X) - a + b) mod P
C(E(X) - a + (b + 1)) mod P + 1
...
C(E(X) - a + N) mod P + 1
然后将这组结果与 P 全部发送给甲。由于第 a 项为:C(E(X) - a + a) mod P 即 X mod P,若 a < b,则第 a 项就不会被 +1 。
甲取得数据后,计算 X mod P ,若 X mod P 存在于乙发送的数据中,则 a < b ,否则 a ≥ b 。由于乙传输的结果经过了取余操作,且 P 比 X 小几个数量级,所以甲无法对原式子进行 100% 正确的还原。
所以这个解答的关键步骤就是第三步,即取余,是进行了一次同态加密(Homomorphic encryption),隐藏了原数据,但保持了结果正确。若不进行取余,而是单纯的让甲通过 X 是否在乙发送的结果中来判断的话,不管 a < b 还是 a ≥ b ,由于甲是知道 X,P,a 和 N 的,甲可以将乙的结果通过公钥再次加密,然后枚举试出乙是在哪一个位置开始进行 +1 操作的。
No activity yet