Cloudflare的以太坊閘道器

Kelly Cheng
Insight Software
Published in
16 min readMay 1, 2022
https://blog.cloudflare.com/cloudflare-ethereum-gateway/

在2019年的加密周,Cloudflare推出以太坊閘道器。

有了這個工具,你無需在你的電腦安裝任何軟體的情況下,就可以與以太坊網絡進行互動。

這是Cloudflare分散式Web閘道項目中的其中一個工具。目前,Cloudflare允許你在IPFS上託管內容,並讓你能夠通過以自己設置的域名進行訪問、讀取。同樣地,新的以太坊閘道器允許你以自定義主機 (節點) 名稱訪問以太坊網路。

這樣的設置讓添加互動式元素於網站 (受以太坊智慧合約提供支援) 成為可能。若與IPFS閘道結合使用,允許以分散的方式託管網站和資源,並具有Cloudflare 邊緣網路額外提供的加速、安全、可靠的好處。你可以直接於https://cloudflare-eth.com造訪他們的以太坊閘道器。

這是關於以太坊和智能合約如何運用Cloudflare Distributed Web Gateway創造許多可能性的簡短入門說明。

以太坊入門

你可能聽說過作為加密貨幣的以太坊,但你可能不知道的是,以太坊遠不止於此。它還是一個分散式運算網路,用於存儲和智能合約的執行。

所以甚麼是智能合約?

這是個很好的問題。以太坊智能合約只是存儲在以太坊區塊鏈上的一組代碼。當合約被觸發時,它會在以太坊虛擬機(EVM)上運行。

EVM是一個分散式虛擬機,除了讓智能合約在其中運行,也會生成對以太坊區塊鏈狀態的加密驗證更改作為其結果。

為了說明智慧合約的強大功能,讓我們從一個小例子來探討。

Anna想成立一間VPN供應商,但目前缺乏資金。為了給她的企業籌集資金,她決定舉行首次代幣發行(ICO)。比起從頭開始設計ICO合約,她選擇將他的合約建立在ERC-20上。至於ERC-20,則是可用於發行可替代代幣的標準,非常適合ICO設計。Anna將她符合ERC-20標準的合約發送到乙太坊網路後,就開始出售她的新公司VPN Co.的股票。

https://blog.cloudflare.com/cloudflare-ethereum-gateway/

當資金問題獲得解決,她開始擬定一份智能合約。Anna的合約中要求客戶將他們的公鑰以及一些以太幣發送給他們(Anna)。然後,授權能讓公鑰訪問她的VPN服務。好消息是,所有以上的這些過程都不必提供或持有任何隱私問題。

接下來,Anna決定再次運用區塊鏈,而不是設置基礎設施來自己運行VPN,但這次的她是作為客戶的立場。

Cloud Co.使用自己的智能合約來銷售雲基礎託管架構。

Anna 對她的合約擬定相關設計,將適量的以太幣發送到 Cloud Co. 的合約中。然後,Cloud Co.配置給她託管VPN所需的伺服器,通過在每次擁有新客戶時自動購買更多基礎設施,她的VPN公司可以完全自主性地擴展規模。

https://blog.cloudflare.com/cloudflare-ethereum-gateway/

最後,Anna從獲利中向她的投資者支付股息,並為自己保留一點相關利潤。

https://blog.cloudflare.com/cloudflare-ethereum-gateway/

如你所見,這是一個去中心化、自主運行的智慧VPN供應商。

置於區塊鏈上的智慧合約具有用於存儲資金的相關帳戶,當有人向該帳戶發送以太幣時,合約就會被觸發。在此,以我們的VPN的例子來說,當有人將資金轉入與Anna的合約綁定的帳戶時,將觸發相關合約機制。

智慧合約與普通代碼的區別是什麼?

智能合約的“智慧”是指它們能夠自主運行。“合約”部分是指保證代碼可以按編寫狀態執行。

由於該合約以加密方式執行,秉持區塊鏈的防篡改特性,並通過網路的共識機制驗證,因此這些智慧合約比可能引起爭議的常規合約更可靠。

以太坊智慧合約與傳統合約

一般的合約由法院系統執行,由律師提起訴訟。判決的結果是無法預測的,因為不同的法院有不同的裁決,甚至聘請更多或更好的律師也會提升你的贏面。

智慧合約的結果是能預測的,且近乎是公平的。然而,這裡有個需要注意的部分:雖然結果是能預先知曉,也無法因為各種可能被隨意推翻的,但寫得不夠好的合約可能沒有預期的效果,而且由於合約有不可更改的特性,也很難去做改善或修復。

