CPU告急,EOS網絡擁堵該如何解決?:愛愛姿勢

時間:2023-12-27 21:34:15 作者:愛愛姿勢 熱度:愛愛姿勢
愛愛姿勢描述::CPU告急,EOS網絡擁堵該如何解決? EOS CPU告急,主網再次擁堵 11月1日,ENU社區的創始人AP在EOS上發行了代幣EIDOS(ENU Is Dead,Oh Shit),并再一次通過和ENU相同的代幣分發方式對EOS社區進行空投。 根據EIDOS分發規則,EOS持有者可以發送任意金額到EIDOS的智能合約賬戶,智能合約會返回等量的EOS和賬戶池總量的0.01%的EIDOS。 這意味著,越早期參與的用戶能夠獲得的EIDOS就越多。大量EOS用戶涌入到了這場空投活動中,其火爆程度一點不輸于當時的ENU。 然而,就在EOS用戶爭先想要效仿ENU的暴富神話時,號稱百萬TPS的EOS卻率先崩潰,EOS社區內這場大規模空投活動直接導致了EOS全網擁堵。 截止到目前為止,EOS的CPU資源價格已提高了將近1000倍,轉賬一次需要抵押將近7000個EOS。同時主網CPU、NET等資源也一路暴漲,根據EOSpark數據光CPU這一項就上漲了109533.33%。這意味著,超過90%的EOS用戶根本無法使用轉賬功能。 EOS的資源模型的利弊 這些問題是出于EOS的資源模型設置,在EOS中用戶交易免費,但是必須要抵押足夠的資源才能交易。 EOS將資源分為三類:RAM、CPU、NET,用戶可以抵押EOS來換取資源的使用權。 RAM即內存,用來記錄賬戶信息,包括賬戶余額、公鑰、質押、投票、智能合約等。通常需要3KB-8KB的容量來存儲個人EOS賬戶信息。RAM是可以隨時買賣的,每筆收取0.5%的手續費,同時價格也是隨RAM的稀缺程度時刻變動的。 CPU/NET是質押類型的資源。當EOS賬戶進行轉賬、投票等操作時,會消耗主網的算力和帶寬,此時需要質押一部分EOS來換取CPU/NET,每天使用的算力和帶寬會在24小時后重置。質押的EOS是可以隨時贖回的,但是會存在72小時的凍結期。 這種解決方案不同于以太坊等直接收取GAS燃料費。EOS的方式使得交易費在資源充足的情況下,可以免費交易。這大大方便了開發者和使用者。但是因為節點的物理機器的計算能力和存儲能力都是有限的,所以整個網絡中用戶能使用的資源也是有限的。 這次EIDOS代幣空投事件,隨著抵押EOS新用戶數量的不斷增加,價格也不斷上漲,老用戶原先擁有CPU的比例也會隨之縮水,導致用戶資源不足,無法交易。同時因為自由市場的緣故,會導致大量用戶主動大量購買CPU,造成惡性循環。 EOSC資源模型的解決方案 EOSC主網是EOS原力團隊在2018年6月基于優化后的EOSIO代碼啟動的主網,是EOSIO生態的一部分。 在EOS上線之初,EOS原力團隊就曾經指出EOS資源抵押模型的弊端,惡意攻擊者只需要抵押數萬EOS就能低成本地讓EOS全網陷入癱瘓。EOS原力為了使得所有用戶都能使用到資源來進行交易,并解決主網運行中產生的一系列問題,對EOS進行了修改,建立了一套新的資源模型, 在保證資源分配公平合理的情況下,盡量減少對于資源的濫用,讓真正需要資源的用戶可以使用EOSC網絡提供的資源。 和EOS相比,主要有兩點不同: 1) 基于手續費分配的交易方式 在EOSC中,我們需要用戶為其所觸發的每一個action支付手續費,這一方式類似與以太坊CPU資源和NET資源是基于手續費分配。每一筆手續費會為其action提供一個CPU和NET的資源使用上限, 對于系統原生的action如轉賬、創建用戶、更新權限等action,可以采用固定手續費和限制的方式便于用戶使用,在默認情況下,每次交易支付0.01 EOSC,這樣又激勵了開發者優化合約代碼邏輯,提高資源使用率,又為用戶帶來了非常流暢的使用體驗 執行過程: cleost transfer eosforce test "5000.0000 EOS" "fo test" executed transaction: ed62211eda722230472d416a8e3c92ab3f950fe951bcd357f9fb217792dac936 152 bytes 213 us # eosio <= eosio::onfee {"actor":"eosforce","fee":"0.0100 EOS","bpname":"biosbpb"} # eosio <= eosio::transfer {"from":"eosforce","to":"test","quantity":"5000.0000 EOS","memo":"fo test"} # eosforce <= eosio::transfer {"from":"eosforce","to":"test","quantity":"5000.0000 EOS","memo":"fo test"} # test <= eosio::transfer {"from":"eosforce","to":"test","quantity":"5000.0000 EOS","memo":"fo test"} 我們用eosforce賬戶給test賬戶轉賬了5000 EOSC,這個交易中只運行了 eosio::transfer action, 所以對于這個action執行了對應的eosio::onfeeaction來向eosforce賬戶收取了 0.01 EOSC作為交易的手續費。 注意 eosio::transfer action會觸發eosforce <= eosio::transfer和test <= eosio::transfer兩個通知,但是這里兩個賬戶都沒用相應通知,所以這里只執行了一個action。 Eosforce會為transaction中的所有action分別計算手續費,這里的action也包括inline action, 如下面,這里testc是合約賬戶,當接受到轉賬時,會向另外兩個賬戶testa和testb轉賬,這里構建一個transaction,向testc賬戶轉賬: cleost transfer eosforce testc "5.0000 EOS" "fo test" executed transaction: 6339c73f167602607c8ee1a89a73e7f0171f375b39b361eb47047f0e4a48c69d 152 bytes 646 us # eosio <= eosio::onfee {"actor":"eosforce","fee":"0.0100 EOS","bpname":"biosbpm"} # eosio <= eosio::transfer {"from":"eosforce","to":"testc","quantity":"5.0000 EOS","memo":"fo test"} # eosforce <= eosio::transfer {"from":"eosforce","to":"testc","quantity":"5.0000 EOS","memo":"fo test"} # testc <= eosio::transfer {"from":"eosforce","to":"testc","quantity":"5.0000 EOS","memo":"fo test"} >> apply testc eosio transfer # eosio <= eosio::onfee {"actor":"eosforce","fee":"0.0100 EOS","bpname":"biosbpm"} # eosio <= eosio::transfer {"from":"testc","to":"testa","quantity":"5.0000 EOS","memo":"1;testa"} # testc <= eosio::transfer {"from":"testc","to":"testa","quantity":"5.0000 EOS","memo":"1;testa"} >> apply testc eosio transfer # testa <= eosio::transfer {"from":"testc","to":"testa","quantity":"5.0000 EOS","memo":"1;testa"} # eosio <= eosio::onfee {"actor":"eosforce","fee":"0.0100 EOS","bpname":"biosbpm"} # eosio <= eosio::transfer {"from":"testc","to":"testb","quantity":"5.0000 EOS","memo":"1;testa"} # testc <= eosio::transfer {"from":"testc","to":"testb","quantity":"5.0000 EOS","memo":"1;testa"} >> apply testc eosio transfer # testb <= eosio::transfer {"from":"testc","to":"testb","quantity":"5.0000 EOS","memo":"1;testa"} warning: transaction executed locally, but may not be confirmed by the network yet ] 這個過程中,首先是eosforce向testc轉賬需要0.01 EOSC手續費,之后testc的合約觸發了兩個inline_action,分別是向testa和testb轉賬,這里由收取兩次0.01 EOSC手續費,所以整個合約會收取0.03 EOSC手續費。既避免了寶貴有限的鏈上資源被無節制消耗,又使得每筆資源都相對獨立不會影響到其他用戶的使用體驗和智能合約的正常運行,不會遭受“粉塵攻擊”。 2)投票分紅分配RAM資源 與CPU和NET不同,RAM采用租賃方式,以賬戶為單位根據其所繳納租金來設置賬戶可以使用的RAM的上限,這里租金按照時間收取,為了方便用戶操作,現階段我們為每個賬戶設置了8kb的免租金額度,這樣對于絕大多數普通用戶是不需要關心RAM的,通常,開發者需要為其DApp所使用的RAM支付租金,包括了合約占據的RAM和執行中產生的RAM數據。 目前EOS原力實現了通過投票分紅來支付租金的功能,在EOSC中用戶投票可以獲得分紅,這形成了一個token流,而RAM租金也是按照時間和租賃的多少來計費,通過分紅支付租金,一方面方便用戶操作,不需用戶經常補交租金和繳納押金,另一方面可以提高投票率,促進鏈生態健康發展。 這個過程是這樣的: 這種類似租云主機的方式以方式分配RAM資源, 用戶可以通過使用投票分紅來支付租賃RAM資源的費用, 這樣即不需要用戶擔憂租金繳納問題,也杜絕了租金欠費的問題. 通過“以租代售”的方式, EOSC可以有效避免針對RAM資源的投機行為, 使得DAPP的發展不必受到RAM價格的干擾, 有效促進DAPP生態建設. 3) 結語 這次事件我們可以看出,在EOS整個主網,EOS目前的狀態遠沒有達到TPS交易上限,EOS的資源抵押模型導致EOS無法真正發揮出其出色的性能。這也通過事件證實了EOS的高TPS在區塊鏈中的優勢和應用。 BM在白皮書中表露資源模型的初心是---“降低開發者成本,讓用戶交易免費”。目前的資源模型還需要進一步的調整和修改。 EOS目前暴露出的問題在于其CPU資源模型, CPU實際上是一種時效性很強的資源, 在達到整個主網實際性能上限前所有限制用戶的加成都是浪費資源, 同時EOS主網不應過分放任和遷就超級節點, 應該鼓勵和敦促超級節點更新為良好計算設備, 在此同時開發工具和插件以減少同步節點對應的資源消耗, 所以可以通過以下思路改進: 增加一個指標衡量性能瓶頸,這個值應該和歷史最高tps相關,并且設置一定的基于時間的增速來適應計算技術的發展, EOS主網已經獎勵EOS給BP作為激勵, BP不應提供過于落后的計算設備。 增加一個指標以衡量當前實際性能壓力,這個指標應該和最近一段時間內的實際cpu消耗和用戶抵押cpu總量正相關,鏈上可以動態調節這兩者影響的比值, 這樣兼顧性能實際消耗與未來消耗預期。 增加一個容量窗口加權指標,這個指標同當前性能壓力成反比,和歷史性能指標成正比,并定義一條以當前性能壓力為參數的性能影響梯度曲線作為這個指標的加權值, 用這個指標作為用戶cpu資源上限的加權值。 規劃容量窗口指標的刷新機制, 這個機制應該間隔較短以減少用戶擁堵預期。 當前EOSC,允許通過固定手續費和限制的方式來解決此問題。對于CPU和NET資源, 用戶可以基于分紅票齡支付手續費來達到類似EOSIO抵押獲取CPU和NET資源的效果, 對于RAM, 用戶可以通過抵押投票互換的形式來達到EOSIO基于市場購買的效果, 這樣DAPP開發者也可以快速從其他EOSIO鏈切入EOSC, 并平滑的轉向EOSC的資源模式。同時EOSC去中心化預算系統也近期上線,系統通脹發行的30%進入預算系統。在接下來會隨著EOS一起共同發展和繁榮整個 dApp生態。 (作者:EOS原力,內容來自鏈得得內容開放平臺“得得號”;本文僅代表作者觀點,不代表鏈得得官方立場)
站長聲明:以上關於【CPU告急,EOS網絡擁堵該如何解決?-愛愛姿勢】的內容是由各互聯網用戶貢獻並自行上傳的,我們新聞網站並不擁有所有權的故也不會承擔相關法律責任。如您發現具有涉嫌版權及其它版權的內容,歡迎發送至:1@qq.com 進行相關的舉報,本站人員會在2~3個工作日內親自聯繫您,一經查實我們將立刻刪除相關的涉嫌侵權內容。