ETHS 顯然是金融炒作而非產品創新,提款流程依賴於第三方公證人/管理者,有被盜風險。

作者:霧月,極客 Web3

封面:ETHS

導語:目前的乙太坊銘文本質還是 Ordinals 的新瓶裝舊酒,沒有真正意義的新範式。 ETHS 仍然存在安全風險,雖然它的確比 Rollup 去中心化,但其提款流程還是依賴於第三方公證人/管理者,有被盜風險。 顯然 ETHS 當下還是以金融炒作居多,而不是說它能帶來乙太坊 Layer2 帶不來的革新。

圖片

近期 BTC 生態銘文的火熱,帶動了其他鏈的開發者搭建類似的系統。 不同鏈上的銘文系統的實現方式和可實現的功能略有不同,但有一些共同點:

  1. 銘文都利用了轉帳時附加的文本資訊來表達想要完成的操作,如,在資訊內寫入「向 XXX 轉 1 個幣」。。 注意,這些資訊是純文本的,不會涉及鏈上的智慧合約執行等操作。
  2. 開發者會設計一系列規範和標準,來將所有的文本資訊規範化。
  3. 開發者提供一套 Indexer 索引器,用於將鏈上所有銘文的文本資訊歸集後,計算銘文系統的內的狀態。 Indexer 是個鏈下的開源元件,任何人都可以運行。

BTC 銘文 Ordinals 在 BTC 上建立了一套發行 NFT、代幣的機制,也引出了對 BTC L2 的大規模思考,在這個意義上我們可以認為 Ordinals 具有一定的前沿和探索性質。 不過,Ordinals 在技術和產品體驗上受到了 BTC 本身架構的限制,同時也因為粉塵污染和數據佔用等原因,遭到了 BTC 社區 OG 的非議。

那麼,在乙太坊上複刻銘文,是否有意義呢? 畢竟乙太坊本身具有複雜的智能合約,ERC20、NFT 也是乙太坊上本身就有的內容; 這些銘文專案又會對乙太坊生態產生怎樣的影響,會出現在 BTC 上上的爭議和風波嗎?

Ethscriptions 的技術實現方式

我們先來看一下 Ethscriptions 的實現方式,它是乙太坊上著名的銘文專案,主要利用 Calldata 來實現運轉。

Calldata 是以太坊交易中傳輸的原始輸入數據。  一般用於傳輸智慧合約交互時需要的參數,但也可以用於向 EOA 位址發送文本消息(留言,銘文刻字,轉帳備註等任何用途)。 圖中 Input Data 即 calldata。

圖片

如果你想使用 Ethscriptions 在交易中銘刻 “Hello world”,則需要構建一條包含如下 calldata 的交易:

圖片

鏈下的 Indexer 監聽到這筆交易后,就會更新資料庫並通知使用者:一條新的銘文產生了,銘刻的內容是 Hello world。 銘文里也可以放更複雜的內容,如代表圖片資訊的 base64 等。

Ethscriptions 目前通過了 6 個 ESIP(Proposals for improvement to the Ethscriptions protocol),類似 EIP 的提案,來定義不同場景下銘文的使用。 但這些僅僅是比較基礎的銘文規範,比如從 EOA 發起的銘文交易的格式,合約 emit 事件等等。

Ethscriptions 由於是在乙太坊上的專案,也可以利用乙太坊的智慧合約實現一定程度上的邏輯。 需要注意的是,直接與智慧合約進行交互並不是 Ethscriptions 推薦的方式。

雖然官方的 NFT 市場等也是直接用智慧合約實現的。 根據官方文檔的說法,Ethscriptions 想要為使用者提供的是「去中心化且價格合理的運算服務」:將運算剝離至鏈下,將顯著降低乙太坊的使用成本。

我們來具體探究一下調用智能合約的成本,可以分為三部分:

  • 基本交易成本:任何乙太坊交易都需要支付,目前為 21000 gas。
  • 數據傳輸成本(calldata):calldata 一般用於提交與智慧合約交互的數據和參數。 EIP-2028 調整后,calldata 數據每個位元組一般消耗 16 gas(若是數據為 0 的位元組 消耗 4 gas)。
  • 合約執行成本:如果交易調用了智能合約中的函數,那麼根據函數執行的複雜度,還需要支付計算成本。 例如,如果涉及狀態更新(比如在 ERC-20 合約中更新餘額資訊),調用 SSTORE 會消耗高達 5000~20000 gas。