怎麼撰寫智慧合約?

你可以用多種語言編寫智能合約,其中一些是圖靈完備的,例如Solidity。圖靈完備語言允許你編寫代碼來評估任何可計算函數。這使得Solidity與Python和Java處於同一類語言中。然後,編譯後的位元組碼可以在 EVM 上運行。

EVM 在許多方面與標準 VM 不同:

EVM 是分散式的

每段代碼都由多個節點運行。節點在承認區塊之前經過驗證計算,因此確保希望其區塊被承認的礦工必須始終老實地運行EVM。只有當超過一半的網路承認一個區塊時,才被視為已認證。這是以太坊的共識部分。

EVM 完全是確定性的

這意味著什麼樣的輸入始終產生相同的輸出。由於常規的 VM 可以存取檔案和網路,因此函數呼叫的結果可能是不確定的。每個 EVM 具有相同的啟動狀態,因此一組特定的輸入始終提供相同的輸出。這使得 EVM 比標準 VM 更可靠。

這樣的特性帶來了兩大陷阱:

  • EVM的位元組碼是圖靈完備的,因此不是每次都能在不運行計算的情況下來識別輸出。
  • 乙太坊智慧合約可以在區塊鏈上儲存狀態。這意味著輸出可能會隨著區塊鏈的變化而變化。雖然從技術上講,這是確定的,因為區塊鏈是函式的輸入,但仍然不可能提前推導出輸出。

然而,這個意思是它們會面臨任何軟體都可能會碰到的問題 — bugs。但是,與作者可以執行修補程式的普通代碼不同,存儲在區塊鏈上的代碼是不可更改的。更大的問題是,即使作者提供了新的智慧合約,舊的智慧合約在區塊鏈上仍然是可被執行的。

這表示在編寫合約時,作者必須特別注意地編寫安全代碼,包含設置一個終止開關,以確保代碼若有bugs,它們可以被終止。如果沒有終止開關,並且智能合約中存在可以被利用的漏洞,則可能導致智慧合約或其他個人資料遭到竊取。EVM 位元組碼包括一個特殊的 SELFDESTRUCT 操作碼,用於刪除合約,並將所有資金發送到指定的位址,而這個設置僅僅是為了此目的。

infamous DAO incident中,終止開關的需求成為人們關注的焦點。DAO智慧合約充當了一個複雜的分散式風險投資(VC)基金,並從一群投資者那裡收集了價值2.5億美元的以太幣。駭客利用智能合約中的漏洞,竊取了價值5000萬美元的以太幣。

由於沒有辦法撤銷以太坊中的交易,因此存在一個極具爭議的“硬分叉”,其中大多數社群同意接受具有“不規則狀態變化”的區塊,該區塊基本上將所有DAO資金投入到特殊的“WithdrawDAO”恢復合約中。通過說服足夠多的礦工接受這個不規則的區塊是有效的,讓DAO可以返還資金。

並非所有人都同意這個變化。那些不同意的人拒絕了這種不規則變化的區塊,並形成了以太坊經典網路,這兩種分歧的分支都各自獨立發展中。

但是,終止開關可能會導致問題。例如,當用作library的合約啟動終止開關時,所有仰賴於此合約的其他合約都不能再按預期運行,即使底層library代碼是不可更改的。這導致超過500,000 ETH在攻擊者觸發底層的終止開關時卡在多層簽核的錢包中。

多重簽核library的使用者假設代碼的不可變更性代表著該library將始終按預期運行。但是,與區塊鏈交互的智能合約只有在區塊鏈的狀態時才具有確定性。

在DAO之後,創建了各種工具來檢查智能合約中的bugs或啟動bugs賞金,例如 SecurifyThe Hydra

智能合約避免bugs的另一種方法是使用標準化模式。例如,ERC-20 定義了用於生成代幣(如 ICO 中使用的代幣)的標準化介面,而 ERC-721 定義了用於實現不可替代代幣的標準化介面。舉例來說,不可替代的代幣有建立在以太坊區塊鏈上的CryptoKitties這樣的交易卡牌遊戲。玩家可以購買、出售和繁殖貓,每隻貓都是獨一無二的。

CryptoKitties建立在一系列智能合約之上,該合約提供了一個 open-source Application Binary Interface (ABI),用於與KittyVerse(CryptoKitties的虛擬世界)進行交互。ABI僅允許你呼叫合約中的函式並接收任何返回的數據。KittyBase 代碼可能如下所示:

