✈️ Gate 廣場【Gate Travel 旅行分享官召集令】
廣場家人們注意啦!Gate Travel 已經上線~ 機票+酒店一站式預訂,還能用加密貨幣直接付款 💸
所以說,你的錢包和你的旅行夢終於可以談戀愛了 😎 💕
現在廣場開啓 #GateTravel旅行分享官# 活動,邀你來秀旅行靈感 & 使用體驗!💡
🌴 參與方式:
1️⃣ 在【廣場】帶話題 #Gate Travel 旅行分享官# 發帖
2️⃣ 你可以:
你最想用 Gate Travel 去的目的地(私藏小島 or 網紅打卡點都行)
講講用 Gate Travel 訂票/訂酒店的奇妙體驗
放放省錢/使用攻略,讓大家省到笑出聲
或者直接寫一篇輕鬆的 Gate Travel 旅行小故事
📦 獎勵安排,走起:
🏆 優秀分享官(1 名):Gate 旅行露營套裝
🎖️ 熱門分享官(3 名):Gate 旅行速乾套裝
🎉 幸運參與獎(5 名):Gate 國際米蘭旅行小夜燈
*海外用戶 旅行露營套裝 以 $100 合約體驗券,旅行速乾套裝 以 $50 合約體驗券折算,國際米蘭旅行小夜燈以 $30合約體驗券折算。
📌 優質內容將有機會得到官方帳號轉發翻牌提升社區曝光!
📌 帖文將綜合互動量、內容豐富度和創意評分。禁止小號刷貼,原創分享更容易脫穎而出!
🕒 8月20 18:00 - 8月28日 24:00 UTC+
全鏈遊戲101:預編譯合約
**什麼是預編譯合約? **
預編譯合約是EVM 中用於提供更複雜庫函數(通常用於加密、散列等複雜操作)的一種折衷方法,也可以理解為一種特殊的合約,這些函數不適合編寫操作碼。它們適用於簡單但經常調用的合約,或邏輯上固定但計算量很大的合約。預編譯合約是在使用節點客戶端代碼實現的,因為它們不需要EVM,所以運行速度很快。與使用直接在EVM 中運行的函數相比,它對開發人員來說成本也更低。
如下代碼可以看到, evm.go的合約中run函數有兩個分支:第一個分支是通過預編譯索引來實例化索引參數從而指定預編譯合約,第二個分支是如果它不是預編譯合約那evm將會被調用。
// run 運行給定的合約並負責運行預編譯,並回退到字節碼解釋器。 func run(evm *EVM, 合約 *合約, 輸入 []byte, readOnly bool) ([]byte, error) { if Contract.CodeAddr != nil { 預編譯 := PrecompiledContractsHomestead if evm.ChainConfig().IsByzantium(evm.BlockNumber) { 預編譯 = PrecompiledContractsByzantium } if p := 預編譯[*contract.CodeAddr]; p != nil { 返回 RunPrecompiledContract(p, 輸入, 合約) } } 對於_,解釋器:=範圍evm.interpreters { ifterpreter.CanRun(contract.Code) { if evm.interpreter != 解釋器 { // 確保解釋器指針被設置回來 // 返回時返回其當前值。 defer func(i 解釋器) { evm.解釋器 = i }(evm.解釋器) evm.interpreter = 解釋器 } 返回解釋器.Run(合同,輸入,只讀) } } 返回 nil,ErrNoCompatibleInterpreter }
用圖形來表示的話,具體的邏輯如下圖:
那麼預編譯合約的瓶頸在哪裡?
以太坊目前有八個預編譯的合約:
可以看到第一到第四個預編譯合約提供的基礎的簽名,哈希等加密功能,第五個到第八個提供了橢圓曲線運算,這些和zk-snark相關。
那麼問題來了,為什麼以太坊預編譯只支持了八個預編譯合約,預編譯合約不是降低了gas消耗嗎?而且為什麼不直接把ECS(全鏈遊戲的框架)植入以太坊預編譯合約中呢?
其實主要是以下三個原因:
1.過度依賴預編譯合約會降低整個平台的去中心化程度:
首先,預編譯合約的代碼需要集成在客戶端節點代碼中,增加了客戶端的複雜性。第二,驗證節點可能因為安全原因可能會過濾掉預編譯合約的計算,所以大部分預編譯合約的請求是由全節點完成的,目前全球的以太坊全節點的數量只有4000-6000個,而且驗證節點有50萬個,確實比起非預編譯合約要中心化很多。
2.預編譯合約的新增和修改需要硬分叉升級,不易靈活演進。
預編譯合約的支持需要進行EIP流程,舉個例子:EIP-196增加了在alt_bn128曲線上的ECADD()和ECMUL()兩個預編譯合約。 EIP-197增加了在alt_bn128曲線上的配對Pairing函數。基本都是為了讓隱私在以太坊上可用進行支持,而且整個EIP的流程是漫長和考究的,等待EIP通過也不是一個現實的問題。
3.預編譯合約之間難以進行交互和組合,擴展性差。
這點就不多做解釋了,很直觀。
預編譯合約在全鏈遊戲扮演什麼角色?
預編譯合約跳過EVM直接通過節點執行,可以提昇運算效率,但同時降低了全鏈的去中心化程度。將高頻使用的遊戲核心邏輯置於預編譯中,可以優化該類游戲的性能。不同的遊戲類型,其關鍵邏輯也不盡相同。因此,針對某一類游戲的專用鏈上,其預編譯設計可以高度優化該類型遊戲的需求。在遊戲迭代過程中,最具效率的預編譯合約組合也會逐步優化出來。