🎤 爲偶像應援 · Gate送你直達 Token of Love! 🎶
家人們,現在在Gate廣場爲 打 Token of Love CALL,20 張音樂節門票等你來瓜分!🔥
泫雅 / SUECO / DJ KAKA / CLICK#15 —— 你最期待誰?快來一起應援吧!
📌 參與方式(任選,參與越多中獎幾率越高!)
1️⃣ 本帖互動
點讚 & 轉發本帖 + 投票你最愛的藝人
評論區打出 “我在 Gate 廣場爲 Token of Love 打 Call !”
2️⃣ 廣場發帖爲 TA 打 Call
帶上 #歌手名字# + #TokenOfLove#
發帖內容任選:
🎵 最想現場聽到的歌 + 心情宣言
📣 應援口號(例:泫雅女王衝鴨!Gate廣場全員打 Call!)
😎 自制表情包/海報/短視頻(加分項,更容易中獎!)
3️⃣ 推特 / 小紅書發帖打 Call
同樣帶上 #歌手名字# + #TokenOfLove#
內容同上,記得回鏈到表單 👉️ https://www.gate.com/questionnaire/7008
🎟️ 獎勵安排
廣場優質發帖用戶:8張門票
廣場幸運互動用戶:2張門票
Twitter 優質發帖用戶:5張門票
小紅書優質發帖用戶:5張門票
📌 優質帖文將根據文章豐富度、熱度、創意度綜合評分,禁止小號水貼,原創發帖更易獲獎!
🕒 8
全鏈遊戲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直接通過節點執行,可以提昇運算效率,但同時降低了全鏈的去中心化程度。將高頻使用的遊戲核心邏輯置於預編譯中,可以優化該類游戲的性能。不同的遊戲類型,其關鍵邏輯也不盡相同。因此,針對某一類游戲的專用鏈上,其預編譯設計可以高度優化該類型遊戲的需求。在遊戲迭代過程中,最具效率的預編譯合約組合也會逐步優化出來。