Contract KittyBase is KittyAccessControl {

event Birth(address owner, uint256 kittyId, uint256 matronId, uint256 sireId, uint256 genes);

event Transfer(address from, address to, uint256 tokenId);

struct Kitty {

uint256 genes;

uint64 birthTime;

uint64 cooldownEndBlock;

uint32 matronId;

uint32 sireId;

uint32 siringWithId;

uint16 cooldownIndex;

uint16 generation;

}

[…]

function _transfer(address _from, address _to, uint256 _tokenId) internal {

}

function _createKitty(uint256 _matronId, uint256 _sireId, uint256 _generation, uint256 _genes, address _owner) internal returns (uint) {

}

[…]

}

除了定義Kitty之外,該合約還定義了兩個用於轉移和創建Kitty的基本函式。兩者都是屬於內部的,且只能呼叫能實現KittyBase的合約。KittyOwnership 合約同時履行了 ERC-721 和 KittyBase,並實現了用來呼叫內部_transfer函式的外部transfer函式。此代碼被編譯成寫入區塊鏈的位元組碼。

通過實現像ERC-721這樣的標準化介面,不是很了解CryptoKitties的智能合約仍然可以與KittyVerse進行交互。CryptoKitties ABI函式允許使用者在KittyVerse之上創建自己設計的分散式應用程式(dApp),並允許其他使用者使用他們的dApp。這種可擴展性有效展現了智慧合約的潛力。

這有什麼不同?

根據定義,智慧合約是公開的。每個人都可以看到條款並了解資金的去向。這是一種跟以往不同,透明且有責任歸屬的方法。因為所有的合約和交易都是公開的,並且通過共識進行驗證,所以信任是在人與人之間分配的,而不是集中在幾個大機構中。

我們之所以信任機構是源自於觀察機構長期經營的狀況而給予的,因為它們向人民展現了可被信賴的特性。

信任基於共識的演算法是建立在這樣的一種假設,即大多數人都是誠實的,或者更準確地說,沒有足夠強烈的共同動機可以串通起來產生惡意結果。這就是信任的民主化。

在DAO攻擊的情況下,大多數節點同意接受“不規則”狀態的轉換。這有效地消除了攻擊的損害,並表示至少在區塊鏈世界中,你的想法就是真理、被重視的。因為大多數人“相信”(接受)這個不規則的區塊,它就變成了一個“真實的”、有效的區塊。而大部分的人認為區塊鏈是不可更改的,並相信共識的力量可以確保正確性,但是如果有足夠多的人決定做一些不符合規則的事情,他們就可能偏離正軌、推翻原有的共識。

那麼Cloudflare適合在哪裡投入呢?

直接訪問以太坊網路及享用其附帶的好處需要透過運行複雜的軟體,包括下載和加密驗證數以百計的千兆位元組的數據,除了給使用者設立技術性障礙外,也可以排除擁有低功耗設備的人。

為了幫助使用者和設備訪問以太坊網路,Cloudflare以太坊閘道允許任何訪問網路的設備以安全可靠的方式與以太坊網路進行交互。

通過Cloudflare的閘道器,你不僅可以探索區塊鏈,如果你於閘道器進行簽名交易,他們會將其推送到網路,以允許礦工添加到他們(礦工)的區塊鏈中。這意味著你無需運行節點就可以發送以太幣、在區塊鏈上放置新合約。

或許會有人有疑問,提供了這個閘道器的Cloudflare不就成為了中心化的機構?

Cloudflare並不是唯一提供這些閘道的公司。他們跟Infura等企業一起加入這個希望一同擴展現已存在的閘道器大家庭。他們希望,通過提供快速、可靠的服務,可以使以前從未使用過智慧合約的人能夠知道有這樣的方法存在,並以此為數十億普通互聯網用戶帶來好處。

“我們很高興Cloudflare將他們的基礎設施和專業知識帶入以太坊生態系統。Infura一直相信標準化、開放的API和閘道供應商之間相容的重要性,因此我們期待與他們的團隊合作,建構更好的分散式網路。” — E.G. Galano, Infura co-founder.

通過提供以太坊網路的閘道,Cloudflare幫助用戶從普通網路使用者躍升為加密貨幣使用者,並最終使分散式網路成為互聯網的基本組成部分。

你可以使用Cloudflare的閘道做什麼?