我們以一個非常簡單的 USDT 轉帳的交易為例,該交易總共耗費了 63197 gas,calldata 為:

圖片

我們解析下該 calldata,以及它會花費多少 gas:

  • 乙太坊 calldata 為十六進位格式,也即每兩位為一個字節(16^2 = 2^8)。 開頭的 0x 代表數據採用 16 進位。
  • 开头 0x 后面的 a9059cbb  是函數選擇子,佔用 4 個非零位元組。
  • 之後的 32 位元組為位址,前面有 12 位元組的零(因為乙太坊位址是 20 位元組,這裡左補了零到 32 位元節),以及 20 位元組的非零地址數據。
  • 最後 32 位元組代表金額,左補了大量的零,末尾有 非零數據,4 位元組非零。3b9aca00
  • 所以,非零位元組 28 個,零位元組 40 個

因此,calldataGas = 28 * 16 + 40 * 4 = 608 gas

而總 gas 為 63197,減去 calldata 成本和固定成本,則執行該交易的智慧合約計算成本為 41589 gas。  在這筆交易里合約運算成本佔了大頭,而這僅僅是一筆簡單的交易,複雜的交易中合約運算的成本會進一步上升。

將運算過程放至鏈下確實會顯著地降低使用成本:不想在鏈上直接調用智慧合約的話,可以向一個約定好的 EOA 位址

0x00000000000000000000000000000000000face7  發送交易數據

在交易的 calldata 中聲明原本想調用哪個合約,以及相應的輸入參數。 由於上述位址是一個 EOA 帳戶,沒有合約代碼,所以前面所說的操作不會在鏈上觸發計算任務,只是發佈了一條消息而已。

而在鏈下,Indexer 監聽到這條消息后,就會進行解析,弄清楚這條消息的發起者原本想調用 ETH 鏈上哪個合約,然後 Indexer 會在鏈下計算出合約調用的結果。

那麼線下的 Indexer 想要進行銘文和智慧合約的運算,就必須有一套 STF(狀態轉換函數)規則和運行時,複雜點的可以叫虛擬機 VM。 Ethscriptions 在 ESIP-4 中推出了自己的 VM——Ethscriptions VM,後來改名為 Facet VM。

Facet——有點像協處理器

Facet 將自身定義為一個便宜好用,安全,去中心化的計算平臺。  監聽乙太坊上 Ethscriptions 的 calldata,拉到 VM 中進行運算,最終給使用者返還結果。 Facet 包含幾個關鍵的組成部分:

  • Facet VM,用 ruby 編寫的一套 VM,負責監聽 ETHS 交易,解析 calldata,執行運算。
  • Rubidity,Facet 中的智慧合約程式設計語言,與 Ruby 有一定相似性,又保留了很多 solidity 的用法和概念,以期開發者能快速上手。
  • Dumb Contract,呆笨合約,一種在 Facet 上運行的合約。 這個名字充滿了幽默感。 有人稱其為啞合約也是對的,dumb 本身是雙關的,啞可以描述這種合約工作的靜默過程。 但另一方面根據官方名言 “So dumb, they're smart”,大愚若智,一股濃濃的與 smart contract 叫板的意味,所以叫呆笨合約也沒問題。

呆笨合約本身不會真正部署在乙太坊上,只是其代碼會以 calldata 的形式發佈到 ETH 鏈上。  下面是一個 Facet 對呆笨合約的調用案例:

一筆鑄幣交易,向 EOA 黑洞位址

0x00000000000000000000000000000000000face7  提交下圖中的 calldata,聲明自己要 mint 的代幣和數量即可,這其實和 Ordinals 或 BRC-20 如出一轍

圖片

我們再來看一下 Rubidity 和 Solidity 的直觀對比,見下圖。

圖片

