一、事情緣由
俄烏衝突,歐美對俄羅斯制裁。
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