造訪cloudflare-eth.com與Cloudflare的示例app進行交互。但是若要真正探索以太坊世界,請訪問RPC API。你可以在其中執行能於以太坊網路上進行的任何操作,從檢查合約到轉移資金。

Cloudflare的閘道器接受包含 JSON 的 POST 請求。有關呼叫的完整清單,請訪問Ethereum github page。所以,要獲取最新區塊的號碼,你可以運行:

curl https://cloudflare-eth.com -H “Content-Type: application/json” — data ‘{“jsonrpc”:”2.0",”method”:”eth_blockNumber”,”params”:[],”id”:1}’

然後你會得到這樣的回應:

{

“jsonrpc”: “2.0”,

“id”: 1,

“result”: “0x780f17”

}

Cloudflare還邀請開發人員使用他們的API於他們的以太坊閘道建構dApp。他們的API允許開發人員建構由以太坊區塊鏈提供支援服務的網站。查看developer docs以開始使用。如果你想了解有關以太坊如何運作的更多資訊,可以查看此 deep dive

體系結構

以太坊閘道的推出讓Cloudflare具有獨特的定位和優勢,他們對要為客戶提供的產品充滿信心。這就是為什麼Cloudflare客戶也會選擇他們的以太坊閘道運行的原因,他們dogfood自己的產品,以提供快速可靠的通訊閘。

運行閘道的網域(https://cloudflare-eth.com)使用Cloudflare Workers來存取對閘道提出的熱門查詢的回應。這些回應會從 Cloudflare 邊緣獲得回覆,這可以提升約 6 倍的速度。

他們還使用Load balancingArgo Tunnel來解決速度、冗餘和安全方面的內容傳遞。啟用Argo智慧路由後,對以太坊閘道的請求和回應將透過最佳路由直接從他們的以太坊節點傳輸到Cloudflare邊緣。

https://blog.cloudflare.com/cloudflare-ethereum-gateway/

與他們的 IPFS gateway類似,cloudflare-eth.comSSL for SaaS。這意味著任何人都可以將Cloudflare以太坊閘道設置為後端,並通過自己的註冊域名訪問以太坊網路。有關如何使用此功能設置自己的域名的更多詳細資訊,請參閱 cloudflare.com/distributed-web-gateway

借助這些功能,你可以使用Cloudflare的分散式Web閘道架設一個完全去中心化的網站,該網站具有互動式的後端,允許與IPFS和以太坊網路進行交互。例如,你可以在IPFS上託管你的內容(使用Pinata之類的工具),然後將網站後端設置為以太坊上的智能合約。

此結構不需要中心化伺服器來提供檔案或實際網站。除了 Cloudflare 邊緣網路提供的強大功能、速度和安全性之外,你的網站將以無與倫比的效率傳遞給世界各地的使用者。

擁抱分散式未來

對 Cloudflare來說,他們支持協助分散信任的技術。透過提供以太坊網路的閘道,他們希望促進去中心化未來的發展。

他們也很感謝以太坊基金會對拓展分散式網路的新閘道的支援:

“Cloudflare的以太坊閘道增加了精簡型用戶端應用程式的選擇以及以太坊生態系統的去中心化,Cloudflare是最適合做這項工作的團隊,允許通過使用者的自定義主機名進行造訪是一個特別好的巧思。“ — Virgil Griffith博士,以太坊基金會特別項目負責人。

他們希望透過允許任何人使用閘道器作為其網域的後端,使每個人都能更容易訪問以太坊網路,通過直接從 Cloudflare 的全球邊緣網路提供此內容而帶來更快的速度和更高的安全性。

以上文章譯自https://blog.cloudflare.com/cloudflare-ethereum-gateway/

關於兌心科技 Insight Software

最懂你的雲端合作夥伴 — We know what you want

兌心科技的專業橫跨多個領域,雲端架構、遊戲製作、區塊鏈技術、去中心化金融、醫療資訊和物聯網服務等,致力於成為企業Web2.0到Web3.0的領航員,提供雲服務、線路、區塊鏈、金庫等解決方案。

不僅孵化區塊鏈新創,且經過嚴謹的過濾驗證,將值得信任、可靠的項目加入生態系中,進而推廣給使用者。

聯絡我們 :

聯絡兌心 ▸ https://t.me/Insight_software
官方網站 ▸ https://www.insight-software.com/about-3

社群 ▸
Youtube
Telegram
Twitter
Instagram
HackMD

--

--