雖然官方說 Rubidity 具有類似 Solidity 的概念和結構,以便開發者快速上手。 但我們知道其實這對開發者側的發展來說是有一定負面影響的。 並且目前 Facet VM 僅支援官方白名單中的呆笨合約,這說明官方對這套語言以及 VM 並沒有很十足的信心。 是否複用 EVM 對官方而言,在工程技術上比新開發一個 VM 和一個新的語言更難,我不得而知。 但有一點可以肯定的是:全新的語言、全新的合約、全新的生態、全新的乙太坊使用方式,確實有足夠的噱頭。

Facet 對智慧合約的抨擊

Facet 文檔中對乙太坊和智能合約做出了如下的勁爆評論:“Smart Contracts are considered to be the feature above all others that makes Ethereum special, and yet Facet's thesis is that Smart Contracts are Ethereum's biggest design flaw.”

他們認為乙太坊的智慧合約是最大的設計缺陷,因為合約本身只要給定輸入(calldata),其輸出就是確定的,因此不應該在鏈上進行運算,平白無故浪費錢。 再結合 Ethscriptions 所說的「去中心化且價格合理的運算服務」,顯然 Ethscriptions 和 Facet 非常想打造一種市場印象,“我們正在製造全新的乙太坊擴容範式和使用方式”,但實際上 ETHS 自己的一些技術方案不是很靠譜

從產品角度看,Facet 可以在鏈下間接調用智能合約,又有自己的鏈下的呆笨合約體系,確實官方正在踐行其口號。

從經濟角度講,天下沒有免費的午餐,存儲和運算當然是要錢的。 那請問 Indexer 該如何解決這部分成本呢?  這官方就沒有什麼明確說明瞭,我們可以想像一下:

  • 向用戶收費。 比如 NFT 市場向買家收取的手續費,但我們不能以一個簡易的項目的收費模型看待一個類 L2 網路的長遠收費方式。
  • 靠自身生態炒作關聯致富。 這個當然可行,但只是一種短期的讓專案方一時爽的方案。 Ethscriptions 如果想成為一種全新的乙太坊範式,Indexer 必須有長久的,從網路出發的經濟機制來保障運轉。
  • 如果是不盈利的 Public goods,那麼會有哪些機構 donate 呢? 我覺得至少乙太坊基金會不會特別積極,因為本身乙太坊有非常好的方案——Rollup。

Facet 和呆笨合約出現的根本原因

如果我們只是需要乙太坊銘文的簡單形式,那麼只需要 Ethscriptions 一個專案就夠了。 那為什麼其 ESIP-4 提案又催生出了 Facet 呢?

因為銘文體系沒法用於複雜的交易邏輯。 我們可以考察下 Ethscriptions 官方的 NFT 市場合約的運作邏輯,它使用了掛單機制。

圖片

如果要將銘文 NFT 充值進合約,僅需要把 calldata 寫為銘文的 並調用市場合約。 由於這種操作故意選擇無效的函數調用形式,預設會觸發 fallback()。EthscriptionId

圖片

最終會在乙太坊鏈上拋出一個名為 的事件,Indexer 節點在鏈下監聽到這個事件后,便會在本地將 NFT 的歸屬權划轉為市場合約。PotentialEthscriptionDeposited

圖片

為了節省 gas,ETHS 的交易市場沒有把賣家掛單的一些參數,如價格、截止時間等放在 ETH 合約裡存儲,而是以消息的形式放在了線下,目測應該是存儲在了 dApp 的伺服器上。 買家監測這個消息后,就可以發佈 指令提出購買。buyWithSignature()

圖片

對 NFT 而言使用掛單機制是正常的,因為 NFT 本身不具有同質性。 那麼如果是均質化的代幣銘文,能否使用合約的 AMM 機制呢? 答案是不行的。 銘文 NFT 或代幣的狀態,都不在 L1 上,就和 Ordinals 和 BRC-20 差不多。  這和一些社群的宣傳是截然相反的,大家需要注意甄別,銘文並不是真正意義的 ETH 鏈上的資產。  我們並不能說生成資產的 calldata 在 L1 上,並且可以在 L1 上聲明操作指令,就叫 L1 上的原生資產,否則 Rollup 上的 L2 原生資產我們也可以稱為 L1 資產,因為 Rollup 的 calldata 都在 L1 上。  顯然,管這種資產叫 L1原生資產非常荒謬。

