Home

关于 Tornado Cash 事件的思考

最近美国财政部海外资产控制办公室(OFAC)宣布制裁Tornado Cash及其相关的地址。实际上,这并不是OFAC第一次宣布制裁某些加密货币的地址了。本次不同点在于这是第一次对链上的合约本身进行制裁。由此带来的后续效应是闻所未闻的,首先Circle冻结了Tornado Cash的USDC,紧接着Tornado Cash的Github仓库被移除,其项目的几个核心开发人员的Github账户被注销。甚至传出了项目的某位开发人员在荷兰被捕。同时,AAVE在前端网站禁止了一些与Tornado Cash有交易的相关账户的使用,以及后续 Tornado Cash 投毒事件,导致几个实名大户被禁止使用AAVE的前端网站上的服务。 我们可以从本次风波中总结出以下的事实: 美国政府可以随时制裁任...

Read more

实践的利他主义者

“精致的利己主义者”这个词几年前在中文互联网上被炒得火热。这种“凡事利己”的行为准则确实可以在某些竞争中取得优势。但是我更推崇一种“实践的利他主义”。利他主义和利己主义并不是对立两端,利他并不一定会带来损己。反而更长的时间线上,利他主义反而可能会给个人带来超额的收益。 一个例子是上个世纪兴起的开源软件运动。开源软件运动的先驱们就是带着利他的思想将自由软件精神发扬光大,带来了开源社区的繁荣。开源社区的繁荣降低了社区的参与门槛,引入了更多的参与者加入社区,最终推动整个计算机科技的进步。这种正向的滚雪球式的循环就是一个典型的利他主义给所有人带来超额回报的例子。从个人的角度,利他主义也可以给个人带来更稳固,更信赖的关系。当一个人被认为是“实践的利他主义者”的时候,往往能获得别人更多的信任。在...

Read more

细说 Blockchain 中的51% Attack

可怕但也没有那么可怕的51%攻击 在数据库系统中,系统的管理员有着至高的权限,理论上数据的Administrator/Super Administrator可以修改数据库中的任意的数据。因此,对于一个数据库系统来说,拿到数据库管理员权限的攻击者对系统的威胁度是破坏性的。 在Blockchain中,51%攻击(PoW)由于掌握了网络中绝大部分的算力,同样是被认为是高威胁攻击方式。但是相比于拿到数据库管理员权限的攻击者,Blockchain中的51%攻击者的造成的破坏是相对有限的。 首先,由于Blockchain中数据的链式组成规则(i.e. 新的Block会将前一个区块的哈希值写入到区块头中),51%攻击者几乎是不能修改/删除已经上链的历史数据的。同时,虽然51%的攻击者掌握了系统...

Read more

如何使用 Selenium 来下载 PDF 文件

如何使用Selenium来下载PDF? 今天帮老婆写了个爬虫,遇到了这么一个需求: 从给定的页面上下载一个 PDF 文件。 但是我们遇到的问题是:不管怎么处理,PDF文件都会在模拟下载后使用 Chrome 打开,而不是另存为到目标文件夹。搜了一圈,发现不管中英文的结果都是如何把一个 html 页面保存成PDF。大概是有将页面保存成 PDF 的需求的人更多。 这里分享一下结论,希望能帮助到遇到之后相同问题的开发人员: 在创建chromedriver的时候,同时传入一个webdriver.chrome.options.Options, 如下: options = webdriver.chrome.options.Options() # 这里是自定义的下载文...

Read more

理解Groth16,一些细节上的说明

Thanks to Zhang Ye, Peng Jingshu for review. zkSNARKs 是一种高级的(Advanced)密码学技术。这里的高级不单单指它的先进性,同时也代表了它属于密码学领域中的难以理解的“高级话题”。且不说理解 zkSNARKs 的理论原理,想要搞清楚如何使用 zkSNARKs 技术来解决实际问题都是一件蛮有难度的事情。在本文中,我们来探讨一下一个常用的 zkSNARK System: Groth16 中一些的细节。 V神曾经写过一篇非常好的介绍 R1CS 与 QAP 问题的文章。但是,对于不熟悉密码学的,或者说如何使用密码学的思想来解决实际问题的zk票友们来说,文章中的一些逻辑上的跨度还是大了一些。尤其是在R1CS转换成多项式的地方,初次接触...

