金色观察|infura制裁特定地区用户 以太坊去中心化了吗
一、事件缘由
俄乌冲突,欧美对俄罗斯制裁。
3月4日,委内瑞拉 MetaMask 用户发现无法访问MetaMask钱包,因为Infura为响应美国对俄罗斯及乌克兰部分地区的制裁,而对Infura的API配置进行更改,但改错了。致使委内瑞拉用户无法通过MetaMask访问 以太坊 节点。
Infura发言人表示,作为一家美国公司,Infura密切关注美国的对外制裁计划,并严格调整其政策以遵守美国法律。受到制裁影响的地区包括伊朗、朝鲜、古巴、叙利亚和克里米亚、顿涅茨克和乌克兰卢甘斯克地区。
其实此前就发生国多次因Infura故障导致Metamask无法使用的情况。比如,2月5日Infura宕机,导致用户无法通过MetaMask使用Dapps。
二、Infura部分客户
据Infura官网,目前使用Infura作为以太坊客户端API的主要应用如下:
但因为两个原因, 1、Infura和Metamask均为Consensys旗下产品。2、Metamask覆盖最主要的以太坊用户群体 , 所以绝大多数以太坊用户是通过Infura和以太坊区块链交互的。
Infura原理如下:
来源: https://infura.io/product/ethereum
要了解Infura是如何让影响到Metamask的,需要了解一下以太坊的堆栈。
三、以太坊堆栈
以太坊堆栈可抽象为5层,从下向上分别为:
第1级:以太坊虚拟机EVM
以太坊虚拟机EVM是以太坊智能合约运行时的环境。以太坊区块链上的所有智能合约和状态变化都是通过交易来执行的。EVM处理以太坊网络上的所有交易处理。
与任何虚拟机一样,EVM在执行代码和执行机器(以太坊节点)之间创建了一个抽象级别。目前,EVM运行在分布在世界各地的数千个节点上。
在底层,EVM使用一组操作码指令来执行特定任务。目前有140个唯一的操作码,这组操作码确保EVM图灵完备。图灵完备的意思是只要有足够资源,EVM几乎可以计算任何东西。
作为dapp开发人员,不需要对EVM有太多了解,只要它存在并且它可靠地为以太坊上的所有应用程序提供动力而无需停机。
第2级:智能合约
智能合约是在以太坊区块链上运行的可执行程序。使用特定编程语言Solidity编写,然后编译为EVM字节码,EVM字节码也就是上文的操作码,是一种低级机器指令。
智能合约不仅是开源的库,本质上是开放的API服务,始终在以太坊上运行且无法关闭。智能合约提供了用户无需许可即可和Dapp交互的功能。这也意味着可组合性,任何应用程序都可以与已部署的智能合约集成以组成新功能。任何人都可以将新的智能合约部署到以太坊,以添加自定义功能以满足其需求。
第3级:以太坊节点
为了让Dapp与以太坊区块链交互,它必须连接到以太坊节点。连接到节点后,你才能读取区块链数据或者将交易发送到网络。
以太坊节点是运行以太坊客户端软件的计算机。客户端是以太坊的一种实现,它验证每个区块中的所有交易,保持网络安全和数据准确。以太坊节点共同存储以太坊区块链的状态,并就交易达成共识以改变区块链状态。
Dapp通过JSON-RPC(远程过程调用)API连接到以太坊节点或者自己的以太坊节点,Dapp能够从区块链读取数据(如用户帐户余额)以及向网络广播新交易(例如在账户之间转移 ETH 或者执行智能合约功能)。
第4级:以太坊客户端API
由于以太坊全节点太大以及带宽要求,很多Dapp开发者不会自己安装以太坊全节点,市场上出现许多由以太坊开源社区或者专业服务商构建和维护的以太坊客户端API,允许Dapp连接到以太坊区块链并与之通信。这些API抽象出直接与以太坊节点交互的大部分复杂性,开发人员可以花更少的时间处理复杂的以太坊客户端,而将更多时间专注于特定功能。
如果面向用户的是Web应用程序,可以直接在前端选择JavaScript API或者选择使用Python或Java API在服务器端实现。
第5级:终端应用程序
最顶层是面向用户的App。这和互联网开发的标准程序一样,主要是Web和移动App。
四、web3架构
前端代码需要签名以及和以太坊上的智能合约通信;签名需要用到钱包,最多的是Metamask;签名后信息广播到以太坊上有两种方式:1、自己运行的以太坊区块链节点;2、使用Infura、Alchemy和Quicknode等第三方服务提供的节点。
所以一个以太坊上的Dapp的典型架构如下:
所以如果Infura拒绝特定地区IP地址的用户,那么他的交互将被排除在以太坊网络之外。
因为Metamask的以太坊客户端API默认用的是Infura,这也意味着这些地区的用户使用Metamask无法和Dapp交互。但Metamask毕竟是去中心化自我托管的,所以用户还可以用选择使用其他以太坊客户端API的钱包甚至自己的以太坊客户端,来和以太坊区块链上的智能合约交互。
因此Infura拒绝特定地区用户并不能说明以太坊已经中心化了,只能说明在某些环节中心化了,尤其考虑到Infura和Metamask均为Consensys旗下产品。
五、其他以太坊客户端API
下述是除了infura之外的以太坊客户端API,其中Dapp应用比较多的是Alchemy和QuikNode。
Alchemy - Ethereum Development Platform
使用Alchemy的应用
QuikNode - Blockchain developer platform.
使用QuickNode的应用或者服务
BlockCypher - Ethereum Web APIs
Cloudflare Ethereum Gateway.
DataHub by Figment - Web3 API services with Ethereum Mainnet and testnets.
Nodesmith - JSON-RPC API access to Ethereum Mainnet and testnets.
Ethercluster - Run your own Ethereum API service supporting both ETH and ETC.
Chainstack - Shared and dedicated Ethereum nodes as a service.
Python Tooling - Variety of libraries for Ethereum interaction via Python.
web3j - A Java/Android/Kotlin/Scala integration library for Ethereum.
Rivet - Ethereum and Ethereum Classic APIs as a service powered by open source software.
Nethereum - An open source .NET integration library for blockchain.
Tatum - The ultimate blockchain development platform.
Watchdata - Provide simple and reliable API access to Ethereum blockchain.
Zmok - Speed-oriented Ethereum nodes as JSON-RPC/WebSockets API