你可能會疑惑,上面不就是利用智慧合約進行了買賣嗎? 怎麼就說合約不能讀取和操作銘文呢? 其實這個合約只負責收錢,轉錢,拋出事件供鏈下的 Indexer 節點監聽並觸發對應的操作。  乙太坊EVM 眼中,銘文這類東西的狀態,無法在乙太坊專門存儲狀態的資料庫「世界狀態」中還原出來,合約也沒法引用它。

不論資產是什麼形態,代幣也好 NFT 也好或者任何稀奇古怪的東西,我可以給出一個非常簡單的標準鑒別 L1 資產和 L2 資產:它的狀態能否在乙太坊的 “世界狀態” 上還原出來,L1 的 EVM 能引用、調用、查詢、修改該資產的狀態,如果不能,那它就不是 L1 的資產。

所以你也可以看到充值的事件名字叫 ,即「可能的銘文充值」,而不是一個確定性的充值,因為合約沒法判定這個銘文是否存在,無法驗證其真偽。 如果你掛單了一個不存在的銘文,或者別人的銘文,合約不會拒絕你,只是 Indexer 不會收錄你的行為而已。PotentialEthscriptionDeposit

因此銘文系統只能實現這種簡易的偽合約邏輯,掛單就是其中一種。  掛單的本質是交易雙方在一種規則下互相認同對方提供的資訊,其實不用智能合約用純文本也可以表達,這和銘文的道理類似。

我們可以想像一下如何不使用智能合約來完成上述過程:賣家在普通交易中刻一筆消息,轉給我 1ETH 並附言 123 的人可以獲得我編號為 123 的銘文 NFT。 這樣只需要 Indexer 支援這種邏輯,它監聽到了有人轉了 1ETH 給賣家並附言 ABC,就可以直接在鏈下的 Indexer 資料庫里划轉。

當然這個例子實際上會帶來一些問題,比如多人搶購一個 NFT 可能導致的重複交易等,賣家收了多筆轉帳,但最終 NFT 只能被 Indexer 劃給一個人。 這也應該是官方明明抨擊智能合約,卻使用合約實現 NFT 市場的原因之一,因此你也應該能明白官方所說的通過 Facet 不進行計算而調用智慧合約是不靠譜的宣傳

當然,掛單理論上可以使用純文本,而不是非要用合約,但 AMM 這種相對比較複雜的邏輯就必須用智慧合約,因為它需要的不是雙方 p2p 式的認同,而是合約認同。 充當了可靠審查者的合約,需要檢查餘額、流動性等基礎資訊,並進行運算,任何他所需的資產數據,合約都必須能夠獲取到。

而 AMM 僅僅是比較簡單的一種 DeFi 形式,其他任何複雜的邏輯在僅僅在 Ethscriptions 上都是無法實現的。 這也是為什麼推出了 Facet 的原因——Facet 的第一要務是跨域! 它其實就是個 L2,只是沒有區塊結構,所以我們不叫跨鏈而叫跨域。 當所有的 L1 資產跨域到 Facet 後,就不存在跨域無法調用的問題,可以在鏈下對所有鏈下資產用呆笨合約進行操作,進而支援複雜的合約邏輯。

和 Rollup 的對比

通過上面的長篇大論,大家應該能發現,Ethscriptions 的方案有點類似於 Rollup。 但這僅僅是「類似於」,如果嚴格的說的話,它只能實現 Rollup 核心功能的子集。 而殘缺的功能則為其敘事帶來了致命傷,或者說將使用者置於嚴重的威脅之中。

圖片Rollup 是一套複雜的體系,這裡我們不展開。 它和 Ethscriptions 有些共同點:

– 都在乙太坊上提交 L2 交易的數據 calldata。

– 都將運算放在鏈下處理。

共同點非常清晰,我們需要詳細論證一下不同點。