Read more

诈骗,PUA 和 So What

早上的时候,我接到了一通来自泉州的移动电话。对方声称自己是京东的客服,并快速的介绍了自己的工号。一口流利的普通话,加上我对京东这个公司的好感度,让我并没有第一时间挂断他的电话。在对方准确的说出了我的名字以及学校之后,事情开始变得微妙起来。对方声称,因为两会的关系,上面要求未来京东不在对学生身份的用户提供金融服务,例如白条等,让我自行的在京东APP上关闭自己的学生认证,否则可能会出现征信上的问题。并好心的向我介绍了关闭的方法,在京东APP中搜索某个页面并关闭。之后就有礼貌的挂断了电话。我按照他的指示找到了他描述的页面,但是却不是他所描述的取消学生身份的页面,只是激活了一个学生身份的会员。 其实事情发展到这里并没有什么特别异常的地方,我的第一感觉还是这是通来自京东的客服推销电话。结果到下...

Read more

Rollup/zk-Rollup以及zkVM/zkEVM

自从EIP-1559生效后,由于币价的升高,和基础 Gas Price 的约束,Ethereum Mainnet上的单笔交易费用已经高到了离谱的程度。在上个月的一次实验中,我尝试了一把在Layer-1上调用一次古早的合约,大概花了100美刀左右的交易费。就像社区内经常听到的抱怨声那样,Ethereum Mainnet已经成为了普通用户用不起的贵族链。 显然,目前天价的交易费以及有限的Throughput已经成为了限制Ethereum继续发展的两大难题。幸运的是,rollup技术的发展给社区展现了一种似乎可以一招解决两大难题的绝世武学。 简单的来说,顾名思义,rollup,就是把一堆的transaction rollup到一个新的transaction。然后,通过某种神奇的技术,使...

Read more

理解以太坊 Go-Ethereum 源码剖析(02): 一个Ethereum Transaction的生老病死

概述 在Account章节的开头,我们提到了,Ethereum 的运行依赖于基于交易的状态机模型(Transaction-based State Machine)。本章我们就来探索一下,Ethereum中的另一个基本数据单元Transaction。在本文中,我们提到的交易指的是在Ethereum Layer-1层面上构造的交易,以太坊生态中的Layer-2中的交易不在我们的讨论中。 Transaction是Ethereum执行数据操作的媒介。它主要起到下面的几个作用: 在Layer-1网络上的Account之间进行Native Token的转账。 创建新的Contract。 调用Contract中会修改目标Contract中持久化数据或者间接修改其他Account/...

Read more

理解以太坊 Go-Ethereum 源码剖析(01): 账户与合约(Account and Contract)

概述 我们常常听到这样一个说法,”Ethereum 和 Bitcoin 最大的不同之一是二者使用链上数据模型不同。其中,Bitcoin 是基于 UTXO 模型的 Blockchain/Ledger 系统,Ethereum是基于 Account/State 模型的系统”。那么,这个另辟蹊径的 Account/State 模型究竟不同在何处呢?在本文,我们就来探索一下以太坊中的基本数据单元(Metadata)之一的Account。 简单的来说,Ethereum 的运行是一种基于交易的状态机模型(Transaction-based State Machine)。整个系统由若干的账户组成 (Account),类似于银行账户。状态(State)反应了某一账户(Account)在某一时刻下的值...

Read more

理解以太坊 Go-Ethereum 源码剖析(00): 万物的起点: Geth Start !

什么是 geth? geth 是以太坊基金会基于 Go 语言开发以太坊的官方客户端,它实现了 Ethereum 协议(黄皮书)中所有需要的实现的功能模块。我们可以通过启动 geth 来运行一个 Ethereum 的节点。在以太坊 Merge 之后,geth 作为节点的执行层继续在以太坊生态中发挥重要的作用。 go-ethereum是包含了 geth 客户端代码和以及编译 geth 所需要的其他代码在内的一个完整的代码库。在本系列中我们会通过深入 go-ethereum 代码库,从High-level 的 API 接口出发,沿着 Ethereum 主 Workflow,逐一的理解 Ethereum 具体实现的细节。 为了方便区分,在接下来的文章中,我们用 geth 来表示 Geth ...

Read more