Rollup 批量提交 calldata

Rollup 中使用者大部分情況不會向 L1 直接提交交易,而是提交給鏈下的排序器,排序器會對所有交易排序後打包、壓縮,將 calldata 批量發送至 L1。 這樣多個使用者的 calldata 在一筆交易中提交,可以攤薄 21000 gas 的基礎成本。

在 Ethscriptions 中沒有這樣的機制,所有的使用者直接向 L1 提交 calldata。

我們用上面那個 USDT 的例子(608 gas for calldata),假設有 100 個使用者發起了 100 筆交易,非常不嚴謹地粗略計算下二者的成本差別:

  • 銘文使用者每人都需要支付 21608 gas(608 + 21000)。 其餘運算部分不支付,因為運算在鏈下。
  • Rollup 使用者每人支付 818 gas((608*100+21000)/100)。 運算部分同上。

當然,Rollup 用戶每個人還需要向排序器繳納 L2 的運算和存儲費用,但相對 L1 低廉很多,在本例中可以忽略不計。 另外,rollup 還需要額外的一些特殊欄位增加了體積,但同時又有比較好的數據壓縮,這裏我們也不展開。

通過這種粗略的估算就可以發現,Ethscriptions 對比 Layer2,在成本方面沒任何優勢。 另外,該專案的社區宣傳話術中我看到過類似「4000 個銘文可以批量轉帳,大概需要 0.11ETH,平均每筆轉帳只需要 0.05U」以此來證明 Ethscriptions 的使用很便宜,這其實都沒有理清 ETHS 的原理與交互細節。

鏈下預確認

由於具有鏈下的排序器,Rollup 的使用者請求可以在 1s 內得到預確認。 這一點比銘文系統在 L1 上的 12 秒或更久,UX 要好很多。 當然,銘文支援者也可以反駁說,在 calldata 提交到 ETH 鏈上前,這樣的交易結果最終性都是不可靠的。

抗審查性和去中心化

使用者在 Rollup 有可能被鏈下的排序器審查,而 Ethscriptions 無法審查使用者。 但設計良好的 Rollup 會有強制歸集功能,以對抗排序器的審查,最終使排序器完全不具備審查用戶的權力。

所以使用者使用 Rollup 時,也是可以直接在 L1 上繞過排序器使用的。 Rollup 給使用者不同的選擇,可以使用更快的排序器,也可以直接用 L1。 但 Ethscriptions 只能使用 L1,並沒有給使用者自由選擇的餘地。

另外 Ethscriptions 詬病 Rollup 的排序器是中心化的。 但 Indexer 本身也是高度中心化的元件。 Ethscriptions 解釋說 Indexer 由於任何人都可以運行、驗證,所以不算中心化,但事實上絕大多數人都不會自己運行節點。  所以 ETHS 只是在極端情況下,會體現出它比 Rollup 去中心化的一面,畢竟 Rollup 排序器可能宕機或者故障,但 ETHS 只要有社區成員運行多個 Indexer,就可以持續運轉

盈利模式

任何專案都不可能用愛發電,長遠發展的專案必須認真考慮盈利模式的問題,不論是中心化實體還是去中心化實體的組合,都必須有盈利才能夠長期地守護網路安全。

Rollup 的排序器有明確的盈利模式:多收取 gas,榨取 MEV 等。 排序器有動力保證網路的正常運轉。 Ethscriptions 由於使用者直接向 L1 提交 calldata,Indexer 其實不好收費。

開發者友好程度

大多數 Rollup 的合約開發語言、工具鏈等都直接使用乙太坊的即可,開發者可以無縫遷移至 Rollup。 在 Ethscriptions 中這些都不存在,需要掌握新的 Rubidity,需要構建新的 scan,熟悉新的 VM 等等。 當然,這些阻力反過來看也是一個新生態發展時可能帶來的拓荒的機會。

提現和狀態結算

這是 Facet 的致命問題。 我們知道 Rollup 不僅僅會將 calldata(輸入)批量提交到 L1 上,也會定時將 N 個運算後的狀態結算(輸出)提交到 L1 上。 ZKR 和 OPR 有不同的證明方式來確定輸入和輸出的關係是否正確,不論什麼證明方式,最終的裁判都是 L1 上的合約。 在 Rollup 上輸出和輸入是有跡可循的,無法造假的。

那麼狀態結算有什麼用呢? 用於提現,也即 L2 到 L1 的資金提取。 當 L1 上的狀態發佈后,我們就可以根據狀態根,用 Merkle Proof 等手段,去證明我在 L2 上的提現請求包含在了該狀態根裡。 合約驗證無誤后就可以在 L1 上放行資產。

Facet 沒有狀態結算機制,所以他無法實現 L2 到 L1 的無許可、去中心化的提現。  上面提到過,他又需要一個 L2 層,以執行更複雜的合約邏輯。 如他的 AMM Swap FacetSwap。

我們可以看到在 FacetSwap(Facet 上用呆笨合約構建的 dex)中明確有充值和提現兩個動作。 一般 Swap 是沒有充值和提現的,因為 Facet 需要你先跨域才能使用。

圖片

在 Facet 中,充值需要在 L1 橋合約上將 L1 的資金鎖定,並且發射出對應的事件 讓 Indexer 進行索引。 這和其他的 L2 的充值的手段是一致的。ethscriptions_protocol_CreateEthscription

而提現則有嚴重的安全問題。  由於在 Facet 上沒有任何的狀態結算機制,L2 到 L1 上無法用合約自動判定一筆提現是否有效。 那 Facet 使用了什麼方法呢? 管理員放行,或者叫見證人機制,類似於此前被盜的 Axie 橋。

我們直接來看一眼 Facet 的橋,位址為

0xD729345aA12c5Af2121D96f87B673987f354496B

圖片

hashedMessage  是經過 signer 簽名的一個消息,裡面即提現的一些內容。 signer 是一個預設的管理員位址。 因為沒有狀態結算沒法做任何校驗,比如該帳戶在 L2 上是否有這麼多幣。  所以完全憑 signer 簽名就可以將合約上的所有資金取走,不論是專案方作惡還是駭客攻擊獲取私鑰。

在 Rollup 中,根本不需要見證人放行資產; 在側鏈中,見證人如果想做的去中心化一些,可以從本身的共識體系中選擇出一部分作為代理,用質押等方式進行一定的經濟威懾遏制作惡。

在 Ethscriptions 和 Facet 中,nothing。 它簡單地、不加掩飾地就是一個管理員位址。 這對於一個動輒喊著「智慧合約是設計缺陷」、“Rollup 是中心化的”、“我們是新一代計算平臺” 的類 L2 專案而言,恐怕過於潦草了。  顯然,他的缺陷還有很多,但我們可以對此保持觀望,雖然這些缺陷不太好彌補,並且可能同樣在比特幣 Layer2 身上存在。

總結

目前的Ethscriptions存在一定的「虛假宣傳」,幾個要點:

  • Ethscriptions 和 Facet 上的資產,都不是發行在 L1 上的資產。
  • 為了有複雜的合約能力,演化出了 Facet 這個 L2 實體,但有極大的資金安全隱患。
  • 官方宣稱的在 L1 上去合約運算化,卻連自己的頭牌應用都不用。
  • Ethscriptions 類似一個基礎功能非常不全的 Rollup。 既沒有 Rollup 的便宜和迅速,也沒有 Rollup 的安全。 他能實現的,Rollup 都能實現,Rollup 能實現的很重要的功能它無法提供。
  • 如果想解決上述問題,他需要發展出狀態結算機制,再加上排序器,L2 區塊,那麼它最終就變成了 Rollup。

Ethscriptions 趁著 BTC 銘文的風口,依靠概念炒作新瓶裝舊酒,但還沒有發掘出新的範式。 目前的 ETHS 還是以金融炒作為主,而不是說這種產品本身能帶來乙太坊 Layer2 沒有的東西。 這種東西的長期價值,顯然還有待人們去挖掘,但就以目前的形式來看,ETHS 已經承擔了「生命不可承受之重」,他的宣傳口號與其實踐效果相差甚遠。

免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。